Move ethcore files back into root.

This commit is contained in:
Gav Wood 2016-01-17 13:11:25 +01:00
parent 9b87bae322
commit 6ea8eaa3b5
159 changed files with 511 additions and 511 deletions

View File

@ -1,32 +1,24 @@
[package] [package]
description = "Ethcore utility library" description = "Ethcore library"
homepage = "http://ethcore.io" homepage = "http://ethcore.io"
license = "GPL-3.0" license = "GPL-3.0"
name = "ethcore-util" name = "ethcore"
version = "0.1.0" version = "0.1.0"
authors = ["Ethcore <admin@ethcore.io>"] authors = ["Ethcore <admin@ethcore.io>"]
build = "build.rs"
[build-dependencies]
gcc = "0.3"
[dependencies] [dependencies]
log = "0.3" log = "0.3"
env_logger = "0.3" env_logger = "0.3"
ethcore-util = { path = "util" }
rustc-serialize = "0.3" rustc-serialize = "0.3"
arrayvec = "0.3" flate2 = "0.2"
mio = "0.5.0"
rand = "0.3.12"
time = "0.1.34"
tiny-keccak = "1.0"
rocksdb = "0.3" rocksdb = "0.3"
lazy_static = "0.1" heapsize = "0.2.0"
eth-secp256k1 = { git = "https://github.com/arkpar/rust-secp256k1.git" }
rust-crypto = "0.2.34" rust-crypto = "0.2.34"
elastic-array = "0.4" time = "0.1"
heapsize = "0.2" #interpolate_idents = { git = "https://github.com/SkylerLipthay/interpolate_idents" }
itertools = "0.4" evmjit = { path = "rust-evmjit", optional = true }
slab = { git = "https://github.com/arkpar/slab.git" }
[dev-dependencies] [features]
json-tests = { path = "json-tests" } jit = ["evmjit"]
evm_debug = []

View File

@ -1 +1 @@
# ethcore-util # ethcore

View File

@ -1,24 +0,0 @@
[package]
description = "Ethcore library"
homepage = "http://ethcore.io"
license = "GPL-3.0"
name = "ethcore"
version = "0.1.0"
authors = ["Ethcore <admin@ethcore.io>"]
[dependencies]
log = "0.3"
env_logger = "0.3"
ethcore-util = { path = "../ethcore-util" }
rustc-serialize = "0.3"
flate2 = "0.2"
rocksdb = "0.3"
heapsize = "0.2.0"
rust-crypto = "0.2.34"
time = "0.1"
#interpolate_idents = { git = "https://github.com/SkylerLipthay/interpolate_idents" }
evmjit = { path = "rust-evmjit", optional = true }
[features]
jit = ["evmjit"]
evm_debug = []

View File

@ -1 +0,0 @@
# ethcore

View File

@ -1,12 +0,0 @@
pub use util::*;
pub use basic_types::*;
pub use error::*;
pub use env_info::*;
pub use views::*;
pub use builtin::*;
pub use header::*;
pub use account::*;
pub use transaction::*;
pub use log_entry::*;
pub use receipt::*;
pub use action_params::*;

View File

