| 510 | } |
| 511 | |
| 512 | fn put_change( |
| 513 | &mut self, |
| 514 | view: &mut ViewState, |
| 515 | change_id: NodeId, |
| 516 | change_hash: &Hash, |
| 517 | ) -> PristineResult<u64> { |
| 518 | let seq = view.change_count; |
| 519 | |
| 520 | // Add to change log |
| 521 | { |
| 522 | let mut table = self.txn.open_table(VIEW_CHANGES)?; |
| 523 | let key = encode_view_seq(view.id, seq); |
| 524 | table.insert(&key, change_id.get())?; |
| 525 | } |
| 526 | |
| 527 | // Add reverse mapping |
| 528 | { |
| 529 | let mut table = self.txn.open_table(REV_VIEW_CHANGES)?; |
| 530 | let key = encode_view_seq(view.id, change_id.get()); |
| 531 | table.insert(&key, seq)?; |
| 532 | } |
| 533 | |
| 534 | // Update merkle state |
| 535 | view.state = view.state.next(change_hash); |
| 536 | view.change_count += 1; |
| 537 | |
| 538 | // Store the merkle state at this sequence |
| 539 | { |
| 540 | let mut table = self.txn.open_table(MERKLE_CHAIN)?; |
| 541 | let key = encode_view_seq(view.id, seq); |
| 542 | table.insert(&key, view.state.as_bytes())?; |
| 543 | } |
| 544 | |
| 545 | // Store state -> sequence mapping |
| 546 | { |
| 547 | let mut table = self.txn.open_table(STATES)?; |
| 548 | let key = encode_view_merkle(view.id, view.state.as_bytes()); |
| 549 | table.insert(&key, seq)?; |
| 550 | } |
| 551 | |
| 552 | Ok(seq) |
| 553 | } |
| 554 | |
| 555 | fn del_change( |
| 556 | &mut self, |