Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ dump

fuzzing-code-coverage

*.wasm
./*.wasm
stats
!uniond/vendor/**/*.wasm
_
Expand Down
14 changes: 14 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions cosmwasm/cosmwasm.nix
Original file line number Diff line number Diff line change
Expand Up @@ -1051,6 +1051,10 @@ _: {
access-manager = crane.buildWasmContract "cosmwasm/access-manager" { };
access-managed-example = crane.buildWasmContract "e2e/access-managed-example" { };

ucs03-zkgm-packet = crane.buildWasm "lib/ucs03-zkgm-packet" {
features = [ "serde" ];
};

cw20-base = crane.buildWasmContract "cosmwasm/cw20-base" { };

cw20-wrapped-tokenfactory = crane.buildWasmContract "cosmwasm/cw20-wrapped-tokenfactory" { };
Expand Down Expand Up @@ -1127,6 +1131,7 @@ _: {
lst-staker
access-managed-example
proxy-account-factory
ucs03-zkgm-packet
;
cosmwasm-scripts =
{
Expand Down
5 changes: 5 additions & 0 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -555,6 +555,10 @@
yq
perl
])
++ [
pkgsUnstable.wasm-bindgen-cli_0_2_100
pkgs.wasm-pack
]
++ (with pkgsUnstable; [
bun
pnpm_10
Expand All @@ -569,6 +573,7 @@
nodePackages_latest."@tailwindcss/language-server"
nodePackages_latest.typescript-language-server
nodePackages_latest.vscode-langservers-extracted
binaryen
])
++ (with pkgs; [
wasm-tools
Expand Down
8 changes: 7 additions & 1 deletion lib/ucs03-zkgm-packet/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,19 @@ repository = { workspace = true }
[lints]
workspace = true

[lib]
crate-type = ["cdylib"]

[dependencies]
alloy-sol-types = { workspace = true }
embed-commit = { workspace = true }
enumorph = { workspace = true }
hex-literal = { workspace = true }
serde = { workspace = true, optional = true, features = ["derive"] }
ucs03-zkgm = { workspace = true }
serde-wasm-bindgen = "0.6.5"
ucs03-zkgm = { workspace = true, features = ["library"] }
unionlabs-primitives = { workspace = true }
wasm-bindgen = "=0.2.100"

[features]
default = ["serde"]
Expand Down
8 changes: 8 additions & 0 deletions lib/ucs03-zkgm-packet/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ use std::error::Error;
use alloy_sol_types::{SolValue, abi::TokenSeq};
use ucs03_zkgm::com::{TAG_ACK_FAILURE, TAG_ACK_SUCCESS};
use unionlabs_primitives::{Bytes, H256, U256};
use wasm_bindgen::{JsValue, prelude::wasm_bindgen};

pub use crate::{
batch::{Batch, BatchAck, BatchShape},
Expand Down Expand Up @@ -134,6 +135,13 @@ impl Instruction {
}
}

#[wasm_bindgen]
pub fn decode_packet(packet: Vec<u8>) -> core::result::Result<JsValue, JsValue> {
let packet = ZkgmPacket::decode(packet).map_err(|err| JsValue::from_str(&err.to_string()))?;

Ok(serde_wasm_bindgen::to_value(&packet)?)
}

#[cfg(test)]
mod tests {
use hex_literal::hex;
Expand Down
62 changes: 62 additions & 0 deletions tools/rust/buildWasm.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
{
buildWorkspaceMember,
crateCargoToml,
pkgs,
pkgsUnstable,
lib,
}:
let
CARGO_BUILD_TARGET = "wasm32-unknown-unknown";

dashesToUnderscores = builtins.replaceStrings [ "-" ] [ "_" ];

mkFeaturesString =
features: if features == null then "" else (lib.concatMapStrings (feature: "-${feature}") features);

cargoBuildInstallPhase =
{
crateDirFromRoot,
contractFileNameWithoutExt,
}:
''
${pkgs.binaryen}/bin/wasm-opt target/wasm32-unknown-unknown/wasm-release/${contractFileNameWithoutExt}.wasm -Oz -o ${(crateCargoToml crateDirFromRoot).package.name}

${pkgs.lib.meta.getExe pkgsUnstable.wasm-bindgen-cli_0_2_100} ${(crateCargoToml crateDirFromRoot).package.name} --out-dir $out --typescript --target web
'';
cargoBuildExtraArgs =
features:
"--no-default-features --lib ${
if features != null then lib.concatStringsSep " " ([ "--features" ] ++ features) else ""
}";
# TODO: Add back -C opt-level=z once https://github.com/CosmWasm/cosmwasm/issues/2557 is resolved
mkRustflags = "-C opt-level=z -C link-arg=-s -C target-cpu=mvp -C passes=adce,loop-deletion -Zlocation-detail=none";
in
crateDirFromRoot:
{
features ? null,
extraBuildInputs ? [ ],
extraNativeBuildInputs ? [ ],
}:
let
packageName = "${(crateCargoToml crateDirFromRoot).package.name}${mkFeaturesString features}";

contract-basename = dashesToUnderscores (crateCargoToml crateDirFromRoot).package.name;

all = buildWorkspaceMember crateDirFromRoot {
inherit extraBuildInputs extraNativeBuildInputs;
buildStdTarget = CARGO_BUILD_TARGET;
pnameSuffix = mkFeaturesString features;

cargoBuildExtraArgs = cargoBuildExtraArgs features;
rustflags = mkRustflags;

cargoBuildInstallPhase = cargoBuildInstallPhase {
inherit crateDirFromRoot;
contractFileNameWithoutExt = contract-basename;
};
extraEnv = {
CARGO_PROFILE = "wasm-release";
};
};
in
all.${packageName}
6 changes: 0 additions & 6 deletions tools/rust/buildWasmContract.nix
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,6 @@
crateCargoToml,
pkgs,
lib,
craneLib,
rust,
dbg,
gitRev,
}:
let
CARGO_BUILD_TARGET = "wasm32-unknown-unknown";
Expand Down Expand Up @@ -37,7 +33,6 @@ let

cargoBuildInstallPhase =
{
features,
contractFileNameWithoutExt,
checks,
maxSize,
Expand Down Expand Up @@ -90,7 +85,6 @@ let

cargoBuildInstallPhase = cargoBuildInstallPhase {
inherit
features
checks
maxSize
;
Expand Down
16 changes: 12 additions & 4 deletions tools/rust/crane.nix
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
perSystem =
args@{
pkgs,
pkgsUnstable,
rust,
dbg,
gitRev,
Expand Down Expand Up @@ -630,10 +631,16 @@
crateCargoToml
pkgs
lib
rust
craneLib
dbg
gitRev
;
};

buildWasm = import ./buildWasm.nix {
inherit
buildWorkspaceMember
crateCargoToml
pkgs
pkgsUnstable
lib
;
};

Expand All @@ -643,6 +650,7 @@
cargoWorkspaceSrc
buildWorkspaceMember
buildWasmContract
buildWasm
allCargoTomls
;
lib = craneLib;
Expand Down
Loading