From edba58bcd4ad0150b12ea41707ddabc9a0ed6645 Mon Sep 17 00:00:00 2001 From: "Justin R. Evans" Date: Tue, 24 Sep 2024 11:11:19 -0400 Subject: [PATCH] feat: fetch and load masp params --- apps/namadillo/package.json | 2 +- apps/namadillo/scripts/proxies.json | 7 ++++++ apps/namadillo/scripts/startProxies.js | 30 ++------------------------ apps/namadillo/src/hooks/useSdk.tsx | 20 ++++++++++++++++- packages/sdk/src/masp.ts | 5 +++-- packages/shared/lib/src/sdk/mod.rs | 6 +++--- packages/shared/lib/src/sdk/mod.ts | 28 +++++++++++++----------- 7 files changed, 51 insertions(+), 47 deletions(-) create mode 100644 apps/namadillo/scripts/proxies.json diff --git a/apps/namadillo/package.json b/apps/namadillo/package.json index af441cf42..4432d80bd 100644 --- a/apps/namadillo/package.json +++ b/apps/namadillo/package.json @@ -45,7 +45,7 @@ "dev": "vite", "preview": "vite preview", "dev:local": "NODE_ENV=development NAMADA_INTERFACE_LOCAL=\"true\" yarn dev", - "dev:proxy": "NAMADA_INTERFACE_PROXY=true && ./scripts/start-proxies.sh && yarn dev:local", + "dev:proxy": "VITE_PROXY=true && ./scripts/start-proxies.sh && yarn dev:local", "build": "NODE_ENV=production && yarn wasm:build && vite build", "build:only": "NODE_ENV=production && vite build", "lint": "eslint src --ext .ts,.tsx", diff --git a/apps/namadillo/scripts/proxies.json b/apps/namadillo/scripts/proxies.json new file mode 100644 index 000000000..5ae62c966 --- /dev/null +++ b/apps/namadillo/scripts/proxies.json @@ -0,0 +1,7 @@ +[ + { + "alias": "MASP Params", + "url": "https://github.com/anoma/masp-mpc/releases/download/namada-trusted-setup/", + "proxyPort": 8010 + } +] diff --git a/apps/namadillo/scripts/startProxies.js b/apps/namadillo/scripts/startProxies.js index 361592dd2..f9b3f1fc0 100644 --- a/apps/namadillo/scripts/startProxies.js +++ b/apps/namadillo/scripts/startProxies.js @@ -1,34 +1,8 @@ const { exec } = require("child_process"); -require("dotenv").config(); -const { - NAMADA_INTERFACE_NAMADA_ALIAS = "Namada", - NAMADA_INTERFACE_NAMADA_URL, - NAMADA_INTERFACE_COSMOS_ALIAS = "Cosmos", - NAMADA_INTERFACE_COSMOS_URL, - NAMADA_INTERFACE_ETH_ALIAS = "Ethereum", - NAMADA_INTERFACE_ETH_URL, -} = process.env; +const proxiesJson = require("./proxies.json"); -const proxyConfigs = [ - { - alias: NAMADA_INTERFACE_NAMADA_ALIAS, - url: NAMADA_INTERFACE_NAMADA_URL, - proxyPort: 8010, - }, - { - alias: NAMADA_INTERFACE_COSMOS_ALIAS, - url: NAMADA_INTERFACE_COSMOS_URL, - proxyPort: 8011, - }, - { - alias: NAMADA_INTERFACE_ETH_ALIAS, - url: NAMADA_INTERFACE_ETH_URL, - proxyPort: 8012, - }, -]; - -proxyConfigs.forEach(({ alias, url, proxyPort }) => { +proxiesJson.forEach(({ alias, url, proxyPort }) => { if (url) { console.log(`Starting local-cors-proxy for ${alias}`); console.log(`-> ${url} proxied to http://localhost:${proxyPort}/proxy\n`); diff --git a/apps/namadillo/src/hooks/useSdk.tsx b/apps/namadillo/src/hooks/useSdk.tsx index 03b337913..f1e270dae 100644 --- a/apps/namadillo/src/hooks/useSdk.tsx +++ b/apps/namadillo/src/hooks/useSdk.tsx @@ -11,9 +11,15 @@ import { useEffect, useState, } from "react"; +import Proxies from "../../scripts/proxies.json"; export const SdkContext = createContext(undefined); +const { VITE_PROXY: isProxied } = import.meta.env; + +const paramsUrl = + isProxied ? `http://localhost:${Proxies[0].proxyPort}/proxy/` : undefined; + const initializeSdk = async (): Promise => { const { cryptoMemory } = await initSdk(); const store = getDefaultStore(); @@ -47,7 +53,19 @@ export const SdkProvider: FunctionComponent = ({ useEffect(() => { if (nativeToken.data) { - getSdkInstance().then((sdk) => setSdk(sdk)); + getSdkInstance().then((sdk) => { + setSdk(sdk); + const { masp } = sdk; + masp.hasMaspParams().then((hasMaspParams) => { + if (!hasMaspParams) { + return masp.loadMaspParams("").catch((e) => console.error(`${e}`)); + } + masp + .fetchAndStoreMaspParams(paramsUrl) + .then(() => masp.loadMaspParams("")) + .catch((e) => console.error(`${e}`)); + }); + }); } }, [nativeToken.data]); diff --git a/packages/sdk/src/masp.ts b/packages/sdk/src/masp.ts index b2ef620dd..ab5dfae03 100644 --- a/packages/sdk/src/masp.ts +++ b/packages/sdk/src/masp.ts @@ -21,10 +21,11 @@ export class Masp { /** * Fetch MASP parameters and store them in SDK * @async + * @param [url] - optional URL to override the default * @returns void */ - async fetchAndStoreMaspParams(): Promise { - return await SdkWasm.fetch_and_store_masp_params(); + async fetchAndStoreMaspParams(url?: string): Promise { + return await SdkWasm.fetch_and_store_masp_params(url); } /** diff --git a/packages/shared/lib/src/sdk/mod.rs b/packages/shared/lib/src/sdk/mod.rs index f2158f73e..b499afd64 100644 --- a/packages/shared/lib/src/sdk/mod.rs +++ b/packages/shared/lib/src/sdk/mod.rs @@ -71,8 +71,8 @@ impl Sdk { Ok(js_sys::Boolean::from(has.as_bool().unwrap()).into()) } - pub async fn fetch_and_store_masp_params() -> Result<(), JsValue> { - fetch_and_store_masp_params().await?; + pub async fn fetch_and_store_masp_params(url: Option) -> Result<(), JsValue> { + fetch_and_store_masp_params(url).await?; Ok(()) } @@ -495,5 +495,5 @@ extern "C" { #[wasm_bindgen(catch, js_name = "hasMaspParams")] async fn has_masp_params() -> Result; #[wasm_bindgen(catch, js_name = "fetchAndStoreMaspParams")] - async fn fetch_and_store_masp_params() -> Result; + async fn fetch_and_store_masp_params(url: Option) -> Result; } diff --git a/packages/shared/lib/src/sdk/mod.ts b/packages/shared/lib/src/sdk/mod.ts index fe460f988..ea536b982 100644 --- a/packages/shared/lib/src/sdk/mod.ts +++ b/packages/shared/lib/src/sdk/mod.ts @@ -8,11 +8,13 @@ export async function hasMaspParams(): Promise { ); } -export async function fetchAndStoreMaspParams(): Promise<[void, void, void]> { +export async function fetchAndStoreMaspParams( + url?: string +): Promise<[void, void, void]> { return Promise.all([ - fetchAndStore("masp-spend.params"), - fetchAndStore("masp-output.params"), - fetchAndStore("masp-convert.params"), + fetchAndStore("masp-spend.params", url), + fetchAndStore("masp-output.params", url), + fetchAndStore("masp-convert.params", url), ]); } @@ -24,17 +26,19 @@ export async function getMaspParams(): Promise<[unknown, unknown, unknown]> { ]); } -export async function fetchAndStore(params: string): Promise { - const data = await fetchParams(params); +export async function fetchAndStore( + params: string, + url?: string +): Promise { + const data = await fetchParams(params, url); await set(params, data); } -export async function fetchParams(params: string): Promise { - const path = - process.env.NAMADA_INTERFACE_MASP_PARAMS_PATH || - "https://github.com/anoma/masp-mpc/releases/download/namada-trusted-setup/"; - - return fetch(`${path}${params}`) +export async function fetchParams( + params: string, + url: string = "https://github.com/anoma/masp-mpc/releases/download/namada-trusted-setup/" +): Promise { + return fetch(`${url}${params}`) .then((response) => response.arrayBuffer()) .then((ab) => new Uint8Array(ab)); }