From aa3a6c643ca9067c89b09ba0617bc0f7f85be83e Mon Sep 17 00:00:00 2001 From: owl352 Date: Wed, 25 Jun 2025 22:57:00 +0300 Subject: [PATCH] initial commit --- .pnp.cjs | 16 ++++- package.json | 3 +- packages/wasm-drive-verify/Cargo.toml | 18 ++--- packages/wasm-drive-verify/build.sh | 90 ++++++++++++++++--------- packages/wasm-drive-verify/package.json | 8 ++- yarn.lock | 6 ++ 6 files changed, 92 insertions(+), 49 deletions(-) diff --git a/.pnp.cjs b/.pnp.cjs index 70a0ed4a75d..777540e7e04 100755 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -85,6 +85,10 @@ const RAW_RUNTIME_STATE = "name": "@dashevo/wasm-dpp",\ "reference": "workspace:packages/wasm-dpp"\ },\ + {\ + "name": "wasm-drive-verify",\ + "reference": "workspace:packages/wasm-drive-verify"\ + },\ {\ "name": "@dashevo/withdrawals-contract",\ "reference": "workspace:packages/withdrawals-contract"\ @@ -112,7 +116,8 @@ const RAW_RUNTIME_STATE = ["@dashevo/wasm-dpp", ["workspace:packages/wasm-dpp"]],\ ["@dashevo/withdrawals-contract", ["workspace:packages/withdrawals-contract"]],\ ["dash", ["workspace:packages/js-dash-sdk"]],\ - ["dashmate", ["workspace:packages/dashmate"]]\ + ["dashmate", ["workspace:packages/dashmate"]],\ + ["wasm-drive-verify", ["workspace:packages/wasm-drive-verify"]]\ ],\ "fallbackPool": [\ ],\ @@ -19953,6 +19958,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["wasm-drive-verify", [\ + ["workspace:packages/wasm-drive-verify", {\ + "packageLocation": "./packages/wasm-drive-verify/",\ + "packageDependencies": [\ + ["wasm-drive-verify", "workspace:packages/wasm-drive-verify"]\ + ],\ + "linkType": "SOFT"\ + }]\ + ]],\ ["wasm-x11-hash", [\ ["npm:0.0.2", {\ "packageLocation": "./.yarn/cache/wasm-x11-hash-npm-0.0.2-e64121836c-8e919a179d.zip/node_modules/wasm-x11-hash/",\ diff --git a/package.json b/package.json index 1969ed4b4cd..418c3ba7a46 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,8 @@ "packages/wasm-dpp", "packages/withdrawals-contract", "packages/token-history-contract", - "packages/keyword-search-contract" + "packages/keyword-search-contract", + "packages/wasm-drive-verify" ], "resolutions": { "pbkdf2": "^3.1.3", diff --git a/packages/wasm-drive-verify/Cargo.toml b/packages/wasm-drive-verify/Cargo.toml index 617471f2100..d43ea145f43 100644 --- a/packages/wasm-drive-verify/Cargo.toml +++ b/packages/wasm-drive-verify/Cargo.toml @@ -12,7 +12,7 @@ crate-type = ["cdylib", "rlib"] [dependencies] drive = { path = "../rs-drive", default-features = false, features = ["verify"] } dpp = { path = "../rs-dpp", default-features = false, features = [ - "state-transitions", + "state-transitions", "system_contracts", "data-contract-serde-conversion", "data-contract-json-conversion", @@ -42,10 +42,10 @@ bincode = { version = "2.0.0-rc.3" } wasm-bindgen-test = "0.3.39" criterion = { version = "0.5", default-features = false, features = [] } dpp = { path = "../rs-dpp", default-features = false, features = [ - "state-transitions", - "random-public-keys", - "random-identities", - "random-documents", + "state-transitions", + "random-public-keys", + "random-identities", + "random-documents", "system_contracts", "data-contract-serde-conversion", "data-contract-json-conversion", @@ -75,14 +75,6 @@ governance = [] transitions = [] debug_logs = [] -[profile.release] -# Optimize for small code size -opt-level = "z" -lto = true -codegen-units = 1 -strip = true -panic = "abort" - [[bench]] name = "simple_benchmarks" harness = false diff --git a/packages/wasm-drive-verify/build.sh b/packages/wasm-drive-verify/build.sh index 63528a3a9b4..feefc3b44c2 100755 --- a/packages/wasm-drive-verify/build.sh +++ b/packages/wasm-drive-verify/build.sh @@ -9,48 +9,74 @@ echo "Building wasm-drive-verify..." # Build the Rust WASM target echo "Building Rust WASM target..." -cargo build --target wasm32-unknown-unknown --release +cargo build --target wasm32-unknown-unknown --release \ + --config 'profile.release.panic="abort"' \ + --config 'profile.release.strip=true' \ + --config 'profile.release.debug=false' \ + --config 'profile.release.incremental=false' \ + --config 'profile.release.lto=true' \ + --config 'profile.release.opt-level="z"' \ + --config 'profile.release.codegen-units=1' \ # Create pkg directory if it doesn't exist mkdir -p pkg +if command -v wasm-snip &> /dev/null; then + wasm-snip ../../target/wasm32-unknown-unknown/release/wasm_drive_verify.wasm -o ../../target/wasm32-unknown-unknown/release/wasm_drive_verify.wasm --snip-rust-fmt-code --snip-rust-panicking-code +fi + # Run wasm-bindgen echo "Running wasm-bindgen..." if ! command -v wasm-bindgen &> /dev/null; then echo "Error: 'wasm-bindgen' not found. Install via 'cargo install wasm-bindgen-cli'." >&2 exit 1 fi -wasm-bindgen ../../target/wasm32-unknown-unknown/release/wasm_drive_verify.wasm \ - --out-dir pkg \ - --target web - -# Create proper package.json if it doesn't exist or is incomplete -if [ ! -f pkg/package.json ] || ! grep -q '"name"' pkg/package.json; then - echo "Creating package.json..." - # Extract version from Cargo.toml - VERSION=$(grep -E '^version =' Cargo.toml | head -1 | sed -E 's/version = "([^"]+)"/\1/') - cat > pkg/package.json << EOF -{ - "name": "wasm-drive-verify", - "version": "$VERSION", - "description": "WASM bindings for Drive verify functions", - "main": "wasm_drive_verify.js", - "types": "wasm_drive_verify.d.ts", - "author": "Dash Core Group ", - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/dashpay/platform.git" - }, - "files": [ - "wasm_drive_verify_bg.wasm", - "wasm_drive_verify.js", - "wasm_drive_verify.d.ts", - "wasm_drive_verify_bg.wasm.d.ts" - ] -} -EOF +wasm-bindgen \ + --typescript \ + --out-dir=pkg \ + --target=web \ + --omit-default-module-path ../../target/wasm32-unknown-unknown/release/wasm_drive_verify.wasm + +if command -v wasm-opt &> /dev/null; then + echo "Optimizing wasm using Binaryen" + wasm-opt \ + --code-folding \ + --const-hoisting \ + --abstract-type-refining \ + --dce \ + --strip-producers \ + -Oz \ + --generate-global-effects \ + --enable-bulk-memory \ + --enable-nontrapping-float-to-int \ + -tnh \ + --flatten \ + --rereloop \ + -Oz \ + --converge \ + --vacuum \ + --dce \ + --gsi \ + --inlining-optimizing \ + --merge-blocks \ + --simplify-locals \ + --optimize-added-constants \ + --optimize-casts \ + --optimize-instructions \ + --optimize-stack-ir \ + --remove-unused-brs \ + --remove-unused-module-elements \ + --remove-unused-names \ + --remove-unused-types \ + --post-emscripten \ + -Oz \ + -Oz \ + "pkg/wasm_drive_verify_bg.wasm" \ + -o \ + "pkg/wasm_drive_verify_bg.wasm" +else + echo "wasm-opt command not found. Skipping wasm optimization." fi echo "Build complete!" -echo "Output files are in the pkg/ directory" \ No newline at end of file +echo "Output files are in the pkg/ directory" diff --git a/packages/wasm-drive-verify/package.json b/packages/wasm-drive-verify/package.json index 7c175a58976..f9827a8198c 100644 --- a/packages/wasm-drive-verify/package.json +++ b/packages/wasm-drive-verify/package.json @@ -1,6 +1,8 @@ { "name": "wasm-drive-verify", - "collaborators": ["Dash Core Group "], + "collaborators": [ + "Dash Core Group " + ], "version": "1.8.0", "license": "MIT", "description": "WASM bindings for Drive verify functions", @@ -9,6 +11,8 @@ "url": "https://github.com/dashpay/platform.git" }, "type": "module", + "main": "pkg/wasm_drive_verify.js", + "types": "pkg/wasm_drive_verify.d.ts", "exports": { ".": { "import": "./dist/index.js", @@ -52,4 +56,4 @@ "build": "./build.sh", "build:modules": "./scripts/build-modules.sh" } -} \ No newline at end of file +} diff --git a/yarn.lock b/yarn.lock index ed7c47ccb44..63f03c69aeb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16284,6 +16284,12 @@ __metadata: languageName: node linkType: hard +"wasm-drive-verify@workspace:packages/wasm-drive-verify": + version: 0.0.0-use.local + resolution: "wasm-drive-verify@workspace:packages/wasm-drive-verify" + languageName: unknown + linkType: soft + "wasm-x11-hash@npm:~0.0.2": version: 0.0.2 resolution: "wasm-x11-hash@npm:0.0.2"