Commit 0544e252 authored by WuEcho's avatar WuEcho

add code

parents
Pipeline #635 failed with stages
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
[package]
name = "hello-wasm"
version = "0.1.0"
edition = "2021"
authors = ["WuEcho <emailforecho@163.com>"]
publish = false
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
wasm-bindgen = "0.2"
ewasm_api = { git = "https://github.com/WuEcho/ewasm-rust-api", tag = "0.9" }
[lib]
crate-type = ["cdylib"]
[profile.release]
opt-level = 'z'
debug = false
rpath = false
debug-assertions = false
codegen-units = 1
lto = true
hello:
file: "/Users/wuxinyang/Desktop/MyGo/src/rust/hello_wasm_bg.wasm"
remapimports:
preset: "ewasm"
trimexports:
preset: "ewasm"
verifyimports:
preset: "ewasm"
verifyexports:
preset: "ewasm"
repack:
preset: "ewasm"
extern crate wasm_bindgen;
extern crate ewasm_api;
use wasm_bindgen::prelude::*;
use ewasm_api::types::*;
use ewasm_api::metavm::utils::*;
use ewasm_api::metavmabi;
pub mod abi;
const COUNTER_KEY: Bytes32 = Bytes32 { bytes: [255; 32] };
fn inc_counter() {
let old_v = ewasm_api::storage_load(&COUNTER_KEY);
let old_i = bytes_to_uint(&old_v.bytes[..]);
let new_i = old_i + 1;
let val = u32_to_bytes32(new_i as u32);
let value = Bytes32 { bytes: val };
ewasm_api::storage_store(&COUNTER_KEY, &value);
}
fn get_counter() -> Vec<u8> {
let v = ewasm_api::storage_load(&COUNTER_KEY);
Vec::from(&v.bytes[..])
}
fn put_data(k: String, v: String) {
ewasm_api::metavm::storage_store(k.as_bytes(), v.as_bytes());
}
fn get_data(k: String) -> Vec<u8> {
ewasm_api::metavm::storage_load(k.as_bytes())
}
#[wasm_bindgen]
pub fn main() {
inc_counter();
let input = ewasm_api::calldata_acquire();
if !input.is_empty() {
let mut contract = abi::get_contract_abi();
let fn_sig = &Vec::from(&input[..4]);
let function = contract.function_by_sig(fn_sig).expect("error_fn_sig");
match function.name.as_str() {
"getcounter" => { // function getcounter() public view returns(uint256);
let rtn = ewasm_api::metavm::utils::bytes_to_uint(get_counter().as_slice());
let data = function.encode_output(&[metavmabi::Token::Uint(rtn.into())]).unwrap();
ewasm_api::finish_data(data.as_slice());
}
"get" => { // function get(string memory key) public view returns(string memory);
let tokens = function.decode_input(input.as_slice()).expect("error_put_input");
let key = tokens.get(0).expect("error_put_key");
let val = get_data(key.clone().to_string().unwrap());
let rtn = String::from_utf8(val).expect("error_get_val");
let data = function.encode_output(&[metavmabi::Token::String(rtn)]).expect("error_get_output");
ewasm_api::finish_data(data.as_slice());
}
"put" => { // function put(string memory key,string memory val) public payable;
let tokens = function.decode_input(input.as_slice()).expect("error_put_input");
let key = tokens.get(0).expect("error_put_key");
let val = tokens.get(1).expect("error_put_val");
put_data(key.clone().to_string().unwrap(), val.clone().to_string().unwrap());
ewasm_api::finish()
}
_ => ewasm_api::finish()
}
}
}
This diff is collapsed.
[package]
name = "hello-wasm"
version = "0.1.0"
edition = "2021"
authors = ["WuEcho <emailforecho@163.com>"]
publish = false
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
wasm-bindgen = "0.2"
ewasm_api = { git = "https://github.com/WuEcho/ewasm-rust-api", tag = "0.9" }
[lib]
crate-type = ["cdylib"]
[profile.release]
opt-level = 'z'
debug = false
rpath = false
debug-assertions = false
codegen-units = 1
lto = true
hello:
file: "/Users/wuxinyang/Desktop/MyGo/src/rust/hello_wasm_bg.wasm"
remapimports:
preset: "ewasm"
trimexports:
preset: "ewasm"
verifyimports:
preset: "ewasm"
verifyexports:
preset: "ewasm"
repack:
preset: "ewasm"
use wasm_bindgen::prelude::*;
use ewasm_api::types::*;
use ewasm_api::metavm::utils::*;
const COUNTER_KEY: Bytes32 = Bytes32 { bytes: [255; 32] };
fn inc_counter() {
let old_v = ewasm_api::storage_load(&COUNTER_KEY);
let old_i = bytes_to_uint(&old_v.bytes[..]);
let new_i = old_i + 1;
let val = u32_to_bytes32(new_i as u32);
let value = Bytes32 { bytes: val };
ewasm_api::storage_store(&COUNTER_KEY, &value);
}
fn get_counter() {
let v = ewasm_api::storage_load(&COUNTER_KEY);
ewasm_api::finish_data(&v.bytes[..]);
}
fn put_data() {
let input = ewasm_api::calldata_acquire();
let data = String::from_utf8(input).expect("error_params");
let sd: Vec<&str> = data.split(":").collect();
if sd.len() > 1 {
let sp: Vec<&str> = sd[1].split(",").collect();
if sp.len() > 1 {
let k = sp[0].trim();
let v = sp[1].trim();
ewasm_api::metavm::storage_store(k.as_bytes(), v.as_bytes());
}
}
}
fn get_data() {
let input = ewasm_api::calldata_acquire();
let data = String::from_utf8(input).expect("error_params");
let sd: Vec<&str> = data.split(":").collect();
if sd.len() > 1 {
let k = sd[1].trim();
let v: Vec<u8> = ewasm_api::metavm::storage_load(k.as_bytes());
ewasm_api::finish_data(&v[..]);
}
}
fn anonymous() {
}
#[wasm_bindgen]
pub fn main() {
inc_counter();
let input = ewasm_api::calldata_acquire();
if !input.is_empty() {
let data = match String::from_utf8(input) {
Ok(s) => s,
Err(e) => e.to_string(),
};
let sd: Vec<&str> = data.split(":").collect();
match sd[0].trim().to_uppercase().as_str() {
"GETCOUNTER" => get_counter(),
"PUT" => put_data(),
"GET" => get_data(),
_ => ewasm_api::finish_data(String::from("METHOD_NOT_FOUND").as_bytes()),
}
} else {
anonymous();
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment