@@ -19,10 +19,11 @@ use bitcoind_async_client::{traits::Reader, Client};
19
19
use errors:: InitError ;
20
20
use jsonrpsee:: Methods ;
21
21
use rpc_client:: sync_client;
22
+ use strata_asm_proto_checkpoint_txs:: { CHECKPOINT_V0_SUBPROTOCOL_ID , OL_STF_CHECKPOINT_TX_TYPE } ;
22
23
use strata_btcio:: {
23
24
broadcaster:: { spawn_broadcaster_task, L1BroadcastHandle } ,
24
25
reader:: query:: bitcoin_data_reader_task,
25
- writer:: start_envelope_task,
26
+ writer:: { start_envelope_task, EnvelopeTagEncoder } ,
26
27
} ;
27
28
use strata_common:: {
28
29
logging,
@@ -39,7 +40,11 @@ use strata_db::{
39
40
} ;
40
41
use strata_eectl:: engine:: { ExecEngineCtl , L2BlockRef } ;
41
42
use strata_evmexec:: { engine:: RpcExecEngineCtl , EngineRpcClient } ;
42
- use strata_primitives:: params:: { Params , ProofPublishMode } ;
43
+ use strata_l1_txfmt:: MagicBytes ;
44
+ use strata_primitives:: {
45
+ l1:: payload:: L1PayloadType ,
46
+ params:: { Params , ProofPublishMode } ,
47
+ } ;
43
48
use strata_rpc_api:: {
44
49
StrataAdminApiServer , StrataApiServer , StrataDebugApiServer , StrataSequencerApiServer ,
45
50
} ;
@@ -401,6 +406,26 @@ fn start_sequencer_tasks(
401
406
) ) ?;
402
407
403
408
let btcio_config = Arc :: new ( config. btcio . clone ( ) ) ;
409
+ let magic_bytes: MagicBytes = params. rollup ( ) . magic_bytes ;
410
+ // NOTE: Only checkpoint envelopes are supported today. When new SPS-50 tagged transactions
411
+ // are introduced, extend this encoder so btcio stays agnostic of protocol-specific details.
412
+
413
+ let tag_encoder: Arc < EnvelopeTagEncoder > =
414
+ Arc :: new ( move |payload| -> anyhow:: Result < Vec < u8 > > {
415
+ match payload. payload_type ( ) {
416
+ L1PayloadType :: Checkpoint => {
417
+ let mut tag = Vec :: with_capacity ( 6 ) ;
418
+ tag. extend_from_slice ( & magic_bytes) ;
419
+ tag. push ( CHECKPOINT_V0_SUBPROTOCOL_ID ) ;
420
+ tag. push ( OL_STF_CHECKPOINT_TX_TYPE ) ;
421
+ Ok ( tag)
422
+ }
423
+ other => Err ( anyhow ! (
424
+ "unsupported SPS-50 tag for payload type {:?}" ,
425
+ other
426
+ ) ) ,
427
+ }
428
+ } ) ;
404
429
405
430
// Start envelope tasks
406
431
let envelope_handle = start_envelope_task (
@@ -413,6 +438,7 @@ fn start_sequencer_tasks(
413
438
status_channel. clone ( ) ,
414
439
pool. clone ( ) ,
415
440
broadcast_handle. clone ( ) ,
441
+ tag_encoder,
416
442
) ?;
417
443
418
444
let template_manager_handle = start_template_manager_task ( & ctx, executor) ;
0 commit comments