From 5187370b85e46c9e5e9e369b332472e03483393c Mon Sep 17 00:00:00 2001 From: akayi07 Date: Sat, 27 Jul 2024 17:10:53 +0800 Subject: [PATCH 1/2] add nonce check --- example/src/state.rs | 12 ++++++++++-- ts/package-lock.json | 4 +++- ts/src/bootstrap/bootstrap_bg.js | 8 ++++---- ts/src/bootstrap/bootstrap_bg.wasm | Bin 158272 -> 159547 bytes 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/example/src/state.rs b/example/src/state.rs index 51bb737..4276dd2 100644 --- a/example/src/state.rs +++ b/example/src/state.rs @@ -292,6 +292,7 @@ lazy_static::lazy_static! { pub struct Transaction { pub command: u64, pub objindex: usize, + pub nonce: u64, pub data: Vec, } @@ -313,8 +314,9 @@ impl Transaction { } } pub fn decode(params: [u64; 4]) -> Self { - let command = (params[0] >> 32) & 0xff; - let objindex = (params[0] & 0xff) as usize; + let command = params[0] & 0xff; + let objindex = ((params[0] >> 8) & 0xff) as usize; + let nonce = params[0] >> 16; let mut data = vec![]; if command == WITHDRAW { data = vec![0, params[1], params[2], params[3]] // address of withdraw @@ -328,6 +330,7 @@ impl Transaction { Transaction { command, objindex, + nonce, data, } } @@ -347,6 +350,7 @@ impl Transaction { match player.as_mut() { None => ERROR_PLAYER_NOT_EXIST, Some(player) => { + player.check_and_inc_nonce(self.nonce); let objindex = player.data.objects.len(); player.data.objects.push(0); let mid = self.data[0]; @@ -367,6 +371,7 @@ impl Transaction { match player.as_mut() { None => ERROR_PLAYER_ALREADY_EXIST, Some(player) => { + player.check_and_inc_nonce(self.nonce); let oid = player.get_obj_id(self.objindex); let counter = QUEUE.0.borrow().counter; let data = &self.data; @@ -386,6 +391,7 @@ impl Transaction { match player.as_mut() { None => ERROR_PLAYER_NOT_EXIST, Some(player) => { + player.check_and_inc_nonce(self.nonce); if let Some(treasure) = player.data.local.0.last_mut() { let withdraw = WithdrawInfo::new( 0, @@ -412,6 +418,7 @@ impl Transaction { match player.as_mut() { None => { let mut player = AutomataPlayer::new_from_pid([self.data[0], self.data[1]]); + player.check_and_inc_nonce(self.nonce); if let Some (treasure) = player.data.local.0.last_mut() { *treasure += self.data[2] as i64; player.store(); @@ -420,6 +427,7 @@ impl Transaction { } }, Some(player) => { + player.check_and_inc_nonce(self.nonce); if let Some(treasure) = player.data.local.0.last_mut() { *treasure += self.data[2] as i64; let t = player.data.local.0.last().unwrap(); diff --git a/ts/package-lock.json b/ts/package-lock.json index 41a6de7..e5591b3 100644 --- a/ts/package-lock.json +++ b/ts/package-lock.json @@ -1,9 +1,11 @@ { - "name": "ts", + "name": "zkwasm-ts-server", "lockfileVersion": 3, "requires": true, "packages": { "": { + "name": "zkwasm-ts-server", + "hasInstallScript": true, "dependencies": { "@types/bn.js": "^5.1.5", "@types/cors": "^2.8.17", diff --git a/ts/src/bootstrap/bootstrap_bg.js b/ts/src/bootstrap/bootstrap_bg.js index faa9296..64e87f0 100644 --- a/ts/src/bootstrap/bootstrap_bg.js +++ b/ts/src/bootstrap/bootstrap_bg.js @@ -224,7 +224,7 @@ export function __wbindgen_object_drop_ref(arg0) { takeObject(arg0); }; -export function __wbg_updateleaf_583e7300fc05dcb2(arg0, arg1, arg2, arg3, arg4) { +export function __wbg_updateleaf_c52d6903ac400a66(arg0, arg1, arg2, arg3, arg4) { var v0 = getArrayU8FromWasm0(arg0, arg1).slice(); wasm.__wbindgen_free(arg0, arg1 * 1, 1); var v1 = getArrayU8FromWasm0(arg3, arg4).slice(); @@ -233,21 +233,21 @@ export function __wbg_updateleaf_583e7300fc05dcb2(arg0, arg1, arg2, arg3, arg4) return addHeapObject(ret); }; -export function __wbg_getleaf_24c775a6a2aa4383(arg0, arg1, arg2) { +export function __wbg_getleaf_dc1011d3abd689e9(arg0, arg1, arg2) { var v0 = getArrayU8FromWasm0(arg0, arg1).slice(); wasm.__wbindgen_free(arg0, arg1 * 1, 1); const ret = get_leaf(v0, BigInt.asUintN(64, arg2)); return addHeapObject(ret); }; -export function __wbg_getrecord_4c730ffdc5ac97a0(arg0, arg1) { +export function __wbg_getrecord_9b375b736bbeb572(arg0, arg1) { var v0 = getArrayU8FromWasm0(arg0, arg1).slice(); wasm.__wbindgen_free(arg0, arg1 * 1, 1); const ret = get_record(v0); return addHeapObject(ret); }; -export function __wbg_updaterecord_9efc2e1d014d3f6a(arg0, arg1, arg2, arg3) { +export function __wbg_updaterecord_0ea13efa10ca9772(arg0, arg1, arg2, arg3) { var v0 = getArrayU8FromWasm0(arg0, arg1).slice(); wasm.__wbindgen_free(arg0, arg1 * 1, 1); var v1 = getArrayU64FromWasm0(arg2, arg3).slice(); diff --git a/ts/src/bootstrap/bootstrap_bg.wasm b/ts/src/bootstrap/bootstrap_bg.wasm index 190e9a9dd509283f6ffecdd67e0c2bea398e0624..3bdcdf92f3a3b567c21bffbd325473be8007a974 100644 GIT binary patch delta 18762 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 Q#6`I14m^-`DbFzf8%Iu7ivR!s delta 17485 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 W*E1{0$OMr+9+$vt?d2lf^Zx)l)u@mF From 2e7004cdc4e22e4419d6ea679ee94fdea2fdd15e Mon Sep 17 00:00:00 2001 From: akayi07 Date: Thu, 1 Aug 2024 10:39:44 +0800 Subject: [PATCH 2/2] fix nonce not change after restarting object --- example/src/state.rs | 1 + ts/src/application/application_bg.wasm | Bin 100969 -> 101987 bytes 2 files changed, 1 insertion(+) diff --git a/example/src/state.rs b/example/src/state.rs index 4276dd2..148873b 100644 --- a/example/src/state.rs +++ b/example/src/state.rs @@ -372,6 +372,7 @@ impl Transaction { None => ERROR_PLAYER_ALREADY_EXIST, Some(player) => { player.check_and_inc_nonce(self.nonce); + player.store(); let oid = player.get_obj_id(self.objindex); let counter = QUEUE.0.borrow().counter; let data = &self.data; diff --git a/ts/src/application/application_bg.wasm b/ts/src/application/application_bg.wasm index f9f2147304b057c73a61a7ee380622c48c69fab8..20ccd87fd5aa8e5853813d42b38e4f8e83d9f8d5 100644 GIT binary patch delta 11281 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