diff --git a/Cargo.lock b/Cargo.lock index d6d0d4860e..d1d949e6ae 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3059,6 +3059,7 @@ version = "0.1.5" dependencies = [ "actix-web", "anyhow", + "derivative", "e3-compute-provider", "hex", "reqwest", diff --git a/crates/program-server/Cargo.toml b/crates/program-server/Cargo.toml index 8b96c7e1e8..847c78911b 100644 --- a/crates/program-server/Cargo.toml +++ b/crates/program-server/Cargo.toml @@ -15,3 +15,4 @@ e3-compute-provider.workspace = true reqwest.workspace = true anyhow.workspace = true hex.workspace = true +derivative.workspace = true diff --git a/crates/program-server/src/types.rs b/crates/program-server/src/types.rs index 2b3e1bfac4..49c729fb14 100644 --- a/crates/program-server/src/types.rs +++ b/crates/program-server/src/types.rs @@ -5,6 +5,7 @@ // or FITNESS FOR A PARTICULAR PURPOSE. use anyhow::Result; +use derivative::Derivative; use serde::{Deserialize, Deserializer, Serialize, Serializer}; #[derive(Serialize, Deserialize, Debug)] @@ -23,12 +24,15 @@ pub struct ComputeRequest { pub callback_url: Option, } -#[derive(Serialize, Debug)] +#[derive(Derivative, Serialize)] +#[derivative(Debug)] pub struct WebhookPayload { pub e3_id: u64, #[serde(serialize_with = "serialize_as_hex")] + #[derivative(Debug = "ignore")] pub ciphertext: Vec, #[serde(serialize_with = "serialize_as_hex")] + #[derivative(Debug = "ignore")] pub proof: Vec, } diff --git a/examples/CRISP/Cargo.lock b/examples/CRISP/Cargo.lock index 05848091ff..ce1179f339 100644 --- a/examples/CRISP/Cargo.lock +++ b/examples/CRISP/Cargo.lock @@ -1963,6 +1963,7 @@ dependencies = [ "chrono", "clap", "config", + "derivative", "dialoguer", "dotenvy", "e3-compute-provider 0.1.5", diff --git a/examples/CRISP/Cargo.toml b/examples/CRISP/Cargo.toml index 7177a0e5d1..7cc68bf774 100644 --- a/examples/CRISP/Cargo.toml +++ b/examples/CRISP/Cargo.toml @@ -28,6 +28,7 @@ anyhow = { version = "=1.0.98" } actix-web = "=4.11.0" bincode = { version = "=1.3.3" } bytemuck = { version = "=1.23.1" } +derivative = "=2.2.0" eyre = "=0.6.12" env_logger = "=0.11.8" hex = { version = "=0.4.3" } diff --git a/examples/CRISP/client/package.json b/examples/CRISP/client/package.json index a4146af16c..3106ce5666 100644 --- a/examples/CRISP/client/package.json +++ b/examples/CRISP/client/package.json @@ -11,6 +11,7 @@ "scripts": { "cli": "pnpm sh ./scripts/cli.sh", "dev": "vite --no-open --host", + "dev-static": "NO_HOT=1 vite --no-open --host", "build": "tsc && vite build", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", "preview": "vite preview", diff --git a/examples/CRISP/client/vite.config.ts b/examples/CRISP/client/vite.config.ts index e85435a221..b50269281c 100644 --- a/examples/CRISP/client/vite.config.ts +++ b/examples/CRISP/client/vite.config.ts @@ -13,8 +13,8 @@ import topLevelAwait from 'vite-plugin-top-level-await' import path from 'path' import { nodePolyfills } from 'vite-plugin-node-polyfills' +process.env.NO_HOT && console.log('Running without HMR') // const development: boolean = !process.env.NODE_ENV || process.env.NODE_ENV === 'development' - export default defineConfig({ base: '/', define: { @@ -52,5 +52,6 @@ export default defineConfig({ open: true, // this sets a default port to 3000 port: 3000, + hmr: !process.env.NO_HOT, }, }) diff --git a/examples/CRISP/scripts/dev.sh b/examples/CRISP/scripts/dev.sh index e146ee53eb..ea5e5d2ec3 100755 --- a/examples/CRISP/scripts/dev.sh +++ b/examples/CRISP/scripts/dev.sh @@ -29,10 +29,12 @@ cleanup() { trap cleanup INT TERM +echo "DEV SCRIPT STARTING..." + pnpm concurrently \ -ks first \ - --names "ANVIL,DEPLOY,NODES" \ - --prefix-colors "blue,green,yellow" \ + --names "HARDHAT,DEPLOY" \ + --prefix-colors "blue,green" \ "cd packages/crisp-contracts && pnpm hardhat node" \ "./scripts/crisp_deploy.sh && ./scripts/dev_services.sh" diff --git a/examples/CRISP/scripts/dev_client.sh b/examples/CRISP/scripts/dev_client.sh index 1209f9ba9b..e78886cadc 100755 --- a/examples/CRISP/scripts/dev_client.sh +++ b/examples/CRISP/scripts/dev_client.sh @@ -2,6 +2,6 @@ set -euo pipefail -sleep 4 +echo "CLIENT SCRIPT RUNNING..." -(cd ./client && pnpm dev) +(cd ./client && pnpm dev-static) diff --git a/examples/CRISP/scripts/dev_services.sh b/examples/CRISP/scripts/dev_services.sh index 1a2b970b99..fb876a98df 100755 --- a/examples/CRISP/scripts/dev_services.sh +++ b/examples/CRISP/scripts/dev_services.sh @@ -5,5 +5,5 @@ set -euo pipefail concurrently -kr \ "./scripts/dev_cipher.sh" \ "./scripts/dev_program.sh" \ - "sleep 3 && ./scripts/dev_server.sh" \ + "wait-on tcp:13151 && ./scripts/dev_server.sh" \ "wait-on tcp:4000 && ./scripts/dev_client.sh" diff --git a/examples/CRISP/scripts/setup.sh b/examples/CRISP/scripts/setup.sh index 5256ca52ce..2428dd002f 100755 --- a/examples/CRISP/scripts/setup.sh +++ b/examples/CRISP/scripts/setup.sh @@ -4,6 +4,7 @@ set -e export CARGO_INCREMENTAL=1 +echo "SETUP..." echo "pnpm install" (cd ../../ && pnpm install --frozen-lockfile) echo "evm" @@ -19,4 +20,4 @@ if [[ ! -f ~/.cargo/bin/enclave ]]; then else echo "enclave CLI already installed, skipping build" fi -echo "Skipping circuit compilation - using pre-compiled circuits" \ No newline at end of file +echo "Skipping circuit compilation - using pre-compiled circuits" diff --git a/examples/CRISP/scripts/test_e2e.sh b/examples/CRISP/scripts/test_e2e.sh index dc17d06b1f..b188de1e15 100755 --- a/examples/CRISP/scripts/test_e2e.sh +++ b/examples/CRISP/scripts/test_e2e.sh @@ -7,10 +7,11 @@ if [ "$1" == "--ui" ]; then else # Use xvfb-run only on Linux systems if [[ "$OSTYPE" == "linux-gnu"* ]]; then - PLAYWRIGHT_CMD="pnpm synpress --headless && xvfb-run pnpm playwright test" + PLAYWRIGHT_CMD="pnpm synpress --headless && xvfb-run --auto-servernum --server-args=\"-screen 0 1280x960x24\" pnpm playwright test" else PLAYWRIGHT_CMD="pnpm synpress --headless && pnpm playwright test" fi fi -concurrently -krs first "./scripts/setup.sh && ./scripts/dev.sh" "wait-on http://localhost:3000 && ${PLAYWRIGHT_CMD} && sleep 3" +echo "TEST E2E SCRIPT STARTING..." +pnpm concurrently -krs first "./scripts/setup.sh && ./scripts/dev.sh" "wait-on tcp:3000 && sleep 20 && ${PLAYWRIGHT_CMD} && sleep 3" diff --git a/examples/CRISP/server/Cargo.toml b/examples/CRISP/server/Cargo.toml index 307c45a21c..45e606b10f 100644 --- a/examples/CRISP/server/Cargo.toml +++ b/examples/CRISP/server/Cargo.toml @@ -53,6 +53,7 @@ bincode.workspace = true serde.workspace = true serde_json.workspace = true eyre.workspace = true +derivative.workspace = true # Utility libraries bigdecimal = "=0.4.3" diff --git a/examples/CRISP/server/src/server/models.rs b/examples/CRISP/server/src/server/models.rs index 9c394398a6..0cb7b945d4 100644 --- a/examples/CRISP/server/src/server/models.rs +++ b/examples/CRISP/server/src/server/models.rs @@ -5,14 +5,18 @@ // or FITNESS FOR A PARTICULAR PURPOSE. use anyhow::Result; +use derivative::Derivative; use serde::{Deserialize, Deserializer, Serialize}; -#[derive(Deserialize, Debug)] +#[derive(Derivative, Deserialize)] +#[derivative(Debug)] pub struct WebhookPayload { pub e3_id: u64, #[serde(deserialize_with = "deserialize_hex_string")] + #[derivative(Debug = "ignore")] pub ciphertext: Vec, #[serde(deserialize_with = "deserialize_hex_string")] + #[derivative(Debug = "ignore")] pub proof: Vec, } @@ -132,7 +136,6 @@ pub struct E3StateLite { pub balance_threshold: String, } - #[derive(Debug, Deserialize, Serialize)] pub struct E3 { // Identifiers diff --git a/examples/CRISP/test/crisp.spec.ts b/examples/CRISP/test/crisp.spec.ts index 95e554920b..69f4e7bda5 100644 --- a/examples/CRISP/test/crisp.spec.ts +++ b/examples/CRISP/test/crisp.spec.ts @@ -15,7 +15,7 @@ async function runCliInit() { // Execute the command and wait for it to complete const output = execSync( "pnpm cli init --token-address 0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512 --balance-threshold 1000", - { encoding: "utf-8" } + { encoding: "utf-8" }, ); console.log("Command output:", output); return output; @@ -30,7 +30,7 @@ const { expect } = test; async function ensureHomePageLoaded(page: Page) { return await expect(page.locator("h4")).toHaveText( - "Coercion-Resistant Impartial Selection Protocol" + "Coercion-Resistant Impartial Selection Protocol", ); } @@ -44,7 +44,7 @@ test("CRISP smoke test", async ({ context, metamaskPage, basicSetup.walletPassword, - extensionId + extensionId, ); await runCliInit(); @@ -62,9 +62,9 @@ test("CRISP smoke test", async ({ await page.locator('a:has-text("Historic polls")').click(); await expect(page.locator("h1")).toHaveText("Historic polls"); await expect( - page.locator("[data-test-id='poll-0-0'] [data-test-id='poll-result-0'] h3") + page.locator("[data-test-id='poll-0-0'] [data-test-id='poll-result-0'] h3"), ).toHaveText("100%"); await expect( - page.locator("[data-test-id='poll-0-0'] [data-test-id='poll-result-1'] h3") + page.locator("[data-test-id='poll-0-0'] [data-test-id='poll-result-1'] h3"), ).toHaveText("0%"); }); diff --git a/scripts/run-crisp-test.sh b/scripts/run-crisp-test.sh new file mode 100755 index 0000000000..f13c1cccc1 --- /dev/null +++ b/scripts/run-crisp-test.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +echo "This helper script will clean your repository and run end-to-end tests for CRISP." +echo "WARNING: This will reset your current workspace. Ensure all changes are committed before proceeding." +echo "Press any key to continue or Ctrl+C to cancel..." + +read + +rm -rf * && git reset --hard HEAD && git submodule update --init --recursive && pnpm install && cd examples/CRISP && pnpm test:e2e "$@"