@ -1,152 +0,0 @@
//! General error types for use in ethcore.
use util::*;
use header::BlockNumber;
use basic_types::LogBloom;
#[derive(Debug, PartialEq, Eq)]
pub struct Mismatch<T: fmt::Debug> {
pub expected: T,
pub found: T,
}
#[derive(Debug, PartialEq, Eq)]
pub struct OutOfBounds<T: fmt::Debug> {
pub min: Option<T>,
pub max: Option<T>,
pub found: T,
}
/// Result of executing the transaction.
#[derive(PartialEq, Debug)]
pub enum ExecutionError {
/// Returned when there gas paid for transaction execution is
/// lower than base gas required.
NotEnoughBaseGas { required: U256, got: U256 },
/// Returned when block (gas_used + gas) > gas_limit.
///
/// If gas =< gas_limit, upstream may try to execute the transaction
/// in next block.
BlockGasLimitReached { gas_limit: U256, gas_used: U256, gas: U256 },
/// Returned when transaction nonce does not match state nonce.
InvalidNonce { expected: U256, got: U256 },
/// Returned when cost of transaction (value + gas_price * gas) exceeds
/// current sender balance.
NotEnoughCash { required: U512, got: U512 },
/// Returned when internal evm error occurs.
Internal
}
#[derive(Debug)]
pub enum TransactionError {
InvalidGasLimit(OutOfBounds<U256>),
}
#[derive(Debug, PartialEq, Eq)]
pub enum BlockError {
TooManyUncles(OutOfBounds<usize>),
UncleWrongGeneration,
ExtraDataOutOfBounds(OutOfBounds<usize>),
InvalidSealArity(Mismatch<usize>),
TooMuchGasUsed(OutOfBounds<U256>),
InvalidUnclesHash(Mismatch<H256>),
UncleTooOld(OutOfBounds<BlockNumber>),
UncleIsBrother(OutOfBounds<BlockNumber>),
UncleInChain(H256),
UncleParentNotInChain(H256),
InvalidStateRoot(Mismatch<H256>),
InvalidGasUsed(Mismatch<U256>),
InvalidTransactionsRoot(Mismatch<H256>),
InvalidDifficulty(Mismatch<U256>),
InvalidGasLimit(OutOfBounds<U256>),
InvalidReceiptsStateRoot(Mismatch<H256>),
InvalidTimestamp(OutOfBounds<u64>),
InvalidLogBloom(Mismatch<LogBloom>),
InvalidBlockNonce(Mismatch<H256>),
InvalidParentHash(Mismatch<H256>),
InvalidNumber(OutOfBounds<BlockNumber>),
UnknownParent(H256),
UnknownUncleParent(H256),
}
#[derive(Debug)]
pub enum ImportError {
Bad(Option<Error>),
AlreadyInChain,
AlreadyQueued,
}
impl From<Error> for ImportError {
fn from(err: Error) -> ImportError {
ImportError::Bad(Some(err))
}
}
/// Result of import block operation.
pub type ImportResult = Result<(), ImportError>;
#[derive(Debug)]
/// General error type which should be capable of representing all errors in ethcore.
pub enum Error {
Util(UtilError),
Block(BlockError),
UnknownEngineName(String),
Execution(ExecutionError),
Transaction(TransactionError),
}
impl From<TransactionError> for Error {
fn from(err: TransactionError) -> Error {
Error::Transaction(err)
}
}
impl From<BlockError> for Error {
fn from(err: BlockError) -> Error {
Error::Block(err)
}
}
impl From<ExecutionError> for Error {
fn from(err: ExecutionError) -> Error {
Error::Execution(err)
}
}
impl From<CryptoError> for Error {
fn from(err: CryptoError) -> Error {
Error::Util(UtilError::Crypto(err))
}
}
impl From<DecoderError> for Error {
fn from(err: DecoderError) -> Error {
Error::Util(UtilError::Decoder(err))
}
}
impl From<UtilError> for Error {
fn from(err: UtilError) -> Error {
Error::Util(err)
}
}
impl From<IoError> for Error {
fn from(err: IoError) -> Error {
Error::Util(From::from(err))
}
}
// TODO: uncomment below once https://github.com/rust-lang/rust/issues/27336 sorted.
/*#![feature(concat_idents)]
macro_rules! assimilate {
($name:ident) => (
impl From<concat_idents!($name, Error)> for Error {
fn from(err: concat_idents!($name, Error)) -> Error {
Error:: $name (err)
}
}
)
}
assimilate!(FromHex);
assimilate!(BaseData);*/

View File

