Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
81 commits
Select commit Hold shift + click to select a range
36c171c
Introduce basic skeleton for Polkador runtime.
gavofyork Jan 8, 2018
f79b7bb
Clean up the runtime skeleton.
gavofyork Jan 8, 2018
b48e053
Make initial runtime skeleton compile.
gavofyork Jan 8, 2018
4e25b24
Compile polkadot-runtime both for Wasm ad native, allowing for testin…
gavofyork Jan 9, 2018
b28402c
More fleshing out on runtime.
gavofyork Jan 9, 2018
bac50a4
Update native support.
gavofyork Jan 9, 2018
9a4360f
Fix warning.
gavofyork Jan 9, 2018
0890e72
Update gitignore
gavofyork Jan 9, 2018
4cf5fd1
Update path.
gavofyork Jan 9, 2018
12b15fd
Fix path.
gavofyork Jan 9, 2018
47260c2
Remove accidentally committed files.
gavofyork Jan 9, 2018
800eb20
Add wasm binaries.
gavofyork Jan 9, 2018
10eaefe
Fix test.
gavofyork Jan 9, 2018
24ba809
Native storage support API.
gavofyork Jan 9, 2018
36a49ff
Add environmental module
gavofyork Jan 10, 2018
50e7222
Add native environment to make native source-code compatible with wasm.
gavofyork Jan 10, 2018
3e17caa
Finish up & polish environment stuff.
gavofyork Jan 10, 2018
e807c9a
Avoid using reentrancy issues.
gavofyork Jan 10, 2018
402ae29
Add some docs and a test.
gavofyork Jan 10, 2018
762826b
Remove unneeded function.
gavofyork Jan 10, 2018
7e969c8
Documentation
gavofyork Jan 11, 2018
64b0670
Tweak docs
gavofyork Jan 11, 2018
d34f62a
Remove TODOs.
gavofyork Jan 11, 2018
89f35e3
Balance transfers + util methods.
gavofyork Jan 14, 2018
5e42240
Rejig tests and ensure authorities are addressed consistently.
gavofyork Jan 14, 2018
d97e2d6
Add marshaller for xfer function
gavofyork Jan 14, 2018
26ccc14
Transaction dispatch test.
gavofyork Jan 15, 2018
7258e1f
Minor fix.
gavofyork Jan 15, 2018
c02e335
Add test for ser/de transaction.
gavofyork Jan 15, 2018
28fa761
Add ser/de for header.
gavofyork Jan 15, 2018
cd93a37
Add tests for header ser/de
gavofyork Jan 16, 2018
b55095a
Introduce basic block decoding/execution framework.
gavofyork Jan 16, 2018
288f653
Introduce block decoding/execution framework (p2)
gavofyork Jan 16, 2018
c64976b
Big refactor.
gavofyork Jan 16, 2018
40e28fc
Split out joiner.
gavofyork Jan 16, 2018
ab37f64
Hide away support modules.
gavofyork Jan 16, 2018
4844086
Fix up wasm runtime.
gavofyork Jan 16, 2018
28d775d
use externalities for chain_id
gavofyork Jan 16, 2018
75cedd9
Clean up (Test)Externalities.
gavofyork Jan 16, 2018
0feadc6
Repot and introduce keccak-256 external.
gavofyork Jan 17, 2018
15ae775
Signing with crypto.
gavofyork Jan 17, 2018
5650997
fix unsafety hole in environmental using function
rphmeier Jan 17, 2018
7820149
Introduce Ed25519 crypto.
gavofyork Jan 17, 2018
4ef4239
Repotting.
gavofyork Jan 17, 2018
8fa858c
Merge branch 'signing-ring' into polkadot-runtime-skeleton
gavofyork Jan 17, 2018
78a22d4
Add ed25519_verify external.
gavofyork Jan 17, 2018
93f7aed
Introduce Ed25519 verify as an external.
gavofyork Jan 17, 2018
cdc1387
fix unsafety hole around unwinding
rphmeier Jan 17, 2018
0477b7e
Compile fixes.
gavofyork Jan 17, 2018
66c9384
use new environmental API
rphmeier Jan 17, 2018
121aa0b
Merge branch 'polkadot-runtime-skeleton' into environmental-api
rphmeier Jan 17, 2018
eebc071
Tests for ed25519 verify.
gavofyork Jan 18, 2018
5685173
Polish
gavofyork Jan 18, 2018
f3d415c
Introduce UncheckedTransaction & test.
gavofyork Jan 18, 2018
2c9cb7b
Implement basic block and tx processing
gavofyork Jan 18, 2018
eda7d71
Introduce static hex and valid signature for block test.
gavofyork Jan 18, 2018
fd9d8dc
Merge pull request #35 from paritytech/environmental-api
gavofyork Jan 18, 2018
e8cd918
Repot session.
gavofyork Jan 18, 2018
3d1ff94
comments.
gavofyork Jan 18, 2018
92a12f0
Refactor and timestamp test
gavofyork Jan 19, 2018
5523277
Remove fluff
gavofyork Jan 19, 2018
39128b7
Merge branch 'polkadot-runtime-skeleton' of github.com:paritytech/pol…
gavofyork Jan 19, 2018
9a8f61d
Remove fluff.
gavofyork Jan 19, 2018
90f965a
Staking eras and tests.
gavofyork Jan 19, 2018
58670fc
Implement sessions.
gavofyork Jan 19, 2018
999025f
Polish
gavofyork Jan 19, 2018
4fde6f0
Test sessions.
gavofyork Jan 19, 2018
9c8cafd
Introduce better hashing.
gavofyork Jan 19, 2018
ae5a9c9
Fix tests.
gavofyork Jan 19, 2018
639554c
Introduce staking.
gavofyork Jan 19, 2018
0e88dad
Tests for simple staking system.
gavofyork Jan 19, 2018
80aa38c
Build fix for wasm.
gavofyork Jan 19, 2018
ef5d78a
Fix tests.
gavofyork Jan 19, 2018
e068f44
Repotting and docs.
gavofyork Jan 19, 2018
2499910
Docs and licence.
gavofyork Jan 19, 2018
0c53f71
Documentation.
gavofyork Jan 19, 2018
850f7ee
Remove superfluous code.
gavofyork Jan 19, 2018
dde319c
Remove dummy key.
gavofyork Jan 19, 2018
17ef2d0
Remove other superfluous file.
gavofyork Jan 19, 2018
8adb7c6
Optimise with swap_remove
gavofyork Jan 20, 2018
cbd65cb
Merge remote-tracking branch 'origin/master' into polkadot-runtime-sk…
gavofyork Jan 23, 2018
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
Prev Previous commit
Next Next commit
Add environmental module
  • Loading branch information
