Compare commits

...

2 Commits

Author SHA1 Message Date
Sosthene
acb9739a80 [bug] Now save device after scan_blocks 2025-09-02 13:30:52 +02:00
Sosthene
c422881cd1 [bug] Failed to update tips 2025-09-02 13:30:52 +02:00

View File

@ -993,7 +993,20 @@ export default class Services {
// This is existing device, we need to catch up if last_scan is lagging behind chain_tip // This is existing device, we need to catch up if last_scan is lagging behind chain_tip
if (device.sp_wallet.last_scan < this.currentBlockHeight) { if (device.sp_wallet.last_scan < this.currentBlockHeight) {
// We need to catch up // We need to catch up
await this.sdkClient.scan_blocks(this.currentBlockHeight, BLINDBITURL); try {
await this.sdkClient.scan_blocks(this.currentBlockHeight, BLINDBITURL);
} catch (e) {
console.error(`Failed to scan blocks: ${e}`);
return;
}
// If everything went well, we can update our storage
try {
const device = this.dumpDeviceFromMemory();
await this.saveDeviceInDatabase(device);
} catch (e) {
console.error(`Failed to save updated device: ${e}`);
}
} else { } else {
// Up to date, just returns // Up to date, just returns
return; return;
@ -1406,8 +1419,17 @@ export default class Services {
let new_states = []; let new_states = [];
let roles = []; let roles = [];
for (const state of process.states) { for (const state of process.states) {
if (!state.state_id || state.state_id === EMPTY32BYTES) { continue; } if (!state || !state.state_id) { continue; } // shouldn't happen
if (!this.lookForStateId(existing, state.state_id)) { if (state.state_id === EMPTY32BYTES) {
// We check that the tip is the same we have, if not we update
const existingTip = existing.states[existing.states.length - 1].commited_in;
if (existingTip !== state.commited_in) {
console.log('Found new tip for process', processId);
// We update the process
new_states.push(state.state_id);
roles.push(state.roles);
}
} else if (!this.lookForStateId(existing, state.state_id)) {
if (this.rolesContainsUs(state.roles)) { if (this.rolesContainsUs(state.roles)) {
new_states.push(state.state_id); new_states.push(state.state_id);
roles.push(state.roles); roles.push(state.roles);
@ -1417,6 +1439,12 @@ export default class Services {
if (new_states.length != 0) { if (new_states.length != 0) {
// We request the new states // We request the new states
// filter out the empty state, if any
// empty state will always be last, so that's easy
if (new_states.findLast(state => state === EMPTY32BYTES)) {
new_states.pop();
roles.pop();
}
await this.requestDataFromPeers(processId, new_states, roles); await this.requestDataFromPeers(processId, new_states, roles);
toSave[processId] = process; toSave[processId] = process;
} }