@ -1,128 +0,0 @@
#![feature(cell_extras)]
#![feature(augmented_assignments)]
#![feature(wrapping)]
//#![feature(plugin)]
//#![plugin(interpolate_idents)]
//! Ethcore's ethereum implementation
//!
//! ### Rust version
//! - beta
//! - nightly
//!
//! ### Supported platforms:
//! - OSX
//! - Linux/Ubuntu
//!
//! ### Dependencies:
//! - RocksDB 3.13
//! - LLVM 3.7 (optional, required for `jit`)
//! - evmjit (optional, required for `jit`)
//!
//! ### Dependencies Installation
//!
//! - OSX
//!
//! - rocksdb
//! ```bash
//! brew install rocksdb
//! ```
//!
//! - llvm
//!
//! - download llvm 3.7 from http://llvm.org/apt/
//!
//! ```bash
//! cd llvm-3.7.0.src
//! mkdir build && cd $_
//! cmake -G "Unix Makefiles" .. -DCMAKE_C_FLAGS_RELEASE= -DCMAKE_CXX_FLAGS_RELEASE= -DCMAKE_INSTALL_PREFIX=/usr/local/Cellar/llvm/3.7 -DCMAKE_BUILD_TYPE=Release
//! make && make install
//! ```
//! - evmjit
//!
//! - download from https://github.com/debris/evmjit
//!
//! ```bash
//! cd evmjit
//! mkdir build && cd $_
//! cmake -DLLVM_DIR=/usr/local/lib/llvm-3.7/share/llvm/cmake ..
//! make && make install
//! ```
//!
//! - Linux/Ubuntu
//!
//! - rocksdb
//!
//! ```bash
//! wget https://github.com/facebook/rocksdb/archive/rocksdb-3.13.tar.gz
//! tar xvf rocksdb-3.13.tar.gz && cd rocksdb-rocksdb-3.13 && make shared_lib
//! sudo make install
//! ```
//!
//! - llvm
//!
//! - install using packages from http://llvm.org/apt/
//!
//! - evmjit
//!
//! - download from https://github.com/debris/evmjit
//!
//! ```bash
//! cd evmjit
//! mkdir build && cd $_
//! cmake .. && make
//! sudo make install
//! sudo ldconfig
//! ```
#[macro_use]
extern crate log;
extern crate rustc_serialize;
extern crate flate2;
extern crate rocksdb;
extern crate heapsize;
extern crate crypto;
extern crate time;
extern crate env_logger;
#[cfg(feature = "jit" )]
extern crate evmjit;
#[macro_use]
extern crate ethcore_util as util;
pub mod common;
pub mod basic_types;
#[macro_use]
pub mod evm;
pub mod error;
pub mod log_entry;
pub mod env_info;
pub mod pod_account;
pub mod pod_state;
pub mod account_diff;
pub mod state_diff;
pub mod engine;
pub mod state;
pub mod account;
pub mod action_params;
pub mod header;
pub mod transaction;
pub mod receipt;
pub mod null_engine;
pub mod builtin;
pub mod spec;
pub mod views;
pub mod blockchain;
pub mod extras;
pub mod substate;
pub mod service;
pub mod executive;
pub mod externalities;
#[cfg(test)]
mod tests;
pub mod client;
pub mod sync;
pub mod block;
pub mod verification;
pub mod queue;
pub mod ethereum;

View File

@ -1,57 +1,12 @@
pub use standard::*; pub use util::*;
pub use from_json::*; pub use basic_types::*;
pub use error::*; pub use error::*;
pub use hash::*; pub use env_info::*;
pub use uint::*; pub use views::*;
pub use bytes::*; pub use builtin::*;
pub use vector::*; pub use header::*;
pub use sha3::*; pub use account::*;
pub use transaction::*;
#[macro_export] pub use log_entry::*;
macro_rules! map { pub use receipt::*;
( $( $x:expr => $y:expr ),* ) => { pub use action_params::*;
vec![ $( ($x, $y) ),* ].into_iter().collect::<BTreeMap<_, _>>()
}
}
#[macro_export]
macro_rules! mapx {
( $( $x:expr => $y:expr ),* ) => {
vec![ $( ( From::from($x), From::from($y) ) ),* ].into_iter().collect::<BTreeMap<_, _>>()
}
}
#[macro_export]
macro_rules! x {
( $x:expr ) => {
From::from($x)
}
}
#[macro_export]
macro_rules! xx {
( $x:expr ) => {
From::from(From::from($x))
}
}
#[macro_export]
macro_rules! flush {
($($arg:tt)*) => ($crate::flush(format!("{}", format_args!($($arg)*))));
}
#[macro_export]
macro_rules! flushln {
($fmt:expr) => (flush!(concat!($fmt, "\n")));
($fmt:expr, $($arg:tt)*) => (flush!(concat!($fmt, "\n"), $($arg)*));
}
pub fn flush(s: String) {
::std::io::stdout().write(s.as_bytes()).unwrap();
::std::io::stdout().flush().unwrap();
}
#[test]
fn test_flush() {
flushln!("hello_world {:?}", 1);
}

