| 1078 | } |
| 1079 | |
| 1080 | fn put_change( |
| 1081 | &mut self, |
| 1082 | view: &mut ViewState, |
| 1083 | change_id: NodeId, |
| 1084 | change_hash: &Hash, |
| 1085 | ) -> PristineResult<u64> { |
| 1086 | let seq = view.change_count; |
| 1087 | |
| 1088 | // Add to change log |
| 1089 | { |
| 1090 | let mut table = self.txn.open_table(VIEW_CHANGES)?; |
| 1091 | let key = encode_view_seq(view.id, seq); |
| 1092 | table.insert(&key, change_id.get())?; |
| 1093 | } |
| 1094 | |
| 1095 | // Add reverse mapping |
| 1096 | { |
| 1097 | let mut table = self.txn.open_table(REV_VIEW_CHANGES)?; |
| 1098 | let key = encode_view_seq(view.id, change_id.get()); |
| 1099 | table.insert(&key, seq)?; |
| 1100 | } |
| 1101 | |
| 1102 | // Update merkle state |
| 1103 | view.state = view.state.next(change_hash); |
| 1104 | view.change_count += 1; |
| 1105 | |
| 1106 | // Store the merkle state at this sequence |
| 1107 | { |
| 1108 | let mut table = self.txn.open_table(MERKLE_CHAIN)?; |
| 1109 | let key = encode_view_seq(view.id, seq); |
| 1110 | table.insert(&key, view.state.as_bytes())?; |
| 1111 | } |
| 1112 | |
| 1113 | // Store state -> sequence mapping |
| 1114 | { |
| 1115 | let mut table = self.txn.open_table(STATES)?; |
| 1116 | let key = encode_view_merkle(view.id, view.state.as_bytes()); |
| 1117 | table.insert(&key, seq)?; |
| 1118 | } |
| 1119 | |
| 1120 | Ok(seq) |
| 1121 | } |
| 1122 | |
| 1123 | fn del_change( |
| 1124 | &mut self, |