diff --git a/Cargo.lock b/Cargo.lock index 34cae1abe..8851527cb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1200,21 +1200,6 @@ dependencies = [ "heapsize", ] -[[package]] -name = "engine-standalone" -version = "0.1.0" -dependencies = [ - "aurora-engine", - "aurora-engine-sdk", - "aurora-engine-types", - "borsh 0.8.2", - "engine-standalone-storage", - "engine-standalone-tracing", - "evm-core", - "libc", - "rocksdb", -] - [[package]] name = "engine-standalone-storage" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 9095e16bc..b7d9834e8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,7 +32,6 @@ members = [ "engine", "engine-precompiles", "engine-sdk", - "engine-standalone", "engine-standalone-storage", "engine-standalone-tracing", "engine-tests", diff --git a/engine-standalone/Cargo.toml b/engine-standalone/Cargo.toml deleted file mode 100644 index d55bbfe9e..000000000 --- a/engine-standalone/Cargo.toml +++ /dev/null @@ -1,27 +0,0 @@ -[package] -name = "engine-standalone" -version = "0.1.0" -edition = "2018" -authors = ["Aurora "] -description = "Aurora engine standalone library. Provides debugging capabilities." -homepage = "https://github.com/aurora-is-near/aurora-engine" -repository = "https://github.com/aurora-is-near/aurora-engine" -license = "CC0-1.0" -publish = false -autobenches = false - -[dependencies] -aurora-engine = { path = "../engine", default-features = false, features = ["std", "tracing"] } -aurora-engine-types = { path = "../engine-types", default-features = false, features = ["std"] } -aurora-engine-sdk = { path = "../engine-sdk", default-features = false, features = ["std"] } -engine-standalone-storage = { path = "../engine-standalone-storage", default-features = false } -engine-standalone-tracing = { path = "../engine-standalone-tracing", default-features = false } -borsh = { version = "0.8.2" } -evm-core = { git = "https://github.com/aurora-is-near/sputnikvm.git", default-features = false, features = ["std"] } -libc = "0.2" -rocksdb = "0.16.0" - -[features] -default = [] -mainnet = [] -testnet = [] diff --git a/engine-standalone/LICENSE b/engine-standalone/LICENSE deleted file mode 100644 index 670154e35..000000000 --- a/engine-standalone/LICENSE +++ /dev/null @@ -1,116 +0,0 @@ -CC0 1.0 Universal - -Statement of Purpose - -The laws of most jurisdictions throughout the world automatically confer -exclusive Copyright and Related Rights (defined below) upon the creator and -subsequent owner(s) (each and all, an "owner") of an original work of -authorship and/or a database (each, a "Work"). - -Certain owners wish to permanently relinquish those rights to a Work for the -purpose of contributing to a commons of creative, cultural and scientific -works ("Commons") that the public can reliably and without fear of later -claims of infringement build upon, modify, incorporate in other works, reuse -and redistribute as freely as possible in any form whatsoever and for any -purposes, including without limitation commercial purposes. These owners may -contribute to the Commons to promote the ideal of a free culture and the -further production of creative, cultural and scientific works, or to gain -reputation or greater distribution for their Work in part through the use and -efforts of others. - -For these and/or other purposes and motivations, and without any expectation -of additional consideration or compensation, the person associating CC0 with a -Work (the "Affirmer"), to the extent that he or she is an owner of Copyright -and Related Rights in the Work, voluntarily elects to apply CC0 to the Work -and publicly distribute the Work under its terms, with knowledge of his or her -Copyright and Related Rights in the Work and the meaning and intended legal -effect of CC0 on those rights. - -1. Copyright and Related Rights. A Work made available under CC0 may be -protected by copyright and related or neighboring rights ("Copyright and -Related Rights"). Copyright and Related Rights include, but are not limited -to, the following: - - i. the right to reproduce, adapt, distribute, perform, display, communicate, - and translate a Work; - - ii. moral rights retained by the original author(s) and/or performer(s); - - iii. publicity and privacy rights pertaining to a person's image or likeness - depicted in a Work; - - iv. rights protecting against unfair competition in regards to a Work, - subject to the limitations in paragraph 4(a), below; - - v. rights protecting the extraction, dissemination, use and reuse of data in - a Work; - - vi. database rights (such as those arising under Directive 96/9/EC of the - European Parliament and of the Council of 11 March 1996 on the legal - protection of databases, and under any national implementation thereof, - including any amended or successor version of such directive); and - - vii. other similar, equivalent or corresponding rights throughout the world - based on applicable law or treaty, and any national implementations thereof. - -2. Waiver. To the greatest extent permitted by, but not in contravention of, -applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and -unconditionally waives, abandons, and surrenders all of Affirmer's Copyright -and Related Rights and associated claims and causes of action, whether now -known or unknown (including existing as well as future claims and causes of -action), in the Work (i) in all territories worldwide, (ii) for the maximum -duration provided by applicable law or treaty (including future time -extensions), (iii) in any current or future medium and for any number of -copies, and (iv) for any purpose whatsoever, including without limitation -commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes -the Waiver for the benefit of each member of the public at large and to the -detriment of Affirmer's heirs and successors, fully intending that such Waiver -shall not be subject to revocation, rescission, cancellation, termination, or -any other legal or equitable action to disrupt the quiet enjoyment of the Work -by the public as contemplated by Affirmer's express Statement of Purpose. - -3. Public License Fallback. Should any part of the Waiver for any reason be -judged legally invalid or ineffective under applicable law, then the Waiver -shall be preserved to the maximum extent permitted taking into account -Affirmer's express Statement of Purpose. In addition, to the extent the Waiver -is so judged Affirmer hereby grants to each affected person a royalty-free, -non transferable, non sublicensable, non exclusive, irrevocable and -unconditional license to exercise Affirmer's Copyright and Related Rights in -the Work (i) in all territories worldwide, (ii) for the maximum duration -provided by applicable law or treaty (including future time extensions), (iii) -in any current or future medium and for any number of copies, and (iv) for any -purpose whatsoever, including without limitation commercial, advertising or -promotional purposes (the "License"). The License shall be deemed effective as -of the date CC0 was applied by Affirmer to the Work. Should any part of the -License for any reason be judged legally invalid or ineffective under -applicable law, such partial invalidity or ineffectiveness shall not -invalidate the remainder of the License, and in such case Affirmer hereby -affirms that he or she will not (i) exercise any of his or her remaining -Copyright and Related Rights in the Work or (ii) assert any associated claims -and causes of action with respect to the Work, in either case contrary to -Affirmer's express Statement of Purpose. - -4. Limitations and Disclaimers. - - a. No trademark or patent rights held by Affirmer are waived, abandoned, - surrendered, licensed or otherwise affected by this document. - - b. Affirmer offers the Work as-is and makes no representations or warranties - of any kind concerning the Work, express, implied, statutory or otherwise, - including without limitation warranties of title, merchantability, fitness - for a particular purpose, non infringement, or the absence of latent or - other defects, accuracy, or the present or absence of errors, whether or not - discoverable, all to the greatest extent permissible under applicable law. - - c. Affirmer disclaims responsibility for clearing rights of other persons - that may apply to the Work or any use thereof, including without limitation - any person's Copyright and Related Rights in the Work. Further, Affirmer - disclaims responsibility for obtaining any necessary consents, permissions - or other rights required for any use of the Work. - - d. Affirmer understands and acknowledges that Creative Commons is not a - party to this document and has no duty or obligation with respect to this - CC0 or use of the Work. - -For more information, please see - diff --git a/engine-standalone/src/ffi.rs b/engine-standalone/src/ffi.rs deleted file mode 100644 index a02c31c53..000000000 --- a/engine-standalone/src/ffi.rs +++ /dev/null @@ -1,209 +0,0 @@ -use engine_standalone_tracing::{TraceLog, TransactionTrace}; -use libc::{c_uchar, c_uint, c_ushort, size_t, uintmax_t}; -use std::ffi::CString; - -/// Translates a struct into a C struct. -pub trait IntoC { - /// A method used to consume a struct and convert it into a C-compatible - /// struct. - fn into_c(self) -> T; -} - -#[repr(C)] -/// The C trace log of an execution on the EVM. -pub struct CTraceLog { - /// The depth of the log. - depth: c_uint, - /// Any errors that may have occurred during execution. - /// - /// Empty if none. - error: CString, - /// Gas used to execute the transaction. - gas: uintmax_t, - /// Gas cost for the transaction. - gas_cost: uintmax_t, - /// The bounded memory. - memory_ptr: *const [c_uchar; 32], - /// The length of the memory vector. - memory_len: size_t, - /// The opcode as a byte. - opcode: c_uchar, // opcode as byte - /// The current program counter of the transaction. - program_counter: c_uint, - /// The local stack. - stack_ptr: *const [c_uchar; 32], - /// The length of the stack vector. - stack_len: size_t, - /// The storage of the logs as a set of tuples. - storage_ptr: *const ([c_uchar; 32], [c_uchar; 32]), - /// The length of the storage. - storage_len: size_t, -} - -impl From for CTraceLog { - fn from(log: TraceLog) -> Self { - let error = match &log.error { - Some(err) => CString::new(err.to_string()), - None => CString::new(""), - } - .expect("CString::new failed"); - let (memory_ptr, memory_len) = { - let len = log.memory.len(); - let memory = log.memory.clone(); - - (memory.into_raw().as_ptr(), len) - }; - let (stack_ptr, stack_len) = { - let len = log.stack.len(); - let stack = log.stack.clone(); - - (stack.into_raw().as_ptr(), len) - }; - let (storage_ptr, storage_len) = { - let storage_map = log.storage.clone(); - let storage: Vec<([u8; 32], [u8; 32])> = storage_map - .into_iter() - .map(|(key, value)| (key.into_raw(), value.into_raw())) - .collect(); - - (storage.as_ptr(), storage.len()) - }; - - Self { - depth: log.depth.into_u32(), - error, - gas: log.gas.as_u64(), - gas_cost: log.gas_cost.as_u64(), - memory_ptr, - memory_len, - opcode: log.opcode.as_u8(), - program_counter: log.program_counter.into_u32(), - stack_ptr, - stack_len, - storage_ptr, - storage_len, - } - } -} - -#[repr(C)] -pub struct CTransactionTrace { - /// The total gas cost of the transaction. - gas: uintmax_t, - /// The return of the operation. - result: CString, - /// The collection of traces. - logs_ptr: *const CTraceLog, - /// The length of the logs vector. - logs_len: size_t, -} - -impl From for CTransactionTrace { - fn from(trace: TransactionTrace) -> Self { - let logs = trace.logs().clone(); - let c_logs: Vec = logs.into_iter().map(CTraceLog::from).collect(); - let (logs_ptr, logs_len) = { - let len = c_logs.len(); - (c_logs.as_ptr(), len) - }; - - Self { - gas: trace.gas().as_u64(), - result: CString::new(trace.result()).expect("CString::new failed"), - logs_ptr, - logs_len, - } - } -} - -// Debug methods - -/// Takes in a transaction hash and returns a `TransactionTrace`. -#[no_mangle] -pub extern "C" fn trace_transaction(_tx_hash: *const [c_uchar; 32]) -> *const CTransactionTrace { - todo!() -} - -// Storage getters - -/// Gets the nonce of an Ethereum address at a given block. -/// Returns 0 on success, 1 on failure (block hash not found); the nonce variable is overwritten -/// with the requested nonce iff 0 is returned. -#[no_mangle] -pub extern "C" fn get_nonce( - _block_hash: *const [c_uchar; 32], - _address: *const [c_uchar; 20], - _nonce_out: *mut uintmax_t, -) -> c_uchar { - todo!() -} - -/// Gets the balance of an Ethereum address at a given block. -/// -/// Returns 0 on success, 1 on failure (block hash not found); the balance variable is overwritten -/// with the requested balance (big endian encoded) iff 0 is returned. -#[no_mangle] -pub extern "C" fn get_balance( - _block_hash: *const [c_uchar; 32], - _address: *const [c_uchar; 20], - _balance_out: *mut [c_uchar; 32], -) -> c_uchar { - todo!() -} - -/// Returns the size of the EVM bytecode (in bytes) for the specified account at a given block. -/// -/// Returns 0 on success, 1 on failure (block hash not found); the size variable is overwritten -/// with the requested balance (big endian encoded) iff 0 is returned. -#[no_mangle] -pub extern "C" fn get_code_size( - _block_hash: *const [c_uchar; 32], - _address: *const [c_uchar; 20], - _size_out: *const c_uint, -) -> c_uchar { - todo!() -} - -/// Returns the byte slice with the code for the specified account at a given block. -/// -/// Returns 0 on success, 1 on failure (block hash not found); the code variable is overwritten -/// with the requested balance (big endian encoded) iff 0 is returned. The size of the output slice -/// needed should be determined from `get_code_size`. -#[no_mangle] -pub extern "C" fn get_code( - _block_hash: *const [c_uchar; 32], - _address: *const [c_uchar; 20], - _code_out: *mut c_uchar, - _code_out_len: *mut c_uint, -) -> c_uchar { - todo!() -} - -/// Gets the state value for the provided address and key values at a given block. -/// Returns 0 on success, 1 on failure (block hash not found); the value variable is overwritten -/// with the requested balance (big endian encoded) iff 0 is returned. -#[no_mangle] -pub extern "C" fn get_state( - _block_hash: *const [c_uchar; 32], - _address: *const [c_uchar; 20], - _key: *const [c_uchar; 32], - _value_out: *mut [c_uchar; 32], -) -> c_uchar { - todo!() -} - -// Storage setters - -/// Submit a transaction which was included in the given block. The transaction is RPL encoded. -/// This will update the storage to include the transaction, the diff it generated, and other state metadata (see storage details). -/// The return value is 0 on success. Non-zero return values will correspond to different errors that may occur (exact errors TBD). -#[no_mangle] -pub extern "C" fn submit_transaction( - _block_hash: *const [c_uchar; 32], - _block_height: *const uintmax_t, - _transaction: *const c_uchar, - _transaction_len: *const c_uint, - _tx_position: *const c_ushort, -) -> c_uchar { - todo!() -} diff --git a/engine-standalone/src/main.rs b/engine-standalone/src/main.rs deleted file mode 100644 index f0f7c4ed6..000000000 --- a/engine-standalone/src/main.rs +++ /dev/null @@ -1,5 +0,0 @@ -mod ffi; - -fn main() { - println!("Hello, World!"); -}