1- use ethrex_trie:: error:: TrieError ;
1+ use ethrex_trie:: { error:: TrieError , NodeHash } ;
22use libmdbx:: orm:: { Database , Table } ;
33use std:: { marker:: PhantomData , sync:: Arc } ;
44/// Libmdbx implementation for the TrieDB trait, with get and put operations.
@@ -11,7 +11,7 @@ use ethrex_trie::TrieDB;
1111
1212impl < T > LibmdbxTrieDB < T >
1313where
14- T : Table < Key = Vec < u8 > , Value = Vec < u8 > > ,
14+ T : Table < Key = NodeHash , Value = Vec < u8 > > ,
1515{
1616 pub fn new ( db : Arc < Database > ) -> Self {
1717 Self {
@@ -23,20 +23,20 @@ where
2323
2424impl < T > TrieDB for LibmdbxTrieDB < T >
2525where
26- T : Table < Key = Vec < u8 > , Value = Vec < u8 > > ,
26+ T : Table < Key = NodeHash , Value = Vec < u8 > > ,
2727{
28- fn get ( & self , key : Vec < u8 > ) -> Result < Option < Vec < u8 > > , TrieError > {
28+ fn get ( & self , key : NodeHash ) -> Result < Option < Vec < u8 > > , TrieError > {
2929 let txn = self . db . begin_read ( ) . map_err ( TrieError :: DbError ) ?;
3030 txn. get :: < T > ( key) . map_err ( TrieError :: DbError )
3131 }
3232
33- fn put ( & self , key : Vec < u8 > , value : Vec < u8 > ) -> Result < ( ) , TrieError > {
33+ fn put ( & self , key : NodeHash , value : Vec < u8 > ) -> Result < ( ) , TrieError > {
3434 let txn = self . db . begin_readwrite ( ) . map_err ( TrieError :: DbError ) ?;
3535 txn. upsert :: < T > ( key, value) . map_err ( TrieError :: DbError ) ?;
3636 txn. commit ( ) . map_err ( TrieError :: DbError )
3737 }
3838
39- fn put_batch ( & self , key_values : Vec < ( Vec < u8 > , Vec < u8 > ) > ) -> Result < ( ) , TrieError > {
39+ fn put_batch ( & self , key_values : Vec < ( NodeHash , Vec < u8 > ) > ) -> Result < ( ) , TrieError > {
4040 let txn = self . db . begin_readwrite ( ) . map_err ( TrieError :: DbError ) ?;
4141 for ( key, value) in key_values {
4242 txn. upsert :: < T > ( key, value) . map_err ( TrieError :: DbError ) ?;
4949mod test {
5050 use super :: LibmdbxTrieDB ;
5151 use crate :: trie_db:: test_utils:: libmdbx:: { new_db, TestNodes } ;
52+ use ethrex_trie:: NodeHash ;
5253 use ethrex_trie:: Trie ;
5354 use ethrex_trie:: TrieDB ;
5455 use libmdbx:: {
@@ -62,24 +63,25 @@ mod test {
6263 fn simple_addition ( ) {
6364 table ! (
6465 /// NodeHash to Node table
65- ( Nodes ) Vec < u8 > => Vec <u8 >
66+ ( Nodes ) NodeHash => Vec <u8 >
6667 ) ;
6768 let inner_db = new_db :: < Nodes > ( ) ;
69+ let key = NodeHash :: from_encoded_raw ( b"hello" ) ;
6870 let db = LibmdbxTrieDB :: < Nodes > :: new ( inner_db) ;
69- assert_eq ! ( db. get( "hello" . into ( ) ) . unwrap( ) , None ) ;
70- db. put ( "hello" . into ( ) , "value" . into ( ) ) . unwrap ( ) ;
71- assert_eq ! ( db. get( "hello" . into ( ) ) . unwrap( ) , Some ( "value" . into( ) ) ) ;
71+ assert_eq ! ( db. get( key ) . unwrap( ) , None ) ;
72+ db. put ( key , "value" . into ( ) ) . unwrap ( ) ;
73+ assert_eq ! ( db. get( key ) . unwrap( ) , Some ( "value" . into( ) ) ) ;
7274 }
7375
7476 #[ test]
7577 fn different_tables ( ) {
7678 table ! (
7779 /// vec to vec
78- ( TableA ) Vec < u8 > => Vec <u8 >
80+ ( TableA ) NodeHash => Vec <u8 >
7981 ) ;
8082 table ! (
8183 /// vec to vec
82- ( TableB ) Vec < u8 > => Vec <u8 >
84+ ( TableB ) NodeHash => Vec <u8 >
8385 ) ;
8486 let tables = [ table_info ! ( TableA ) , table_info ! ( TableB ) ]
8587 . into_iter ( )
@@ -88,8 +90,9 @@ mod test {
8890 let inner_db = Arc :: new ( Database :: create ( None , & tables) . unwrap ( ) ) ;
8991 let db_a = LibmdbxTrieDB :: < TableA > :: new ( inner_db. clone ( ) ) ;
9092 let db_b = LibmdbxTrieDB :: < TableB > :: new ( inner_db. clone ( ) ) ;
91- db_a. put ( "hello" . into ( ) , "value" . into ( ) ) . unwrap ( ) ;
92- assert_eq ! ( db_b. get( "hello" . into( ) ) . unwrap( ) , None ) ;
93+ let key = NodeHash :: from_encoded_raw ( b"hello" ) ;
94+ db_a. put ( key, "value" . into ( ) ) . unwrap ( ) ;
95+ assert_eq ! ( db_b. get( key) . unwrap( ) , None ) ;
9396 }
9497
9598 #[ test]
0 commit comments