update to marine, marine-test, bump versions

This commit is contained in:
boneyard93501 2021-06-13 15:46:35 -05:00
parent 3a6be62bde
commit 2d68a8eebd
16 changed files with 130 additions and 112 deletions

View File

@ -7,7 +7,7 @@ edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]
fluence = { version = "=0.6.2", features = ["logger"] } fluence = { version = "=0.6.9", features = ["logger"] }
log = "0.4.14" log = "0.4.14"
serde_json = "1.0.64" serde_json = "1.0.64"
fstrings = "0.2.3" fstrings = "0.2.3"

View File

@ -15,7 +15,7 @@
*/ */
use crate::curl_request; use crate::curl_request;
use fluence::fce; use fluence::marine;
use fluence::MountedBinaryResult; use fluence::MountedBinaryResult;
fn result_to_string(result: MountedBinaryResult) -> String { fn result_to_string(result: MountedBinaryResult) -> String {
@ -25,7 +25,7 @@ fn result_to_string(result: MountedBinaryResult) -> String {
String::from_utf8(result.stderr).expect("Found invalid UTF-8") String::from_utf8(result.stderr).expect("Found invalid UTF-8")
} }
#[fce] #[marine]
pub fn get_latest_block(api_key: String) -> String { pub fn get_latest_block(api_key: String) -> String {
let url = let url =
f!("https://api.etherscan.io/api?module=proxy&action=eth_blockNumber&apikey={api_key}"); f!("https://api.etherscan.io/api?module=proxy&action=eth_blockNumber&apikey={api_key}");
@ -38,7 +38,7 @@ pub fn get_latest_block(api_key: String) -> String {
serde_json::from_value(obj["result"].clone()).unwrap() serde_json::from_value(obj["result"].clone()).unwrap()
} }
#[fce] #[marine]
pub fn get_block(api_key: String, block_number: u32) -> String { pub fn get_block(api_key: String, block_number: u32) -> String {
let url = f!("https://api.etherscan.io/api?module=block&action=getblockreward&blockno={block_number}&apikey={api_key}"); let url = f!("https://api.etherscan.io/api?module=block&action=getblockreward&blockno={block_number}&apikey={api_key}");
let header = "-d \"\""; let header = "-d \"\"";

View File

@ -18,7 +18,7 @@ extern crate fstrings;
use fluence::module_manifest; use fluence::module_manifest;
use fluence::MountedBinaryResult; use fluence::MountedBinaryResult;
use fluence::{fce, WasmLoggerBuilder}; use fluence::{marine, WasmLoggerBuilder};
mod eth_block_getters; mod eth_block_getters;
@ -28,7 +28,7 @@ fn main() {
WasmLoggerBuilder::new().build().ok(); WasmLoggerBuilder::new().build().ok();
} }
#[fce] #[marine]
#[link(wasm_import_module = "curl_adapter")] #[link(wasm_import_module = "curl_adapter")]
extern "C" { extern "C" {
pub fn curl_request(curl_cmd: Vec<String>) -> MountedBinaryResult; pub fn curl_request(curl_cmd: Vec<String>) -> MountedBinaryResult;

View File

@ -10,6 +10,6 @@ path = "src/main.rs"
name = "curl_adapter" name = "curl_adapter"
[dependencies] [dependencies]
fluence = { version = "=0.6.2", features = ["logger"] } fluence = { version = "=0.6.9", features = ["logger"] }
log = "0.4.14" log = "0.4.14"
serde_json = "1.0.64" serde_json = "1.0.64"

View File

@ -15,7 +15,7 @@
*/ */
#![allow(improper_ctypes)] #![allow(improper_ctypes)]
use fluence::fce; use fluence::marine;
use fluence::module_manifest; use fluence::module_manifest;
use fluence::MountedBinaryResult; use fluence::MountedBinaryResult;
use fluence::WasmLoggerBuilder; use fluence::WasmLoggerBuilder;
@ -26,14 +26,14 @@ fn main() {
WasmLoggerBuilder::new().build().unwrap(); WasmLoggerBuilder::new().build().unwrap();
} }
#[fce] #[marine]
pub fn curl_request(curl_cmd: Vec<String>) -> MountedBinaryResult { pub fn curl_request(curl_cmd: Vec<String>) -> MountedBinaryResult {
let response = curl(curl_cmd); let response = curl(curl_cmd);
response response
} }
// mounted_binaries are available to import like this: // mounted_binaries are available to import like this:
#[fce] #[marine]
#[link(wasm_import_module = "host")] #[link(wasm_import_module = "host")]
extern "C" { extern "C" {
pub fn curl(cmd: Vec<String>) -> MountedBinaryResult; pub fn curl(cmd: Vec<String>) -> MountedBinaryResult;

View File

@ -9,7 +9,7 @@ name = "ethqlite"
path = "src/main.rs" path = "src/main.rs"
[dependencies] [dependencies]
fluence = { version="0.6.2", features = ["logger"]} fluence = { version="0.6.9", features = ["logger"]}
log = "0.4.8" log = "0.4.8"
fce-sqlite-connector = "=0.4.0" fce-sqlite-connector = "=0.4.0"
serde = {version = "1.0.118", features=["derive"]} serde = {version = "1.0.118", features=["derive"]}

View File

@ -1,9 +1,9 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -o errexit -o nounset -o pipefail set -o errexit -o nounset -o pipefail
# This script builds all subprojects and puts all created Wasm modules in one dir
# cargo update cargo update --aggressive
fce build --release marine build --release
rm -f artifacts/*.wasm rm -f artifacts/*.wasm
cp target/wasm32-wasi/release/ethqlite.wasm artifacts/ cp target/wasm32-wasi/release/ethqlite.wasm artifacts/

View File

@ -14,9 +14,9 @@
* limitations under the License. * limitations under the License.
*/ */
use fluence::{fce, CallParameters};
use::fluence;
use crate::get_connection; use crate::get_connection;
use ::fluence;
use fluence::{marine, CallParameters};
pub fn is_owner() -> bool { pub fn is_owner() -> bool {
let meta = fluence::get_call_parameters(); let meta = fluence::get_call_parameters();
@ -26,7 +26,7 @@ pub fn is_owner() -> bool {
caller == owner caller == owner
} }
#[fce] #[marine]
pub fn am_i_owner() -> bool { pub fn am_i_owner() -> bool {
is_owner() is_owner()
} }

View File

@ -13,13 +13,12 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
use fluence::fce;
use fce_sqlite_connector; use fce_sqlite_connector;
use fce_sqlite_connector::{Connection, Value}; use fce_sqlite_connector::{Connection, Value};
use fluence::marine;
use crate::get_connection;
use crate::auth::is_owner; use crate::auth::is_owner;
use crate::get_connection;
pub fn create_table(conn: &Connection) -> std::result::Result<(), fce_sqlite_connector::Error> { pub fn create_table(conn: &Connection) -> std::result::Result<(), fce_sqlite_connector::Error> {
let res = conn.execute( let res = conn.execute(
@ -36,25 +35,30 @@ pub fn create_table(conn: &Connection) -> std::result::Result<(), fce_sqlite_con
res res
} }
#[marine]
#[fce]
#[derive(Debug)] #[derive(Debug)]
pub struct UpdateResult { pub struct UpdateResult {
pub success: bool, pub success: bool,
pub err_str: String, pub err_str: String,
} }
#[fce] #[marine]
pub fn update_reward_blocks(data_string: String) -> UpdateResult { pub fn update_reward_blocks(data_string: String) -> UpdateResult {
if !is_owner() { if !is_owner() {
return UpdateResult { success:false, err_str: "You are not the owner".into()}; return UpdateResult {
success: false,
err_str: "You are not the owner".into(),
};
} }
let obj:serde_json::Value = serde_json::from_str(&data_string).unwrap(); let obj: serde_json::Value = serde_json::from_str(&data_string).unwrap();
let obj = obj["result"].clone(); let obj = obj["result"].clone();
if obj["blockNumber"] == serde_json::Value::Null { if obj["blockNumber"] == serde_json::Value::Null {
return UpdateResult { success:false, err_str: "Empty reward block string".into()}; return UpdateResult {
success: false,
err_str: "Empty reward block string".into(),
};
} }
let conn = get_connection(); let conn = get_connection();
@ -62,29 +66,42 @@ pub fn update_reward_blocks(data_string: String) -> UpdateResult {
let insert = "insert or ignore into reward_blocks values(?, ?, ?, ?)"; let insert = "insert or ignore into reward_blocks values(?, ?, ?, ?)";
let mut ins_cur = conn.prepare(insert).unwrap().cursor(); let mut ins_cur = conn.prepare(insert).unwrap().cursor();
let insert = ins_cur.bind(&[
let insert = ins_cur.bind( Value::Integer(i64::from_str_radix(obj["blockNumber"].as_str().unwrap(), 10).unwrap()),
&[Value::Integer(i64::from_str_radix(obj["blockNumber"].as_str().unwrap(), 10).unwrap()), Value::Integer(i64::from_str_radix(obj["timeStamp"].as_str().unwrap(), 10).unwrap()),
Value::Integer(i64::from_str_radix(obj["timeStamp"].as_str().unwrap(), 10).unwrap()), Value::String(obj["blockMiner"].to_string()),
Value::String(obj["blockMiner"].to_string()), Value::Integer(
Value::Integer(i64::from_str_radix(obj["blockReward"].clone().as_str().unwrap(), 10).unwrap()), i64::from_str_radix(obj["blockReward"].clone().as_str().unwrap(), 10).unwrap(),
] ),
); ]);
if insert.is_ok() { if insert.is_ok() {
ins_cur.next().unwrap(); ins_cur.next().unwrap();
let mut select = conn.prepare("select * from reward_blocks").unwrap().cursor(); let mut select = conn
.prepare("select * from reward_blocks")
.unwrap()
.cursor();
while let Some(row) = select.next().unwrap() { while let Some(row) = select.next().unwrap() {
println!("select row {:?}", row); println!("select row {:?}", row);
println!("{}, {}", row[0].as_integer().unwrap(), row[2].as_string().unwrap()); println!(
"{}, {}",
row[0].as_integer().unwrap(),
row[2].as_string().unwrap()
);
} }
return UpdateResult { success:true, err_str: "".into()}; return UpdateResult {
success: true,
err_str: "".into(),
};
} }
UpdateResult { success:false, err_str: "Insert failed".into()} UpdateResult {
success: false,
err_str: "Insert failed".into(),
}
} }
#[fce] #[marine]
#[derive(Debug)] #[derive(Debug)]
pub struct RewardBlock { pub struct RewardBlock {
pub block_number: i64, pub block_number: i64,
@ -111,10 +128,9 @@ impl RewardBlock {
block_reward: String::from(""), block_reward: String::from(""),
} }
} }
} }
#[fce] #[marine]
pub fn get_latest_reward_block() -> RewardBlock { pub fn get_latest_reward_block() -> RewardBlock {
// let db_path = "/tmp/db.sqlite"; // let db_path = "/tmp/db.sqlite";
let conn = get_connection(); let conn = get_connection();
@ -127,7 +143,7 @@ pub fn get_latest_reward_block() -> RewardBlock {
while let Some(row) = select.next().unwrap() { while let Some(row) = select.next().unwrap() {
println!("get_latest_reward_block: {:?}", row); println!("get_latest_reward_block: {:?}", row);
reward_block = RewardBlock::from_row(row); reward_block = RewardBlock::from_row(row);
}; }
return reward_block; return reward_block;
} }
Err(e) => reward_block, Err(e) => reward_block,
@ -135,7 +151,7 @@ pub fn get_latest_reward_block() -> RewardBlock {
result result
} }
#[fce] #[marine]
pub fn get_reward_block(block_number: u32) -> RewardBlock { pub fn get_reward_block(block_number: u32) -> RewardBlock {
let conn = get_connection(); let conn = get_connection();
@ -149,31 +165,31 @@ pub fn get_reward_block(block_number: u32) -> RewardBlock {
while let Some(row) = select.next().unwrap() { while let Some(row) = select.next().unwrap() {
println!("get_reward_block: {:?}", row); println!("get_reward_block: {:?}", row);
reward_block = RewardBlock::from_row(row); reward_block = RewardBlock::from_row(row);
}; }
return reward_block; return reward_block;
} }
Err(e) => reward_block Err(e) => reward_block,
} }
} }
#[fce] #[marine]
#[derive(Debug)] #[derive(Debug)]
pub struct MinerRewards { pub struct MinerRewards {
pub miner_address: String, pub miner_address: String,
pub rewards: Vec<String> pub rewards: Vec<String>,
} }
impl MinerRewards { impl MinerRewards {
fn new(miner_address: String) -> Self { fn new(miner_address: String) -> Self {
let rewards:Vec<String> = Vec::new(); let rewards: Vec<String> = Vec::new();
MinerRewards { MinerRewards {
miner_address, miner_address,
rewards rewards,
} }
} }
} }
#[fce] #[marine]
pub fn get_miner_rewards(miner_address: String) -> MinerRewards { pub fn get_miner_rewards(miner_address: String) -> MinerRewards {
let conn = get_connection(); let conn = get_connection();
@ -187,8 +203,10 @@ pub fn get_miner_rewards(miner_address: String) -> MinerRewards {
select.bind(&[Value::String(miner_address)]).unwrap(); select.bind(&[Value::String(miner_address)]).unwrap();
while let Some(row) = select.next().unwrap() { while let Some(row) = select.next().unwrap() {
println!("reward row {:?}", row); println!("reward row {:?}", row);
miner_rewards.rewards.push(row[0].as_integer().unwrap().to_string()); miner_rewards
}; .rewards
.push(row[0].as_integer().unwrap().to_string());
}
} }
Err(e) => log::error!("suck it"), //(format!("{:?}",e)) Err(e) => log::error!("suck it"), //(format!("{:?}",e))
}; };

View File

@ -14,70 +14,76 @@
* limitations under the License. * limitations under the License.
*/ */
use fluence::fce; ///, WasmLoggerBuilder};
use fluence;
use fluence::WasmLoggerBuilder;
use fce_sqlite_connector; use fce_sqlite_connector;
use fce_sqlite_connector::{Connection, State, Value}; use fce_sqlite_connector::{Connection, State, Value};
///, WasmLoggerBuilder};
use fluence;
use fluence::marine;
use fluence::WasmLoggerBuilder;
use std::path::{Path, PathBuf};
use serde::Deserialize; use serde::Deserialize;
use serde_json; use serde_json;
use std::path::{Path, PathBuf};
use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::atomic::{AtomicBool, Ordering};
use crate::crud::create_table;
use crate::auth::is_owner; use crate::auth::is_owner;
use crate::crud::create_table;
const DB_PATH: &str = "/tmp/fluence_service_db.sqlite"; const DB_PATH: &str = "/tmp/fluence_service_db.sqlite";
mod crud;
mod auth; mod auth;
mod crud;
pub static INIT: AtomicBool = AtomicBool::new(false); pub static INIT: AtomicBool = AtomicBool::new(false);
fn main() {} fn main() {}
fn get_connection() -> Connection { fn get_connection() -> Connection {
Connection::open(DB_PATH).unwrap() Connection::open(DB_PATH).unwrap()
} }
#[marine]
#[fce]
#[derive(Debug)] #[derive(Debug)]
pub struct InitResult { pub struct InitResult {
pub success: bool, pub success: bool,
pub err_msg: String, pub err_msg: String,
} }
#[fce] #[fmarinece]
pub fn init_service() -> InitResult { pub fn init_service() -> InitResult {
if !is_owner() { if !is_owner() {
return InitResult {success: false, err_msg: "Not authorized to use this service".into()}; return InitResult {
success: false,
err_msg: "Not authorized to use this service".into(),
};
} }
if INIT.load(Ordering::Relaxed) { if INIT.load(Ordering::Relaxed) {
return InitResult {success: false, err_msg: "Service already initiated".into()}; return InitResult {
success: false,
err_msg: "Service already initiated".into(),
};
} }
let conn = get_connection(); let conn = get_connection();
let res = create_table(&conn); let res = create_table(&conn);
if res.is_err() { if res.is_err() {
return InitResult {success: false, err_msg: "Failure to create tables".into()}; return InitResult {
success: false,
err_msg: "Failure to create tables".into(),
};
} }
// TODO: implement rollbacks // TODO: implement rollbacks
INIT.store(true, Ordering::Relaxed); INIT.store(true, Ordering::Relaxed);
InitResult {success: true, err_msg: "".into()} InitResult {
success: true,
err_msg: "".into(),
}
} }
#[marine]
#[fce]
pub fn owner_nuclear_reset() -> bool { pub fn owner_nuclear_reset() -> bool {
if !is_owner() { if !is_owner() {
return false; return false;

View File

@ -7,6 +7,6 @@ edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]
fluence = { version = "=0.6.2", features = ["logger"] } fluence = { version = "=0.6.9", features = ["logger"] }
log = "0.4.8" log = "0.4.8"
serde_json = "1.0.64" serde_json = "1.0.64"

View File

@ -1,5 +1,5 @@
use fluence::module_manifest; use fluence::module_manifest;
use fluence::{fce, WasmLoggerBuilder}; use fluence::{marine, WasmLoggerBuilder};
use serde_json; use serde_json;
module_manifest!(); module_manifest!();
@ -8,7 +8,7 @@ fn main() {
WasmLoggerBuilder::new().build().ok(); WasmLoggerBuilder::new().build().ok();
} }
#[fce] #[marine]
pub fn extract_miner_address(json_string: String) -> String { pub fn extract_miner_address(json_string: String) -> String {
let obj = serde_json::from_str::<serde_json::Value>(&json_string); let obj = serde_json::from_str::<serde_json::Value>(&json_string);
match obj { match obj {

View File

@ -4,9 +4,7 @@ version = "0.1.0"
authors = ["boneyard93501 <4523011+boneyard93501@users.noreply.github.com>"] authors = ["boneyard93501 <4523011+boneyard93501@users.noreply.github.com>"]
edition = "2018" edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]
fluence = { version = "=0.6.2", features = ["logger"] } fluence = { version = "=0.6.9", features = ["logger"] }
log = "0.4.8" log = "0.4.8"
serde_json = "1.0.64" serde_json = "1.0.64"

View File

@ -15,7 +15,7 @@
*/ */
use fluence::module_manifest; use fluence::module_manifest;
use fluence::{fce, WasmLoggerBuilder}; use fluence::{marine, WasmLoggerBuilder};
use serde_json; use serde_json;
module_manifest!(); module_manifest!();
@ -24,7 +24,7 @@ fn main() {
WasmLoggerBuilder::new().build().ok(); WasmLoggerBuilder::new().build().ok();
} }
#[fce] #[marine]
pub fn hex_to_int(data: String) -> u64 { pub fn hex_to_int(data: String) -> u64 {
if data.starts_with("0x") { if data.starts_with("0x") {
let res = u64::from_str_radix(&data[2..], 16); let res = u64::from_str_radix(&data[2..], 16);

View File

@ -1,24 +1,20 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -o errexit -o nounset -o pipefail set -o errexit -o nounset -o pipefail
mkdir -p artifacts
cd curl_adapter cd curl_adapter
fce build --release marine build --release
cd ..
cd ../hex_converter
cd hex_converter marine build --release
fce build --release
cd .. cd ../block_getter
marine build --release
cd block_getter
fce build --release cd ../extract_miner_address
cd .. marine build --release
cd extract_miner_address
fce build --release
cd .. cd ..
mkdir -p artifacts
rm -f artifacts/*.wasm rm -f artifacts/*.wasm
cp curl_adapter/target/wasm32-wasi/release/curl_adapter.wasm artifacts/ cp curl_adapter/target/wasm32-wasi/release/curl_adapter.wasm artifacts/

View File

@ -1,11 +1,11 @@
use fluence::fce; use fluence::marine;
use fluence::module_manifest; use fluence::module_manifest;
module_manifest!(); module_manifest!();
fn main() {} fn main() {}
#[fce] #[marine]
fn simple_range_list(start: i64, step: u32, n: u32) -> Vec<i64> { fn simple_range_list(start: i64, step: u32, n: u32) -> Vec<i64> {
let mut result: Vec<i64> = Vec::new(); let mut result: Vec<i64> = Vec::new();
let stop = start - n as i64; let stop = start - n as i64;