View File

@ -1,75 +1,139 @@
//! General error types for use in ethcore. //! General error types for use in ethcore.
use rustc_serialize::hex::FromHexError; use util::*;
use network::NetworkError; use header::BlockNumber;
use rlp::DecoderError; use basic_types::LogBloom;
use io;
#[derive(Debug, PartialEq, Eq)]
pub struct Mismatch<T: fmt::Debug> {
pub expected: T,
pub found: T,
}
#[derive(Debug, PartialEq, Eq)]
pub struct OutOfBounds<T: fmt::Debug> {
pub min: Option<T>,
pub max: Option<T>,
pub found: T,
}
/// Result of executing the transaction.
#[derive(PartialEq, Debug)]
pub enum ExecutionError {
/// Returned when there gas paid for transaction execution is
/// lower than base gas required.
NotEnoughBaseGas { required: U256, got: U256 },
/// Returned when block (gas_used + gas) > gas_limit.
///
/// If gas =< gas_limit, upstream may try to execute the transaction
/// in next block.
BlockGasLimitReached { gas_limit: U256, gas_used: U256, gas: U256 },
/// Returned when transaction nonce does not match state nonce.
InvalidNonce { expected: U256, got: U256 },
/// Returned when cost of transaction (value + gas_price * gas) exceeds
/// current sender balance.
NotEnoughCash { required: U512, got: U512 },
/// Returned when internal evm error occurs.
Internal
}
#[derive(Debug)] #[derive(Debug)]
pub enum BaseDataError { pub enum TransactionError {
NegativelyReferencedHash, InvalidGasLimit(OutOfBounds<U256>),
} }
#[derive(Debug, PartialEq, Eq)]
pub enum BlockError {
TooManyUncles(OutOfBounds<usize>),
UncleWrongGeneration,
ExtraDataOutOfBounds(OutOfBounds<usize>),
InvalidSealArity(Mismatch<usize>),
TooMuchGasUsed(OutOfBounds<U256>),
InvalidUnclesHash(Mismatch<H256>),
UncleTooOld(OutOfBounds<BlockNumber>),
UncleIsBrother(OutOfBounds<BlockNumber>),
UncleInChain(H256),
UncleParentNotInChain(H256),
InvalidStateRoot(Mismatch<H256>),
InvalidGasUsed(Mismatch<U256>),
InvalidTransactionsRoot(Mismatch<H256>),
InvalidDifficulty(Mismatch<U256>),
InvalidGasLimit(OutOfBounds<U256>),
InvalidReceiptsStateRoot(Mismatch<H256>),
InvalidTimestamp(OutOfBounds<u64>),
InvalidLogBloom(Mismatch<LogBloom>),
InvalidBlockNonce(Mismatch<H256>),
InvalidParentHash(Mismatch<H256>),
InvalidNumber(OutOfBounds<BlockNumber>),
UnknownParent(H256),
UnknownUncleParent(H256),
}
#[derive(Debug)]
pub enum ImportError {
Bad(Option<Error>),
AlreadyInChain,
AlreadyQueued,
}
impl From<Error> for ImportError {
fn from(err: Error) -> ImportError {
ImportError::Bad(Some(err))
}
}
/// Result of import block operation.
pub type ImportResult = Result<(), ImportError>;
#[derive(Debug)] #[derive(Debug)]
/// General error type which should be capable of representing all errors in ethcore. /// General error type which should be capable of representing all errors in ethcore.
pub enum UtilError { pub enum Error {
Crypto(::crypto::CryptoError), Util(UtilError),
StdIo(::std::io::Error), Block(BlockError),
Io(io::IoError), UnknownEngineName(String),
AddressParse(::std::net::AddrParseError), Execution(ExecutionError),
AddressResolve(Option<::std::io::Error>), Transaction(TransactionError),
FromHex(FromHexError),
BaseData(BaseDataError),
Network(NetworkError),
Decoder(DecoderError),
BadSize,
} }
impl From<FromHexError> for UtilError { impl From<TransactionError> for Error {
fn from(err: FromHexError) -> UtilError { fn from(err: TransactionError) -> Error {
UtilError::FromHex(err) Error::Transaction(err)
} }
} }
impl From<BaseDataError> for UtilError { impl From<BlockError> for Error {
fn from(err: BaseDataError) -> UtilError { fn from(err: BlockError) -> Error {
UtilError::BaseData(err) Error::Block(err)
} }
} }
impl From<NetworkError> for UtilError { impl From<ExecutionError> for Error {
fn from(err: NetworkError) -> UtilError { fn from(err: ExecutionError) -> Error {
UtilError::Network(err) Error::Execution(err)
} }
} }
impl From<::std::io::Error> for UtilError { impl From<CryptoError> for Error {
fn from(err: ::std::io::Error) -> UtilError { fn from(err: CryptoError) -> Error {
UtilError::StdIo(err) Error::Util(UtilError::Crypto(err))
} }
} }
impl From<io::IoError> for UtilError { impl From<DecoderError> for Error {
fn from(err: io::IoError) -> UtilError { fn from(err: DecoderError) -> Error {
UtilError::Io(err) Error::Util(UtilError::Decoder(err))
} }
} }
impl From<::crypto::CryptoError> for UtilError { impl From<UtilError> for Error {
fn from(err: ::crypto::CryptoError) -> UtilError { fn from(err: UtilError) -> Error {
UtilError::Crypto(err) Error::Util(err)
} }
} }
impl From<::std::net::AddrParseError> for UtilError { impl From<IoError> for Error {
fn from(err: ::std::net::AddrParseError) -> UtilError { fn from(err: IoError) -> Error {
UtilError::AddressParse(err) Error::Util(From::from(err))
}
}
impl From<::rlp::DecoderError> for UtilError {
fn from(err: ::rlp::DecoderError) -> UtilError {
UtilError::Decoder(err)
} }
} }

