@@ -40,17 +40,59 @@ type CustomRetryPolicy = FilteredRetryPolicy<
40
40
41
41
/// A [`KVStoreSync`] implementation that writes to and reads from a [VSS](https://github.com/lightningdevkit/vss-server/blob/main/README.md) backend.
42
42
pub 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 {
43
86
client : VssClient < CustomRetryPolicy > ,
44
87
store_id : String ,
45
- runtime : Arc < Runtime > ,
46
88
storable_builder : StorableBuilder < RandEntropySource > ,
47
89
key_obfuscator : KeyObfuscator ,
48
90
}
49
91
50
- impl VssStore {
92
+ impl VssStoreInner {
51
93
pub ( crate ) fn new (
52
94
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 > ,
54
96
) -> Self {
55
97
let ( data_encryption_key, obfuscation_master_key) =
56
98
derive_data_encryption_and_obfuscation_keys ( & vss_seed) ;
@@ -70,7 +112,7 @@ impl VssStore {
70
112
} ) as _ ) ;
71
113
72
114
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 }
74
116
}
75
117
76
118
fn build_key (
@@ -228,34 +270,6 @@ impl VssStore {
228
270
}
229
271
}
230
272
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
-
259
273
fn derive_data_encryption_and_obfuscation_keys ( vss_seed : & [ u8 ; 32 ] ) -> ( [ u8 ; 32 ] , [ u8 ; 32 ] ) {
260
274
let hkdf = |initial_key_material : & [ u8 ] , salt : & [ u8 ] | -> [ u8 ; 32 ] {
261
275
let mut engine = HmacEngine :: < sha256:: Hash > :: new ( salt) ;
0 commit comments