@@ -40,17 +40,59 @@ type CustomRetryPolicy = FilteredRetryPolicy<
4040
4141/// A [`KVStoreSync`] implementation that writes to and reads from a [VSS](https://github.com/lightningdevkit/vss-server/blob/main/README.md) backend.
4242pub struct VssStore {
43+ inner : Arc < VssStoreInner > ,
44+ runtime : Arc < Runtime > ,
45+ }
46+
47+ impl VssStore {
48+ pub ( crate ) fn new (
49+ base_url : String , store_id : String , vss_seed : [ u8 ; 32 ] ,
50+ header_provider : Arc < dyn VssHeaderProvider > , runtime : Arc < Runtime > ,
51+ ) -> Self {
52+ let inner = Arc :: new ( VssStoreInner :: new ( base_url, store_id, vss_seed, header_provider) ) ;
53+ Self { inner, runtime }
54+ }
55+ }
56+
57+ impl KVStoreSync for VssStore {
58+ fn read (
59+ & self , primary_namespace : & str , secondary_namespace : & str , key : & str ,
60+ ) -> io:: Result < Vec < u8 > > {
61+ let fut = self . inner . read_internal ( primary_namespace, secondary_namespace, key) ;
62+ self . runtime . block_on ( fut)
63+ }
64+
65+ fn write (
66+ & self , primary_namespace : & str , secondary_namespace : & str , key : & str , buf : Vec < u8 > ,
67+ ) -> io:: Result < ( ) > {
68+ let fut = self . inner . write_internal ( primary_namespace, secondary_namespace, key, buf) ;
69+ self . runtime . block_on ( fut)
70+ }
71+
72+ fn remove (
73+ & self , primary_namespace : & str , secondary_namespace : & str , key : & str , lazy : bool ,
74+ ) -> io:: Result < ( ) > {
75+ let fut = self . inner . remove_internal ( primary_namespace, secondary_namespace, key, lazy) ;
76+ self . runtime . block_on ( fut)
77+ }
78+
79+ fn list ( & self , primary_namespace : & str , secondary_namespace : & str ) -> io:: Result < Vec < String > > {
80+ let fut = self . inner . list_internal ( primary_namespace, secondary_namespace) ;
81+ self . runtime . block_on ( fut)
82+ }
83+ }
84+
85+ struct VssStoreInner {
4386 client : VssClient < CustomRetryPolicy > ,
4487 store_id : String ,
45- runtime : Arc < Runtime > ,
4688 storable_builder : StorableBuilder < RandEntropySource > ,
4789 key_obfuscator : KeyObfuscator ,
4890}
4991
50- impl VssStore {
92+ impl VssStoreInner {
5193 pub ( crate ) fn new (
5294 base_url : String , store_id : String , vss_seed : [ u8 ; 32 ] ,
53- header_provider : Arc < dyn VssHeaderProvider > , runtime : Arc < Runtime > ,
95+ header_provider : Arc < dyn VssHeaderProvider > ,
5496 ) -> Self {
5597 let ( data_encryption_key, obfuscation_master_key) =
5698 derive_data_encryption_and_obfuscation_keys ( & vss_seed) ;
@@ -70,7 +112,7 @@ impl VssStore {
70112 } ) as _ ) ;
71113
72114 let client = VssClient :: new_with_headers ( base_url, retry_policy, header_provider) ;
73- Self { client, store_id, runtime , storable_builder, key_obfuscator }
115+ Self { client, store_id, storable_builder, key_obfuscator }
74116 }
75117
76118 fn build_key (
@@ -228,34 +270,6 @@ impl VssStore {
228270 }
229271}
230272
231- impl KVStoreSync for VssStore {
232- fn read (
233- & self , primary_namespace : & str , secondary_namespace : & str , key : & str ,
234- ) -> io:: Result < Vec < u8 > > {
235- let fut = self . read_internal ( primary_namespace, secondary_namespace, key) ;
236- self . runtime . block_on ( fut)
237- }
238-
239- fn write (
240- & self , primary_namespace : & str , secondary_namespace : & str , key : & str , buf : Vec < u8 > ,
241- ) -> io:: Result < ( ) > {
242- let fut = self . write_internal ( primary_namespace, secondary_namespace, key, buf) ;
243- self . runtime . block_on ( fut)
244- }
245-
246- fn remove (
247- & self , primary_namespace : & str , secondary_namespace : & str , key : & str , lazy : bool ,
248- ) -> io:: Result < ( ) > {
249- let fut = self . remove_internal ( primary_namespace, secondary_namespace, key, lazy) ;
250- self . runtime . block_on ( fut)
251- }
252-
253- fn list ( & self , primary_namespace : & str , secondary_namespace : & str ) -> io:: Result < Vec < String > > {
254- let fut = self . list_internal ( primary_namespace, secondary_namespace) ;
255- self . runtime . block_on ( fut)
256- }
257- }
258-
259273fn derive_data_encryption_and_obfuscation_keys ( vss_seed : & [ u8 ; 32 ] ) -> ( [ u8 ; 32 ] , [ u8 ; 32 ] ) {
260274 let hkdf = |initial_key_material : & [ u8 ] , salt : & [ u8 ] | -> [ u8 ; 32 ] {
261275 let mut engine = HmacEngine :: < sha256:: Hash > :: new ( salt) ;
0 commit comments