From dc6ebf71cfc7492d81e9ed340b674df9d090801c Mon Sep 17 00:00:00 2001 From: Gav Date: Tue, 16 Jan 2018 18:56:57 +0100 Subject: [PATCH] Fix up wasm runtime. --- substrate/executor/src/wasm_executor.rs | 4 +-- substrate/native-runtime/support/src/lib.rs | 6 +++++ .../wasm-runtime/polkadot/src/consensus.rs | 1 + substrate/wasm-runtime/polkadot/src/lib.rs | 17 ++++++------- .../polkadot/src/support/joiner.rs | 1 + .../polkadot/src/support/keyedvec.rs | 1 + .../wasm-runtime/polkadot/src/support/mod.rs | 2 ++ .../polkadot/src/support/primitives.rs | 23 +++++++++--------- .../polkadot/src/support/slicable.rs | 2 +- substrate/wasm-runtime/support/src/lib.rs | 16 ++++++++---- .../release/runtime_polkadot.compact.wasm | Bin 218 -> 5276 bytes .../release/runtime_polkadot.wasm | Bin 341 -> 5364 bytes 12 files changed, 45 insertions(+), 28 deletions(-) diff --git a/substrate/executor/src/wasm_executor.rs b/substrate/executor/src/wasm_executor.rs index cb2df774d9..41029424fa 100644 --- a/substrate/executor/src/wasm_executor.rs +++ b/substrate/executor/src/wasm_executor.rs @@ -136,8 +136,8 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, } else { 0 } } else { 0 } }, - ext_deposit_log(_log_data: *const u8, _log_len: u32) => { - // TODO + ext_chain_id() -> u64 => { + 42u64 } => <'e, E: Externalities + 'e> ); diff --git a/substrate/native-runtime/support/src/lib.rs b/substrate/native-runtime/support/src/lib.rs index 795cae2ffd..9ec5f77bdd 100644 --- a/substrate/native-runtime/support/src/lib.rs +++ b/substrate/native-runtime/support/src/lib.rs @@ -68,6 +68,12 @@ pub fn set_storage(_key: &[u8], _value: &[u8]) { ); } +/// The current relay chain identifier. +pub fn chain_id() -> u64 { + // TODO: fetch from Externalities. + 42u64 +} + /// Execute the given closure with global function available whose functionality routes into the /// externalities `ext`. Forwards the value that the closure returns. pub fn with_externalities R>(ext: &mut Externalities, f: F) -> R { diff --git a/substrate/wasm-runtime/polkadot/src/consensus.rs b/substrate/wasm-runtime/polkadot/src/consensus.rs index ef4d5a9856..add87a1808 100644 --- a/substrate/wasm-runtime/polkadot/src/consensus.rs +++ b/substrate/wasm-runtime/polkadot/src/consensus.rs @@ -1,3 +1,4 @@ +use runtime_support::Vec; use keyedvec::KeyedVec; use storage::Storage; use primitives::{AccountID, SessionKey, BlockNumber}; diff --git a/substrate/wasm-runtime/polkadot/src/lib.rs b/substrate/wasm-runtime/polkadot/src/lib.rs index cc48d8caa6..680116b3d9 100644 --- a/substrate/wasm-runtime/polkadot/src/lib.rs +++ b/substrate/wasm-runtime/polkadot/src/lib.rs @@ -6,7 +6,9 @@ extern crate runtime_support; mod support; pub use support::{endiansensitive, streamreader, joiner, slicable, primitives, keyedvec, function, - environment, storage, testing}; + environment, storage}; +#[cfg(test)] +pub use support::testing; #[allow(unused)] mod system; @@ -19,9 +21,12 @@ mod timestamp; use runtime_support::Vec; use slicable::Slicable; -use primitives::{ChainID, Block, Transaction}; +use primitives::{Block, Transaction}; -// TODO: add keccak256 (or some better hashing scheme) & ECDSA-recover (or some better sig scheme) +// TODO: add externals for: +// - keccak256 (or some better hashing scheme) +// - trie rooting +// - ECDSA-recover (or some better sig scheme) pub fn execute_block(input: Vec) -> Vec { system::execute_block(Block::from_slice(&input).unwrap()) @@ -32,9 +37,3 @@ pub fn execute_transaction(input: Vec) -> Vec { } impl_stubs!(execute_block, execute_transaction); - -/// The current relay chain identifier. -pub fn chain_id() -> ChainID { - // TODO: retrieve from external - unimplemented!() -} diff --git a/substrate/wasm-runtime/polkadot/src/support/joiner.rs b/substrate/wasm-runtime/polkadot/src/support/joiner.rs index 99b38dec57..817df8e4cb 100644 --- a/substrate/wasm-runtime/polkadot/src/support/joiner.rs +++ b/substrate/wasm-runtime/polkadot/src/support/joiner.rs @@ -1,3 +1,4 @@ +use runtime_support::Vec; use slicable::Slicable; pub trait Joiner { diff --git a/substrate/wasm-runtime/polkadot/src/support/keyedvec.rs b/substrate/wasm-runtime/polkadot/src/support/keyedvec.rs index 3b0e595628..fcc410e582 100644 --- a/substrate/wasm-runtime/polkadot/src/support/keyedvec.rs +++ b/substrate/wasm-runtime/polkadot/src/support/keyedvec.rs @@ -1,3 +1,4 @@ +use runtime_support::Vec; use primitives::AccountID; use slicable::Slicable; diff --git a/substrate/wasm-runtime/polkadot/src/support/mod.rs b/substrate/wasm-runtime/polkadot/src/support/mod.rs index dd381b1ad2..47b29194dc 100644 --- a/substrate/wasm-runtime/polkadot/src/support/mod.rs +++ b/substrate/wasm-runtime/polkadot/src/support/mod.rs @@ -7,4 +7,6 @@ pub mod keyedvec; pub mod function; pub mod environment; pub mod storage; + +#[cfg(test)] pub mod testing; diff --git a/substrate/wasm-runtime/polkadot/src/support/primitives.rs b/substrate/wasm-runtime/polkadot/src/support/primitives.rs index 44d3bc4739..f1bd31cc66 100644 --- a/substrate/wasm-runtime/polkadot/src/support/primitives.rs +++ b/substrate/wasm-runtime/polkadot/src/support/primitives.rs @@ -1,3 +1,4 @@ +use runtime_support::Vec; use streamreader::StreamReader; use joiner::Joiner; use slicable::{Slicable, NonTrivialSlicable}; @@ -62,7 +63,7 @@ impl Slicable for Transaction { } fn to_vec(&self) -> Vec { - vec![] + Vec::new() .join(&self.signed) .join(&(self.function as u8)) .join(&self.nonce) @@ -84,7 +85,7 @@ impl Slicable for Vec { fn from_slice(value: &[u8]) -> Option { let len = Self::size_of(&value[0..4])?; let mut off = 4; - let mut r = vec![]; + let mut r = Vec::new(); while off < len { let element_len = T::size_of(&value[off..])?; r.push(T::from_slice(&value[off..off + element_len])?); @@ -100,7 +101,7 @@ impl Slicable for Vec { fn to_vec(&self) -> Vec { let vecs = self.iter().map(Slicable::to_vec).collect::>(); let len = vecs.iter().fold(0, |mut a, v| {a += v.len(); a}); - let mut r = vec![].join(&(len as u32)); + let mut r = Vec::new().join(&(len as u32)); vecs.iter().for_each(|v| r.extend_from_slice(v)); r } @@ -127,7 +128,7 @@ impl Slicable for Header { } fn to_vec(&self) -> Vec { - vec![] + Vec::new() .join(&self.parent_hash) .join(&self.number) .join(&self.state_root) @@ -156,7 +157,7 @@ impl Slicable for Block { } fn to_vec(&self) -> Vec { - vec![] + Vec::new() .join(&self.header) .join(&self.transactions) } @@ -181,7 +182,7 @@ mod tests { let tx = Transaction { signed: one.clone(), function: Function::StakingTransferStake, - input_data: vec![].join(&two).join(&69u64), + input_data: Vec::new().join(&two).join(&69u64), nonce: 69, }; let serialised = tx.to_vec(); @@ -202,7 +203,7 @@ mod tests { let tx = Transaction { signed: one.clone(), function: Function::StakingTransferStake, - input_data: vec![].join(&two).join(&69u64), + input_data: Vec::new().join(&two).join(&69u64), nonce: 69, }; let data = [ @@ -271,13 +272,13 @@ mod tests { let tx1 = Transaction { signed: one.clone(), function: Function::StakingTransferStake, - input_data: vec![].join(&two).join(&69u64), + input_data: Vec::new().join(&two).join(&69u64), nonce: 69, }; let tx2 = Transaction { signed: two.clone(), function: Function::StakingStake, - input_data: vec![], + input_data: Vec::new(), nonce: 42, }; let h = Header { @@ -327,13 +328,13 @@ mod tests { let tx1 = Transaction { signed: one.clone(), function: Function::StakingTransferStake, - input_data: vec![].join(&two).join(&69u64), + input_data: Vec::new().join(&two).join(&69u64), nonce: 69, }; let tx2 = Transaction { signed: two.clone(), function: Function::StakingStake, - input_data: vec![], + input_data: Vec::new(), nonce: 42, }; let h = Header { diff --git a/substrate/wasm-runtime/polkadot/src/support/slicable.rs b/substrate/wasm-runtime/polkadot/src/support/slicable.rs index e220eb0f7d..939d1591ca 100644 --- a/substrate/wasm-runtime/polkadot/src/support/slicable.rs +++ b/substrate/wasm-runtime/polkadot/src/support/slicable.rs @@ -59,7 +59,7 @@ impl Slicable for Vec { unimplemented!(); } fn to_vec(&self) -> Vec { - let mut r: Vec = vec![].join(&(self.len() as u32)); + let mut r: Vec = Vec::new().join(&(self.len() as u32)); r.extend_from_slice(&self); r } diff --git a/substrate/wasm-runtime/support/src/lib.rs b/substrate/wasm-runtime/support/src/lib.rs index 9c64f1a72b..308ab6dd9e 100644 --- a/substrate/wasm-runtime/support/src/lib.rs +++ b/substrate/wasm-runtime/support/src/lib.rs @@ -10,6 +10,7 @@ pub use alloc::vec::Vec; pub use alloc::boxed::Box; pub use alloc::rc::Rc; pub use core::mem::{transmute, size_of, uninitialized, swap}; +pub use core::slice; pub use core::cell::{RefCell, Ref, RefMut}; extern crate pwasm_libc; @@ -27,7 +28,7 @@ extern "C" { fn ext_set_storage(key_data: *const u8, key_len: u32, value_data: *const u8, value_len: u32); fn ext_get_allocated_storage(key_data: *const u8, key_len: u32, written_out: *mut u32) -> *mut u8; fn ext_get_storage_into(key_data: *const u8, key_len: u32, value_data: *mut u8, value_len: u32) -> u32; - fn ext_deposit_log(log_data: *const u8, log_len: u32); + fn ext_chain_id() -> u64; } pub fn storage(key: &[u8]) -> Vec { @@ -64,11 +65,16 @@ pub fn set_storage(key: &[u8], value: &[u8]) { } } -pub fn deposit_log(log: &[u8]) { +pub fn read_storage(key: &[u8], value_out: &mut [u8]) -> usize { unsafe { - ext_deposit_log( - &log[0] as *const u8, log.len() as u32, - ) + ext_get_storage_into(&key[0], key.len() as u32, &mut value_out[0], value_out.len() as u32) as usize + } +} + +/// The current relay chain identifier. +pub fn chain_id() -> u64 { + unsafe { + ext_chain_id() } } 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 be2ae9b30e8d7d68992f083914c317bed5487e55..658efc37386ac47900dea844825f63fd7c92c24f 100644 GIT binary patch literal 5276 zcmb_gy>A@H6`z^iy$|l~-QL}vMaL@ME{Na=M34*nc(4S6LqJhn7;e(@DC#0S#V!ieD3cy)$3z9xo1$_U_Dg?;R`-mFB56o_e_V;KAX(GPPj-aR2i!l*fV|YaG{$ zmG5=JK&hb7Y_>e3d|!W#H&3g6^Oudr!}-I*qc4n#=8xz5j~4UYTQGfJtqsff#nIlu z@!tO8-r<1?`$vzC7rVFSckUhRK05f#y@T7T(&DV-*MCV_ zKOY;F`FLu{lXsuYXOSY0OrEvKw|bE^sYT7t-b(}WZ$z3DR-_H`DYzLKYNXAM7m9w` za&saGVv{u^&2#cdvVvEA`d%ERJ~d*+_Do2MniHc03i-jx?^`BXnlG)gIJ$3N>ib!5Vtne^mnygG zInD?#wJ}+(MSp(8mB_%DZW>|Hq#g<3@rYQ`u2!`Oob0Sy?s8Ncj zw`pcu=2XMRGiRegUO6iw*l4bpWi8lf)n?hosopZr*vN@9(yq4<5sa)+v$D%tFcMO$ z6tR(KFmfVDoM$@JE~o7?h+rh5wR0jE=~7sV*vJWtY*U*$g>a3c;whx=s^Ye6=2d(6 zmFeJ3i*Qiwm)ada`veMM2`Tklh@T(=JV8r!ZEVna73gpP#?ux9!^31k4=Y%9s1^D6XRI#=f#GXnPMH6{0!)-moY2+P1my{&hQjyo|4Ah18N{}!wKLFZSL`baUt-c@y~uc;5&*Usyq6>88q zm?Qj4)AW{J#VDs>l$aSMwq@Gsv1w(dW)+!%;~HexagJ(42)}__*>8oAj64ynRs2*Y zqZ3I0N&;~r@qWn~F~yq(={bXmf(`0|aUz(gE60goqAnLPF_Zd?rSd_OHGMb{Y}EAO zM6gj)hS+dq5Hroz%n@@A)vOV78TKl^kagS4#eT&cLB$+MvLeGo4;ePY9axfXeW(l1 zQXip4ej#AQfYQF%wk;GDZad_z#dUj|VloqPEYkFD5h6^*0SGT1o4XmNr8(dM2*+l| zq7&_2ZfEU@`HEjKZa8ZkX{4~WNp1;-ux2CmrMU4(87^NWGit7gQ;ZwvCL`MPPINjz zj_#;*5DL`xIjGoUhE;DsEd%ZlLkq?@btQ}3t3!_G8aa9pL5`7;W3E8%VqZaT*3c0I zhTgas`p`iihOjoE{_nPM9<&UP9+t2o;4pfgf;(~w4N;(JY_9e>MvuF*?*e4_F% zh3E;hru7{q|3l^A%aNV3`_h=TtxAU&jkgUVjsUOEy<&H)RF*K%1UVJmhyq3~(NQ#_ zWMZykh$dz#)~JhZpc>Fhb*B4w<|8nEQwpR#$JqMx^QV1aJ^~zE@b~vxWerQx^TSwTjdtZLuz6u zE|n2AuPSv-FR%+os{?t~w*Jp0Tu4%9q%`pa7cEQ-D6H0xuIj}#{RD~0(Zx?JD%Ekn zv3j2dtLjhmHGRhVXf|9}3xFNgrv9q#8FV}JZhDEjX-pAvx(!kR(1F9qxyOlD>>a

45kB57@SlpcDVEVlarH} z@Al!2+VVi}7T=ERZvL_x$PF9T$7%pFa6Z!z*c>F;32DgK4YL!H5^f_$gb`BV9kB^L zg&oFf9fdwb8?1PT%Xwy)L%_zg{uCXX)1h<#9e<*D-;JDsVl4*Mf;_QHYy(wfS`zV3 zxohy5#|+9GPo6LwX1tpH_{J9YOA!M~kez@H1nk*Zc;B(-I!jn_$fxp)%|OY_t&qcN zgfwI)DikJI7MX)YP2x7D5asJUfpIFkVM@5R%me1ZDzI=LZ$Co#B`_n7bw#CBU`8%5 zBNrH%zwFe=4OL)}DTMp84h(RpOs)+?>=OiTWS8tlzTFgHI;Z084X2LKe#qkDIO}o@ zzFXevUU4248|XL-*N&tb&bfBvTsvURfy?gZTVyv}-{+-Gb~Hd94p*U-M6b& zjwG+{vN>b}?!@xnAGN`6<*JT_e|Ldy(#Hn_k^tXTxR#84g}a9ZcFNa}vESl$5NRQB zB7Q;D$fRVCLEgeeytBdQigStk6%hk5ADZv<4t>p&-|9^N`77>&`0Y=kq@je8H1?%5 zSmcE*W{{k&I B=@I|{ literal 218 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 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?#9MWP3yYeB0i4u