diff --git a/tooling-e2e-tests/ts_sdk_tests.sh b/tooling-e2e-tests/ts_sdk_tests.sh index 98b42527..fe283c89 100755 --- a/tooling-e2e-tests/ts_sdk_tests.sh +++ b/tooling-e2e-tests/ts_sdk_tests.sh @@ -35,6 +35,9 @@ scenario() { RELAYER_URL=${RELAYER_URL} \ TESTNET_PRIVATE_KEY=${TS_SDK_PRIVATE_KEY} \ TOKEN_CONTRACT_ADDRESSES=${TOKEN_CONTRACT_ADDRESSES} \ + CRYPTO_CLIENT_TYPE=${CRYPTO_CLIENT_TYPE:-"wasm-full"} \ + PROVER_SERVER_URL=${PROVER_SERVER_URL:-""} \ + CHECK_NITRO_ATTESTATION=${CHECK_NITRO_ATTESTATION:-"false"} \ pnpm playwright test --config ${PLAYWRIGHT_CONFIG} ${PLAYWRIGHT_SHARDS} cd "${ROOT_DIR}" diff --git a/ts/shielder-sdk-tests/playwright.multithreaded.config.mjs b/ts/shielder-sdk-tests/playwright.multithreaded.config.mjs index bae840b0..88ebd55a 100644 --- a/ts/shielder-sdk-tests/playwright.multithreaded.config.mjs +++ b/ts/shielder-sdk-tests/playwright.multithreaded.config.mjs @@ -6,6 +6,7 @@ export default defineConfig({ ...baseConfig, webServer: { ...baseConfig.webServer, - command: "VITE_PUBLIC_THREADS=max pnpm vite" + command: + "VITE_CRYPTO_CLIENT_TYPE=${CRYPTO_CLIENT_TYPE} VITE_PROVER_SERVER_URL=${PROVER_SERVER_URL} VITE_CHECK_NITRO_ATTESTATION=${CHECK_NITRO_ATTESTATION} VITE_PUBLIC_THREADS=max pnpm vite" } }); diff --git a/ts/shielder-sdk-tests/playwright.singlethreaded.config.mjs b/ts/shielder-sdk-tests/playwright.singlethreaded.config.mjs index 316e29ea..bd0e307b 100644 --- a/ts/shielder-sdk-tests/playwright.singlethreaded.config.mjs +++ b/ts/shielder-sdk-tests/playwright.singlethreaded.config.mjs @@ -6,6 +6,7 @@ export default defineConfig({ ...baseConfig, webServer: { ...baseConfig.webServer, - command: "VITE_PUBLIC_THREADS=1 pnpm vite" + command: + "VITE_CRYPTO_CLIENT_TYPE=${CRYPTO_CLIENT_TYPE} VITE_PROVER_SERVER_URL=${PROVER_SERVER_URL} VITE_CHECK_NITRO_ATTESTATION=${CHECK_NITRO_ATTESTATION} VITE_PUBLIC_THREADS=1 pnpm vite" } }); diff --git a/ts/shielder-sdk-tests/tests/envConfig.ts b/ts/shielder-sdk-tests/tests/envConfig.ts index 017ffc82..1b047eeb 100644 --- a/ts/shielder-sdk-tests/tests/envConfig.ts +++ b/ts/shielder-sdk-tests/tests/envConfig.ts @@ -28,6 +28,19 @@ export const tokenContractAddresses = process.env.TOKEN_CONTRACT_ADDRESSES : (() => { throw new Error("TOKEN_CONTRACT_ADDRESSES env not defined"); })(); +export const cryptoClientType = process.env.CRYPTO_CLIENT_TYPE + ? (process.env.CRYPTO_CLIENT_TYPE as "wasm-full" | "wasm-light") + : (() => { + throw new Error("CRYPTO_CLIENT_TYPE env not defined"); + })(); +export const proverServerUrl = + process.env.PROVER_SERVER_URL ?? + (() => { + throw new Error("PROVER_SERVER_URL env not defined"); + })(); +export const checkNitroAttestation = + process.env.CHECK_NITRO_ATTESTATION === "true" || + (cryptoClientType === "wasm-light" ? true : false); export const getChainConfig = () => { return { diff --git a/ts/shielder-sdk-tests/web/EntryPoint.tsx b/ts/shielder-sdk-tests/web/EntryPoint.tsx index f234b070..c4b946f9 100644 --- a/ts/shielder-sdk-tests/web/EntryPoint.tsx +++ b/ts/shielder-sdk-tests/web/EntryPoint.tsx @@ -9,20 +9,17 @@ import { type ShielderClientConfig } from "@cardinal-cryptography/shielder-sdk"; import type { CryptoClient } from "@cardinal-cryptography/shielder-sdk-crypto"; -import { initWasmWorker } from "@cardinal-cryptography/shielder-sdk-crypto-wasm"; -// import { initWasmWorker } from "@cardinal-cryptography/shielder-sdk-crypto-wasm-light"; import type { GlobalConfigFixture } from "@tests/playwrightFixtures/globalConfig"; import { type ShielderTestFixture, setupShielderTest } from "./fixtures/shielderTest/setup"; - -import newAccountParamsUrl from "@cardinal-cryptography/shielder-sdk-crypto-wasm/keys/new_account/params.bin?url"; -import newAccountPkUrl from "@cardinal-cryptography/shielder-sdk-crypto-wasm/keys/new_account/pk.bin?url"; -import depositParamsUrl from "@cardinal-cryptography/shielder-sdk-crypto-wasm/keys/deposit/params.bin?url"; -import depositPkUrl from "@cardinal-cryptography/shielder-sdk-crypto-wasm/keys/deposit/pk.bin?url"; -import withdrawParamsUrl from "@cardinal-cryptography/shielder-sdk-crypto-wasm/keys/withdraw/params.bin?url"; -import withdrawPkUrl from "@cardinal-cryptography/shielder-sdk-crypto-wasm/keys/withdraw/pk.bin?url"; +import { initFullWasm, initLightWasm } from "./cryptoClient"; +import { + checkNitroAttestation, + cryptoClientType, + proverServerUrl +} from "./envConfig"; declare global { interface Window { @@ -46,43 +43,19 @@ declare global { } } -async function fetchArrayBuffer(url: string): Promise { - return await fetch(url).then((r) => r.bytes()); -} - function EntryPoint() { useEffect(() => { - const initialize = async () => { - const newAccountParams = await fetchArrayBuffer(newAccountParamsUrl); - const newAccountPk = await fetchArrayBuffer(newAccountPkUrl); - const depositParams = await fetchArrayBuffer(depositParamsUrl); - const depositPk = await fetchArrayBuffer(depositPkUrl); - const withdrawParams = await fetchArrayBuffer(withdrawParamsUrl); - const withdrawPk = await fetchArrayBuffer(withdrawPkUrl); + const initialize = () => { // test fixtures initialization window.testFixtures = window.testFixtures || {}; window.testFixtures.setupHappyTest = setupShielderTest; // Wasm crypto client initialization window.wasmCryptoClient = window.wasmCryptoClient || {}; - window.wasmCryptoClient.cryptoClient = initWasmWorker( - "multi", - { - paramsBuf: newAccountParams, - pkBuf: newAccountPk - }, - { - paramsBuf: depositParams, - pkBuf: depositPk - }, - { - paramsBuf: withdrawParams, - pkBuf: withdrawPk - } - ); - // window.wasmCryptoClient.cryptoClient = initWasmWorker( - // "http://51.20.132.7:3000", - // true - // ); + console.log("Initializing crypto client with type:", cryptoClientType); + window.wasmCryptoClient.cryptoClient = + cryptoClientType === "wasm-full" + ? initFullWasm() + : initLightWasm(proverServerUrl, checkNitroAttestation); // Expose shielder utilities window.shielder = window.shielder || {}; window.shielder.createShielderClient = createShielderClient; diff --git a/ts/shielder-sdk-tests/web/cryptoClient.ts b/ts/shielder-sdk-tests/web/cryptoClient.ts new file mode 100644 index 00000000..235649a0 --- /dev/null +++ b/ts/shielder-sdk-tests/web/cryptoClient.ts @@ -0,0 +1,46 @@ +import newAccountParamsUrl from "@cardinal-cryptography/shielder-sdk-crypto-wasm/keys/new_account/params.bin?url"; +import newAccountPkUrl from "@cardinal-cryptography/shielder-sdk-crypto-wasm/keys/new_account/pk.bin?url"; +import depositParamsUrl from "@cardinal-cryptography/shielder-sdk-crypto-wasm/keys/deposit/params.bin?url"; +import depositPkUrl from "@cardinal-cryptography/shielder-sdk-crypto-wasm/keys/deposit/pk.bin?url"; +import withdrawParamsUrl from "@cardinal-cryptography/shielder-sdk-crypto-wasm/keys/withdraw/params.bin?url"; +import withdrawPkUrl from "@cardinal-cryptography/shielder-sdk-crypto-wasm/keys/withdraw/pk.bin?url"; + +import { initWasmWorker as initFullWasmWorker } from "@cardinal-cryptography/shielder-sdk-crypto-wasm"; + +import { initWasmWorker as initLightWasmWorker } from "@cardinal-cryptography/shielder-sdk-crypto-wasm-light"; + +async function fetchArrayBuffer(url: string): Promise { + return await fetch(url).then((r) => r.bytes()); +} + +export async function initFullWasm() { + const newAccountParams = await fetchArrayBuffer(newAccountParamsUrl); + const newAccountPk = await fetchArrayBuffer(newAccountPkUrl); + const depositParams = await fetchArrayBuffer(depositParamsUrl); + const depositPk = await fetchArrayBuffer(depositPkUrl); + const withdrawParams = await fetchArrayBuffer(withdrawParamsUrl); + const withdrawPk = await fetchArrayBuffer(withdrawPkUrl); + console.log("Full Wasm crypto client initialized with params and keys"); + return initFullWasmWorker( + "multi", + { + paramsBuf: newAccountParams, + pkBuf: newAccountPk + }, + { + paramsBuf: depositParams, + pkBuf: depositPk + }, + { + paramsBuf: withdrawParams, + pkBuf: withdrawPk + } + ); +} + +export async function initLightWasm( + proverServerUrl: string, + withoutAttestation: boolean +) { + return initLightWasmWorker(proverServerUrl, withoutAttestation); +} diff --git a/ts/shielder-sdk-tests/web/envConfig.ts b/ts/shielder-sdk-tests/web/envConfig.ts new file mode 100644 index 00000000..841d43ff --- /dev/null +++ b/ts/shielder-sdk-tests/web/envConfig.ts @@ -0,0 +1,5 @@ +export const cryptoClientType: "wasm-full" | "wasm-light" = + import.meta.env.VITE_CRYPTO_CLIENT_TYPE || "wasm-full"; +export const proverServerUrl = import.meta.env.VITE_PROVER_SERVER_URL || ""; +export const checkNitroAttestation = + import.meta.env.VITE_CHECK_NITRO_ATTESTATION === "true"; diff --git a/ts/shielder-sdk-tests/web/vite-env.d.ts b/ts/shielder-sdk-tests/web/vite-env.d.ts new file mode 100644 index 00000000..d25823c9 --- /dev/null +++ b/ts/shielder-sdk-tests/web/vite-env.d.ts @@ -0,0 +1,12 @@ +/// + +interface ImportMetaEnv { + readonly VITE_CRYPTO_CLIENT_TYPE: "wasm-full" | "wasm-light"; + readonly VITE_PROVER_SERVER_URL: string; + readonly VITE_CHECK_NITRO_ATTESTATION: string; + readonly VITE_PUBLIC_THREADS: string; +} + +interface ImportMeta { + readonly env: ImportMetaEnv; +}