| 984 | } |
| 985 | |
| 986 | fn put_change( |
| 987 | &mut self, |
| 988 | view: &mut ViewState, |
| 989 | change_id: NodeId, |
| 990 | change_hash: &Hash, |
| 991 | ) -> PristineResult<u64> { |
| 992 | let seq = view.change_count; |
| 993 | |
| 994 | // Add to change log |
| 995 | { |
| 996 | let mut table = self.txn.open_table(VIEW_CHANGES)?; |
| 997 | let key = encode_view_seq(view.id, seq); |
| 998 | table.insert(&key, change_id.get())?; |
| 999 | } |
| 1000 | |
| 1001 | // Add reverse mapping |
| 1002 | { |
| 1003 | let mut table = self.txn.open_table(REV_VIEW_CHANGES)?; |
| 1004 | let key = encode_view_seq(view.id, change_id.get()); |
| 1005 | table.insert(&key, seq)?; |
| 1006 | } |
| 1007 | |
| 1008 | // Update merkle state |
| 1009 | view.state = view.state.next(change_hash); |
| 1010 | view.change_count += 1; |
| 1011 | |
| 1012 | // Store the merkle state at this sequence |
| 1013 | { |
| 1014 | let mut table = self.txn.open_table(MERKLE_CHAIN)?; |
| 1015 | let key = encode_view_seq(view.id, seq); |
| 1016 | table.insert(&key, view.state.as_bytes())?; |
| 1017 | } |
| 1018 | |
| 1019 | // Store state -> sequence mapping |
| 1020 | { |
| 1021 | let mut table = self.txn.open_table(STATES)?; |
| 1022 | let key = encode_view_merkle(view.id, view.state.as_bytes()); |
| 1023 | table.insert(&key, seq)?; |
| 1024 | } |
| 1025 | |
| 1026 | Ok(seq) |
| 1027 | } |
| 1028 | |
| 1029 | fn del_change( |
| 1030 | &mut self, |