-
Notifications
You must be signed in to change notification settings - Fork 28
Description
hey! we're using op-rbuilder to build the credible layer block builder, using a fork of op-rbuilder. I summarized our experience using it below. Thanks for building such a solid foundation!
Enhanced Documentation
The documentation that exists is good! Some things like how testing works, how builders are structured and why they're structured the way they are only become clear after diving into the code. An architecture doc would help as both a reference and for those diving into the code for the first time.
Easier Implementation of New Builders
Creating a new builder is relatively straightforward when using the standard and flashblocks builders as reference. I did run into friction when having to satisfy trait bounds for both the service and payload builder.
For an SDK solution, I would suggest a template builder approach where you implement traits for ordering and execution. For example, if I wanted to build a new builder that modifies the EVM execution loop, I would have to implement a builder that implements execute_best_transactions
and ideally only have to worry about satisfying the trait fn signature for execute_best_transactions
.
In the example above, it would likely require the execute_best_transactions
signature to be changed, but IMO architecting it so that we just have to implement &self
-less functions would provide good UX for an SDK.
Local Development
Something like a script to send transactions while running the builder locally would be very useful for development, debugging and monitoring. Contender can be used for this but the friction to instantiate it is too much for a quick test. Builder playground is a fine tool for local testing, but does not work on Linux.
The testing framework is spectacular and incredibly useful for verifying core functionality(especially so because it automatically impls test for additional builders), but it doesn't work if you want to observe the builder for a while.