Skip to content

Commit 8dce820

Browse files
committed
updates to make rescan more performant
1 parent d5094d6 commit 8dce820

File tree

4 files changed

+46
-34
lines changed

4 files changed

+46
-34
lines changed

crates/dservice/src/manager.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,7 @@ impl Manager {
284284
.get(&address)
285285
.unwrap()
286286
.clone();
287+
let scan_complete = account_info.remaining_task == 0;
287288
let set_account_head_request = RpcSetAccountHeadRequest {
288289
account: address.clone(),
289290
start: account_info.start_block.hash.to_string(),
@@ -309,7 +310,7 @@ impl Manager {
309310
};
310311
match self.shared.server_handler.submit_scan_response(request) {
311312
Ok(msg) => {
312-
if msg.success && account_info.end_block.hash == latest_scanned_block.hash {
313+
if msg.success && scan_complete {
313314
let _ = self.account_mappling.write().await.remove(&address);
314315
}
315316
}

crates/networking/src/decryption_message.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use serde::{Deserialize, Serialize};
33
use crate::rpc_abi::BlockInfo;
44
pub use crate::rpc_abi::RpcSetAccountHeadRequest as ScanResponse;
55

6-
#[derive(Debug, Deserialize, Serialize)]
6+
#[derive(Debug, Deserialize, Serialize, Clone)]
77
pub struct DecryptionMessage<T> {
88
pub message: T,
99
pub signature: String,

crates/server/src/handlers.rs

Lines changed: 42 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use networking::{
1717
};
1818
use oreo_errors::OreoError;
1919
use serde_json::json;
20-
use tracing::{error, info};
20+
use tracing::{debug, error, info};
2121
use utils::{default_secp, sign, verify, Signature};
2222

2323
use crate::SharedState;
@@ -40,7 +40,8 @@ pub async fn import_account_handler<T: DBHandler>(
4040
outgoing_view_key,
4141
public_address,
4242
created_at,
43-
} = import;
43+
} = import.clone();
44+
info!("Import account request: {:?}", import);
4445
let rpc_data = RpcImportAccountRequest {
4546
view_key,
4647
incoming_view_key: incoming_view_key.clone(),
@@ -86,6 +87,7 @@ pub async fn import_account_handler<T: DBHandler>(
8687
out_vk: outgoing_view_key.clone(),
8788
head: Some(head),
8889
};
90+
info!("Scan request fooooo: {:?}", scan_request);
8991
let msg = bincode::serialize(&scan_request).unwrap();
9092
let signature = sign(&default_secp(), &msg[..], &shared.secp.sk)
9193
.unwrap()
@@ -196,34 +198,35 @@ pub async fn rescan_account_handler<T: DBHandler>(
196198
error!("Failed to update scan status: {:?}", err);
197199
return err.into_response();
198200
}
199-
if let Ok(status) = shared
200-
.rpc_handler
201-
.get_account_status(RpcGetAccountStatusRequest {
202-
account: account.name.clone(),
203-
})
204-
{
205-
let head = status.data.account.head.unwrap_or(BlockInfo {
201+
let head;
202+
if account.create_hash.is_none() || account.create_head.is_none() {
203+
head = BlockInfo {
206204
hash: shared.genesis_hash.clone(),
207205
sequence: MAINNET_GENESIS_SEQUENCE as u64,
208-
});
209-
let scan_request = ScanRequest {
210-
address: account.address.clone(),
211-
in_vk: account.in_vk.clone(),
212-
out_vk: account.out_vk.clone(),
213-
head: Some(head),
214206
};
215-
let msg = bincode::serialize(&scan_request).unwrap();
216-
let signature = sign(&default_secp(), &msg[..], &shared.secp.sk)
217-
.unwrap()
218-
.to_string();
219-
let scan_request = shared.scan_handler.submit_scan_request(DecryptionMessage {
220-
message: scan_request,
221-
signature,
222-
});
223-
if let Err(err) = scan_request {
224-
error!("Failed to submit scan request: {:?}", err);
225-
return err.into_response();
226-
}
207+
} else {
208+
head = BlockInfo {
209+
hash: account.create_hash.unwrap(),
210+
sequence: account.create_head.unwrap() as u64,
211+
};
212+
}
213+
let scan_request = ScanRequest {
214+
address: account.address.clone(),
215+
in_vk: account.in_vk.clone(),
216+
out_vk: account.out_vk.clone(),
217+
head: Some(head),
218+
};
219+
let msg = bincode::serialize(&scan_request).unwrap();
220+
let signature = sign(&default_secp(), &msg[..], &shared.secp.sk)
221+
.unwrap()
222+
.to_string();
223+
let scan_request = shared.scan_handler.submit_scan_request(DecryptionMessage {
224+
message: scan_request,
225+
signature,
226+
});
227+
if let Err(err) = scan_request {
228+
error!("Failed to submit scan request: {:?}", err);
229+
return err.into_response();
227230
}
228231
RpcResponse {
229232
status: 200,
@@ -255,15 +258,22 @@ pub async fn update_scan_status_handler<T: DBHandler>(
255258
return e.into_response();
256259
}
257260
let account = db_account.unwrap();
261+
let reset_created_at = account.create_head.is_none() || account.create_head.unwrap() == 1;
262+
let reset = shared.rpc_handler.reset_account(RpcResetAccountRequest {
263+
account: account.name.clone(),
264+
reset_scanning_enabled: Some(false),
265+
reset_created_at: Some(reset_created_at),
266+
});
267+
if let Err(e) = reset {
268+
return e.into_response();
269+
}
258270
message.account = account.name.clone();
259-
let scan_complete = message.scan_complete.clone();
260-
info!("set account message: {:?}", message.clone());
261-
let resp = shared.rpc_handler.set_account_head(message);
271+
let resp = shared.rpc_handler.set_account_head(message.clone());
262272

263273
if resp.is_err() {
264-
info!("Failed to update account head: {:?}", resp.unwrap_err());
274+
error!("Failed to update account head: {:?}", resp.unwrap_err());
265275
}
266-
if scan_complete {
276+
if message.scan_complete {
267277
let _ = shared.rpc_handler.set_scanning(RpcSetScanningRequest {
268278
account: account.name.clone(),
269279
enabled: true,

docker-compose.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ services:
157157
depends_on:
158158
- migration
159159
- chainloader
160+
- dservice
160161
networks:
161162
- oreowallet_network
162163
ulimits:

0 commit comments

Comments
 (0)