Skip to content

Commit 7b5132a

Browse files
committed
feat: emit AsmStfUpdate log from admin handler
1 parent a5dcf33 commit 7b5132a

File tree

4 files changed

+45
-2
lines changed

4 files changed

+45
-2
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/subprotocols/admin/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ workspace = true
99
[dependencies]
1010
strata-asm-checkpoint-msgs.workspace = true
1111
strata-asm-common.workspace = true
12+
strata-asm-logs.workspace = true
1213
strata-asm-params.workspace = true
1314
strata-asm-txs-admin.workspace = true
1415
strata-crypto.workspace = true

crates/subprotocols/admin/src/handler.rs

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
use strata_asm_checkpoint_msgs::CheckpointIncomingMsg;
22
use strata_asm_common::{
3-
MsgRelayer,
3+
AsmLogEntry, MsgRelayer,
44
logging::{error, info},
55
};
6+
use strata_asm_logs::AsmStfUpdate;
67
use strata_asm_txs_admin::{
78
actions::{MultisigAction, UpdateAction, updates::predicate::ProofType},
89
parser::SignedPayload,
@@ -56,7 +57,13 @@ pub(crate) fn handle_pending_updates(
5657
let (key, kind) = update.into_inner();
5758
match kind {
5859
ProofType::Asm => {
59-
// TODO(STR-1721): Emit ASM Log
60+
let log_entry = AsmLogEntry::from_log(&AsmStfUpdate::new(key))
61+
.expect("AsmStfUpdate encoding is infallible");
62+
relayer.emit_log(log_entry);
63+
info!(
64+
%update_id,
65+
"Emitted ASM STF verifying key update log",
66+
);
6067
}
6168
ProofType::OLStf => {
6269
relay_checkpoint_predicate(relayer, key);
@@ -183,6 +190,7 @@ mod tests {
183190
use rand::{rngs::OsRng, seq::SliceRandom, thread_rng};
184191
use strata_asm_checkpoint_msgs::CheckpointIncomingMsg;
185192
use strata_asm_common::{AsmLogEntry, InterprotoMsg, MsgRelayer};
193+
use strata_asm_logs::AsmStfUpdate;
186194
use strata_asm_params::{AdministrationInitConfig, Role};
187195
use strata_asm_txs_admin::{
188196
actions::{
@@ -502,6 +510,38 @@ mod tests {
502510
}
503511
}
504512

513+
#[test]
514+
fn test_asm_verifying_key_update_emits_log() {
515+
let (params, _, _) = create_test_params();
516+
let mut state = AdministrationSubprotoState::new(&params);
517+
let mut relayer = MockRelayer::<CheckpointIncomingMsg>::new();
518+
519+
let predicate = PredicateKey::always_accept();
520+
521+
let update = PredicateUpdate::new(predicate.clone(), ProofType::Asm);
522+
let update_id = state.next_update_id();
523+
let activation_height = 42;
524+
state.enqueue(QueuedUpdate::new(
525+
update_id,
526+
update.into(),
527+
activation_height,
528+
));
529+
530+
handle_pending_updates(&mut state, &mut relayer, activation_height);
531+
532+
assert!(state.queued().is_empty());
533+
// No inter-protocol messages should be sent for ASM updates
534+
assert!(relayer.messages().is_empty());
535+
// Exactly one log should be emitted
536+
assert_eq!(relayer.logs.len(), 1);
537+
538+
let log_entry = &relayer.logs[0];
539+
let asm_update = log_entry
540+
.try_into_log::<AsmStfUpdate>()
541+
.expect("log should deserialize as AsmStfUpdate");
542+
assert_eq!(asm_update.new_predicate(), &predicate);
543+
}
544+
505545
/// Test that cancel actions properly remove queued updates:
506546
/// - First queue 5 update actions.
507547
/// - Then cancel each one individually.

guest-builder/sp1/guest-asm/Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)