diff --git a/build-all.sh b/build-all.sh index 2900c2d..9e9e7f0 100755 --- a/build-all.sh +++ b/build-all.sh @@ -7,6 +7,8 @@ set -e ./build-rust-test.sh call_code ./build-rust-test.sh call_static ./build-rust-test.sh creator kip4 +./build-rust-test.sh call_gasleft kip6 +./build-rust-test.sh gasleft kip6 ./build-rust-test.sh dispersion ./build-rust-test.sh empty ./build-rust-test.sh externs diff --git a/compiled/call_gasleft.wasm b/compiled/call_gasleft.wasm new file mode 100644 index 0000000..e02657e Binary files /dev/null and b/compiled/call_gasleft.wasm differ diff --git a/compiled/gasleft.wasm b/compiled/gasleft.wasm index 5cc274f..d234843 100644 Binary files a/compiled/gasleft.wasm and b/compiled/gasleft.wasm differ diff --git a/gen/main.rs b/gen/main.rs index 4bf6fe2..0608961 100644 --- a/gen/main.rs +++ b/gen/main.rs @@ -5,7 +5,7 @@ fn main() { let args = env::args().collect::>(); let (file_name, pwasm_ethereum_version) = match args.len() { 2 => (&args[1], r#""0.6.3""#.to_string()), - 3 => (&args[1], format!(r#"{{ version = "0.6.3", features = [{}] }}"#, args[2].split(",").map(|s| format!(r#""{}""#, s)).collect::>().join(", "))), + 3 => (&args[1], format!(r#"{{ version = "0.7", features = [{}] }}"#, args[2].split(",").map(|s| format!(r#""{}""#, s)).collect::>().join(", "))), _ => { println!("Usage: {} gen ", args[0]); return; diff --git a/src/call_gasleft.rs b/src/call_gasleft.rs new file mode 100644 index 0000000..efef3bd --- /dev/null +++ b/src/call_gasleft.rs @@ -0,0 +1,27 @@ +#![no_std] + +#[macro_use] extern crate pwasm_std; +extern crate pwasm_ethereum; + +use pwasm_std::logger; +use pwasm_std::hash::Address; +use pwasm_ethereum::{call as ext_call, gas_left as ext_gasleft, ret}; + +#[no_mangle] +pub fn call() { + let addr = Address::from([99, 88, 77, 66, 55, 44, 33, 22, 11, 0, 11, 22, 33, 44, 55, 66, 77, 88, 99, 0]); + + let input = [129u8, 123, 113, 107, 101, 97]; + let mut temp = vec![0u8; 256]; + // `700` is a fixed CALL price, that's why we have to subtract it + match ext_call(ext_gasleft() - 700, &addr, 1000000000.into(), &input, &mut temp[..]) { + Ok(_) => { + logger::debug("Call succeed"); + }, + Err(_) => { + logger::debug("Call failed"); + } + } + + ret(&[]); +} diff --git a/src/gasleft.rs b/src/gasleft.rs index 361ba73..d3effea 100644 --- a/src/gasleft.rs +++ b/src/gasleft.rs @@ -2,7 +2,6 @@ extern crate pwasm_std; extern crate pwasm_ethereum; -extern crate bigint; use pwasm_std::{Vec, write_u64}; use pwasm_ethereum::{self as ext};