From 2b64fb223803559f1ca904d8253037f1fcbc0e1c Mon Sep 17 00:00:00 2001 From: rhaoio Date: Thu, 22 Aug 2024 00:13:57 +1000 Subject: [PATCH 1/3] update to use nonce --- package-lock.json | 4 +- package.json | 2 +- src/commands/proverProfile.ts | 2 +- src/query.ts | 282 +++++++++++++++++++++------------- src/task.ts | 48 +++--- 5 files changed, 207 insertions(+), 131 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0022697..ed306af 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "ethers": "^6.2.3", "form-data": "^4.0.0", "yargs": "17.6.2", - "zkwasm-service-helper": "git+https://github.com/DelphinusLab/zkWasm-service-helper.git" + "zkwasm-service-helper": "git+https://github.com/DelphinusLab/zkWasm-service-helper.git#zkwas-323" }, "bin": { "zkwasm-service-cli": "dist/index.js" @@ -3916,7 +3916,7 @@ }, "node_modules/zkwasm-service-helper": { "version": "1.0.0", - "resolved": "git+ssh://git@github.com/DelphinusLab/zkWasm-service-helper.git#a8eec55ad57914d848309210a301dd7725c4f6b1", + "resolved": "git+ssh://git@github.com/DelphinusLab/zkWasm-service-helper.git#410eca6a5af41e6032db21e4b26d889da4bd3c72", "dependencies": { "@types/bn.js": "^5.1.1", "axios": "^1.2.1", diff --git a/package.json b/package.json index 584d947..4fed71d 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "ethers": "^6.2.3", "form-data": "^4.0.0", "yargs": "17.6.2", - "zkwasm-service-helper": "git+https://github.com/DelphinusLab/zkWasm-service-helper.git" + "zkwasm-service-helper": "git+https://github.com/DelphinusLab/zkWasm-service-helper.git#zkwas-323" }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1", diff --git a/src/commands/proverProfile.ts b/src/commands/proverProfile.ts index c560ed3..c3d9f1f 100644 --- a/src/commands/proverProfile.ts +++ b/src/commands/proverProfile.ts @@ -34,7 +34,7 @@ export const handler = async (argv: Arguments) => { let stats = helper .queryNodeStatistics(args) .then((res) => { - return res; + return res.data; }) .catch((err) => { console.log("Error fetching Current node statistics", err); diff --git a/src/query.ts b/src/query.ts index 421544c..8aa75de 100644 --- a/src/query.ts +++ b/src/query.ts @@ -1,57 +1,64 @@ import { - ZkWasmServiceHelper, - ZkWasmUtil, - QueryParams, - UserQueryParams, - TxHistoryQueryParams, - PaginationResult, - Task, - NodeStatisticsQueryParams, - NodeStatistics, + ZkWasmServiceHelper, + ZkWasmUtil, + QueryParams, + UserQueryParams, + TxHistoryQueryParams, + PaginationResult, + Task, + NodeStatisticsQueryParams, + NodeStatistics, } from "zkwasm-service-helper"; import BN from "bn.js"; -export async function queryTask(taskid: string, resturl: string, enable_logs : boolean = true) : Promise { - let helper = new ZkWasmServiceHelper(resturl, "", "", enable_logs); - let args: QueryParams = { - id: taskid!, - user_address: "", - md5: "", - tasktype: "", - taskstatus: "", - }; - return helper.loadTasks(args).then((res) => { +export async function queryTask( + taskid: string, + resturl: string, + enable_logs: boolean = true +): Promise { + let helper = new ZkWasmServiceHelper(resturl, "", "", enable_logs); + let args: QueryParams = { + id: taskid!, + user_address: "", + md5: "", + tasktype: "", + taskstatus: "", + }; + return helper + .loadTasks(args) + .then((res) => { const tasks = res as PaginationResult; const task: Task = tasks.data[0]; let aggregate_proof = ZkWasmUtil.bytesToBN(task.proof); let instances = ZkWasmUtil.bytesToBN(task.instances); let batchInstances = ZkWasmUtil.bytesToBN(task.batch_instances); let aux = ZkWasmUtil.bytesToBN(task.aux); - let fee = task.task_fee && ZkWasmUtil.convertAmount(task.task_fee); + let fee = task.task_fee && ZkWasmUtil.convertAmount(task.task_fee); if (enable_logs) { console.log("Task details: "); console.log(" ", task); console.log(" proof:"); aggregate_proof.map((proof: BN, _) => { - console.log(" 0x", proof.toString("hex")); + console.log(" 0x", proof.toString("hex")); }); console.log(" batch_instacne:"); batchInstances.map((ins: BN, _) => { - console.log(" 0x", ins.toString("hex")); + console.log(" 0x", ins.toString("hex")); }); console.log(" instacne:"); instances.map((ins: BN, _) => { - console.log(" 0x", ins.toString("hex")); + console.log(" 0x", ins.toString("hex")); }); console.log(" aux:"); aux.map((aux: BN, _) => { - console.log(" 0x", aux.toString("hex")); + console.log(" 0x", aux.toString("hex")); }); console.log(" fee:", fee); } return true; - }).catch((err) => { + }) + .catch((err) => { if (enable_logs) { console.log("queryTask Error", err); } @@ -59,21 +66,29 @@ export async function queryTask(taskid: string, resturl: string, enable_logs : b }); } -export async function queryTaskByTypeAndStatus(tasktype: string, taskstatus: string, resturl: string, enable_logs : boolean = true) : Promise { - let helper = new ZkWasmServiceHelper(resturl, "", "", enable_logs); - let args: QueryParams = { - id: "", - user_address: "", - md5: "", - tasktype: tasktype, - taskstatus: taskstatus, - }; - return helper.loadTasks(args).then((res) => { +export async function queryTaskByTypeAndStatus( + tasktype: string, + taskstatus: string, + resturl: string, + enable_logs: boolean = true +): Promise { + let helper = new ZkWasmServiceHelper(resturl, "", "", enable_logs); + let args: QueryParams = { + id: "", + user_address: "", + md5: "", + tasktype: tasktype, + taskstatus: taskstatus, + }; + return helper + .loadTasks(args) + .then((res) => { if (enable_logs) { console.log("queryImage Success", res); } return true; - }).catch((err) => { + }) + .catch((err) => { if (enable_logs) { console.log("queryTask Error", err); } @@ -81,14 +96,21 @@ export async function queryTaskByTypeAndStatus(tasktype: string, taskstatus: str }); } -export async function queryImage(md5: string, resturl: string, enable_logs : boolean = true) : Promise { - let helper = new ZkWasmServiceHelper(resturl, "", "", enable_logs); - return helper.queryImage(md5).then((res) => { +export async function queryImage( + md5: string, + resturl: string, + enable_logs: boolean = true +): Promise { + let helper = new ZkWasmServiceHelper(resturl, "", "", enable_logs); + return helper + .queryImage(md5) + .then((res) => { if (enable_logs) { console.log("queryImage Success", res); } return true; - }).catch((err) => { + }) + .catch((err) => { if (enable_logs) { console.log("queryTask Error", err); } @@ -96,17 +118,24 @@ export async function queryImage(md5: string, resturl: string, enable_logs : boo }); } -export async function queryUser(user_address: string, resturl: string, enable_logs : boolean = true) : Promise { - let helper = new ZkWasmServiceHelper(resturl, "", "", enable_logs); - let args: UserQueryParams = { - user_address: user_address, - }; - return helper.queryUser(args).then((res) => { +export async function queryUser( + user_address: string, + resturl: string, + enable_logs: boolean = true +): Promise { + let helper = new ZkWasmServiceHelper(resturl, "", "", enable_logs); + let args: UserQueryParams = { + user_address: user_address, + }; + return helper + .queryUser(args) + .then((res) => { if (enable_logs) { console.log("queryUser Success", res); } return true; - }).catch((err) => { + }) + .catch((err) => { if (enable_logs) { console.log("queryUser Error", err); } @@ -114,17 +143,24 @@ export async function queryUser(user_address: string, resturl: string, enable_lo }); } -export async function queryUserSubscription(user_address: string, resturl: string, enable_logs : boolean = true) : Promise { - let helper = new ZkWasmServiceHelper(resturl, "", "", enable_logs); - let args: UserQueryParams = { - user_address: user_address, - }; - return helper.queryUserSubscription(args).then((res) => { +export async function queryUserSubscription( + user_address: string, + resturl: string, + enable_logs: boolean = true +): Promise { + let helper = new ZkWasmServiceHelper(resturl, "", "", enable_logs); + let args: UserQueryParams = { + user_address: user_address, + }; + return helper + .queryUserSubscription(args) + .then((res) => { if (enable_logs) { console.log("queryUserSubscription Success", res); } return true; - }).catch((err) => { + }) + .catch((err) => { if (enable_logs) { console.log("queryUserSubscription Error", err); } @@ -132,17 +168,24 @@ export async function queryUserSubscription(user_address: string, resturl: strin }); } -export async function queryTxHistory(user_address: string, resturl: string, enable_logs : boolean = true) : Promise { - let helper = new ZkWasmServiceHelper(resturl, "", "", enable_logs); - let args: TxHistoryQueryParams = { - user_address: user_address, - }; - return helper.queryTxHistory(args).then((res) => { +export async function queryTxHistory( + user_address: string, + resturl: string, + enable_logs: boolean = true +): Promise { + let helper = new ZkWasmServiceHelper(resturl, "", "", enable_logs); + let args: TxHistoryQueryParams = { + user_address: user_address, + }; + return helper + .queryTxHistory(args) + .then((res) => { if (enable_logs) { console.log("queryTxHistory Success", res); } return true; - }).catch((err) => { + }) + .catch((err) => { if (enable_logs) { console.log("queryTxHistory Error", err); } @@ -150,17 +193,24 @@ export async function queryTxHistory(user_address: string, resturl: string, enab }); } -export async function queryDispositHistory(user_address: string, resturl: string, enable_logs : boolean = true) : Promise { - let helper = new ZkWasmServiceHelper(resturl, "", "", enable_logs); - let args: TxHistoryQueryParams = { - user_address: user_address, - }; - return helper.queryDepositHistory(args).then((res) => { +export async function queryDispositHistory( + user_address: string, + resturl: string, + enable_logs: boolean = true +): Promise { + let helper = new ZkWasmServiceHelper(resturl, "", "", enable_logs); + let args: TxHistoryQueryParams = { + user_address: user_address, + }; + return helper + .queryDepositHistory(args) + .then((res) => { if (enable_logs) { console.log("queryDepositHistory Success", res); } return true; - }).catch((err) => { + }) + .catch((err) => { if (enable_logs) { console.log("queryDepositHistory Error", err); } @@ -168,14 +218,20 @@ export async function queryDispositHistory(user_address: string, resturl: string }); } -export async function queryConfig(resturl: string, enable_logs : boolean = true) : Promise { - let helper = new ZkWasmServiceHelper(resturl, "", "", enable_logs); - return helper.queryConfig().then((res) => { +export async function queryConfig( + resturl: string, + enable_logs: boolean = true +): Promise { + let helper = new ZkWasmServiceHelper(resturl, "", "", enable_logs); + return helper + .queryConfig() + .then((res) => { if (enable_logs) { console.log("queryConfig Success", res); } return true; - }).catch((err) => { + }) + .catch((err) => { if (enable_logs) { console.log("queryConfig Error", err); } @@ -183,14 +239,20 @@ export async function queryConfig(resturl: string, enable_logs : boolean = true) }); } -export async function queryStatistics(resturl: string, enable_logs : boolean = true) : Promise { - let helper = new ZkWasmServiceHelper(resturl, "", "", enable_logs); - return helper.loadStatistics().then((res) => { +export async function queryStatistics( + resturl: string, + enable_logs: boolean = true +): Promise { + let helper = new ZkWasmServiceHelper(resturl, "", "", enable_logs); + return helper + .loadStatistics() + .then((res) => { if (enable_logs) { console.log("loadStatistics Success", res); } return true; - }).catch((err) => { + }) + .catch((err) => { if (enable_logs) { console.log("loadStatistics Error", err); } @@ -198,40 +260,54 @@ export async function queryStatistics(resturl: string, enable_logs : boolean = t }); } -export async function getAvailableImages(resturl: string, user_address : string, enable_logs : boolean = true) : Promise { - let helper = new ZkWasmServiceHelper(resturl, "", "", enable_logs); - let args: QueryParams = { - id: "", - user_address: user_address, - md5: "", - tasktype: "Setup", - taskstatus: "Done", - }; - return helper.loadTasks(args).then((res) => { +export async function getAvailableImages( + resturl: string, + user_address: string, + enable_logs: boolean = true +): Promise { + let helper = new ZkWasmServiceHelper(resturl, "", "", enable_logs); + let args: QueryParams = { + id: "", + user_address: user_address, + md5: "", + tasktype: "Setup", + taskstatus: "Done", + }; + return helper + .loadTasks(args) + .then((res) => { const tasks = res as PaginationResult; return tasks.data; - }).catch((err) => { - throw err - }).finally(() => { + }) + .catch((err) => { + throw err; + }) + .finally(() => { if (enable_logs) { - console.log("Finish queryTask.") + console.log("Finish queryTask."); } }); } -export async function getProverNodeList(resturl: string, enable_logs : boolean = true) : Promise { - let helper = new ZkWasmServiceHelper(resturl, "", "", enable_logs); - let args: NodeStatisticsQueryParams = { - total: 500, - } - return helper.queryNodeStatistics(args).then((res) => { - return res; - } - ).catch((err) => { - throw err - }).finally(() => { - if (enable_logs) { - console.log("Finish GetProverNodeList") +export async function getProverNodeList( + resturl: string, + enable_logs: boolean = true +): Promise { + let helper = new ZkWasmServiceHelper(resturl, "", "", enable_logs); + let args: NodeStatisticsQueryParams = { + total: 500, + }; + return helper + .queryNodeStatistics(args) + .then((res) => { + return res.data; + }) + .catch((err) => { + throw err; + }) + .finally(() => { + if (enable_logs) { + console.log("Finish GetProverNodeList"); } }); } diff --git a/src/task.ts b/src/task.ts index ffb07da..6085150 100644 --- a/src/task.ts +++ b/src/task.ts @@ -14,6 +14,8 @@ import { MaintenanceModeType, SetMaintenanceModeParams, AdminRequestType, + SetupTask, + ProvingTask, } from "zkwasm-service-helper"; import { @@ -61,24 +63,25 @@ export async function addNewWasmImage( prove_payment_src: prove_payment_src, auto_submit_network_ids: auto_submit_networks, }; - let msg = ZkWasmUtil.createAddImageSignMessage(info); + + const setupTask = new SetupTask(resturl, info, user_addr); + + const message = await setupTask.createSignMessage(); + let signature: string; try { - console.log("msg is:", msg); - signature = await signMessage(msg, priv); + console.log("msg is:", message); + signature = await signMessage(message, priv); console.log("signature is:", signature); } catch (e: unknown) { console.log("sign error: ", e); return; } - let task: WithSignature = { - ...info, - signature, - }; - let helper = new ZkWasmServiceHelper(resturl, "", ""); - await helper - .addNewWasmImage(task) + setupTask.setSignature(signature); + + await setupTask + .submitTask() .then((res) => { console.log("Add Image Response", res); }) @@ -103,22 +106,22 @@ export async function addProvingTask( enable_logs: boolean = true, num: number = 0 ): Promise { - let helper = new ZkWasmServiceHelper(resturl, "", "", enable_logs); let pb_inputs: Array = ZkWasmUtil.validateInputs(public_inputs); let priv_inputs: Array = ZkWasmUtil.validateInputs(private_inputs); let info: ProvingParams = { - user_address: user_addr.toLowerCase(), md5: image_md5, public_inputs: pb_inputs, private_inputs: priv_inputs, proof_submit_mode: proof_submit_mode, }; - let msgString = ZkWasmUtil.createProvingSignMessage(info); + + const proveTask = new ProvingTask(resturl, info, user_addr); + const message = await proveTask.createSignMessage(); let signature: string; try { - signature = await signMessage(msgString, priv); + signature = await signMessage(message, priv); } catch (e: unknown) { if (enable_logs) { console.log("error signing message", e); @@ -126,13 +129,10 @@ export async function addProvingTask( throw e; } - let task: WithSignature = { - ...info, - signature: signature, - }; + proveTask.setSignature(signature); - return await helper - .addProvingTask(task) + return proveTask + .submitTask() .then((res) => { if (enable_logs) { console.log(`#${num} Add Proving task Response`, res); @@ -560,10 +560,10 @@ export async function addNewPayment( console.log("receiverAddress is:", receiverAddress); let ans = await askQuestion( "Are you sure you want to send " + - amount + - " ETH to " + - receiverAddress + - "? (y/n)" + amount + + " ETH to " + + receiverAddress + + "? (y/n)" ); if (ans === "n" || ans === "N") { console.log("User cancelled the transaction."); From e93d70324fcf47eac6dde374c5bb181757c15c78 Mon Sep 17 00:00:00 2001 From: rhaoio Date: Thu, 22 Aug 2024 18:31:44 +1000 Subject: [PATCH 2/3] update --- package-lock.json | 2 +- src/task.ts | 8 ++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index ed306af..24f30b5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3916,7 +3916,7 @@ }, "node_modules/zkwasm-service-helper": { "version": "1.0.0", - "resolved": "git+ssh://git@github.com/DelphinusLab/zkWasm-service-helper.git#410eca6a5af41e6032db21e4b26d889da4bd3c72", + "resolved": "git+ssh://git@github.com/DelphinusLab/zkWasm-service-helper.git#f2a119c085b82bcecd2baa14c03902377c92b97a", "dependencies": { "@types/bn.js": "^5.1.1", "axios": "^1.2.1", diff --git a/src/task.ts b/src/task.ts index 6085150..69da73b 100644 --- a/src/task.ts +++ b/src/task.ts @@ -78,10 +78,8 @@ export async function addNewWasmImage( return; } - setupTask.setSignature(signature); - await setupTask - .submitTask() + .submitTask(signature) .then((res) => { console.log("Add Image Response", res); }) @@ -129,10 +127,8 @@ export async function addProvingTask( throw e; } - proveTask.setSignature(signature); - return proveTask - .submitTask() + .submitTask(signature) .then((res) => { if (enable_logs) { console.log(`#${num} Add Proving task Response`, res); From 60f6f6704d46c2605b4bc56aec61076f6a4a3e1e Mon Sep 17 00:00:00 2001 From: rhaoio Date: Fri, 23 Aug 2024 17:23:20 +1000 Subject: [PATCH 3/3] update maintain mode --- package-lock.json | 2 +- src/cli.ts | 1 + src/commands/index.ts | 1 + src/commands/setMaintenanceMode.ts | 41 ++++++++++++++++++++++++++++++ src/task.ts | 28 ++++++++++---------- 5 files changed, 58 insertions(+), 15 deletions(-) create mode 100644 src/commands/setMaintenanceMode.ts diff --git a/package-lock.json b/package-lock.json index 24f30b5..33b97ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3916,7 +3916,7 @@ }, "node_modules/zkwasm-service-helper": { "version": "1.0.0", - "resolved": "git+ssh://git@github.com/DelphinusLab/zkWasm-service-helper.git#f2a119c085b82bcecd2baa14c03902377c92b97a", + "resolved": "git+ssh://git@github.com/DelphinusLab/zkWasm-service-helper.git#09e9449961031e29a45e393632ce1d7866b52ed0", "dependencies": { "@types/bn.js": "^5.1.1", "axios": "^1.2.1", diff --git a/src/cli.ts b/src/cli.ts index 1f79acf..16f87a6 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -18,6 +18,7 @@ export function createCLI() { .command(commands.queryTask) .command(commands.pressureTest) .command(commands.proverProfile) + .command(commands.setMaintenanceMode) // Add other commands here as they are implemented .example( 'node dist/index.js addimage -r "http://127.0.0.1:8080" -p "/home/username/arith.wasm" -u "0x278847f04E166451182dd30E33e09667bA31e6a8" -x "xxxxxxx" -n "myfirstimage" -d "My First Image" -c 18', diff --git a/src/commands/index.ts b/src/commands/index.ts index 3b9ec78..d92d91b 100644 --- a/src/commands/index.ts +++ b/src/commands/index.ts @@ -4,3 +4,4 @@ export * as addPayment from "./addPayment"; export * as queryTask from "./queryTask"; export * as pressureTest from "./pressureTest"; export * as proverProfile from "./proverProfile"; +export * as setMaintenanceMode from "./setMaintenanceMode"; diff --git a/src/commands/setMaintenanceMode.ts b/src/commands/setMaintenanceMode.ts new file mode 100644 index 0000000..37e7662 --- /dev/null +++ b/src/commands/setMaintenanceMode.ts @@ -0,0 +1,41 @@ +import { Arguments, Argv } from "yargs"; + +import { setMaintenanceMode } from "../task"; + +export const command = "setmaintenancemode"; +export const desc = "Set maintenance mode for server."; + +export const builder = (yargs: Argv) => { + return ( + yargs + .option("r", { + alias: "rest-url", + describe: "REST API URL", + type: "string", + demandOption: "The REST server url", + }) + // private key + .option("x", { + alias: "private-key", + describe: "Private key", + type: "string", + demandOption: "The private key is required", + }) + // maintenance mode + .option("active", { + alias: "active", + describe: "Maintenance mode", + type: "boolean", + demandOption: "The maintenance mode is required", + }) + ); +}; + +export const handler = async (argv: Arguments) => { + console.log("Setting maintenance mode..."); + await setMaintenanceMode( + argv.r as string, + argv.x as string, + argv.active as boolean + ); +}; diff --git a/src/task.ts b/src/task.ts index 69da73b..b24d598 100644 --- a/src/task.ts +++ b/src/task.ts @@ -16,6 +16,8 @@ import { AdminRequestType, SetupTask, ProvingTask, + Payment, + MaintenanceRequest, } from "zkwasm-service-helper"; import { @@ -578,15 +580,16 @@ export async function addNewPayment( await tx.wait(); console.log("Sending transaction hash to zkWasm service..."); //Then submit the confirmed transaction hash to the zkWasm service. - await helper.addPayment({ txhash: tx.hash }); + + const payment = new Payment(resturl); + await payment.addPayment({ txhash: tx.hash }); console.log("Finish addPayment!"); } export async function addPaymentWithTx(txhash: string, resturl: string) { - let helper = new ZkWasmServiceHelper(resturl, "", ""); - console.log("Sending transaction hash " + txhash + " to zkWasm service..."); - await helper.addPayment({ txhash: txhash }); + const payment = new Payment(resturl); + await payment.addPayment({ txhash: txhash }); } export async function setMaintenanceMode( @@ -594,18 +597,21 @@ export async function setMaintenanceMode( priv: string, active: boolean ) { + const user_address = await new Wallet(priv, null).getAddress(); let params: SetMaintenanceModeParams = { mode: active ? MaintenanceModeType.Enabled : MaintenanceModeType.Disabled, // TODO: update with real values once nonce verification is implemented nonce: 1, request_type: AdminRequestType.MaintenanceMode, - user_address: await new Wallet(priv, null).getAddress(), + user_address: user_address, }; - let msg = ZkWasmUtil.createSetMaintenanceModeSignMessage(params); + const maintenanceReq = new MaintenanceRequest(params, resturl, user_address); + let signature: string; try { + const msg = await maintenanceReq.createSignMessage(); console.log("msg is:", msg); signature = await signMessage(msg, priv); console.log("signature is:", signature); @@ -613,15 +619,9 @@ export async function setMaintenanceMode( console.log("sign error: ", e); return; } - let task: WithSignature = { - ...params, - signature, - }; - console.log("Setting maintenance mode to", params.mode, "..."); - let helper = new ZkWasmServiceHelper(resturl, "", ""); - await helper - .setMaintenanceMode(task) + await maintenanceReq + .submitTask(signature) .then((res) => { console.log("Set maintenance mode Success", res); })