Skip to content

Commit 186481e

Browse files
refactor: make server signing related configs optional (#47)
* refactor: update signing related configs to be optional * fix: handle missing queue config gracefully in worker scheduling
1 parent 5bbcd7d commit 186481e

File tree

5 files changed

+22
-13
lines changed

5 files changed

+22
-13
lines changed

src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ struct Config {
7777
#[serde(default)]
7878
queues: HashSet<queue::Config>,
7979
u5c: ledger::u5c::Config,
80-
signing: signing::Config,
80+
signing: Option<signing::Config>,
8181
}
8282

8383
impl Config {

src/pipeline/ingest.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ pub struct Stage {
2222
storage: Arc<SqliteTransaction>,
2323
priority: Arc<Priority>,
2424
u5c_adapter: Arc<dyn U5cDataAdapter>,
25-
secret_adapter: Arc<dyn SigningAdapter>,
25+
signing_adapter: Option<Arc<dyn SigningAdapter>>,
2626
config: Config,
2727
pub output: OutputPort<Vec<u8>>,
2828
}
@@ -32,14 +32,14 @@ impl Stage {
3232
storage: Arc<SqliteTransaction>,
3333
priority: Arc<Priority>,
3434
u5c_adapter: Arc<dyn U5cDataAdapter>,
35-
secret_adapter: Arc<dyn SigningAdapter>,
35+
signing_adapter: Option<Arc<dyn SigningAdapter>>,
3636
config: Config,
3737
) -> Self {
3838
Self {
3939
storage,
4040
priority,
4141
u5c_adapter,
42-
secret_adapter,
42+
signing_adapter,
4343
config,
4444
output: Default::default(),
4545
}
@@ -91,13 +91,13 @@ impl gasket::framework::Worker<Stage> for Worker {
9191
.config
9292
.queues
9393
.get(&tx.queue)
94-
.map(|config| config.server_signing)
95-
.unwrap_or(false);
94+
.ok_or(WorkerError::Retry)?
95+
.server_signing;
9696

9797
if should_sign {
98-
info!("Signing transaction {} with server key", tx.id);
99-
tx.raw = stage.secret_adapter.sign(tx.raw).await.or_retry()?;
100-
info!("Transaction {} signed successfully", tx.id);
98+
let signer = stage.signing_adapter.as_ref().ok_or(WorkerError::Retry)?;
99+
tx.raw = signer.sign(tx.raw).await.or_retry()?;
100+
info!(tx_id = %tx.id, "Transaction signed with server key");
101101
}
102102

103103
let metx = MultiEraTx::decode(&tx.raw).map_err(|_| WorkerError::Recv)?;

src/pipeline/mod.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use crate::{
1010
},
1111
network::peer_manager::PeerManager,
1212
queue::priority::Priority,
13-
signing::hashicorp::HashicorpVaultClient,
13+
signing::{hashicorp::HashicorpVaultClient, SigningAdapter},
1414
storage::{
1515
sqlite::{SqliteCursor, SqliteTransaction},
1616
Cursor,
@@ -48,13 +48,20 @@ pub async fn run(
4848
let peer_manager = Arc::new(peer_manager);
4949

5050
let priority = Arc::new(Priority::new(tx_storage.clone(), config.queues.clone()));
51-
let secret_adapter = Arc::new(HashicorpVaultClient::new(config.signing.clone())?);
51+
let signing_adapter: Option<Arc<dyn SigningAdapter>> = config
52+
.signing
53+
.as_ref()
54+
.map(|cfg| {
55+
HashicorpVaultClient::new(cfg.clone())
56+
.map(|c| Arc::new(c) as Arc<dyn SigningAdapter>)
57+
})
58+
.transpose()?;
5259

5360
let mut ingest = ingest::Stage::new(
5461
tx_storage.clone(),
5562
priority.clone(),
5663
u5c_data_adapter.clone(),
57-
secret_adapter,
64+
signing_adapter,
5865
config.clone(),
5966
);
6067

src/queue/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ pub struct Config {
1515
pub weight: u8,
1616
#[serde(default)]
1717
pub chained: bool,
18+
#[serde(default)]
1819
pub server_signing: bool,
1920
}
2021
impl Default for Config {

src/server/submit.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ impl SubmitService for SubmitServiceImpl {
6969
self.queues.iter().find(|q| q.name == *DEFAULT_QUEUE)
7070
})
7171
})
72-
.is_none_or(|config| !config.server_signing);
72+
.map(|cfg| cfg.server_signing)
73+
.is_none_or(|server_signing| !server_signing);
7374

7475
if should_validate {
7576
if let Err(error) = validate_tx(&metx, self.u5c_adapter.clone()).await {

0 commit comments

Comments
 (0)