1
0
Fork 0
mirror of synced 2025-09-23 12:18:44 +00:00
This commit is contained in:
schaeff 2021-10-29 14:58:21 +02:00
parent a58f77ddfc
commit 29ecd96b1b
3 changed files with 34 additions and 9 deletions

23
zokrates_js/Cargo.lock generated
View file

@ -696,6 +696,12 @@ version = "0.22.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aaf91faf136cb47367fa430cd46e37a788775e7fa104f8b4bcb3861dc389b724"
[[package]]
name = "half"
version = "1.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
[[package]]
name = "hashbrown"
version = "0.11.2"
@ -1229,6 +1235,16 @@ dependencies = [
"serde_derive",
]
[[package]]
name = "serde_cbor"
version = "0.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5"
dependencies = [
"half",
"serde",
]
[[package]]
name = "serde_derive"
version = "1.0.114"
@ -1569,10 +1585,9 @@ version = "0.1.0"
[[package]]
name = "zokrates_core"
version = "0.6.6"
version = "0.6.7"
dependencies = [
"bellman_ce",
"bincode",
"cfg-if 0.1.10",
"csv",
"ff_ce 0.9.0",
@ -1588,6 +1603,7 @@ dependencies = [
"reduce",
"regex",
"serde",
"serde_cbor",
"serde_json",
"typed-arena",
"zokrates_common",
@ -1632,12 +1648,13 @@ dependencies = [
[[package]]
name = "zokrates_js"
version = "1.0.35"
version = "1.0.36"
dependencies = [
"console_error_panic_hook",
"js-sys",
"serde",
"serde_json",
"typed-arena",
"wasm-bindgen",
"zokrates_abi",
"zokrates_common",

View file

@ -12,6 +12,7 @@ js-sys = "0.3.33"
serde = { version = "^1.0.59", features = ["derive"] }
serde_json = "1.0"
wasm-bindgen = { version = "0.2.46", features = ["serde-serialize"] }
typed-arena = "1.4.1"
zokrates_core = { path = "../zokrates_core", features = ["wasm", "bellman"], default-features = false }
zokrates_common = { path = "../zokrates_common" }
zokrates_field = { path = "../zokrates_field", default-features = false, features = ["bellman"] }

View file

@ -2,6 +2,7 @@ use serde::{Deserialize, Serialize};
use serde_json::to_string_pretty;
use std::io::Cursor;
use std::path::PathBuf;
use typed_arena::Arena;
use wasm_bindgen::prelude::*;
use zokrates_abi::{parse_strict, Decode, Encode, Inputs};
use zokrates_common::Resolver;
@ -41,13 +42,15 @@ pub struct ComputationResult {
fn deserialize_program(value: &[u8]) -> Result<ir::Prog<Bn128Field>, JsValue> {
let prog = ir::ProgEnum::deserialize(value).map_err(|err| JsValue::from_str(&err))?;
match prog {
ir::ProgEnum::Bn128Program(p) => Ok(p),
ir::ProgEnum::Bn128Program(p) => Ok(p.collect()),
_ => Err(JsValue::from_str("Unsupported binary")),
}
}
#[inline]
fn serialize_program(program: &ir::Prog<Bn128Field>) -> Vec<u8> {
fn serialize_program<I: IntoIterator<Item = ir::Statement<Bn128Field>>>(
program: ir::ProgIterator<Bn128Field, I>,
) -> Vec<u8> {
let mut buffer = Cursor::new(vec![]);
program.serialize(&mut buffer);
buffer.into_inner()
@ -106,11 +109,15 @@ pub fn compile(
let config: CompileConfig = config.into_serde().unwrap_or_default();
let fmt_error = |e: &CompileError| format!("{}:{}", e.file().display(), e.value());
let artifacts: CompilationArtifacts<Bn128Field> = core_compile(
let arena = Arena::new();
let artifacts: CompilationArtifacts<Bn128Field, _> = core_compile(
source.as_string().unwrap(),
PathBuf::from(location.as_string().unwrap()),
Some(&resolver),
&config,
config,
&arena,
)
.map_err(|ce| {
JsValue::from_str(
@ -123,8 +130,8 @@ pub fn compile(
})?;
let result = CompilationResult {
program: serialize_program(artifacts.prog()),
abi: to_string_pretty(artifacts.abi()).unwrap(),
program: serialize_program(artifacts.prog()),
};
Ok(JsValue::from_serde(&result).unwrap())
@ -146,7 +153,7 @@ pub fn compute_witness(program: &[u8], abi: JsValue, args: JsValue) -> Result<Js
let interpreter = ir::Interpreter::default();
let witness = interpreter
.execute(&program_flattened, &inputs.encode())
.execute(program_flattened, &inputs.encode())
.map_err(|err| JsValue::from_str(&format!("Execution failed: {}", err)))?;
let return_values: serde_json::Value =