From 06817aed51c326e1a0b070b084596c86f663cfa2 Mon Sep 17 00:00:00 2001 From: Gav Date: Tue, 30 Jan 2018 18:41:32 +0100 Subject: [PATCH] TestExternalities can commit. --- substrate/Cargo.lock | 35 ++++++++++++++++++ substrate/state_machine/Cargo.toml | 1 + substrate/state_machine/src/lib.rs | 2 + substrate/state_machine/src/testing.rs | 26 ++++++++++++- .../release/runtime_polkadot.compact.wasm | Bin 64085 -> 64314 bytes .../release/runtime_polkadot.wasm | Bin 64134 -> 64363 bytes 6 files changed, 63 insertions(+), 1 deletion(-) diff --git a/substrate/Cargo.lock b/substrate/Cargo.lock index c741c845a5..d025b1556d 100644 --- a/substrate/Cargo.lock +++ b/substrate/Cargo.lock @@ -331,6 +331,23 @@ dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "hex-literal" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "hex-literal-impl 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-hack 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "hex-literal-impl" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro-hack 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "httparse" version = "1.2.3" @@ -794,6 +811,7 @@ version = "0.1.0" dependencies = [ "byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "hashdb 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "hex-literal 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "memorydb 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "patricia-trie 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-primitives 0.1.0", @@ -819,6 +837,19 @@ dependencies = [ "difference 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "proc-macro-hack" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro-hack-impl 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "proc-macro-hack-impl" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "quote" version = "0.3.15" @@ -1315,6 +1346,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum globset 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "90d069fe6beb9be359ef505650b3f73228c5591a3c4b1f32be2f4f44459ffa3a" "checksum hashdb 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d97be07c358c5b461268b4ce60304024c5fa5acfd4bd8cd743639f0252003cf5" "checksum heapsize 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "54fab2624374e5137ae4df13bf32b0b269cb804df42d13a51221bbd431d1a237" +"checksum hex-literal 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bd546ef520ab3745f1aae5f2cdc6de9e6498e94d1ab138b9eb3ddfbf335847fb" +"checksum hex-literal-impl 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2ea76da4c7f1a54d01d54985566d3fdd960b2bbd7b970da024821c883c2d9631" "checksum httparse 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "af2f2dd97457e8fb1ae7c5a420db346af389926e36f43768b96f101546b04a07" "checksum hyper 0.11.6 (registry+https://github.com/rust-lang/crates.io-index)" = "1b45eac8b696d59491b079bd04fcb0f3488c0f6ed62dcb36bcfea8a543e9cdc3" "checksum iovec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b6e8b9c2247fcf6c6a1151f1156932be5606c9fd6f55a2d7f9fc1cb29386b2f7" @@ -1352,6 +1385,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" "checksum plain_hasher 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "83ae80873992f511142c07d0ec6c44de5636628fdb7e204abd655932ea79d995" "checksum pretty_assertions 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "94b6bbc8a323d89a019c4cdde21850522fb8405e97add70827177fc2f86c1495" +"checksum proc-macro-hack 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ba8d4f9257b85eb6cdf13f055cea3190520aab1409ca2ab43493ea4820c25f0" +"checksum proc-macro-hack-impl 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d5cb6f960ad471404618e9817c0e5d10b1ae74cfdf01fab89ea0641fe7fb2892" "checksum quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" "checksum rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)" = "6475140dfd8655aeb72e1fd4b7a1cc1c202be65d71669476e392fe62532b9edd" "checksum rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b614fe08b6665cb9a231d07ac1364b0ef3cb3698f1239ee0c4c3a88a524f54c8" diff --git a/substrate/state_machine/Cargo.toml b/substrate/state_machine/Cargo.toml index 458bae8e1e..65c6feed54 100644 --- a/substrate/state_machine/Cargo.toml +++ b/substrate/state_machine/Cargo.toml @@ -11,3 +11,4 @@ patricia-trie = "0.1.0" memorydb = "0.1.1" triehash = "0.1" byteorder = "1.1" +hex-literal = "0.1.0" diff --git a/substrate/state_machine/src/lib.rs b/substrate/state_machine/src/lib.rs index ce10400b1e..61b1fafd37 100644 --- a/substrate/state_machine/src/lib.rs +++ b/substrate/state_machine/src/lib.rs @@ -19,6 +19,8 @@ #![warn(missing_docs)] extern crate polkadot_primitives as primitives; +#[macro_use] +extern crate hex_literal; extern crate hashdb; extern crate memorydb; diff --git a/substrate/state_machine/src/testing.rs b/substrate/state_machine/src/testing.rs index 248afa2025..74cfbb9dd5 100644 --- a/substrate/state_machine/src/testing.rs +++ b/substrate/state_machine/src/testing.rs @@ -18,6 +18,7 @@ use std::collections::HashMap; use super::{Externalities, ExternalitiesError}; +use triehash::trie_root; /// Simple HashMap based Externalities impl. #[derive(Debug, Default)] @@ -25,6 +26,14 @@ pub struct TestExternalities { pub storage: HashMap, Vec>, } +impl TestExternalities { + fn new() -> Self { + TestExternalities { + storage: HashMap::new(), + } + } +} + impl Externalities for TestExternalities { fn storage(&self, key: &[u8]) -> Result<&[u8], ExternalitiesError> { Ok(self.storage.get(&key.to_vec()).map_or(&[] as &[u8], Vec::as_slice)) @@ -37,6 +46,21 @@ impl Externalities for TestExternalities { fn chain_id(&self) -> u64 { 42 } fn commit(&self) -> [u8; 32] { - unimplemented!(); + trie_root(self.storage.clone()).0 + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn commit_should_work() { + let mut ext = TestExternalities::new(); + ext.set_storage(b"doe".to_vec(), b"reindeer".to_vec()); + ext.set_storage(b"dog".to_vec(), b"puppy".to_vec()); + ext.set_storage(b"dogglesworth".to_vec(), b"cat".to_vec()); + const ROOT: [u8; 32] = hex!("8aad789dff2f538bca5d8ea56e8abe10f4c7ba3a5dea95fea4cd6e7c3a1168d3"); + assert_eq!(ext.commit(), ROOT); } } diff --git a/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm b/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm index db7dab9917d324f143aea0837c0fdf2ee30504bc..0bd07dc534053aed194903000f119179e4b28a8c 100644 GIT binary patch delta 14956 zcmbtb3zS_|c|QA`JNJDvXXehGnaqRia|g(sObCf2lVpOBGY~W&2C25y`XGexxS2dm z1_etz!3qozG3Epq7uc#xi$LOFuQ&(CMQY7RBAvGF@OClKnziTIwh*?RZ*5KI z-SBa-+8joWr@+%$g6 z_HEYMj4LeP%4M%u(0k56PhWY>NcNLYIV0ghdxyBFHfdif#Bi{k5ne`LZvg5a`$H2Tl;Z*$s?W+n&%)-5-khy9(BW;=6;=Wbp2b~G0TzIUU_Ql(PsW2)h9+O##>J`1^ zEcH#x?D|4lrU^|(;g=bibuY&E5xc5qT<(^7%xCoi@IhTC>}ntr{!!HNL@~X^?Se7I{FqlVrIaHoW&_vutO>`FkIfWSwb&HzO$sj9H9ewvC5+9gc^)o#%H2@@Ah0yR$RB8r@Bt;{40khC!P_gqQ*u0;v zx=XphSH)%}S8V90$sVL>a4CX_0W;kjQk0Y_zhR9r4GIy|oC`**6PqNK*;&%QQ*eERb}uU$IisOPHrK}XFFXIPS=8o!E{>YMiVO?EADO} zxan*;A|Br7CGa0SOeV=Q9C%c6OF2WHoPd)hK{?#n4=^xIwTw)!FSNjOv^VB_w+aJE zyDl;AmXj=kLAyidWwO`HLpGoYfr6|j=Pr|3G8zV1ULq$Gvc=DjRm*Udl{P9eNeanw zH_~bgRWn|Y#FVquN|N?$nt>)IJaAW=m;sD<)f!1^jU@ei)dM1b9DJ}oh%l%WGPd(j zEHT6C#}CGonHG>e=v--)L7%n`21A)E9hbD2^QBfIL`cem(lVqxh&02>1XWFChM#vw z5L%yicj0$Kn?!)!(bk3UiMBp`f4ObH=&h}4|FsY&!^ItU;rDADpB5);qoqYQDqFj5 z7ro(&U7r&&ysLXi$l8QXJ_`t@6K*Bkw4^Ln)$U$$N}%}Y(oQTk;RDM)kIIE_ zNdp$Hx@a2f&-~?w6X5HotFEw*l*1*fH`6M#DtvhL5Ba0EZR9~mtga<48G=M=OD`=Z zsNYZ4{#p3wWj_*r?PHg35pN+D($Zxqn=+y6rZn*BGI1R4c>C?OeOK&q#3kW|^|yw% zUwI`cd-}?6(PVeO^KJGftOU#aNrcp8{y{{d3Po)GRA2*`p522&+%g|v(*vUcpb*PA zmMAP#375X>t>W_9ws$2n;-c`@_x(!oe)#(7+Ewqro!8@4wP!xitybpn_y?y|hi5+Y ze@ZytzphQUO>g`;=s$e@`|SR8@&egT&eIO3L)209A6@L%7elbmeCTK41vk24U3kfj z!$lIDTG!ok^=Ej`jVoY|-@Nf<{629LnW=a4jiMM%+`JvKY25rcDfCO#f-M$?UmJT0 zm5*%wq7Vyf^SA#(h}B{G!~cliZ+`d%{CwtLshPU850ySldHqjv~#VeO^c z{zUW-$u_^cDuutV;;xo$6lg(?gX73n3PUh`#P+%(phYqPvK1vw+yFRyYw&Dg2HUlPJuN~k z4hQf2d!^N9@B9k~vR!f4dm!)o@47*>5>sF4WkTvG!r$M$8?oY!dsbx8V)6gK9*TRG zg(vU1LN#FgEfaS}-`>4n!T0y>^;${Ir#X{j#fQJU_mgM|?(=fS0Dvxh@WJcE-td(N zhfBW( z@q2Z66@EV(4&(O-LG~XY@X`b4&jZ^QhGQPeox&RqED1_Iw7LM6P|FLZ*6YZiY|(bz z!e)gA24MMA3ym>WW6^`kXx}SDpb`S)>X%ZkZu@H~{jOY1i=h875*1G3ZKOe~gi4J> z#k$3R$%@lJYaF3eYaLJdq_7?2C-z$Rvhd{tUtYAr$~|f&E+=#q=glGL)l(eu(5nExEgs%(Vv8V zy3u#kqLo?IUF0kAdb(Q9s(J}5byo*1?wmr!HI*!-cWF~AQuoP(EJ}+z)2CloQ+3JG zpsi;k5N7L;sTm+lh@FN3$>Jbzt+eZeq@n4RU8b2qL~VVP1` zI%A{|2w2)RxB+3DpPS$S!yaX?6{&#+SqYP&NK8eh)htn&H!P? ztaJ^CxR``sp~zxj3^{IsjkzXBAYhqgf^||)%#NEDq)eNY+_Xe($8nnqKnp1u=BEw0 z=}#D)kIbt`(-&sC(G&(+Fk7QRY*RFk={Y*X1g~Ya!7Q^Sl#okP8cjbuBkzdvFmMbq z0`{i>0`)DC8$lcZfrI2se`*B8yMv8lLJ!W%7X4L_NrRA`)=?JKFw+^X5sS=phJ6L% z>1Nw*gM%&OpgETtJ7pBn+%RMSVEQviXn=%CM`psCzjzJ|cY225;MQEi6l zzMW0CX|YX1eQoyNdpra?9B zsA)bba1%$+Xjf!D9gzyL!H=5{>F%ruMSxUR5?dvek?qglJrq`kj3Az zp^!pB%YBIxf;4uerS&+lWwXJ8K{zS00arUd$>#AHt$1cd&*?S_ zNCveEoIqO8jrfe>FyWtsz#A0R>S}^k`cxA{k=VrRHr<8^OdL?-fV4%o;WMt#<&ZIl zDmPl^u!3vqk~8BZd>jgKWP7;dvEHWPz?HMnLeU}H^x)3OgjflzPC8IQepez%Xnt4` z%#RU?;U*h#Gou9zkd6XnGp31Ep*V@sp$>FYx-h*sQG#?xnbd-G&m<0dQR&nzNd0t+ zQ39+UgCZ>lYT=K%aT8EeTqMJap{7BgnwjSGB#ycc`#Gp2G9(E~ZgVfg`K_HUV4Ff?;Q3^pIL{rnOe90S1h9mwXv0ViI^A9mU@(>r zz_@c-*$sxlje&C5Lh_2K97HT=BeJRDARxHyL9DiDk`zo+AD*)b`{0HeAVjM`zo1X5 z2#&9A&ypoN$Sv_9E@`7;2P|hgM4)qZi%xN=7fx|YbiPG6l(Wz>kb*huo+-ke&=V$T zI+-F2AkixKT!SQBDWhjJxWliP-IctY2p|W8rvxlbMFCnkI^yX#g_U?6BFyMI6_XS` zz~h9Va*ef@%VFyQUEij~8CG3LKMTx_pwNKE}M$L5vE*V9m zae^CZ@gQK`EFvy?PolTPL73yq_1Hc~(YPy?C=*67)e-r2NoJanD`+PFOcKNaYcTB$ z!r)AV56Ur((JL|=H_KeQl8hF!x{acv9?<23 zx_n5N52GZ$)!i98AjwE(ed)GYB%60qhh6V ziX4W*r3DmNaL8Nfw;{?U2oEcv#j(et2$rSTVCq=vvJ@ap9RW0pH7BYg)&k%*0a%x_ z2slv(C^if2syc4Y+7XYiF3>f$?t>W37eYj=@nA$|MV*T16#HS~P;Ru|o&xF6Z34DV zeNPLz&wLe_09a@_@=^_2g+y4ZD36h4p_N0Ly2z)s7`ZlVpDigr zR!;f3s^3K~Gg5wjYuR~XH2?83Ct(GwJ&&P1ct@cVYigq0zOK-Pm`49pM$3yhw$+rL zd0h^nHkPNd0prMY-(JpQPLI;lQvrK5ZWxStW#C!F61ITk=14zD7cmkkVu^*wu}clnkqUba z)n$f6VQ5^}5{+3E;#AD4SfXg15ZV+F^Pwv;K1xn2_C8LkC^q4y-r)>B0=Ih>m=0JK z9Z)biA)V8!tN0Rl$U?YeDP>YJ5d@1NT;&WU<|WbvNve#4YP$F|6T>8N;lKiiEO{D$ zRBAaVvkYi4j#5kM@S@eO7A<5+gmXFplZQmrH)cyAKOZJA^IFGw1m6FkPpJpdXr#0X=x_m{KzvbglPzy2O9#457(m5!0&_0En%fOHeV%I)s zpNPSrF*FZCNZgM;qqMN@P+F)@+$q=PLl4BqW{OE&5DlY@kj7I&Sa%@dlu45?axVgN zigIp3^8hM%ho<7iepI?l%K=n6Oywa|(!NCxwh;f&ot9buVL&qqn#W0AJ>3Spi`uhtG>$JZ>E`;m^`=5s!Vg>PZ*LhqnH&j$Ui#Z2Ti`B`>wE0kx8EkzLV}tagqln`}TtN^7Iyj!`mgXh-M!uM;%i9JxVWl9UjG6q&L8GpKug z;#@=k?QVal;0^_gVv>8)lyIORdD31!5|ocuctD|Kr3Hi&JdS+=4gQZ&p@_hh7f|U! zXj{Xz_}fYF&B}K<$o)w%a|q&6lye|P+~LiL@HFE6w)RoGiCo;foCZ@e+pA1ILgBa zurJ3q7AEJaUXS+;YJYFe*JuI9K`HJpaFFbH^h_0B!L(CW`Ig@@j{MIYu_K4&<7e9O zlihk0S75Rp-IIVzZyrjph=*ZCAExQKGJ)LJ@;V&g<)efypB|Q}ib@zMn}>KEWPF0o zih`=mQ$_1cIlHP_qD+(o8xM)vRLNQB z)~Vd1?jOyOfYn@G=R_agMm57DkuCWI4=-Q92&)j8mm>ubtHcYF6KieJ@mMxG9-}A$ zzE%dxG8*W~r*P4snTo@7p=B;~;Fbn64UST^DK*xKW{FPlI-Aq6t&mt}MnUg&o=VEsVM8p*GJ!Ct7xOM_k58NR#{nt|g*%FCV`!04`X?3BMCM%6( zXqYk5YKl^|L{~#>e;mG}Yb0Xo6!wg~6w*4%Ds2jZKxD0vWU(7E^UzpIfN7^C(<*Yj&?kp6VoQP0}0x7SQhwX z60UWOyU}AubH{*p4{YrEasf4|(pweOWRSvD03AtSQr_i3CYXDQ_V-8&Fz4F}MP3gq z1QK=5H2boEZ_CbfPcUaQ=TXv(J+rzd2(VQ+n|lHkwZ6f8g5fE=HC1W5J|a<4*M}#x z;h%YHF^8I&TT8-D2aD>D2I#E{KFthzW1yoYZwAQf_~ZvYX{U_wuepVtvsd7Wa4l59 z{d;VqL38;OOs4ry5Jp97&fhzqUznc2D^2~juSD+)v6&V8&QPj%?S4g<&(O}6-nC+c z`benDc?~NO7HrzpYxscBs3(J2jn+IDXY?-K4EjesCgDp=2|++1xlO+6}=m!fxzcrOWAOOn;a;Wdx+pNHcI+dqMKtTt2J;A>1kgu(q|;Wr=oO!!aVeQp7eXE9foU%?+s z;MeW!!L?hz{}srF9+H3Ud+&I|KK_J-@QNB*NyR(ngHP?j(zzL zcMHj_q-x@o$?y_0dj03ocQ^y+)$ijCAb#mDj`(RkV*;om%W+5F385-Cs8FKs9k^BpAxo{vsn7 zWduqvptz}=u>IJb3PFcL&=G6kb z8tB0x1n#JVhRQxKoAWU?+icRk5X{vdHR0NjJ>QSvog89^pBSP)D0I&YZ~D=-!~!nb z6$@63g(E-ujTo$b`^Po1rjJbz;rDN+9}%m<(Vu)9e@T*g;pw)(J>pvYKPqkd@*nkb z?m^VrP(?ea}F6X=AAv2=|;Q zVXJ_Fn|F=BnkEZ8um*ht;5Mw~dd~-us(Z6aNqN CT9%vu delta 14648 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 DHXco| diff --git a/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm b/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm index a0dc5a2754ab33efa1b1deea73317bc369fdc975..1e4d2fb99ba3e5a29ef5e6a35c0dc8ad4d99950c 100644 GIT binary patch delta 15008 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 Ca-^aF delta 14681 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