From 5ab59bb171c43e09351cb17da0e043557ebd72f9 Mon Sep 17 00:00:00 2001 From: Gav Date: Mon, 8 Jan 2018 19:32:46 +0100 Subject: [PATCH] Make initial runtime skeleton compile. --- substrate/runtime/polkadot/src/lib.rs | 173 ++++++++++-------- substrate/runtime/support/src/lib.rs | 50 +++-- .../release/runtime_polkadot.compact.wasm | Bin 3042 -> 218 bytes .../release/runtime_polkadot.wasm | Bin 3130 -> 341 bytes .../release/runtime_test.compact.wasm | Bin 3042 -> 3392 bytes .../release/runtime_test.wasm | Bin 3130 -> 3480 bytes substrate/runtime/test/src/lib.rs | 2 +- 7 files changed, 123 insertions(+), 102 deletions(-) diff --git a/substrate/runtime/polkadot/src/lib.rs b/substrate/runtime/polkadot/src/lib.rs index d2143f28cd..4993b009b4 100644 --- a/substrate/runtime/polkadot/src/lib.rs +++ b/substrate/runtime/polkadot/src/lib.rs @@ -8,75 +8,54 @@ use alloc::vec::Vec; #[macro_use] extern crate runtime_support; -use runtime_support::{set_storage, storage, storage_into, print, Value20}; - -/* -use std::sync::{rc, RefCell, Once, ONCE_INIT}; -use std::mem; - -#[derive(Clone)] -struct SingletonReader { - inner: Rc>, -} - -fn singleton() -> SingletonReader { - // Initialize it to a null value - static mut SINGLETON: *const SingletonReader = 0 as *const SingletonReader; - static ONCE: Once = ONCE_INIT; - - unsafe { - ONCE.call_once(|| { - // Make it - let singleton = SingletonReader { - inner: Rc::new(RefCell::new(Default::default())), - }; - - // Put it in the heap so it can outlive this call - SINGLETON = mem::transmute(Box::new(singleton)); - }); - - // Now we give out a copy of the data that is safe to use concurrently. - (*SINGLETON).clone() - } -} -*/ +use runtime_support::{set_storage, storage, storage_into}; /// The hash of an ECDSA pub key which is used to identify an external transactor. -type AccountID = [u8; 32]; +pub type AccountID = [u8; 32]; /// The ECDSA pub key of an authority. This is what the external environment/consensus algorithm /// refers to as a "authority". -type SessionKey = [u8; 65]; -type Balance = u64; -type ChainID = u64; -type Hash = [u8; 32]; -type BlockNumber = u64; -/// A proportion (rational number). -struct Proportion { nom: u64, denom: u64, }; -type Timestamp = u64; -type TxOrder = u64; +pub type SessionKey = AccountID; +pub type Balance = u64; +pub type ChainID = u64; +pub type Hash = [u8; 32]; +pub type BlockNumber = u64; +pub type Timestamp = u64; +pub type TxOrder = u64; -struct Digest { - logs: Vec>, +/// The functions that a transaction can call (and be dispatched to). +pub enum Function { + StakingStake(), + StakingUnstake(), + ConsensusSetSessionKey(SessionKey), } -struct Header { - parent_hash: Hash, - number: BlockNumber, - state_root: Hash, - transaction_root: Hash, - digest: Digest, +impl Function { + /// Dispatch the function. + pub fn dispatch(self) -> Vec { unimplemented!() } } -struct Transaction { - senders: Vec, - function_name: String, - input_data: Vec, - nonce: TxOrder, +pub struct Digest { + pub logs: Vec>, } -struct Block { - header: Header, - transactions: Vec, +pub struct Header { + pub parent_hash: Hash, + pub number: BlockNumber, + pub state_root: Hash, + pub transaction_root: Hash, + pub digest: Digest, +} + +pub struct Transaction { + pub senders: Vec, + pub function: Function, + pub input_data: Vec, + pub nonce: TxOrder, +} + +pub struct Block { + pub header: Header, + pub transactions: Vec, } impl Header { @@ -97,21 +76,58 @@ impl Block { } } +/* +use std::sync::{rc, RefCell, Once, ONCE_INIT}; +use std::mem; + +#[derive(Default)] +struct Environment { + header: Option
, + current_user: Option, +} + +#[derive(Clone)] +struct EnvironmentHolder { + inner: Rc>, +} + +fn get_environment() -> EnvironmentHolder { + // Initialize it to a null value + static mut SINGLETON: *const EnvironmentHolder = 0 as *const EnvironmentHolder; + static ONCE: Once = ONCE_INIT; + + unsafe { + ONCE.call_once(|| { + // Make it + let singleton = EnvironmentHolder { + inner: Rc::new(RefCell::new(Default::default())), + }; + + // Put it in the heap so it can outlive this call + SINGLETON = mem::transmute(Box::new(singleton)); + }); + + // Now we give out a copy of the data that is safe to use concurrently. + (*SINGLETON).clone() + } +} +*/ + // TODO: include RLP implementation // TODO: add keccak256 (or some better hashing scheme) & ECDSA-recover (or some better sig scheme) -impl_stub!(execute_block); fn execute_block(_input: Vec) -> Vec { let block = Block::from_rlp(&_input); environment::execute_block(&block) } -impl_stub!(execute_transaction); fn execute_transaction(_input: Vec) -> Vec { let tx = Transaction::from_rlp(&_input); environment::execute_transaction(&tx) } +impl_stubs!(execute_block, execute_transaction); + /// The current relay chain identifier. fn chain_id() -> ChainID { // TODO: retrieve from external @@ -119,6 +135,8 @@ fn chain_id() -> ChainID { } mod environment { + use super::*; + /// The current block number being processed. Set by `execute_block`. pub fn block_number() -> BlockNumber { unimplemented!() } @@ -163,6 +181,8 @@ mod environment { } mod consensus { + use super::*; + fn value_vec(mut value: usize, initial: Vec) -> Vec { let mut acc = initial; while value > 0 { @@ -177,11 +197,11 @@ mod consensus { } fn authority(index: usize) -> AccountID { - storage_into::(&value_vec(index, b"\0authority".to_vec())) + storage_into(&value_vec(index, b"\0authority".to_vec())).unwrap() } fn set_authority_count(count: usize) { - (count..authority_count()).for_each(|i| set_authority(i, &[])); + (count..authority_count()).for_each(|i| set_authority(i, SessionKey::default())); set_storage(b"\0authority_count", &value_vec(count, Vec::new())); } @@ -191,7 +211,7 @@ mod consensus { /// Get the current set of authorities. These are the session keys. pub fn authorities() -> Vec { - (0..authority_count()).into_iter().map(authority).map.collect() + (0..authority_count()).into_iter().map(authority).collect() } /// Set the current set of authorities' session keys. @@ -199,7 +219,7 @@ mod consensus { /// Called by `next_session` only. fn set_authorities(authorities: &[AccountID]) { set_authority_count(authorities.len()); - authorities.iter().enumerate().for_each(|(v, i)| set_authority(v, i)); + authorities.iter().enumerate().for_each(|(v, &i)| set_authority(v, i)); } /// Get the current set of validators. These are the long-term identifiers for the validators @@ -215,9 +235,6 @@ mod consensus { unimplemented!() } - /// Flush out any statistics. - pub fn flush_statistics() -> Statistics { unimplemented!() } - /// Sets the session key of `_validator` to `_session`. This doesn't take effect until the next /// session. pub fn set_session_key(_validator: AccountID, _session: AccountID) { @@ -240,6 +257,8 @@ mod consensus { } mod staking { + use super::*; + /// The length of a staking era in blocks. fn era_length() -> BlockNumber { unimplemented!() } @@ -252,12 +271,12 @@ mod staking { fn balance(_who: AccountID) -> Balance { unimplemented!() } /// Transfer some unlocked staking balance to another staker. - fn transfer_stake(_who: AccountID, dest: AccountID, value: Balance) { unimplemented!() } + fn transfer_stake(_who: AccountID, _dest: AccountID, _value: Balance) { unimplemented!() } /// Declare the desire to stake. /// /// Effects will be felt at the beginning of the next era. - fn stake(minimum_era_return: Proportion) { unimplemented!() } + fn stake() { unimplemented!() } /// Retract the desire to stake. /// @@ -266,23 +285,27 @@ mod staking { /// Hook to be called prior to transaction processing. pub fn pre_transactions() { - conensus::pre_transactions(); + consensus::pre_transactions(); } /// Hook to be called after to transaction processing. pub fn post_transactions() { // TODO: check block number and call next_era if necessary. - conensus::post_transactions(); + consensus::post_transactions(); } } mod authentication { - fn validate_signature(self, tx: Transaction) -> ( AccountID, TxOrder ); - fn nonce(self, id: AccountID) -> TxOrder; - fn authenticate(mut self, tx: Transaction) -> AccountID; + use super::*; + + fn validate_signature(_tx: Transaction) -> ( AccountID, TxOrder ) { unimplemented!() } + fn nonce(_id: AccountID) -> TxOrder { unimplemented!() } + fn authenticate(_tx: Transaction) -> AccountID { unimplemented!() } } mod timestamp { + use super::*; + fn timestamp() -> Timestamp { unimplemented!() } - fn set_timestamp(Timestamp) { unimplemented!() } + fn set_timestamp(_now: Timestamp) { unimplemented!() } } diff --git a/substrate/runtime/support/src/lib.rs b/substrate/runtime/support/src/lib.rs index 4430f7249f..3114446880 100644 --- a/substrate/runtime/support/src/lib.rs +++ b/substrate/runtime/support/src/lib.rs @@ -3,9 +3,9 @@ #![cfg_attr(feature = "strict", deny(warnings))] #![feature(alloc)] - extern crate alloc; use alloc::vec::Vec; +use core::mem; extern crate pwasm_libc; extern crate pwasm_alloc; @@ -33,22 +33,18 @@ pub fn storage(key: &[u8]) -> Vec { } } -pub trait IsValue { - const value: usize; -} - -pub struct Value20; impl IsValue for Value20 { const value = 20usize; } -pub struct Value32; impl IsValue for Value32 { const value = 32usize; } -pub struct Value64; impl IsValue for Value64 { const value = 64usize; } -pub struct Value65; impl IsValue for Value65 { const value = 65usize; } - -pub fn storage_into(key: &[u8]) -> Option<[u8; T::value]> { - let mut result = [0u8; T::value]; - let written = unsafe { - ext_get_storage_into(&key[0], key.len() as u32, &result[0], result.len()) - }; +pub fn storage_into(key: &[u8]) -> Option { + let mut result: T; + let size = mem::size_of::(); + let mut written; + unsafe { + result = mem::uninitialized(); + let result_as_byte_blob = mem::transmute::<*mut T, *mut u8>(&mut result); + written = ext_get_storage_into(&key[0], key.len() as u32, result_as_byte_blob, size as u32) as usize; + } + // Only return a fully written value. match written { - T::value => Some(result), + size => Some(result), _ => None, } } @@ -93,18 +89,20 @@ pub fn print(value: T) { } #[macro_export] -macro_rules! impl_stub { - ($name:ident) => { +macro_rules! impl_stubs { + ( $( $name:ident ),* ) => { pub mod _internal { - #[no_mangle] - pub fn $name(input_data: *mut u8, input_len: usize) -> u64 { - let input = unsafe { - super::alloc::vec::Vec::from_raw_parts(input_data, input_len, input_len) - }; + $( + #[no_mangle] + pub fn $name(input_data: *mut u8, input_len: usize) -> u64 { + let input = unsafe { + super::alloc::vec::Vec::from_raw_parts(input_data, input_len, input_len) + }; - let output = super::$name(input); - &output[0] as *const u8 as u64 + ((output.len() as u64) << 32) - } + let output = super::$name(input); + &output[0] as *const u8 as u64 + ((output.len() as u64) << 32) + } + )* } } } diff --git a/substrate/runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm b/substrate/runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm index 6ce8afb77ce2136b71e41d74bf115b4c8f918264..be2ae9b30e8d7d68992f083914c317bed5487e55 100644 GIT binary patch literal 218 zcmXwyTMmLS6h!B?r6Sb?!Uk|Bx(EMxc{M~R28!a3Y+dm2F_}5ZBnNrl5CDo*Mib`H zl!yc=P$F*As%-1!iCL#+%!_yZg_!$Gx4+ z!}0!T`$bPkp3ixHFH8z`D(LM!J9yo!Xz_}JQGYlV5ie*ne+Y|HJ37iz5hp?_p|v~^ zB95f!q+i9!UT<%I^jZl!?j4RdcecmdoBg3kJEJ48PkS%=!_A}NH~ry`$ddOy7#)1K zEh+M!=F%Uej3=b4SglRJUXUKFC{fFGC%nL@ioGPeTSp+>-CAup>ElXUW#~?+YVDK| z#w#BB*hgOR@A2g_uau8V;nliR2D)-w#l{P-R}~Cn7awEPHqid7Bg+X1!giYc%euV^ zYRQzEx)ei4mN9wK;6;`DHi=bLvVh(R%(tl=l(Kfdy`su8_O2APOc_>(=|=q)rKO&# zveiZlr(>-uqq~%!F8EVWIbGqV*v!(P6+nvCyz_EElfi8vd`{VT1Ro{%S~?&DZyH6P zGo;NQ00m$SjnAvZO2cx6(HQvHdWwD+k4r6JfDk}^)Y|^`Rmr{(4Gvf;cKEV)*$T%bsNbn+XnKxty z6^#1)k%IxR0%G2-stjDh3T?cVp>UYDgIf7w1G&vWa702m&X!DptvEi@0^uxpUm$5H5Z-KBAcz{` z>K=27HpwpkIoW5j8ykb`at0`jLm5;kgGx3jt`VZfxh}#W??ojqMY^3Vm7&UTG@uAP zHe8J0asW{ZB?nl5AixO-0<5djL~l+D;r|`^vZzpYS9KI8Y1Yb(EnK@icYf}|#rf{S zrOQ_qmwcx)Taed-|M&l;AZv?~II|#YRMbgzFZ1#37bnKhUj$d#z^7c@2?fGz+{H0K{$uato>`HDnLFGlXIkeq3t&#$-Zd()=%W*0 z&Tf0l_S%`i6m|*n08CRc+~aU5FfJ}A6_hsuI){BeY`WZe3~!#aN8_^%H&1gAt{5M) z;}ALeY5Ak&zgc3k=TRd%|r~^)0e8-?BR@9SKj6#Dd zd<2X+BA&X?UFJ*O?xH0iFKGc1oRC`xR`HrkkN_wN7EW9Shd_ju#l2*V*5(%J3dG1F z9dwpx5$x6Ggi9C#8t8_k;1=o!+zQj5AAE<;AL4tw9r*P?DVAO`xCBbOz@56ZUGCJS zoo_1mVpGo-LIvBork>B6kZ9*jfURRfK9z>9La%MegA^u&))^|n*@i>YV=gz;0cja( zgJgy{BB=>6N=(2U*99BHb-|}ZH(`v>O&AJv6FwkXXeOeyaBX}m_2jgpgcs6#yhZa4 zQ)tNijH)$1!BiEoF^zCW{B+QGl1U)RJn}_)+z(!dcNi7}MFb9ajPMZ`Zg_w3ODw#< z0Adaq6jT|R1jAA_1P=a!R}5*Re?%w*;Vztgol@7t{o%pUSdcgR+5S!sPcM`4l7_iu z(&i+0Z;1)9lFPxRV6{hvPKkOfV-P@@I{U%I`*R$V$3Fe(Jv1qLR T&JLgG3A7Ybp7PlGXgK~GM3S9O diff --git a/substrate/runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm b/substrate/runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm index 9fe583e7e40eeab56bf09d407ddd10c4e9070248..228d1aaf0c24cc037dfc52fcf4da91896ab05f32 100644 GIT binary patch literal 341 zcmYLE%Wi})3>+unnXSaCx1RWv?nmqySn5`&n}8tf<5GUT3AEy1duC*NY&4T00Q45s zw7>@~wOp1^gwH=UAkL9wdrSG@s?U)b2s97WG}mk2f_8yTJ3JwRpw|vIroZu~Y%^>o zc3#L*DU}d{pcD;2Bnii4$YR5$AD;p*{NQ$WTwT1$H=@^n?#9MWP3yYeB0i4u9pWC!?+9uuinwAu`P@trUUNV)^sE2+4B%~y5++sI&BIhO0 z12qT4nLD3>D;F+&gnj^yJ#yfPIPsf(wH>4XS?99&W&i>}luGl>qN+E>2k?hEc z*a;?+iJV}FKQ)0Mga8C%`D#Z9^@B`<-smLleN}Hi8~1ubFuTO;^IpBZyT5<%bhqy9 zZ6DPKyA$dOI`JtZ_YA)yvpB}z!G_=>~4TlFOf3xWgk9u{Z(qfgvaeq{cfY)d< zkJ;H)VUV>%6bmV(5@9G0g@^(vI>~2gJnRh*#xIpHb?>O&-rKErxBDZ}>Wq)UKIuL0 zkG79TU-n0PB4b_l%On_he=LjGk34>Rh<4}?U$msieqLyOCuKCDu#D8k^y>tLgEb{8 zxoL$H7?qKeWcI57q`P0KEh}AAhDK?+Q>ZGmN(k)~4_)K}r}+2ya$!p4qCz;eX_bbp ztjkC{;lg!=g|Ul^FluX9|Jjkngal!`klc%^y$)(f7cq4yf{iQ^auk9WW#-x>)>Xj* zdLuC3reaXY%DVQNDvHF}LeMIu(Du`f`7KI{cxuY4HdZ(tTa_u@rEIS7hoEArVW-%f zrryef6l^%_{05@k5&#ttr5=ktPWedWcNW00!I`KH$bX3+=xMyLTDOJ_zpx9F|kdVzR&tM0|dn zjtPPu_~Wuq3L}&pK(sDpx2!J~5O68|A}B|$qAUl9V2GpEO=WWi7yb|Y+4|Q8scgnbBZ>}F8?{%Ph~eY2G`{bP#F6% zC{YHbY*IW#h#Kd*2!p&A6s(GLo2g1)WjGp81Rh&9LU1{ND20LpEI<(87z6uY3RR|4Ttu1|@N3 zK~|`!S#_`S@y#c*#n4{_SJ}WNT-^xkNtM`TbLGs%wBLlQTT+uKoE-@&7MZYVD@w8W z$8a7M+`{lK`X(}$^QS~a3-gh7NccgSB4s%)xE&z<5QUCA1N{~RH8f42k_=`)z%1u3 zjsfx?dnfnIk}Q_F!;SJ(>%3+F%)ISgqZ~@_&44+(?X8+?X9AO(705j>O~r7J!==Eu zSZ|b5)(Gev_IbDIa_2F;IctyFrCWB979d>HE@Hu3?;>o^F-fabP%(nK-zIPLHqgPK@VpRZ%&8&vKBV9XJ5)P?OTU+QKbEdhB+OOW7% z+(MwmI+q{;P!cShxC{<~@GXmbNsZQKm+1<`$fD5Otk5#ptIY{lFa$KP^+~}k)D5^5 zCOw|G17>wyxeUedS(3bVwWx-ebt)P-4WD)?ek&lh|Jn}w#H&ugD(=d_2d zqkTRVny$jGt;vDp+K1L^D!`eBL(^j})6@ZJX=;O{nm8hf_A!dJ#~jxMFNW)aPl;~A z7@?am6zC>=K(x?Q1RMU^_*#aOc}MXtq_=pB<{hTckog%^h5Q6lWx$Jt2xq`ghY(LP z2_%_EzDO7H&%eW<3=|PK+%duhT)6)I#V;}c{sM>@WH3-gFdv5VVWeXy6sjR``zO3@ zDAeKi2#_G$kf&d?)YVacba-3~ayoo^u-C(bOsA~UFt>CveQ48Not^CN_wlwp7#|7T zZ8~Sg)3Vn>x1RM!{i82>d!?XXg--A&cLy)Pyb(GQ&8olgF=loGjYb!99$O!e>c0R6 CpR&{d diff --git a/substrate/runtime/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm b/substrate/runtime/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm index 6ce8afb77ce2136b71e41d74bf115b4c8f918264..bac77de7ffc344d73e46f9c32657563efb790174 100644 GIT binary patch literal 3392 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 T&JLgG3A7Ybp7PlGXgK~GM3S9O diff --git a/substrate/runtime/target/wasm32-unknown-unknown/release/runtime_test.wasm b/substrate/runtime/target/wasm32-unknown-unknown/release/runtime_test.wasm index 9fe583e7e40eeab56bf09d407ddd10c4e9070248..9f8b8bc2e8ffe194480b62236bf55efa0870ed80 100644 GIT binary patch literal 3480 zcmcgv&2k&Z5$>6t{hisxQldmrq{!K|6U$CyBPoS)B|e~CrsN!4KIcTyA}j+ENEHdv z(IJK^0>pc$I)yyQ!{k&rDvEhm_UQR`sOi_{+r68;qgT_{NwcC%hTbINQRp-d^(&S96o=3 z^5k$jJUTd=o}3;&9g>puLe?i?k@V|{;pEASmz{(S62r;lDz!^zoj+KJ>M^5S%K zJf%o<^kj_HR0on;sk;P7e=8$7I(| z&oTUB_;hr9aDM#t==g}7$ckZQicT=7k|{Bym(0DWP4Ip#S5*9Uqxh3DGd)=Rd15oZ ztEpA{C3!-x(O!AQYTBAdrSiIooVILg-A4PRX44p_tPf)^qDDTSZPjH1;hH=YY3s>H zdm0L%-5d0JmPr18r&K(Hl6YZ&9$aBU3lV*nu&U@)AGnLbe4zat#Z^sZiifL_7{PVq@+PZ(uzAJ)oR zHf|y=8pQ<{kIDdg(Zql%bw-e5jUEsnG|F$0|7rAOz>PLNL+$?7BK2DBzl%3OvRQJ8q>KRErAeZ z0E8$-YS}-p=@K`85z|Y0)|ODheYSPNA90KWRhz{$^WEr zt=im|clDr7eGbEafRT`w^-jqptgVy9W>G%hhub6j5V(Jl9J~_{%$9+KxCi`XN^X|%0lM7^# z^`+1EwChX}kNp^5*|;vC2iE%T;LIoC;F9}etO^2#gfHqItX9=zZ>g zYL>$Bok4JzpgS~5%Bj1Av<$?-6{k%owS?f=Ivv2n%T71bFJRJ^djX@Y#KM zg8T3Y$O}ldAoQWIr{ocQZE#~`Ca4z!67;}h22qn_7pjy@57ePE{x@+CDPqKmqSK&| zpAn*#?W<|Xo@g{iIpS)h}sw9HhUO|C-+ff;GEDG^cmq^K?FlN z)OgSj8qDDK=7NBvloR7J_+%wp3>*j-Vl`psc`|4-NxCd#Nddl?rzbQbJ>lF+dIrft z(i2C02J?g0; z3!j5MF50}@1({avH*ow)offy&7fYR9U~#`*>I|uaHxIA5=tRgb@DASwXIJi5&P$x=(UCtoU@AyAQ_X7|Xl341E9mKP8?}vA2+~6S((Q<4td(V1{$Er!C zAyD=_e|Fem^_N(cG=|0hE1Ty0gq)G2e>1zBoLxfCFRY}Lcerlh)!pS9v+rGvP~q;Z zqQ1iwWbZB!x*GKzUW3#-3xq=aK$=noq=Hbn>vqJ8qMP7rkp3Aa@aSAe_igK)TvQ28 z{HR>#bxgj6+GoGq<{RiE5hBRmL>K7&NSx!HO1olYi#IThorV)!xqI}T>SAZY1^iac z%agnMl|m&Ww)KUFI!==aZSgH=*hSnyV_*w_#haLc$sj5r7LmD)89*bn15>sz+73H} zT63P_B`I(5Hm0`%4EOiTO}>NS?at2~bT?5Ipm38SL4tKjV_{44_m5xU-+$=aP(GrR zsN7Ad1}b->yT0pE4OH%WxW(?8R0EY;vn-ib+kh6T2uY~Q@-CXvvPa`=h#n|Uf>_uP zcRZIpj4~UbMTIm}3s4|-Hl`;hM?>Ou>^VH2esyv>n!Y6VwthW4cye-%9~j)X zcJ-$Pe`Mp)@r!e;d{5SNdVV0AiBLDXB%3aN^q@|$c5%dLct&`YY)@q0nEa7!{^jU+ UboSNos3Cr(Y>MAV{^VKnUuVwX;Q#;t literal 3130 zcmcguPj6dA5Z~SR*Kc>9pWC!?+9uuinwAu`P@trUUNV)^sE2+4B%~y5++sI&BIhO0 z12qT4nLD3>D;F+&gnj^yJ#yfPIPsf(wH>4XS?99&W&i>}luGl>qN+E>2k?hEc z*a;?+iJV}FKQ)0Mga8C%`D#Z9^@B`<-smLleN}Hi8~1ubFuTO;^IpBZyT5<%bhqy9 zZ6DPKyA$dOI`JtZ_YA)yvpB}z!G_=>~4TlFOf3xWgk9u{Z(qfgvaeq{cfY)d< zkJ;H)VUV>%6bmV(5@9G0g@^(vI>~2gJnRh*#xIpHb?>O&-rKErxBDZ}>Wq)UKIuL0 zkG79TU-n0PB4b_l%On_he=LjGk34>Rh<4}?U$msieqLyOCuKCDu#D8k^y>tLgEb{8 zxoL$H7?qKeWcI57q`P0KEh}AAhDK?+Q>ZGmN(k)~4_)K}r}+2ya$!p4qCz;eX_bbp ztjkC{;lg!=g|Ul^FluX9|Jjkngal!`klc%^y$)(f7cq4yf{iQ^auk9WW#-x>)>Xj* zdLuC3reaXY%DVQNDvHF}LeMIu(Du`f`7KI{cxuY4HdZ(tTa_u@rEIS7hoEArVW-%f zrryef6l^%_{05@k5&#ttr5=ktPWedWcNW00!I`KH$bX3+=xMyLTDOJ_zpx9F|kdVzR&tM0|dn zjtPPu_~Wuq3L}&pK(sDpx2!J~5O68|A}B|$qAUl9V2GpEO=WWi7yb|Y+4|Q8scgnbBZ>}F8?{%Ph~eY2G`{bP#F6% zC{YHbY*IW#h#Kd*2!p&A6s(GLo2g1)WjGp81Rh&9LU1{ND20LpEI<(87z6uY3RR|4Ttu1|@N3 zK~|`!S#_`S@y#c*#n4{_SJ}WNT-^xkNtM`TbLGs%wBLlQTT+uKoE-@&7MZYVD@w8W z$8a7M+`{lK`X(}$^QS~a3-gh7NccgSB4s%)xE&z<5QUCA1N{~RH8f42k_=`)z%1u3 zjsfx?dnfnIk}Q_F!;SJ(>%3+F%)ISgqZ~@_&44+(?X8+?X9AO(705j>O~r7J!==Eu zSZ|b5)(Gev_IbDIa_2F;IctyFrCWB979d>HE@Hu3?;>o^F-fabP%(nK-zIPLHqgPK@VpRZ%&8&vKBV9XJ5)P?OTU+QKbEdhB+OOW7% z+(MwmI+q{;P!cShxC{<~@GXmbNsZQKm+1<`$fD5Otk5#ptIY{lFa$KP^+~}k)D5^5 zCOw|G17>wyxeUedS(3bVwWx-ebt)P-4WD)?ek&lh|Jn}w#H&ugD(=d_2d zqkTRVny$jGt;vDp+K1L^D!`eBL(^j})6@ZJX=;O{nm8hf_A!dJ#~jxMFNW)aPl;~A z7@?am6zC>=K(x?Q1RMU^_*#aOc}MXtq_=pB<{hTckog%^h5Q6lWx$Jt2xq`ghY(LP z2_%_EzDO7H&%eW<3=|PK+%duhT)6)I#V;}c{sM>@WH3-gFdv5VVWeXy6sjR``zO3@ zDAeKi2#_G$kf&d?)YVacba-3~ayoo^u-C(bOsA~UFt>CveQ48Not^CN_wlwp7#|7T zZ8~Sg)3Vn>x1RM!{i82>d!?XXg--A&cLy)Pyb(GQ&8olgF=loGjYb!99$O!e>c0R6 CpR&{d diff --git a/substrate/runtime/test/src/lib.rs b/substrate/runtime/test/src/lib.rs index 550e06c05d..e95844fdb0 100644 --- a/substrate/runtime/test/src/lib.rs +++ b/substrate/runtime/test/src/lib.rs @@ -53,7 +53,7 @@ pub fn set_authorities(authorities: &[&[u8]]) { authorities.iter().enumerate().for_each(|(v, i)| set_authority(v, i)); } -impl_stub!(test_data_in); +impl_stubs!(test_data_in); fn test_data_in(input: Vec) -> Vec { print(b"set_storage" as &[u8]); set_storage(b"input", &input);