@@ -4,8 +4,8 @@ use tracing::info;
44
55use self :: pbda:: {
66 da_service_server, Blob , CommitRequest , CommitResponse , GetIDsRequest , GetIDsResponse ,
7- GetProofsRequest , GetProofsResponse , GetRequest , GetResponse , MaxBlobSizeRequest ,
8- MaxBlobSizeResponse , SubmitRequest , SubmitResponse , ValidateRequest , ValidateResponse ,
7+ GetRequest , GetResponse , MaxBlobSizeRequest , MaxBlobSizeResponse , SubmitRequest ,
8+ SubmitResponse , ValidateRequest , ValidateResponse ,
99} ;
1010
1111use crate :: { ikura_rpc, key:: Keypair } ;
@@ -87,9 +87,7 @@ impl da_service_server::DaService for RollkitDock {
8787 }
8888
8989 async fn get ( & self , request : Request < GetRequest > ) -> Result < Response < GetResponse > , Status > {
90- let GetRequest { ids, namespace } = request. into_inner ( ) ;
91- // Deliberately ignore the namespace since blob ids uniquely identify the blobs.
92- let _ = namespace;
90+ let GetRequest { ids } = request. into_inner ( ) ;
9391 let mut cache = HashMap :: new ( ) ;
9492 let mut response = GetResponse { blobs : vec ! [ ] } ;
9593 for ( index, id) in ids. into_iter ( ) . enumerate ( ) {
@@ -130,12 +128,8 @@ impl da_service_server::DaService for RollkitDock {
130128 & self ,
131129 request : Request < GetIDsRequest > ,
132130 ) -> Result < Response < GetIDsResponse > , Status > {
133- let GetIDsRequest { namespace, height } = request. into_inner ( ) ;
134- let namespace = self . obtain_namespace ( namespace) ?;
135- info ! (
136- "retrieving IDs from namespace '{}' at {}" ,
137- & namespace, height
138- ) ;
131+ let GetIDsRequest { height } = request. into_inner ( ) ;
132+ info ! ( "retrieving IDs at {}" , height) ;
139133 let block_hash = self . client . await_finalized_height ( height) . await ;
140134 let Ok ( block) = self . client . await_block_at ( Some ( block_hash) ) . await else {
141135 return Err ( Status :: internal ( "failed to retrieve block number {height}" ) ) ;
@@ -144,7 +138,7 @@ impl da_service_server::DaService for RollkitDock {
144138 // Collect all extrinsic indices for blobs in the given namespace.
145139 let mut ids = Vec :: with_capacity ( block. blobs . len ( ) ) ;
146140 for blob in block. blobs {
147- if blob . namespace == namespace {
141+ if self . namespace . map_or ( true , |ns| ns == blob . namespace ) {
148142 let blob_id = BlobId {
149143 block_number : height,
150144 extrinsic_index : blob. extrinsic_index ,
@@ -165,20 +159,24 @@ impl da_service_server::DaService for RollkitDock {
165159 . as_ref ( )
166160 . cloned ( )
167161 . ok_or_else ( || Status :: failed_precondition ( "no key for signing blobs" ) ) ?;
162+ let namespace = self . namespace . ok_or_else ( || {
163+ Status :: failed_precondition ( "no namespace provided, and no default namespace set" )
164+ } ) ?;
168165 let SubmitRequest {
169- namespace,
170166 blobs,
171167 gas_price : _,
172168 } = request. into_inner ( ) ;
173- let namespace = self . obtain_namespace ( namespace) ?;
174- let mut response = SubmitResponse { ids : vec ! [ ] } ;
169+ let mut response = SubmitResponse {
170+ ids : vec ! [ ] ,
171+ proofs : vec ! [ ] ,
172+ } ;
175173 let blob_n = blobs. len ( ) ;
176174 for ( i, blob) in blobs. into_iter ( ) . enumerate ( ) {
177175 let data_hash = sha2_hash ( & blob. value ) ;
178176 info ! (
179177 "submitting blob {i}/{blob_n} (0x{}) to namespace {}" ,
180178 hex:: encode( & data_hash) ,
181- namespace
179+ namespace,
182180 ) ;
183181 let ( block_hash, extrinsic_index) = self
184182 . client
@@ -208,26 +206,11 @@ impl da_service_server::DaService for RollkitDock {
208206 } ;
209207 info ! ( "blob landed: {blob_id}" ) ;
210208 response. ids . push ( blob_id. into ( ) ) ;
209+ response. proofs . push ( pbda:: Proof { value : vec ! [ ] } ) ;
211210 }
212211 Ok ( Response :: new ( response) )
213212 }
214213
215- async fn get_proofs (
216- & self ,
217- request : Request < GetProofsRequest > ,
218- ) -> Result < Response < GetProofsResponse > , Status > {
219- // TODO: implement
220- // https://github.com/thrumdev/blobs/issues/257
221- let GetProofsRequest { ids, .. } = request. into_inner ( ) ;
222- let response = GetProofsResponse {
223- proofs : ids
224- . into_iter ( )
225- . map ( |_| pbda:: Proof { value : vec ! [ ] } )
226- . collect ( ) ,
227- } ;
228- Ok ( Response :: new ( response) )
229- }
230-
231214 async fn validate (
232215 & self ,
233216 request : Request < ValidateRequest > ,
@@ -258,38 +241,6 @@ impl da_service_server::DaService for RollkitDock {
258241 }
259242}
260243
261- impl RollkitDock {
262- /// Returns the namespace to be used, either from the request or from the configuration.
263- ///
264- /// If the namespace is not provided in the request, it will use the namespace from the
265- /// configuration.
266- fn obtain_namespace (
267- & self ,
268- supplied_ns : Option < pbda:: Namespace > ,
269- ) -> Result < ikura_nmt:: Namespace , Status > {
270- Ok ( match supplied_ns {
271- Some ( pbda:: Namespace {
272- value : raw_namespace_bytes,
273- } ) => {
274- let raw_namespace_bytes = raw_namespace_bytes. as_slice ( ) ;
275- if raw_namespace_bytes. len ( ) != 16 {
276- return Err ( Status :: invalid_argument ( "namespace must be 16 bytes long" ) ) ;
277- }
278- let mut namespace = [ 0u8 ; 16 ] ;
279- namespace. copy_from_slice ( raw_namespace_bytes) ;
280- ikura_nmt:: Namespace :: from_raw_bytes ( namespace)
281- }
282- None => {
283- if let Some ( namespace) = & self . namespace {
284- namespace. clone ( )
285- } else {
286- return Err ( Status :: invalid_argument ( "namespace must be provided" ) ) ;
287- }
288- }
289- } )
290- }
291- }
292-
293244fn sha2_hash ( data : & [ u8 ] ) -> [ u8 ; 32 ] {
294245 use sha2:: Digest ;
295246 sha2:: Sha256 :: digest ( data) . into ( )
0 commit comments