gavofyork committed Jan 10, 2018
commit 36a49ffd58d6fbca37a06f8f26cb6023f3c4da42
4 changes: 4 additions & 0 deletions environmental/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[package]
name = "environmental"
version = "0.1.0"
authors = ["Parity Technologies <[email protected]>"]
107 changes: 107 additions & 0 deletions environmental/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
// Copyright 2017 Parity Technologies (UK) Ltd.
// This file is part of Polkadot.

// Polkadot is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// Polkadot is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with Polkadot. If not, see <http://www.gnu.org/licenses/>.

use std::cell::RefCell;
use std::thread::LocalKey;

pub fn using_environment<'a, T: 'a, S, F: FnOnce()>(
global: &'static LocalKey<RefCell<*mut S>>,
protected: &'a mut T,
f: F
) {
global.with(|r| *r.borrow_mut() = protected as *mut T as *mut S);
f();
global.with(|r| *r.borrow_mut() = 0 as *mut S);
}

pub fn with_environment<'r, S, T: 'r, F: FnOnce(&'r mut T)>(
global: &'static LocalKey<RefCell<*mut S>>,
mutator: F,
) {
global.with(|r| {
let br = r.borrow_mut();
if *br != 0 as *mut S {
// safe because it's only non-zero when it in with_environment, which
// is holding on to the underlying reference safely
unsafe {
mutator(&mut *(*br as *mut S as *mut T));
}
}
});
}

#[macro_export]
macro_rules! decl_environment {
($name:ident : $t:ty) => {
thread_local! {
static $name: std::cell::RefCell<*mut $t> = std::cell::RefCell::new(0 as *mut $t);
}
}
}

#[macro_export]
macro_rules! declare_generic_environment {
($name:ident : $t:tt) => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should be $t:ty, otherwise you can't use types whose names are multiple tokens like Vec<u8>

mod $name {
use super::*;

decl_environment!(GLOBAL: $t<'static> );

pub fn using<'a: 'b, 'b, F: FnOnce(), T: 'a>(protected: &'b mut T, f: F) {
$crate::using_environment(&GLOBAL, protected, f);
}

pub fn with<F: for<'r, 't: 'r> FnOnce(&'r mut $t<'t>)>(f: F) {
let dummy = ();
with_closed(f, &dummy);
}

fn with_closed<'d: 't, 't: 'r, 'r, F: FnOnce(&'r mut $t<'t>)>(
f: F,
_dummy: &'d (),
) {
$crate::with_environment(&GLOBAL, f);
}
}
}
}

#[macro_export]
macro_rules! declare_simple_environment {
($name:ident : $t:tt) => {
mod $name {
use super::*;

decl_environment!(GLOBAL: $t );

pub fn using<'a: 'b, 'b, F: FnOnce(), T: 'a>(protected: &'b mut T, f: F) {
$crate::using_environment(&GLOBAL, protected, f);
}

pub fn with<F: for<'r> FnOnce(&'r mut $t)>(f: F) {
let dummy = ();
with_closed(f, &dummy);
}

fn with_closed<'d: 'r, 'r, F: FnOnce(&'r mut $t)>(
f: F,
_dummy: &'d (),
) {
$crate::with_environment(&GLOBAL, f);
}
}
}
}