-
Notifications
You must be signed in to change notification settings - Fork 95
feat(auctioneer): add new service #1839
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
c26dd21 to
779b36f
Compare
ce75877 to
e95f4ab
Compare
e95f4ab to
556bb15
Compare
556bb15 to
fd44c8c
Compare
fd44c8c to
87593ec
Compare
87593ec to
5594ba3
Compare
b213ddb to
2d75a89
Compare
2d75a89 to
3e4e7b9
Compare
quasystaty1
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
infra approval. Note, a test is failing duo to chart dependency issue. run:
helm dependency update ./charts/evm-stack to resolve.
joroshiba
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
approved for API and infra w/ minor nits on proto naming stuff
|
|
||
| import "google/protobuf/any.proto"; | ||
|
|
||
| message GetBidStreamRequest {} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: try to keep the request and return types together in file definition
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
again very nit, and we don't do a great job of this elsewhere but I think bid.proto is not a great name for this.
We could do 1-1-1, I'd be generally in favor but this isn't our operating practice to date.
I think service.proto or auction_service.proto would be a reasonable file name here outside of doing that?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Summary
This patch adds the Astria Auctioneer service to the monorepo.
Background
The Astria Auctioneer auctions the top of the next Rollup to the highest bidder.
It receives a proposed Sequencer block1 via a Sequencer node's
astria.sequencerblock.optimistic.v1alpha1.OptimisticBlockservice, and forwards it to its Rollup node'sastria.auction.v1alpha1.OptimisticExecutionServicefor optimistic execution by the Rollup. The executed optimistic block hash returned by the rollup triggers Auctioneer to start an auction. It then receives bids from the Rollup node'sastria.auction.v1alpha.AuctionService, selecting the winner using a first-price mechanism.The auction winner is finally submitted to the same Sequencer node using a standard ABCI
broadcast_tx_syncto the Sequencer network.Auctioneer does not act as a server in its own right but connects as a client to a Rollup node and to a Sequencer node.
Changes
crates/astria-auctioneer. It is implemented as a simple event loop that multiplexes proposed blocks and finalized commits (from sequencer), as well as executed rollup blocks and bids (from the rollup).tokio_utilsto0.7.13to get access toCancellationToken::run_until_cancelledastria.bundletoastria.auctionSequencerBlockCommitto newastria_core::sequencerblock::optimistic::v1alpha1submodule, following protobuf spec naming conventions (the other domain types remain exclusive to auctioneer for now).astria_core::ProtobufforFilteredSequencerBlockto get access to the wiretype name in error and log messages.astria_sequencer::sequencer::start_grpc_servertoastria-sequencer::grpc::serveastria_sequencer::grpc::optimisticimplementing theastria.sequencerblock.optimistic.v1alpha1.OptimisticBlockgRPC serviceastria_sequencer::appmodule to implement anEventBusthat is used by the gRPC service to subscribe to new events (right now, only proposed blocks and commits).ASTRIA_SEQUENCER_NO_OPTIMISTIC_BLOCKSto toggle the optimistic block service in Sequencercharts/auctioneercharts/evm-rollup/files/genesis/geth-genesis.jsonto setastriaAuctioneerAddressescharts/sequencer/templates/configmaps.yamlto to setASTRIA_SEQUENCER_NO_OPTIMISTIC_BLOCKSjustifleto understand how to docker-build auctioneerauctioneerto docker-build github workflow.Testing
This patch does not contain blackbox tests because there currently is no support in the Rust ecosystem to easily mock streams. Smoke tests to submit a winning bid to sequencer and have it executed against geth will be done in a follow-up PR.
We deployed a local setup consisting of a dedicated auctioneer flame node, the auctioneer node and a sequencer with optimistic blocks enabled.
The code for auctioneer flame node can be found at astriaorg/flame#30. The auctioneer has been tested locally against this auctioneer flame node branch.
We have tested the setup by sending txs to the auctioneer flame node using spamooor. We check with logs and manually query the blocks to ensure that the tx sent has end up on the top of block of the auctioneer.
Metrics
astria_auctioneer_block_commitments_received: counter (the number of block commitments auctioneer received from sequencer over its runtime)astria_auctioneer_executed_blocks_received: counter (the number of executed blocks auctioneer received from its connected rollup over its runtime)astria_auctioneer_proposed_blocks_received: counter (the number of proposed blocks auctioneer received from sequencer over its runtime)astria_auctioneer_auctions_cancelled: counter (the auctions auctioneer cancelled over its runtime because a new proposed sequencer block cancelled a previous one and thus the auction; this might include auctions for which sumissions took too long)astria_auctioneer_auctions_submitted: counter (the auctions auctioneer successfully submitted over its runtime)astria_auctioneer_auction_bids_received: counter (total bids received over the runtime of auctioneer)astria_auctioneer_auction_bids: histogram(bids per auction labels "processed" and "dropped")astria_auctioneer_auction_bids_without_matching_auction: counter (the number of bids auctioneer received without having a matching auction running over its runtime; for example because the bid contained a difference sequencer or rollup block hashes than what the auction expected)astria_auctioneer_winner_submission_latencyhistogram (labels "success" and "error"; time from when an auction started and auctioneer received a bid for the auction)astria_winning_bid: histogram (the amount that the winning bid was willing to pay)Changelogs
Changelogs updated.
Related Issues
closes #1888
closes #1533
closes #1820
Footnotes
A proposed Sequencer block is that data structure that comes out of the Astria Sequencer network's CometBFT process-proposal step. ↩