Skip to content

Commit b2719f9

Browse files
committed
add builder tx in standard builder
1 parent 76150f5 commit b2719f9

File tree

6 files changed

+120
-78
lines changed

6 files changed

+120
-78
lines changed

crates/op-rbuilder/src/builders/builder_tx.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ impl From<BuilderTransactionError> for PayloadBuilderError {
5959
}
6060
}
6161

62-
pub trait BuilderTransactions {
62+
pub trait BuilderTransactions: Debug {
6363
fn simulate_builder_txs<DB, Extra: Debug + Default>(
6464
&self,
6565
info: &mut ExecutionInfo<Extra>,
@@ -132,7 +132,7 @@ pub trait BuilderTransactions {
132132

133133
// Scaffolding for how to construct the end of block builder transaction
134134
// This will be the regular end of block transaction without the TEE key
135-
#[derive(Clone)]
135+
#[derive(Debug, Clone)]
136136
pub struct StandardBuilderTx {
137137
#[allow(dead_code)]
138138
pub signer: Option<Signer>,

crates/op-rbuilder/src/builders/flashblocks/service.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ where
7171
pool: Pool,
7272
_: OpEvmConfig,
7373
) -> eyre::Result<PayloadBuilderHandle<<Node::Types as NodeTypes>::Payload>> {
74-
tracing::debug!("Spawning flashblocks payload builder service");
7574
let signer = self.0.builder_signer;
7675
if self.0.flashtestations_config.flashtestations_enabled {
7776
let flashtestations_builder_tx = match bootstrap_flashtestations(
@@ -83,7 +82,7 @@ where
8382
{
8483
Ok(service) => service,
8584
Err(e) => {
86-
tracing::warn!(error = %e, "Failed to spawn flashtestations service, falling back to standard builder tx");
85+
tracing::warn!(error = %e, "Failed to bootstrap flashtestations, falling back to standard builder tx");
8786
return self.spawn_payload_builder_service(
8887
ctx,
8988
pool,
Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
use payload::StandardPayloadBuilderBuilder;
2-
use reth_node_builder::components::BasicPayloadServiceBuilder;
3-
4-
use crate::traits::{NodeBounds, PoolBounds};
1+
use crate::{
2+
builders::standard::service::StandardServiceBuilder,
3+
traits::{NodeBounds, PoolBounds},
4+
};
55

66
use super::BuilderConfig;
77

88
mod payload;
9+
mod service;
910

1011
/// Block building strategy that builds blocks using the standard approach by
1112
/// producing blocks every chain block time.
@@ -15,7 +16,7 @@ impl super::PayloadBuilder for StandardBuilder {
1516
type Config = ();
1617

1718
type ServiceBuilder<Node, Pool>
18-
= BasicPayloadServiceBuilder<StandardPayloadBuilderBuilder>
19+
= StandardServiceBuilder
1920
where
2021
Node: NodeBounds,
2122
Pool: PoolBounds;
@@ -27,8 +28,6 @@ impl super::PayloadBuilder for StandardBuilder {
2728
Node: NodeBounds,
2829
Pool: PoolBounds,
2930
{
30-
Ok(BasicPayloadServiceBuilder::new(
31-
StandardPayloadBuilderBuilder(config),
32-
))
31+
Ok(StandardServiceBuilder(config))
3332
}
3433
}

crates/op-rbuilder/src/builders/standard/payload.rs

Lines changed: 2 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
11
use crate::{
2-
builders::{
3-
builder_tx::StandardBuilderTx, generator::BuildArguments, BuilderConfig,
4-
BuilderTransactions,
5-
},
6-
flashtestations::service::bootstrap_flashtestations,
2+
builders::{generator::BuildArguments, BuilderConfig, BuilderTransactions},
73
metrics::OpRBuilderMetrics,
84
primitives::reth::ExecutionInfo,
9-
traits::{ClientBounds, NodeBounds, PayloadTxsBounds, PoolBounds},
5+
traits::{ClientBounds, PayloadTxsBounds, PoolBounds},
106
};
117
use alloy_consensus::{
128
constants::EMPTY_WITHDRAWALS, proofs, BlockBody, Header, EMPTY_OMMER_ROOT_HASH,
@@ -18,7 +14,6 @@ use reth_basic_payload_builder::{BuildOutcome, BuildOutcomeKind, MissingPayloadB
1814
use reth_chain_state::{ExecutedBlock, ExecutedBlockWithTrieUpdates, ExecutedTrieUpdates};
1915
use reth_evm::{execute::BlockBuilder, ConfigureEvm};
2016
use reth_node_api::{Block, PayloadBuilderError};
21-
use reth_node_builder::{components::PayloadBuilderBuilder, BuilderContext};
2217
use reth_optimism_consensus::{calculate_receipt_root_no_memo_optimism, isthmus};
2318
use reth_optimism_evm::{OpEvmConfig, OpNextBlockEnvAttributes};
2419
use reth_optimism_forks::OpHardforks;
@@ -41,64 +36,6 @@ use tracing::{error, info, warn};
4136

4237
use super::super::context::OpPayloadBuilderCtx;
4338

44-
pub struct StandardPayloadBuilderBuilder(pub BuilderConfig<()>);
45-
46-
impl<Node, Pool> PayloadBuilderBuilder<Node, Pool, OpEvmConfig> for StandardPayloadBuilderBuilder
47-
where
48-
Node: NodeBounds,
49-
Pool: PoolBounds,
50-
{
51-
type PayloadBuilder = StandardOpPayloadBuilder<Pool, Node::Provider, StandardBuilderTx>;
52-
53-
async fn build_payload_builder(
54-
self,
55-
ctx: &BuilderContext<Node>,
56-
pool: Pool,
57-
_evm_config: OpEvmConfig,
58-
) -> eyre::Result<Self::PayloadBuilder> {
59-
let signer = self.0.builder_signer;
60-
if self.0.flashtestations_config.flashtestations_enabled {
61-
let _flashtestation_builder_tx = match bootstrap_flashtestations(
62-
self.0.flashtestations_config.clone(),
63-
ctx,
64-
signer,
65-
)
66-
.await
67-
{
68-
Ok(flashtestation_builder_tx) => flashtestation_builder_tx,
69-
Err(e) => {
70-
tracing::warn!(error = %e, "Failed to spawn flashtestations service, falling back to standard builder tx");
71-
return Ok(StandardOpPayloadBuilder::new(
72-
OpEvmConfig::optimism(ctx.chain_spec()),
73-
pool,
74-
ctx.provider().clone(),
75-
self.0.clone(),
76-
StandardBuilderTx::new(self.0.builder_signer),
77-
));
78-
}
79-
};
80-
81-
if self.0.flashtestations_config.enable_block_proofs {
82-
// return Ok(StandardOpPayloadBuilder::new(
83-
// OpEvmConfig::optimism(ctx.chain_spec()),
84-
// pool,
85-
// ctx.provider().clone(),
86-
// self.0.clone(),
87-
// flashtestation_builder_tx,
88-
// ));
89-
}
90-
}
91-
92-
Ok(StandardOpPayloadBuilder::new(
93-
OpEvmConfig::optimism(ctx.chain_spec()),
94-
pool,
95-
ctx.provider().clone(),
96-
self.0.clone(),
97-
StandardBuilderTx::new(self.0.builder_signer),
98-
))
99-
}
100-
}
101-
10239
/// Optimism's payload builder
10340
#[derive(Debug, Clone)]
10441
pub struct StandardOpPayloadBuilder<Pool, Client, BuilderTx, Txs = ()> {
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
use reth_basic_payload_builder::{BasicPayloadJobGenerator, BasicPayloadJobGeneratorConfig};
2+
use reth_node_api::NodeTypes;
3+
use reth_node_builder::{components::PayloadServiceBuilder, BuilderContext};
4+
use reth_optimism_evm::OpEvmConfig;
5+
use reth_payload_builder::{PayloadBuilderHandle, PayloadBuilderService};
6+
use reth_provider::CanonStateSubscriptions;
7+
8+
use crate::{
9+
builders::{
10+
standard::payload::StandardOpPayloadBuilder, BuilderConfig, BuilderTransactions,
11+
StandardBuilderTx,
12+
},
13+
flashtestations::service::bootstrap_flashtestations,
14+
traits::{NodeBounds, PoolBounds},
15+
};
16+
17+
pub struct StandardServiceBuilder(pub BuilderConfig<()>);
18+
19+
impl StandardServiceBuilder {
20+
pub fn spawn_payload_builder_service<Node, Pool, BuilderTx>(
21+
self,
22+
evm_config: OpEvmConfig,
23+
ctx: &BuilderContext<Node>,
24+
pool: Pool,
25+
builder_tx: BuilderTx,
26+
) -> eyre::Result<PayloadBuilderHandle<<Node::Types as NodeTypes>::Payload>>
27+
where
28+
Node: NodeBounds,
29+
Pool: PoolBounds,
30+
BuilderTx: BuilderTransactions + Unpin + Clone + Send + Sync + 'static,
31+
{
32+
let payload_builder = StandardOpPayloadBuilder::new(
33+
evm_config,
34+
pool,
35+
ctx.provider().clone(),
36+
self.0.clone(),
37+
builder_tx,
38+
);
39+
40+
let conf = ctx.config().builder.clone();
41+
42+
let payload_job_config = BasicPayloadJobGeneratorConfig::default()
43+
.interval(conf.interval)
44+
.deadline(conf.deadline)
45+
.max_payload_tasks(conf.max_payload_tasks);
46+
47+
let payload_generator = BasicPayloadJobGenerator::with_builder(
48+
ctx.provider().clone(),
49+
ctx.task_executor().clone(),
50+
payload_job_config,
51+
payload_builder,
52+
);
53+
let (payload_service, payload_service_handle) =
54+
PayloadBuilderService::new(payload_generator, ctx.provider().canonical_state_stream());
55+
56+
ctx.task_executor()
57+
.spawn_critical("payload builder service", Box::pin(payload_service));
58+
59+
Ok(payload_service_handle)
60+
}
61+
}
62+
63+
impl<Node, Pool> PayloadServiceBuilder<Node, Pool, OpEvmConfig> for StandardServiceBuilder
64+
where
65+
Node: NodeBounds,
66+
Pool: PoolBounds,
67+
{
68+
async fn spawn_payload_builder_service(
69+
self,
70+
ctx: &BuilderContext<Node>,
71+
pool: Pool,
72+
evm_config: OpEvmConfig,
73+
) -> eyre::Result<PayloadBuilderHandle<<Node::Types as NodeTypes>::Payload>> {
74+
let signer = self.0.builder_signer;
75+
if self.0.flashtestations_config.flashtestations_enabled {
76+
let flashtestation_builder_tx = match bootstrap_flashtestations(
77+
self.0.flashtestations_config.clone(),
78+
ctx,
79+
signer,
80+
)
81+
.await
82+
{
83+
Ok(flashtestation_builder_tx) => flashtestation_builder_tx,
84+
Err(e) => {
85+
tracing::warn!(error = %e, "Failed to bootstrap flashtestations, falling back to standard builder tx");
86+
return self.spawn_payload_builder_service(
87+
evm_config,
88+
ctx,
89+
pool,
90+
StandardBuilderTx::new(signer),
91+
);
92+
}
93+
};
94+
95+
if self.0.flashtestations_config.enable_block_proofs {
96+
return self.spawn_payload_builder_service(
97+
evm_config,
98+
ctx,
99+
pool,
100+
flashtestation_builder_tx,
101+
);
102+
}
103+
}
104+
105+
self.spawn_payload_builder_service(evm_config, ctx, pool, StandardBuilderTx::new(signer))
106+
}
107+
}

crates/op-rbuilder/src/flashtestations/builder_tx.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ pub struct FlashtestationsBuilderTxArgs {
4343
pub registered: bool,
4444
}
4545

46-
#[derive(Clone)]
46+
#[derive(Debug, Clone)]
4747
pub struct FlashtestationsBuilderTx {
4848
// Attestation for the builder
4949
attestation: Vec<u8>,

0 commit comments

Comments
 (0)