View File

@ -1,101 +1,128 @@
#![feature(op_assign_traits)] #![feature(cell_extras)]
#![feature(augmented_assignments)] #![feature(augmented_assignments)]
#![feature(associated_consts)]
#![feature(wrapping)] #![feature(wrapping)]
//! Ethcore-util library //#![feature(plugin)]
//#![plugin(interpolate_idents)]
//! Ethcore's ethereum implementation
//! //!
//! ### Rust version: //! ### Rust version
//! - beta //! - beta
//! - nightly //! - nightly
//! //!
//! ### Supported platforms: //! ### Supported platforms:
//! - OSX //! - OSX
//! - Linux //! - Linux/Ubuntu
//! //!
//! ### Dependencies: //! ### Dependencies:
//! - RocksDB 3.13 //! - RocksDB 3.13
//! - LLVM 3.7 (optional, required for `jit`)
//! - evmjit (optional, required for `jit`)
//! //!
//! ### Dependencies Installation: //! ### Dependencies Installation
//! //!
//! - OSX: //! - OSX
//! //!
//! - rocksdb
//! ```bash //! ```bash
//! brew install rocksdb //! brew install rocksdb
//! ``` //! ```
//! //!
//! - From source: //! - llvm
//!
//! - download llvm 3.7 from http://llvm.org/apt/
//!
//! ```bash
//! cd llvm-3.7.0.src
//! mkdir build && cd $_
//! cmake -G "Unix Makefiles" .. -DCMAKE_C_FLAGS_RELEASE= -DCMAKE_CXX_FLAGS_RELEASE= -DCMAKE_INSTALL_PREFIX=/usr/local/Cellar/llvm/3.7 -DCMAKE_BUILD_TYPE=Release
//! make && make install
//! ```
//! - evmjit
//!
//! - download from https://github.com/debris/evmjit
//!
//! ```bash
//! cd evmjit
//! mkdir build && cd $_
//! cmake -DLLVM_DIR=/usr/local/lib/llvm-3.7/share/llvm/cmake ..
//! make && make install
//! ```
//!
//! - Linux/Ubuntu
//!
//! - rocksdb
//! //!
//! ```bash //! ```bash
//! wget https://github.com/facebook/rocksdb/archive/rocksdb-3.13.tar.gz //! wget https://github.com/facebook/rocksdb/archive/rocksdb-3.13.tar.gz
//! tar xvf rocksdb-3.13.tar.gz && cd rocksdb-rocksdb-3.13 && make shared_lib //! tar xvf rocksdb-3.13.tar.gz && cd rocksdb-rocksdb-3.13 && make shared_lib
//! sudo make install //! sudo make install
//! ``` //! ```
//!
//! - llvm
//!
//! - install using packages from http://llvm.org/apt/
//!
//! - evmjit
//!
//! - download from https://github.com/debris/evmjit
//!
//! ```bash
//! cd evmjit
//! mkdir build && cd $_
//! cmake .. && make
//! sudo make install
//! sudo ldconfig
//! ```
extern crate slab;
extern crate rustc_serialize;
extern crate mio;
extern crate rand;
extern crate rocksdb;
extern crate tiny_keccak;
#[macro_use]
extern crate heapsize;
#[macro_use] #[macro_use]
extern crate log; extern crate log;
#[macro_use] extern crate rustc_serialize;
extern crate lazy_static; extern crate flate2;
#[macro_use] extern crate rocksdb;
extern crate itertools; extern crate heapsize;
extern crate env_logger; extern crate crypto;
extern crate time; extern crate time;
extern crate crypto as rcrypto; extern crate env_logger;
extern crate secp256k1; #[cfg(feature = "jit" )]
extern crate arrayvec; extern crate evmjit;
extern crate elastic_array; #[macro_use]
extern crate ethcore_util as util;
pub mod standard;
#[macro_use]
pub mod from_json;
#[macro_use]
pub mod common; pub mod common;
pub mod basic_types;
#[macro_use]
pub mod evm;
pub mod error; pub mod error;
pub mod hash; pub mod log_entry;
pub mod uint; pub mod env_info;
pub mod bytes; pub mod pod_account;
pub mod rlp; pub mod pod_state;
pub mod misc; pub mod account_diff;
pub mod json_aid; pub mod state_diff;
pub mod vector; pub mod engine;
pub mod sha3; pub mod state;
pub mod hashdb; pub mod account;
pub mod memorydb; pub mod action_params;
pub mod overlaydb; pub mod header;
pub mod math; pub mod transaction;
pub mod chainfilter; pub mod receipt;
pub mod crypto; pub mod null_engine;
pub mod triehash; pub mod builtin;
pub mod trie; pub mod spec;
pub mod nibbleslice; pub mod views;
pub mod heapsizeof; pub mod blockchain;
pub mod squeeze; pub mod extras;
pub mod semantic_version; pub mod substate;
pub mod io; pub mod service;
pub mod network; pub mod executive;
pub mod externalities;
pub use common::*; #[cfg(test)]
pub use misc::*; mod tests;
pub use json_aid::*;
pub use rlp::*; pub mod client;
pub use hashdb::*; pub mod sync;
pub use memorydb::*; pub mod block;
pub use overlaydb::*; pub mod verification;
pub use math::*; pub mod queue;
pub use chainfilter::*; pub mod ethereum;
pub use crypto::*;
pub use triehash::*;
pub use trie::*;
pub use nibbleslice::*;
pub use heapsizeof::*;
pub use squeeze::*;
pub use semantic_version::*;
pub use network::*;
pub use io::*;

32
util/Cargo.toml Normal file
View File

@ -0,0 +1,32 @@
[package]
description = "Ethcore utility library"
homepage = "http://ethcore.io"
license = "GPL-3.0"
name = "ethcore-util"
version = "0.1.0"
authors = ["Ethcore <admin@ethcore.io>"]
build = "build.rs"
[build-dependencies]
gcc = "0.3"
[dependencies]
log = "0.3"
env_logger = "0.3"
rustc-serialize = "0.3"
arrayvec = "0.3"
mio = "0.5.0"
rand = "0.3.12"
time = "0.1.34"
tiny-keccak = "1.0"
rocksdb = "0.3"
lazy_static = "0.1"
eth-secp256k1 = { git = "https://github.com/arkpar/rust-secp256k1.git" }
rust-crypto = "0.2.34"
elastic-array = "0.4"
heapsize = "0.2"
itertools = "0.4"
slab = { git = "https://github.com/arkpar/slab.git" }
[dev-dependencies]
json-tests = { path = "json-tests" }

1
util/README.md Normal file
View File

@ -0,0 +1 @@
# ethcore-util

Some files were not shown because too many files have changed in this diff Show More