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