Skip to content

Commit bc06b09

Browse files
committed
shim,nmt: expunge unwrap
Closes #38
1 parent 395c002 commit bc06b09

File tree

6 files changed

+53
-52
lines changed

6 files changed

+53
-52
lines changed

sugondat-nmt/src/ns_proof.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@ impl NamespaceProof {
3838
if leaf.len() != 68 {
3939
return Err(VerifyErr::MalformedLeaf(i));
4040
}
41-
let leaf = NmtLeaf::from_raw_bytes(leaf.as_slice().try_into().unwrap());
41+
let leaf = NmtLeaf::from_raw_bytes(
42+
leaf.as_slice().try_into().expect("verified to be 68 bytes"),
43+
);
4244
if leaf.blob_hash != blob_hashes[i] {
4345
return Err(VerifyErr::BlobHashMismatch(i));
4446
}

sugondat-shim/src/dock/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use crate::sugondat_rpc;
88

99
mod rollkit;
1010
mod sovereign;
11+
mod rpc_error;
1112

1213
/// A configuration for initializing all docks.
1314
pub struct Config {

sugondat-shim/src/dock/rollkit.rs

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@ use jsonrpsee::Methods;
22
use sugondat_shim_common_rollkit::{Blob, JsonRPCError, RollkitRPCServer};
33
use tracing::{debug, info};
44

5+
use super::rpc_error as err;
56
use crate::{key::Keypair, sugondat_rpc};
67

78
/// Registers the sovereign dock in the given methods.
89
pub fn register(methods: &mut Methods, config: &super::Config) {
910
debug!("enabling rollkit adapter dock");
1011
let dock = RollkitDock::new(config.client.clone(), config.submit_key.clone());
11-
methods.merge(dock.into_rpc()).unwrap();
12+
methods
13+
.merge(dock.into_rpc())
14+
.expect("adapter namespace must be unique");
1215
}
1316

1417
struct RollkitDock {
@@ -53,33 +56,13 @@ impl RollkitRPCServer for RollkitDock {
5356
self.client
5457
.submit_blob(blob.data, namespace, submit_key.clone())
5558
.await
56-
.unwrap();
59+
.map_err(|_| err::submission_error())?;
5760
}
5861
// TODO:
5962
Ok(0)
6063
}
6164
}
6265

63-
mod err {
64-
use sugondat_shim_common_rollkit::JsonRPCError;
65-
66-
pub fn bad_namespace() -> JsonRPCError {
67-
JsonRPCError::owned(
68-
jsonrpsee::types::error::INVALID_PARAMS_CODE,
69-
"Invalid namespace",
70-
None::<()>,
71-
)
72-
}
73-
74-
pub fn no_signing_key() -> JsonRPCError {
75-
JsonRPCError::owned(
76-
jsonrpsee::types::error::INTERNAL_ERROR_CODE,
77-
"Internal Error: no key for signing blobs",
78-
None::<()>,
79-
)
80-
}
81-
}
82-
8366
/// Parses the namespace from a given string encoded as hex.
8467
///
8568
/// Note that rollkit uses arbitrary length namespaces, but sugondat uses 4-byte namespaces. For
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
use jsonrpsee::types::error::ErrorObjectOwned;
2+
3+
pub fn bad_namespace() -> ErrorObjectOwned {
4+
ErrorObjectOwned::owned(
5+
jsonrpsee::types::error::INVALID_PARAMS_CODE,
6+
"Invalid namespace",
7+
None::<()>,
8+
)
9+
}
10+
11+
pub fn no_signing_key() -> ErrorObjectOwned {
12+
ErrorObjectOwned::owned(
13+
jsonrpsee::types::error::INTERNAL_ERROR_CODE,
14+
"Internal Error: no key for signing blobs",
15+
None::<()>,
16+
)
17+
}
18+
19+
pub fn submission_error() -> ErrorObjectOwned {
20+
ErrorObjectOwned::owned(
21+
jsonrpsee::types::error::INTERNAL_ERROR_CODE,
22+
"Internal Error: failed to submit blob",
23+
None::<()>,
24+
)
25+
}

sugondat-shim/src/dock/sovereign.rs

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@ use jsonrpsee::{types::ErrorObjectOwned, Methods};
22
use sugondat_shim_common_sovereign::{Block, SovereignRPCServer};
33
use tracing::{debug, info};
44

5+
use super::rpc_error as err;
56
use crate::{key::Keypair, sugondat_rpc};
67

78
/// Registers the sovereign dock in the given methods.
89
pub fn register(methods: &mut Methods, config: &super::Config) {
910
debug!("enabling sovereign adapter dock");
1011
let dock = SovereignDock::new(config.client.clone(), config.submit_key.clone());
11-
methods.merge(dock.into_rpc()).unwrap();
12+
methods
13+
.merge(dock.into_rpc())
14+
.expect("adapter namespace must be unique");
1215
}
1316

1417
struct SovereignDock {
@@ -58,22 +61,15 @@ impl SovereignRPCServer for SovereignDock {
5861
namespace: sugondat_nmt::Namespace,
5962
) -> Result<(), ErrorObjectOwned> {
6063
info!("submit_blob({}, {:?})", blob.len(), namespace);
61-
62-
let submit_key = match self.submit_key.as_ref() {
63-
Some(k) => k.clone(),
64-
None => {
65-
return Err(ErrorObjectOwned::owned(
66-
jsonrpsee::types::error::INTERNAL_ERROR_CODE,
67-
"Internal Error: no key for signing blobs",
68-
None::<()>,
69-
))
70-
}
71-
};
72-
64+
let submit_key = self
65+
.submit_key
66+
.as_ref()
67+
.cloned()
68+
.ok_or_else(err::no_signing_key)?;
7369
self.client
7470
.submit_blob(blob, namespace, submit_key)
7571
.await
76-
.unwrap();
72+
.map_err(|_| err::submission_error())?;
7773
Ok(())
7874
}
7975
}

sugondat-shim/src/sugondat_rpc.rs

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -150,22 +150,16 @@ fn extract_blobs(
150150
}
151151

152152
/// Examines the header and extracts the tree root committed as one of the logs.
153+
///
154+
/// Returns None if no tree root was found or if the tree root was malformed.
153155
fn tree_root(header: &Header) -> Option<sugondat_nmt::TreeRoot> {
154-
let mut nmt_root = None;
155-
for log in &header.digest.logs {
156-
match log {
157-
subxt::config::substrate::DigestItem::Other(ref bytes) => {
158-
if bytes.starts_with(b"snmt") {
159-
nmt_root = Some(sugondat_nmt::TreeRoot::from_raw_bytes(
160-
bytes[4..].try_into().unwrap(),
161-
));
162-
break;
163-
}
164-
}
165-
_ => {}
166-
}
167-
}
168-
nmt_root
156+
use subxt::config::substrate::DigestItem;
157+
let nmt_digest_bytes = header.digest.logs.iter().find_map(|log| match log {
158+
DigestItem::Other(ref bytes) if bytes.starts_with(b"snmt") => Some(&bytes[4..]),
159+
_ => None,
160+
})?;
161+
let nmt_root: [u8; 68] = nmt_digest_bytes.try_into().ok()?;
162+
Some(sugondat_nmt::TreeRoot::from_raw_bytes(&nmt_root))
169163
}
170164

171165
mod err {

0 commit comments

Comments
 (0)