Documentation
¶
Index ¶
- type APIHandler
- func (h *APIHandler) DepositBuilderKey(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) EventStream(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) ExitBuilderKey(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) GetActionPlan(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) GetActionPlanRules(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) GetAuditLog(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) GetBidsWon(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) GetBuilderAPIStatus(w http.ResponseWriter, _ *http.Request)
- func (h *APIHandler) GetBuilderKeys(w http.ResponseWriter, _ *http.Request)
- func (h *APIHandler) GetBuilderPreferences(w http.ResponseWriter, _ *http.Request)
- func (h *APIHandler) GetConfig(w http.ResponseWriter, _ *http.Request)
- func (h *APIHandler) GetEventStreamManager() *EventStreamManager
- func (h *APIHandler) GetHeadVoteDetail(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) GetLifecycleStatus(w http.ResponseWriter, _ *http.Request)
- func (h *APIHandler) GetOverview(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) GetProposerPreferences(w http.ResponseWriter, _ *http.Request)
- func (h *APIHandler) GetSlotBidArtifact(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) GetSlotBidArtifacts(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) GetSlotEnvelopeArtifact(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) GetSlotPayloadArtifact(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) GetSlotPayloadArtifactByIndex(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) GetSlotResults(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) GetStats(w http.ResponseWriter, _ *http.Request)
- func (h *APIHandler) GetStatus(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) GetValidators(w http.ResponseWriter, _ *http.Request)
- func (h *APIHandler) GetVersion(w http.ResponseWriter, _ *http.Request)
- func (h *APIHandler) PostDeposit(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) PostExit(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) PostTopup(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) TestTransform(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) ToggleServices(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) TopupBuilderKey(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) UpdateActionPlan(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) UpdateActionPlanRules(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) UpdateBuilderAPIConfig(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) UpdateBuilderConfig(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) UpdateBuilderKeyTarget(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) UpdateEPBS(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) UpdateLifecycleConfig(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) UpdateSchedule(w http.ResponseWriter, r *http.Request)
- func (h *APIHandler) UpdateSettings(w http.ResponseWriter, r *http.Request)
- type ActionPlanResponse
- type ActionPlanRulesRequest
- type ActionPlanRulesResponse
- type AuditLogResponse
- type BidArtifactMetaEntry
- type BidStreamEvent
- type BidSubmittedEvent
- type BidWonStreamEvent
- type BidsWonResponse
- type BlockDetailBid
- type BlockDetailPayload
- type BlockDetailStreamEvent
- type BuilderAPIGetBidDeliveredEvent
- type BuilderAPIGetBidReceivedEvent
- type BuilderAPIGetHeaderDeliveredEvent
- type BuilderAPIGetHeaderReceivedEvent
- type BuilderAPIStatusResponse
- type BuilderAPISubmitBlindedDeliveredEvent
- type BuilderAPISubmitBlindedReceivedEvent
- type BuilderAPISubmitBlockDeliveredEvent
- type BuilderAPISubmitBlockReceivedEvent
- type BuilderInfoEvent
- type BuilderKeyExitRequest
- type BuilderKeyTopupRequest
- type BuilderKeysResponse
- type BuilderKeysSettings
- type BuilderKeysStreamEvent
- type BuilderPreferencesEntry
- type BuilderPreferencesResponse
- type EnvelopeDetail
- type EventStreamManager
- func (m *EventStreamManager) Broadcast(event *StreamEvent)
- func (m *EventStreamManager) BroadcastBidFailed(slot uint64, blockHash string, value uint64, bidCount int, errMsg string)
- func (m *EventStreamManager) BroadcastBidSubmitted(slot uint64, blockHash string, value uint64, bidCount int)
- func (m *EventStreamManager) BroadcastBidWon(wonBlock *payload_bidder.WonBlock)
- func (m *EventStreamManager) BroadcastBuilderAPIGetBidDelivered(slot uint64, blockHash, blockValue string)
- func (m *EventStreamManager) BroadcastBuilderAPIGetBidReceived(slot uint64, parentHash, pubkey string)
- func (m *EventStreamManager) BroadcastBuilderAPIGetHeaderDelivered(slot uint64, blockHash, blockValue string)
- func (m *EventStreamManager) BroadcastBuilderAPIGetHeaderReceived(slot uint64, parentHash, pubkey string)
- func (m *EventStreamManager) BroadcastBuilderAPISubmitBlindedDelivered(slot uint64, blockHash string)
- func (m *EventStreamManager) BroadcastBuilderAPISubmitBlindedReceived(slot uint64, blockHash string)
- func (m *EventStreamManager) BroadcastBuilderAPISubmitBlockDelivered(slot uint64, blockHash string)
- func (m *EventStreamManager) BroadcastBuilderAPISubmitBlockReceived(slot uint64, blockHash string)
- func (m *EventStreamManager) BroadcastBuilderKeys()
- func (m *EventStreamManager) BroadcastConfigUpdate()
- func (m *EventStreamManager) BroadcastLifecycle(action, message, status string)
- func (m *EventStreamManager) BroadcastReveal(event *payload_bidder.RevealResult)
- func (m *EventStreamManager) BroadcastServiceStatus()
- func (m *EventStreamManager) RegisterClient() chan *StreamEvent
- func (m *EventStreamManager) RemoveClient(ch chan *StreamEvent)
- func (m *EventStreamManager) SendInitialState(ctx context.Context, ch chan *StreamEvent)
- func (m *EventStreamManager) Start()
- func (m *EventStreamManager) Stop()
- type EventType
- type GetValidatorsResponse
- type HeadReceivedEvent
- type HeadVoteDetailResponse
- type HeadVoteDetailRow
- type HeadVotesStreamEvent
- type LifecycleStatusResponse
- type LifecycleStreamEvent
- type OverviewBalances
- type OverviewBuilderKey
- type OverviewBuilders
- type OverviewELClient
- type OverviewResponse
- type OverviewServices
- type OverviewStats
- type PayloadAttributesStreamEvent
- type PayloadAvailableStreamEvent
- type PayloadBuildFailedStreamEvent
- type PayloadBuildStartedStreamEvent
- type PayloadReadyStreamEvent
- type ProposerPreferencesEntry
- type ProposerPreferencesResponse
- type RevealStartedStreamEvent
- type RevealStreamEvent
- type ServiceStatusEvent
- type SlotBidArtifactsResponse
- type SlotResultsResponse
- type SlotStartEvent
- type SlotStateEvent
- type StatsResponse
- type StatusResponse
- type StreamEvent
- type TestTransformRequest
- type TestTransformResponse
- type ToggleServiceRequest
- type UpdateActionPlanRequest
- type UpdateActionPlanResponse
- type UpdateBuilderAPIConfigRequest
- type UpdateBuilderConfigRequest
- type UpdateBuilderKeyTargetRequest
- type UpdateEPBSRequest
- type UpdateLifecycleConfigRequest
- type UpdateScheduleRequest
- type UpdateSettingsRequest
- type ValidatorRegistrationResponse
- type VoteCoverageStreamEvent
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type APIHandler ¶
type APIHandler struct {
// contains filtered or unexported fields
}
APIHandler handles API requests for the buildoor web UI.
func NewAPIHandler ¶
func NewAPIHandler( authHandler *auth.AuthHandler, settingsSvc *config.Service, stateDB *db.Database, builderSvc *payload_builder.Service, epbsSvc *p2p_bidder.Service, lifecycleMgr *lifecycle.Manager, keys *builder_keys.Registry, chainSvc chain.Service, validatorStore *memstore.Store[phase0.BLSPubKey, *apiv1.SignedValidatorRegistration], builderAPISvc *builderapi.Server, propPrefSvc *payload_bidder.ProposerPreferencesService, valRanges *validatorranges.Resolver, revealSvc *payload_bidder.RevealService, inclusionTracker *payload_bidder.InclusionTracker, payments *payload_bidder.PaymentTracker, planSvc *action_plan.PlanService, resultTracker *slot_results.Tracker, ) *APIHandler
NewAPIHandler creates a new API handler.
func (*APIHandler) DepositBuilderKey ¶ added in v0.0.3
func (h *APIHandler) DepositBuilderKey(w http.ResponseWriter, r *http.Request)
DepositBuilderKey godoc @Id depositBuilderKey @Summary Deposit for a builder key @Tags Builder Keys @Description Submits a builder deposit for the given key and waits for it to @Description register on the beacon chain. @Produce json @Param index path int true "Internal builder key index" @Success 200 {object} map[string]string @Failure 400 {object} map[string]string "Invalid key index or deposit failed" @Failure 401 {object} map[string]string "Unauthorized" @Router /api/buildoor/builder-keys/{index}/deposit [post]
func (*APIHandler) EventStream ¶
func (h *APIHandler) EventStream(w http.ResponseWriter, r *http.Request)
EventStream handles the SSE endpoint for real-time events.
func (*APIHandler) ExitBuilderKey ¶ added in v0.0.3
func (h *APIHandler) ExitBuilderKey(w http.ResponseWriter, r *http.Request)
ExitBuilderKey godoc @Id exitBuilderKey @Summary Exit a builder key @Tags Builder Keys @Description Submits a builder exit request for the given key. Irreversible: @Description an exited key cannot be reactivated until its registry entry is @Description reused by another builder's deposit. With lower_target the @Description target key count is decremented in the same write, so the @Description reconciler does not deposit a replacement. @Accept json @Produce json @Param index path int true "Internal builder key index" @Param request body BuilderKeyExitRequest false "Exit options" @Success 200 {object} map[string]string @Failure 400 {object} map[string]string "Invalid key index" @Failure 401 {object} map[string]string "Unauthorized" @Failure 409 {object} map[string]string "Key cannot be exited yet" @Router /api/buildoor/builder-keys/{index}/exit [post]
func (*APIHandler) GetActionPlan ¶ added in v0.0.3
func (h *APIHandler) GetActionPlan(w http.ResponseWriter, r *http.Request)
GetActionPlan godoc @Id getActionPlan @Summary Get per-slot action plans @Tags ActionPlan @Description Returns all per-slot action plans within the inclusive slot range. @Produce json @Param min_slot query int true "Range start slot (inclusive)" @Param max_slot query int true "Range end slot (inclusive)" @Success 200 {object} ActionPlanResponse @Failure 400 {object} map[string]string "Bad Request" @Failure 503 {object} map[string]string "Plan service unavailable" @Router /api/buildoor/action-plan [get]
func (*APIHandler) GetActionPlanRules ¶ added in v0.0.3
func (h *APIHandler) GetActionPlanRules(w http.ResponseWriter, r *http.Request)
GetActionPlanRules godoc @Id getActionPlanRules @Summary Get recurring action plan rules @Tags ActionPlan @Description Returns the recurring slot rules, id-ascending (which is also @Description their match order). A rule applies its categories to every slot @Description whose index within the epoch matches, unless the slot carries @Description an explicit plan. @Produce json @Success 200 {object} ActionPlanRulesResponse @Failure 503 {object} map[string]string "Plan service unavailable" @Router /api/buildoor/action-plan/rules [get]
func (*APIHandler) GetAuditLog ¶
func (h *APIHandler) GetAuditLog(w http.ResponseWriter, r *http.Request)
GetAuditLog godoc @Id getAuditLog @Summary Get the audit log @Tags Buildoor @Description Returns a paginated list of authenticated mutating actions. Empty when no state-db is configured. @Produce json @Param Authorization header string true "Bearer token" @Param offset query int false "Offset for pagination" default(0) @Param limit query int false "Limit for pagination (max 100)" default(20) @Success 200 {object} AuditLogResponse "Success" @Failure 401 {object} map[string]string "Unauthorized" @Failure 500 {object} map[string]string "Server Error" @Router /api/buildoor/audit-log [get]
func (*APIHandler) GetBidsWon ¶
func (h *APIHandler) GetBidsWon(w http.ResponseWriter, r *http.Request)
GetBidsWon godoc @Id getBidsWon @Summary Get bids won (blocks of ours included on chain) @Tags Buildoor @Description Returns a paginated list of won blocks (Builder API and p2p ePBS) with transaction counts, blob counts, and values, read from the shared inclusion tracker. @Produce json @Param offset query int false "Offset for pagination" default(0) @Param limit query int false "Limit for pagination (max 100)" default(20) @Success 200 {object} BidsWonResponse "Success" @Failure 500 {object} map[string]string "Server Error" @Router /api/buildoor/bids-won [get]
func (*APIHandler) GetBuilderAPIStatus ¶
func (h *APIHandler) GetBuilderAPIStatus(w http.ResponseWriter, _ *http.Request)
GetBuilderAPIStatus godoc @Id getBuilderAPIStatus @Summary Get Builder API status @Tags Buildoor @Description Returns the current status of the Builder API including configuration and validator count. @Produce json @Success 200 {object} BuilderAPIStatusResponse "Success" @Failure 500 {object} map[string]string "Server Error" @Router /api/buildoor/builder-api-status [get]
func (*APIHandler) GetBuilderKeys ¶ added in v0.0.3
func (h *APIHandler) GetBuilderKeys(w http.ResponseWriter, _ *http.Request)
GetBuilderKeys godoc @Id getBuilderKeys @Summary Get the managed builder key set @Tags Builder Keys @Description Returns every managed builder key with its lifecycle status, @Description on-chain builder index, balances and usage history, plus fleet @Description aggregates and the mutable key-set settings. @Produce json @Success 200 {object} BuilderKeysResponse @Failure 404 {object} map[string]string "Lifecycle management not enabled" @Router /api/buildoor/builder-keys [get]
func (*APIHandler) GetBuilderPreferences ¶
func (h *APIHandler) GetBuilderPreferences(w http.ResponseWriter, _ *http.Request)
GetBuilderPreferences godoc @Id getBuilderPreferences @Summary Get cached builder preferences @Tags Buildoor @Description Returns all builder preferences currently in the cache, submitted by proposers via the submitBuilderPreferences API. @Produce json @Success 200 {object} BuilderPreferencesResponse "Success" @Failure 404 {object} map[string]string "Builder API not enabled" @Router /api/buildoor/builder-preferences [get]
func (*APIHandler) GetConfig ¶
func (h *APIHandler) GetConfig(w http.ResponseWriter, _ *http.Request)
GetConfig godoc @Id getConfig @Summary Get buildoor configuration @Tags Config @Description Returns the buildoor configuration in use. Sensitive fields (builder key, wallet key, JWT secret) are redacted. @Produce json @Success 200 {object} map[string]interface{} "Success" @Failure 500 {object} map[string]string "Server Error" @Router /api/config [get]
func (*APIHandler) GetEventStreamManager ¶
func (h *APIHandler) GetEventStreamManager() *EventStreamManager
GetEventStreamManager returns the event stream manager for external use.
func (*APIHandler) GetHeadVoteDetail ¶ added in v0.0.3
func (h *APIHandler) GetHeadVoteDetail(w http.ResponseWriter, r *http.Request)
GetHeadVoteDetail godoc @Id getHeadVoteDetail @Summary Per-name head-vote arrival heatmap for a slot @Tags Stats @Description Returns the slot's raw single-attestation arrivals grouped by @Description validator-ranges client name into fixed-width time buckets @Description from the slot start, plus per-name totals and the count of @Description attesters that landed on chain without being seen as singles. @Description Only slots still retained by the head vote tracker are served. @Produce json @Param slot path int true "Slot" @Param root query string false "Beacon block root (default: the slot's primary root)" @Param bucket_ms query int false "Bucket width in ms (default slot_ms/24, clamped to [50, slot_ms])" @Success 200 {object} HeadVoteDetailResponse @Failure 400 {object} map[string]string "Bad Request" @Failure 404 {object} map[string]string "No vote detail retained for this slot" @Failure 503 {object} map[string]string "Head vote tracker unavailable" @Router /api/buildoor/head-votes/{slot} [get]
func (*APIHandler) GetLifecycleStatus ¶
func (h *APIHandler) GetLifecycleStatus(w http.ResponseWriter, _ *http.Request)
GetLifecycleStatus godoc @Id getLifecycleStatus @Summary Get lifecycle status @Tags Lifecycle @Description Returns the builder lifecycle status including registration state, balance, @Description pending payments, and epoch information. @Produce json @Success 200 {object} LifecycleStatusResponse "Success" @Failure 404 {object} map[string]string "Lifecycle management not enabled" @Failure 500 {object} map[string]string "Server Error" @Router /api/lifecycle/status [get]
func (*APIHandler) GetOverview ¶
func (h *APIHandler) GetOverview(w http.ResponseWriter, r *http.Request)
GetOverview godoc @Id getOverview @Summary Get a compact overview of this buildoor instance @Tags Buildoor @Description Returns a single-payload summary used by the multi-instance overview UI: @Description running state, builder pubkey, current slot, EL client info, available/enabled @Description services, balances, and recent build stats. @Produce json @Success 200 {object} OverviewResponse "Success" @Router /api/buildoor/overview [get]
func (*APIHandler) GetProposerPreferences ¶
func (h *APIHandler) GetProposerPreferences(w http.ResponseWriter, _ *http.Request)
GetProposerPreferences godoc @Id getProposerPreferences @Summary Get cached proposer preferences @Tags Buildoor @Description Returns all proposer preferences currently in the cache, received via P2P gossip. @Produce json @Success 200 {object} ProposerPreferencesResponse "Success" @Failure 404 {object} map[string]string "Proposer preferences not enabled" @Router /api/buildoor/proposer-preferences [get]
func (*APIHandler) GetSlotBidArtifact ¶ added in v0.0.3
func (h *APIHandler) GetSlotBidArtifact(w http.ResponseWriter, r *http.Request)
GetSlotBidArtifact godoc @Id getSlotBidArtifact @Summary Get one signed bid of a slot @Tags ActionPlan @Description Returns one signed bid created for the slot, addressed by its @Description artifact index (see the bid listing endpoint). Pre-Gloas bids @Description are SignedBuilderBid, Gloas+ bids SignedExecutionPayloadBid. @Description Content negotiation as with the payload artifact endpoint. @Produce json,application/octet-stream @Param slot path int true "Slot" @Param index path int true "Bid artifact index" @Success 200 {object} map[string]any "Versioned signed bid (or raw SSZ)" @Failure 400 {object} map[string]string "Bad Request" @Failure 404 {object} map[string]string "No artifact for this slot/index" @Failure 406 {object} map[string]string "No acceptable content type" @Router /api/buildoor/slot-results/{slot}/bids/{index} [get]
func (*APIHandler) GetSlotBidArtifacts ¶ added in v0.0.3
func (h *APIHandler) GetSlotBidArtifacts(w http.ResponseWriter, r *http.Request)
GetSlotBidArtifacts godoc @Id getSlotBidArtifacts @Summary List a slot's signed bid artifacts @Tags ActionPlan @Description Lists the metadata of every signed bid stored for the slot @Description (JSON only; fetch individual bids by index for SSZ). Returns @Description an empty list for slots without bid artifacts. @Produce json @Param slot path int true "Slot" @Success 200 {object} SlotBidArtifactsResponse @Failure 400 {object} map[string]string "Bad Request" @Failure 503 {object} map[string]string "Results tracker unavailable" @Router /api/buildoor/slot-results/{slot}/bids [get]
func (*APIHandler) GetSlotEnvelopeArtifact ¶ added in v0.0.3
func (h *APIHandler) GetSlotEnvelopeArtifact(w http.ResponseWriter, r *http.Request)
GetSlotEnvelopeArtifact godoc @Id getSlotEnvelopeArtifact @Summary Get the signed payload envelope of a slot @Tags ActionPlan @Description Returns the signed execution payload envelope constructed for @Description the slot's reveal (stored at construction time, so failed @Description publishes remain inspectable). Content negotiation as with the @Description payload artifact endpoint. @Produce json,application/octet-stream @Param slot path int true "Slot" @Success 200 {object} map[string]any "Versioned envelope (or raw SSZ)" @Failure 400 {object} map[string]string "Bad Request" @Failure 404 {object} map[string]string "No artifact for this slot" @Failure 406 {object} map[string]string "No acceptable content type" @Router /api/buildoor/slot-results/{slot}/envelope [get]
func (*APIHandler) GetSlotPayloadArtifact ¶ added in v0.0.3
func (h *APIHandler) GetSlotPayloadArtifact(w http.ResponseWriter, r *http.Request)
GetSlotPayloadArtifact godoc @Id getSlotPayloadArtifact @Summary Get the built execution payload of a slot @Tags ActionPlan @Description Returns the exact execution payload built for the slot. With @Description "Accept: application/octet-stream" the raw SSZ bytes are @Description served; otherwise a {"version", "data"} JSON envelope. The @Description Eth-Consensus-Version response header carries the fork name. @Produce json,application/octet-stream @Param slot path int true "Slot" @Success 200 {object} map[string]any "Versioned payload (or raw SSZ)" @Failure 400 {object} map[string]string "Bad Request" @Failure 404 {object} map[string]string "No artifact for this slot" @Failure 406 {object} map[string]string "No acceptable content type" @Param candidate query string false "Build-parent candidate key (parent_full, parent_empty, grandparent_full, grandparent_empty)" @Router /api/buildoor/slot-results/{slot}/payload [get]
func (*APIHandler) GetSlotPayloadArtifactByIndex ¶ added in v0.0.3
func (h *APIHandler) GetSlotPayloadArtifactByIndex(w http.ResponseWriter, r *http.Request)
GetSlotPayloadArtifactByIndex godoc @Id getSlotPayloadArtifactByIndex @Summary Get one of a slot's built candidate payloads @Tags ActionPlan @Description Returns one of the execution payloads built for the slot by @Description artifact index (a slot may build several candidate payloads on @Description different parents; the slot result's build entries carry each @Description build's artifact index). Content negotiation as with the @Description default payload artifact endpoint. @Produce json,application/octet-stream @Param slot path int true "Slot" @Param index path int true "Payload artifact index" @Success 200 {object} map[string]any "Versioned payload (or raw SSZ)" @Failure 400 {object} map[string]string "Bad Request" @Failure 404 {object} map[string]string "No artifact for this slot/index" @Failure 406 {object} map[string]string "No acceptable content type" @Router /api/buildoor/slot-results/{slot}/payload/{index} [get]
func (*APIHandler) GetSlotResults ¶ added in v0.0.3
func (h *APIHandler) GetSlotResults(w http.ResponseWriter, r *http.Request)
GetSlotResults godoc @Id getSlotResults @Summary Get per-slot results @Tags ActionPlan @Description Returns the recorded outcome history (build, bids, block @Description submissions, reveals, inclusion, applied plan) for every @Description active slot within the inclusive slot range. @Produce json @Param min_slot query int true "Range start slot (inclusive)" @Param max_slot query int true "Range end slot (inclusive)" @Success 200 {object} SlotResultsResponse @Failure 400 {object} map[string]string "Bad Request" @Failure 503 {object} map[string]string "Results tracker unavailable" @Router /api/buildoor/slot-results [get]
func (*APIHandler) GetStats ¶
func (h *APIHandler) GetStats(w http.ResponseWriter, _ *http.Request)
GetStats godoc @Id getStats @Summary Get builder statistics @Tags Stats @Description Returns builder statistics including slots built, bids submitted/won, @Description total paid, and reveal success/failure counts. @Produce json @Success 200 {object} StatsResponse "Success" @Failure 500 {object} map[string]string "Server Error" @Router /api/stats [get]
func (*APIHandler) GetStatus ¶
func (h *APIHandler) GetStatus(w http.ResponseWriter, r *http.Request)
GetStatus godoc @Id getStatus @Summary Get builder status @Tags Status @Description Returns the current builder status including running state, current slot, @Description builder index and public key. @Produce json @Success 200 {object} StatusResponse "Success" @Failure 500 {object} map[string]string "Server Error" @Router /api/status [get]
func (*APIHandler) GetValidators ¶
func (h *APIHandler) GetValidators(w http.ResponseWriter, _ *http.Request)
GetValidators godoc @Id getValidators @Summary List registered validators @Tags Buildoor @Description Returns the list of validators registered via the Builder API (fee recipient preferences). Not paginated. @Produce json @Success 200 {object} GetValidatorsResponse "Success" @Failure 500 {object} map[string]string "Server Error" @Router /api/buildoor/validators [get]
func (*APIHandler) GetVersion ¶
func (h *APIHandler) GetVersion(w http.ResponseWriter, _ *http.Request)
GetVersion godoc @Id getVersion @Summary Get the current version @Tags Version @Description Returns the current version @Produce json @Success 200 {string} string "Success" @Failure 500 {string} string "Server Error" @Router /api/version [get]
func (*APIHandler) PostDeposit ¶
func (h *APIHandler) PostDeposit(w http.ResponseWriter, r *http.Request)
PostDeposit godoc @Id postDeposit @Summary Trigger builder deposit @Tags Lifecycle @Description Initiates a builder registration deposit. If the builder is not yet @Description registered, this will register it with the specified amount. Requires authentication. @Accept json @Produce json @Param Authorization header string true "Bearer token" @Param request body object{amount_gwei=uint64} true "Deposit amount in gwei" @Success 200 {object} map[string]string "Success" @Failure 400 {object} map[string]string "Bad Request" @Failure 401 {object} map[string]string "Unauthorized" @Failure 404 {object} map[string]string "Lifecycle management not enabled" @Failure 500 {object} map[string]string "Server Error" @Router /api/lifecycle/deposit [post]
func (*APIHandler) PostExit ¶
func (h *APIHandler) PostExit(w http.ResponseWriter, r *http.Request)
PostExit godoc @Id postExit @Summary Trigger voluntary exit @Tags Lifecycle @Description Initiates a voluntary exit for the builder. This will begin the withdrawal @Description process and the builder will stop being eligible for block building after @Description the exit is processed. Requires authentication. @Accept json @Produce json @Param Authorization header string true "Bearer token" @Success 200 {object} map[string]string "Success" @Failure 401 {object} map[string]string "Unauthorized" @Failure 404 {object} map[string]string "Lifecycle management not enabled" @Failure 500 {object} map[string]string "Server Error" @Router /api/lifecycle/exit [post]
func (*APIHandler) PostTopup ¶
func (h *APIHandler) PostTopup(w http.ResponseWriter, r *http.Request)
PostTopup godoc @Id postTopup @Summary Trigger balance top-up @Tags Lifecycle @Description Checks the builder balance and initiates a top-up if needed based on @Description configured thresholds. Requires authentication. @Accept json @Produce json @Param Authorization header string true "Bearer token" @Success 200 {object} map[string]string "Success" @Failure 401 {object} map[string]string "Unauthorized" @Failure 404 {object} map[string]string "Lifecycle management not enabled" @Failure 500 {object} map[string]string "Server Error" @Router /api/lifecycle/topup [post]
func (*APIHandler) TestTransform ¶ added in v0.0.3
func (h *APIHandler) TestTransform(w http.ResponseWriter, r *http.Request)
TestTransform godoc @Id testActionPlanTransform @Summary Evaluate a jq transform against a sample builder object @Tags ActionPlan @Description Runs an operator jq expression against a sample payload / bid / @Description envelope (a captured artifact when sample_slot is given and @Description available, otherwise a zero-value template of the object) and @Description returns the transformed JSON, so expressions can be built and @Description tested live before being saved to a slot plan. Bid and envelope @Description transforms operate on the MESSAGE, matching production. @Accept json @Produce json @Param request body TestTransformRequest true "Target, expression and optional sample slot" @Success 200 {object} TestTransformResponse @Failure 400 {object} map[string]string "Bad Request" @Router /api/buildoor/action-plan/test-transform [post]
func (*APIHandler) ToggleServices ¶
func (h *APIHandler) ToggleServices(w http.ResponseWriter, r *http.Request)
ToggleServices toggles the enabled state of ePBS and/or Builder API services.
func (*APIHandler) TopupBuilderKey ¶ added in v0.0.3
func (h *APIHandler) TopupBuilderKey(w http.ResponseWriter, r *http.Request)
TopupBuilderKey godoc @Id topupBuilderKey @Summary Top up a builder key @Tags Builder Keys @Description Submits a top-up deposit for the given key when its balance is @Description below the configured threshold. @Accept json @Produce json @Param index path int true "Internal builder key index" @Success 200 {object} map[string]string @Failure 400 {object} map[string]string "Invalid key index or top-up failed" @Failure 401 {object} map[string]string "Unauthorized" @Router /api/buildoor/builder-keys/{index}/topup [post]
func (*APIHandler) UpdateActionPlan ¶ added in v0.0.3
func (h *APIHandler) UpdateActionPlan(w http.ResponseWriter, r *http.Request)
UpdateActionPlan godoc @Id updateActionPlan @Summary Update per-slot action plans @Tags ActionPlan @Description Applies a bulk per-slot action plan mutation atomically (all @Description targeted slots update or none). Category members are @Description three-state (absent = unchanged, null = clear, object = @Description replace); the "set" member supports fine-grained path updates @Description like {"bid.bid_min_amount": 5000} for partial edits. Updates @Description targeting past or already-frozen slots fail with 409. @Description Requires authentication. @Accept json @Produce json @Param Authorization header string true "Bearer token" @Param request body UpdateActionPlanRequest true "Plan updates" @Success 200 {object} UpdateActionPlanResponse "Authoritative normalized result" @Failure 400 {object} map[string]string "Validation error" @Failure 401 {object} map[string]string "Unauthorized" @Failure 409 {object} map[string]string "Slot in the past or frozen" @Failure 503 {object} map[string]string "Plan service unavailable" @Router /api/buildoor/action-plan [post]
func (*APIHandler) UpdateActionPlanRules ¶ added in v0.0.3
func (h *APIHandler) UpdateActionPlanRules(w http.ResponseWriter, r *http.Request)
UpdateActionPlanRules godoc @Id updateActionPlanRules @Summary Replace the recurring action plan rules @Tags ActionPlan @Description Atomically replaces the whole recurring rule set (every rule @Description validates or nothing changes). Each rule matches slot indices @Description within an epoch, optionally bounded to an epoch window, and @Description carries the same categories as a slot plan — e.g. win slot 31 @Description of every epoch and withhold its payload. Already frozen slots @Description keep the plan they froze with. Requires authentication. @Accept json @Produce json @Param Authorization header string true "Bearer token" @Param request body ActionPlanRulesRequest true "Full rule set" @Success 200 {object} ActionPlanRulesResponse "Authoritative rule set" @Failure 400 {object} map[string]string "Validation error" @Failure 401 {object} map[string]string "Unauthorized" @Failure 503 {object} map[string]string "Plan service unavailable" @Router /api/buildoor/action-plan/rules [post]
func (*APIHandler) UpdateBuilderAPIConfig ¶
func (h *APIHandler) UpdateBuilderAPIConfig(w http.ResponseWriter, r *http.Request)
UpdateBuilderAPIConfig updates the Builder API configuration.
func (*APIHandler) UpdateBuilderConfig ¶
func (h *APIHandler) UpdateBuilderConfig(w http.ResponseWriter, r *http.Request)
UpdateBuilderConfig updates the shared builder configuration (build start time, payload build delay).
func (*APIHandler) UpdateBuilderKeyTarget ¶ added in v0.0.3
func (h *APIHandler) UpdateBuilderKeyTarget(w http.ResponseWriter, r *http.Request)
UpdateBuilderKeyTarget godoc @Id updateBuilderKeyTarget @Summary Set the target builder key count @Tags Builder Keys @Description Sets how many builder keys are kept registered and funded. @Description Raising it deposits new keys; lowering it exits surplus keys @Description when auto-exit is on — an exited key can never be reactivated. @Accept json @Produce json @Param request body UpdateBuilderKeyTargetRequest true "Target key count" @Success 200 {object} BuilderKeysResponse @Failure 400 {object} map[string]string "Invalid request" @Failure 401 {object} map[string]string "Unauthorized" @Router /api/buildoor/builder-keys/target [post]
func (*APIHandler) UpdateEPBS ¶
func (h *APIHandler) UpdateEPBS(w http.ResponseWriter, r *http.Request)
UpdateEPBS godoc @Id updateEPBS @Summary Update EPBS configuration @Tags Config @Description Updates the EPBS (enshrined PBS) configuration including timing and bid @Description parameters. Requires authentication. @Accept json @Produce json @Param Authorization header string true "Bearer token" @Param request body UpdateEPBSRequest true "EPBS configuration" @Success 200 {object} map[string]string "Success" @Failure 400 {object} map[string]string "Bad Request" @Failure 401 {object} map[string]string "Unauthorized" @Failure 500 {object} map[string]string "Server Error" @Router /api/config/epbs [post]
func (*APIHandler) UpdateLifecycleConfig ¶
func (h *APIHandler) UpdateLifecycleConfig(w http.ResponseWriter, r *http.Request)
UpdateLifecycleConfig updates the lifecycle configuration (topup threshold/amount).
func (*APIHandler) UpdateSchedule ¶
func (h *APIHandler) UpdateSchedule(w http.ResponseWriter, r *http.Request)
UpdateSchedule godoc @Id updateSchedule @Summary Update schedule configuration @Tags Config @Description Updates the builder schedule configuration including mode, every_nth, and next_n @Description settings. Requires authentication. @Accept json @Produce json @Param Authorization header string true "Bearer token" @Param request body UpdateScheduleRequest true "Schedule configuration" @Success 200 {object} map[string]string "Success" @Failure 400 {object} map[string]string "Bad Request" @Failure 401 {object} map[string]string "Unauthorized" @Failure 500 {object} map[string]string "Server Error" @Router /api/config/schedule [post]
func (*APIHandler) UpdateSettings ¶ added in v0.0.3
func (h *APIHandler) UpdateSettings(w http.ResponseWriter, r *http.Request)
UpdateSettings godoc @Id updateSettings @Summary Update global settings by key path @Tags Config @Description Applies partial global settings updates keyed by canonical @Description settings paths (e.g. {"epbs.bid_subsidy": 1000, @Description "schedule.mode": "all"}) without requiring full config @Description objects. Unknown keys are rejected. Requires authentication. @Accept json @Produce json @Param Authorization header string true "Bearer token" @Param request body object true "Map of settings key paths to values" @Success 200 {object} map[string]string "Success" @Failure 400 {object} map[string]string "Unknown key or invalid value" @Failure 401 {object} map[string]string "Unauthorized" @Router /api/config/settings [post]
type ActionPlanResponse ¶ added in v0.0.3
type ActionPlanResponse struct {
Plans []*action_plan.SlotPlan `json:"plans"`
MinSlot uint64 `json:"min_slot"`
MaxSlot uint64 `json:"max_slot"`
}
ActionPlanResponse is the response of the action plan range query.
type ActionPlanRulesRequest ¶ added in v0.0.3
type ActionPlanRulesRequest struct {
Rules []*action_plan.SlotRule `json:"rules"`
}
ActionPlanRulesRequest replaces the whole recurring rule set atomically.
type ActionPlanRulesResponse ¶ added in v0.0.3
type ActionPlanRulesResponse struct {
Rules []*action_plan.SlotRule `json:"rules"`
}
ActionPlanRulesResponse returns the authoritative recurring rule set.
type AuditLogResponse ¶
type AuditLogResponse struct {
Entries []db.AuditLog `json:"entries"`
Total int `json:"total"`
Offset int `json:"offset"`
Limit int `json:"limit"`
}
AuditLogResponse is the paginated response for GetAuditLog.
type BidArtifactMetaEntry ¶ added in v0.0.3
type BidArtifactMetaEntry struct {
Index int `json:"index"`
Fork string `json:"fork"`
Transport string `json:"transport,omitempty"`
TotalValueGwei uint64 `json:"total_value_gwei,omitempty"`
ExecutionPaymentGwei uint64 `json:"execution_payment_gwei,omitempty"`
At int64 `json:"at,omitempty"` // unix milliseconds
}
BidArtifactMetaEntry is one entry of the bid artifact listing.
type BidStreamEvent ¶
type BidStreamEvent struct {
Slot uint64 `json:"slot"`
BuilderIndex uint64 `json:"builder_index"`
Value uint64 `json:"value"`
BlockHash string `json:"block_hash"`
IsOurs bool `json:"is_ours"`
ReceivedAt int64 `json:"received_at"`
// Full bid message properties (blob commitments aggregated to a count).
ExecutionPayment uint64 `json:"execution_payment,omitempty"`
FeeRecipient string `json:"fee_recipient,omitempty"`
GasLimit uint64 `json:"gas_limit,omitempty"`
ParentBlockHash string `json:"parent_block_hash,omitempty"`
ParentBlockRoot string `json:"parent_block_root,omitempty"`
NumBlobCommitments int `json:"num_blob_commitments,omitempty"`
}
BidStreamEvent represents a bid from any payload_builder.
type BidSubmittedEvent ¶
type BidSubmittedEvent struct {
Slot uint64 `json:"slot"`
BlockHash string `json:"block_hash"`
Value uint64 `json:"value"`
BidCount int `json:"bid_count"`
Timestamp int64 `json:"timestamp"`
Success bool `json:"success"`
Error string `json:"error,omitempty"`
Warning string `json:"warning,omitempty"`
// Full bid message properties (blob commitments aggregated to a count).
ExecutionPayment uint64 `json:"execution_payment,omitempty"`
FeeRecipient string `json:"fee_recipient,omitempty"`
GasLimit uint64 `json:"gas_limit,omitempty"`
BuilderIndex uint64 `json:"builder_index,omitempty"`
// KeyIndex is the managed builder key that signed the bid. With several
// keys bidding one slot, the builder index alone does not say which of ours
// it was.
KeyIndex *uint64 `json:"key_index,omitempty"`
ParentBlockHash string `json:"parent_block_hash,omitempty"`
ParentBlockRoot string `json:"parent_block_root,omitempty"`
NumBlobCommitments int `json:"num_blob_commitments,omitempty"`
}
BidSubmittedEvent is sent when we submit a bid (success or failure).
type BidWonStreamEvent ¶
type BidWonStreamEvent struct {
Slot uint64 `json:"slot"`
BlockHash string `json:"block_hash"`
NumTransactions int `json:"num_transactions"`
NumBlobs int `json:"num_blobs"`
ValueETH string `json:"value_eth"`
ValueWei string `json:"value_wei"`
Timestamp int64 `json:"timestamp"`
}
BidWonStreamEvent is sent when a bid is won (block successfully delivered).
type BidsWonResponse ¶
type BidsWonResponse struct {
BidsWon []*payload_bidder.WonBlock `json:"bids_won"`
Total int `json:"total"`
Offset int `json:"offset"`
Limit int `json:"limit"`
}
BidsWonResponse is the response for GetBidsWon.
type BlockDetailBid ¶ added in v0.0.3
type BlockDetailBid struct {
BuilderIndex uint64 `json:"builder_index"`
ValueGwei uint64 `json:"value_gwei"`
ExecutionPayment uint64 `json:"execution_payment_gwei"`
BlockHash string `json:"block_hash"`
ParentBlockHash string `json:"parent_block_hash"`
GasLimit uint64 `json:"gas_limit"`
FeeRecipient string `json:"fee_recipient"`
NumBlobKZGs int `json:"num_blob_kzgs,omitempty"`
}
type BlockDetailPayload ¶ added in v0.0.3
type BlockDetailStreamEvent ¶ added in v0.0.3
type BlockDetailStreamEvent struct {
Slot uint64 `json:"slot"`
ProposerIndex uint64 `json:"proposer_index"`
ParentRoot string `json:"parent_root"`
StateRoot string `json:"state_root"`
Graffiti string `json:"graffiti"` // 0x-hex
NumAttestations int `json:"num_attestations"`
NumProposerSlashings int `json:"num_proposer_slashings,omitempty"`
NumAttesterSlashings int `json:"num_attester_slashings,omitempty"`
NumDeposits int `json:"num_deposits,omitempty"`
NumVoluntaryExits int `json:"num_voluntary_exits,omitempty"`
NumBLSChanges int `json:"num_bls_changes,omitempty"`
SyncParticipation int `json:"sync_participation"`
NumBlobCommitments int `json:"num_blob_commitments,omitempty"`
NumPayloadAttestations int `json:"num_payload_attestations,omitempty"`
// Gloas+: the winning builder bid embedded in the block.
Bid *BlockDetailBid `json:"bid,omitempty"`
// Pre-Gloas: in-block execution payload summary.
Payload *BlockDetailPayload `json:"payload,omitempty"`
Timestamp int64 `json:"timestamp"`
}
BlockDetailStreamEvent is the display summary of an imported beacon block (extracted from the head vote tracker's coverage block fetch; list fields aggregated to counts).
type BuilderAPIGetBidDeliveredEvent ¶
type BuilderAPIGetBidDeliveredEvent struct {
Slot uint64 `json:"slot"`
BlockHash string `json:"block_hash"`
BlockValue string `json:"block_value"`
DeliveredAt int64 `json:"delivered_at"`
}
BuilderAPIGetBidDeliveredEvent is sent when a Gloas execution payload bid is delivered.
type BuilderAPIGetBidReceivedEvent ¶
type BuilderAPIGetBidReceivedEvent struct {
Slot uint64 `json:"slot"`
ParentHash string `json:"parent_hash"`
Pubkey string `json:"pubkey"`
ReceivedAt int64 `json:"received_at"`
}
BuilderAPIGetBidReceivedEvent is sent when a Gloas getExecutionPayloadBid request is received.
type BuilderAPIGetHeaderDeliveredEvent ¶
type BuilderAPIGetHeaderDeliveredEvent struct {
Slot uint64 `json:"slot"`
BlockHash string `json:"block_hash"`
BlockValue string `json:"block_value"`
DeliveredAt int64 `json:"delivered_at"`
}
BuilderAPIGetHeaderDeliveredEvent is sent when a header is successfully delivered.
type BuilderAPIGetHeaderReceivedEvent ¶
type BuilderAPIGetHeaderReceivedEvent struct {
Slot uint64 `json:"slot"`
ParentHash string `json:"parent_hash"`
Pubkey string `json:"pubkey"`
ReceivedAt int64 `json:"received_at"`
}
BuilderAPIGetHeaderReceivedEvent is sent when a getHeader request is received.
type BuilderAPIStatusResponse ¶
type BuilderAPIStatusResponse struct {
Enabled bool `json:"enabled"`
ValidatorCount int `json:"validator_count"`
BlockValueSubsidyGwei uint64 `json:"block_value_subsidy_gwei"`
}
BuilderAPIStatusResponse is the response for GetBuilderAPIStatus.
type BuilderAPISubmitBlindedDeliveredEvent ¶
type BuilderAPISubmitBlindedDeliveredEvent struct {
Slot uint64 `json:"slot"`
BlockHash string `json:"block_hash"`
DeliveredAt int64 `json:"delivered_at"`
}
BuilderAPISubmitBlindedDeliveredEvent is sent when a blinded block is successfully published.
type BuilderAPISubmitBlindedReceivedEvent ¶
type BuilderAPISubmitBlindedReceivedEvent struct {
Slot uint64 `json:"slot"`
BlockHash string `json:"block_hash"`
ReceivedAt int64 `json:"received_at"`
}
BuilderAPISubmitBlindedReceivedEvent is sent when a submitBlindedBlock request is received.
type BuilderAPISubmitBlockDeliveredEvent ¶
type BuilderAPISubmitBlockDeliveredEvent struct {
Slot uint64 `json:"slot"`
BlockHash string `json:"block_hash"`
DeliveredAt int64 `json:"delivered_at"`
}
BuilderAPISubmitBlockDeliveredEvent is sent when a Gloas envelope is successfully published.
type BuilderAPISubmitBlockReceivedEvent ¶
type BuilderAPISubmitBlockReceivedEvent struct {
Slot uint64 `json:"slot"`
BlockHash string `json:"block_hash"`
ReceivedAt int64 `json:"received_at"`
}
BuilderAPISubmitBlockReceivedEvent is sent when a Gloas submitSignedBeaconBlock request is received.
type BuilderInfoEvent ¶
type BuilderInfoEvent struct {
BuilderPubkey string `json:"builder_pubkey"`
BuilderIndex uint64 `json:"builder_index"`
IsRegistered bool `json:"is_registered"`
CLBalance uint64 `json:"cl_balance_gwei"`
PendingPayments uint64 `json:"pending_payments_gwei"`
EffectiveBalance uint64 `json:"effective_balance_gwei"`
LifecycleEnabled bool `json:"lifecycle_enabled"`
WalletAddress string `json:"wallet_address,omitempty"`
WalletBalance string `json:"wallet_balance_wei,omitempty"`
DepositEpoch uint64 `json:"deposit_epoch"`
WithdrawableEpoch uint64 `json:"withdrawable_epoch"`
// Fleet summary of the managed builder key set.
KeyCount uint64 `json:"key_count"`
KeyTarget uint64 `json:"key_target"`
KeysActive uint64 `json:"keys_active"`
TotalBalance uint64 `json:"total_balance_gwei"`
TotalPendingPayments uint64 `json:"total_pending_payments_gwei"`
TotalEffective uint64 `json:"total_effective_gwei"`
}
BuilderInfoEvent contains builder identity and balance information. The identity fields describe the primary key; the fleet totals summarise every managed key (they equal the primary's values on a single-key deployment).
type BuilderKeyExitRequest ¶ added in v0.0.3
type BuilderKeyExitRequest struct {
LowerTarget bool `json:"lower_target"`
}
BuilderKeyExitRequest asks for a builder key exit. LowerTarget (the default from the UI) decrements the target count in the same write, so the reconciler does not immediately deposit a replacement.
type BuilderKeyTopupRequest ¶ added in v0.0.3
type BuilderKeyTopupRequest struct {
AmountGwei uint64 `json:"amount_gwei,omitempty"`
}
BuilderKeyTopupRequest tops a key up; AmountGwei of 0 uses the configured top-up amount.
type BuilderKeysResponse ¶ added in v0.0.3
type BuilderKeysResponse struct {
Keys []*builder_keys.State `json:"keys"`
Aggregate builder_keys.Aggregate `json:"aggregate"`
Settings BuilderKeysSettings `json:"settings"`
}
BuilderKeysResponse is the full view of the managed builder key set.
type BuilderKeysSettings ¶ added in v0.0.3
type BuilderKeysSettings struct {
TargetCount uint64 `json:"target_count"`
MaxIndex uint64 `json:"max_index"`
AutoDeposit bool `json:"auto_deposit"`
AutoExit bool `json:"auto_exit"`
}
BuilderKeysSettings mirrors the mutable key-set configuration so the UI can render and edit it without a second request.
type BuilderKeysStreamEvent ¶ added in v0.0.3
type BuilderKeysStreamEvent struct {
Keys []*builder_keys.State `json:"keys"`
Aggregate builder_keys.Aggregate `json:"aggregate"`
}
BuilderKeysStreamEvent is the full managed key set, pushed on every change so the keys view stays live without polling.
type BuilderPreferencesEntry ¶
type BuilderPreferencesEntry struct {
ValidatorPubkey string `json:"validator_pubkey"`
MaxExecutionPayment uint64 `json:"max_execution_payment"`
}
BuilderPreferencesEntry represents a single cached builder preference for the API response.
type BuilderPreferencesResponse ¶
type BuilderPreferencesResponse struct {
Preferences []BuilderPreferencesEntry `json:"preferences"`
}
BuilderPreferencesResponse is the response for GetBuilderPreferences.
type EnvelopeDetail ¶ added in v0.0.3
type EnvelopeDetail struct {
BlockHash string `json:"block_hash,omitempty"`
BuilderIndex uint64 `json:"builder_index,omitempty"`
BlockNumber uint64 `json:"block_number,omitempty"`
GasLimit uint64 `json:"gas_limit,omitempty"`
GasUsed uint64 `json:"gas_used,omitempty"`
BaseFeePerGas string `json:"base_fee_per_gas,omitempty"` // wei
ExtraData string `json:"extra_data,omitempty"` // 0x-hex
BlobGasUsed uint64 `json:"blob_gas_used,omitempty"`
NumTransactions int `json:"num_transactions,omitempty"`
NumWithdrawals int `json:"num_withdrawals,omitempty"`
NumExecRequests int `json:"num_exec_requests,omitempty"`
}
EnvelopeDetail is the display summary of an execution payload envelope (list fields aggregated to counts). Embedded in the payload_available and reveal stream events.
type EventStreamManager ¶
type EventStreamManager struct {
// contains filtered or unexported fields
}
EventStreamManager manages SSE connections and event broadcasting.
func NewEventStreamManager ¶
func NewEventStreamManager( builderSvc *payload_builder.Service, epbsSvc *p2p_bidder.Service, lifecycleMgr *lifecycle.Manager, keys *builder_keys.Registry, chainSvc chain.Service, builderAPISvc *builderapi.Server, revealSvc *payload_bidder.RevealService, inclusionTracker *payload_bidder.InclusionTracker, payments *payload_bidder.PaymentTracker, planSvc *action_plan.PlanService, resultTracker *slot_results.Tracker, ) *EventStreamManager
NewEventStreamManager creates a new event stream manager.
func (*EventStreamManager) Broadcast ¶
func (m *EventStreamManager) Broadcast(event *StreamEvent)
Broadcast sends an event to all connected clients. Events sent through this method are NOT recorded in the replay cache; slot-scoped events go through broadcastForSlot instead.
func (*EventStreamManager) BroadcastBidFailed ¶
func (m *EventStreamManager) BroadcastBidFailed(slot uint64, blockHash string, value uint64, bidCount int, errMsg string)
BroadcastBidFailed broadcasts a bid submission failure event.
func (*EventStreamManager) BroadcastBidSubmitted ¶
func (m *EventStreamManager) BroadcastBidSubmitted(slot uint64, blockHash string, value uint64, bidCount int)
BroadcastBidSubmitted broadcasts a bid submitted event (success).
func (*EventStreamManager) BroadcastBidWon ¶
func (m *EventStreamManager) BroadcastBidWon(wonBlock *payload_bidder.WonBlock)
BroadcastBidWon broadcasts a bid won event when one of our blocks is seen included at the head (fed by the inclusion tracker's won-block record).
func (*EventStreamManager) BroadcastBuilderAPIGetBidDelivered ¶
func (m *EventStreamManager) BroadcastBuilderAPIGetBidDelivered(slot uint64, blockHash, blockValue string)
BroadcastBuilderAPIGetBidDelivered broadcasts when a Gloas execution payload bid is delivered.
func (*EventStreamManager) BroadcastBuilderAPIGetBidReceived ¶
func (m *EventStreamManager) BroadcastBuilderAPIGetBidReceived(slot uint64, parentHash, pubkey string)
BroadcastBuilderAPIGetBidReceived broadcasts when a Gloas getExecutionPayloadBid request is received.
func (*EventStreamManager) BroadcastBuilderAPIGetHeaderDelivered ¶
func (m *EventStreamManager) BroadcastBuilderAPIGetHeaderDelivered(slot uint64, blockHash, blockValue string)
BroadcastBuilderAPIGetHeaderDelivered broadcasts when a header is successfully delivered.
func (*EventStreamManager) BroadcastBuilderAPIGetHeaderReceived ¶
func (m *EventStreamManager) BroadcastBuilderAPIGetHeaderReceived(slot uint64, parentHash, pubkey string)
BroadcastBuilderAPIGetHeaderReceived broadcasts when a getHeader request is received.
func (*EventStreamManager) BroadcastBuilderAPISubmitBlindedDelivered ¶
func (m *EventStreamManager) BroadcastBuilderAPISubmitBlindedDelivered(slot uint64, blockHash string)
BroadcastBuilderAPISubmitBlindedDelivered broadcasts when a blinded block is successfully published.
func (*EventStreamManager) BroadcastBuilderAPISubmitBlindedReceived ¶
func (m *EventStreamManager) BroadcastBuilderAPISubmitBlindedReceived(slot uint64, blockHash string)
BroadcastBuilderAPISubmitBlindedReceived broadcasts when a submitBlindedBlock request is received.
func (*EventStreamManager) BroadcastBuilderAPISubmitBlockDelivered ¶
func (m *EventStreamManager) BroadcastBuilderAPISubmitBlockDelivered(slot uint64, blockHash string)
BroadcastBuilderAPISubmitBlockDelivered broadcasts when a Gloas envelope is successfully published.
func (*EventStreamManager) BroadcastBuilderAPISubmitBlockReceived ¶
func (m *EventStreamManager) BroadcastBuilderAPISubmitBlockReceived(slot uint64, blockHash string)
BroadcastBuilderAPISubmitBlockReceived broadcasts when a Gloas submitSignedBeaconBlock request is received.
func (*EventStreamManager) BroadcastBuilderKeys ¶ added in v0.0.3
func (m *EventStreamManager) BroadcastBuilderKeys()
BroadcastBuilderKeys pushes the current managed key set to all clients.
func (*EventStreamManager) BroadcastConfigUpdate ¶
func (m *EventStreamManager) BroadcastConfigUpdate()
BroadcastConfigUpdate broadcasts a config update event.
func (*EventStreamManager) BroadcastLifecycle ¶
func (m *EventStreamManager) BroadcastLifecycle(action, message, status string)
BroadcastLifecycle broadcasts a lifecycle event (deposit, exit, state change, etc.). Lifecycle events have no slot of their own; they are tagged with the current slot so they participate in the connect-time replay of the event log alongside the slot-scoped events.
func (*EventStreamManager) BroadcastReveal ¶
func (m *EventStreamManager) BroadcastReveal(event *payload_bidder.RevealResult)
BroadcastReveal broadcasts a reveal event (one per attempt, success or failure).
func (*EventStreamManager) BroadcastServiceStatus ¶
func (m *EventStreamManager) BroadcastServiceStatus()
BroadcastServiceStatus broadcasts the current service status.
func (*EventStreamManager) RegisterClient ¶ added in v0.0.3
func (m *EventStreamManager) RegisterClient() chan *StreamEvent
RegisterClient registers a new SSE client and returns its event channel. The channel is prefilled with the replay cache (the slot-scoped events of the last eventCacheSlots slots) so the client can restore the slot graph and event log. Because registration and broadcasting serialize on m.mu, the replay and subsequent live events form one ordered, gapless stream.
func (*EventStreamManager) RemoveClient ¶
func (m *EventStreamManager) RemoveClient(ch chan *StreamEvent)
RemoveClient removes an SSE client.
func (*EventStreamManager) SendInitialState ¶
func (m *EventStreamManager) SendInitialState(ctx context.Context, ch chan *StreamEvent)
SendInitialState sends the current state to a newly connected client. Sends are ctx-aware: if the client disconnects (or shutdown is signalled) while the channel buffer is full, the goroutine bails out instead of blocking forever. This is what lets the caller safely run this in a goroutine alongside the SSE read loop.
func (*EventStreamManager) Start ¶
func (m *EventStreamManager) Start()
Start begins the event stream manager.
func (*EventStreamManager) Stop ¶
func (m *EventStreamManager) Stop()
Stop stops the event stream manager.
type EventType ¶
type EventType string
EventType represents the type of event being streamed.
const ( EventTypeConfig EventType = "config" EventTypeStatus EventType = "status" EventTypeSlotStart EventType = "slot_start" EventTypePayloadAttributes EventType = "payload_attributes" EventTypePayloadBuildStarted EventType = "payload_build_started" EventTypePayloadBuildFailed EventType = "payload_build_failed" EventTypePayloadReady EventType = "payload_ready" EventTypeBidSubmitted EventType = "bid_submitted" EventTypeHeadReceived EventType = "head_received" EventTypeReveal EventType = "reveal" EventTypeBidEvent EventType = "bid_event" EventTypeStats EventType = "stats" EventTypeSlotState EventType = "slot_state" EventTypePayloadAvailable EventType = "payload_available" EventTypeBuilderInfo EventType = "builder_info" EventTypeBuilderKeys EventType = "builder_keys" EventTypeHeadVotes EventType = "head_votes" EventTypeVoteCoverage EventType = "vote_coverage" EventTypeRevealStarted EventType = "reveal_started" EventTypeBlockDetail EventType = "block_detail" EventTypeBidWon EventType = "bid_won" EventTypeBuilderAPIGetHeaderRcvd EventType = "builder_api_get_header_received" EventTypeBuilderAPIGetHeaderDlvd EventType = "builder_api_get_header_delivered" EventTypeBuilderAPISubmitBlindedRcvd EventType = "builder_api_submit_blinded_received" EventTypeBuilderAPISubmitBlindedDlvd EventType = "builder_api_submit_blinded_delivered" EventTypeBuilderAPIGetBidRcvd EventType = "builder_api_get_bid_received" EventTypeBuilderAPIGetBidDlvd EventType = "builder_api_get_bid_delivered" EventTypeBuilderAPISubmitBlockRcvd EventType = "builder_api_submit_block_received" EventTypeBuilderAPISubmitBlockDlvd EventType = "builder_api_submit_block_delivered" EventTypeServiceStatus EventType = "service_status" EventTypeActionPlanUpdated EventType = "action_plan_updated" EventTypeActionPlanRulesUpdated EventType = "action_plan_rules_updated" EventTypeSlotResultUpdated EventType = "slot_result_updated" EventTypeLifecycle EventType = "lifecycle" EventTypeBidIncluded EventType = "bid_included" )
type GetValidatorsResponse ¶
type GetValidatorsResponse struct {
Validators []ValidatorRegistrationResponse `json:"validators"`
}
GetValidatorsResponse is the response for GetValidators.
type HeadReceivedEvent ¶
type HeadReceivedEvent struct {
Slot uint64 `json:"slot"`
BlockRoot string `json:"block_root"`
ReceivedAt int64 `json:"received_at"`
}
HeadReceivedEvent is sent when a head event is received.
type HeadVoteDetailResponse ¶ added in v0.0.3
type HeadVoteDetailResponse struct {
Slot uint64 `json:"slot"`
Root string `json:"root"`
SlotStartMs int64 `json:"slot_start_ms"`
BucketMs int64 `json:"bucket_ms"`
BucketCount int `json:"bucket_count"`
TotalMembers int `json:"total_members"`
Rows []HeadVoteDetailRow `json:"rows"`
}
HeadVoteDetailResponse is the per-name vote-arrival heatmap of one slot: rows are validator-ranges client names, counts are vote arrivals per fixed-width time bucket from the slot start.
type HeadVoteDetailRow ¶ added in v0.0.3
type HeadVoteDetailRow struct {
Name string `json:"name"`
Members int `json:"members"`
Seen int `json:"seen"`
InBlockUnseen int `json:"in_block_unseen"`
Counts []int `json:"counts"`
}
HeadVoteDetailRow is one client name's bucketed vote arrivals.
type HeadVotesStreamEvent ¶
type HeadVotesStreamEvent struct {
Slot uint64 `json:"slot"`
BlockRoot string `json:"block_root"`
ParticipationPct float64 `json:"participation_pct"`
ParticipationETH uint64 `json:"participation_eth"`
TotalSlotETH uint64 `json:"total_slot_eth"`
VoteCount int `json:"vote_count"`
ThresholdPct float64 `json:"threshold_pct"`
ThresholdMet bool `json:"threshold_met"`
Timestamp int64 `json:"timestamp"`
}
HeadVotesStreamEvent is sent when head vote participation changes.
type LifecycleStatusResponse ¶
type LifecycleStatusResponse struct {
IsRegistered bool `json:"is_registered"`
BuilderIndex uint64 `json:"builder_index"`
Balance uint64 `json:"balance_gwei"`
EffectiveBalance uint64 `json:"effective_balance_gwei"`
PendingPayments uint64 `json:"pending_payments_gwei"`
DepositEpoch uint64 `json:"deposit_epoch"`
WithdrawableEpoch uint64 `json:"withdrawable_epoch"`
}
LifecycleStatusResponse is the response for lifecycle status.
type LifecycleStreamEvent ¶
type LifecycleStreamEvent struct {
Action string `json:"action"` // "deposit", "topup", "exit", "state_change", "waiting_gloas", "balance_topup"
Message string `json:"message"` // Human-readable description
Status string `json:"status"` // "info", "success", "warning", "error"
}
LifecycleStreamEvent is sent when a lifecycle action occurs (deposit, topup, exit, state change).
type OverviewBalances ¶
type OverviewBalances struct {
CLBalanceGwei uint64 `json:"cl_balance_gwei,omitempty"`
PendingPaymentsGwei uint64 `json:"pending_payments_gwei,omitempty"`
EffectiveBalanceGwei uint64 `json:"effective_balance_gwei,omitempty"`
WalletAddress string `json:"wallet_address,omitempty"`
WalletBalanceWei string `json:"wallet_balance_wei,omitempty"`
}
OverviewBalances captures CL builder + wallet balance for display.
type OverviewBuilderKey ¶ added in v0.0.3
type OverviewBuilderKey struct {
KeyIndex uint64 `json:"key_index"`
Pubkey string `json:"pubkey"`
Status string `json:"status"`
// BuilderIndex is the on-chain registry index, only meaningful when
// HasBuilderIndex is set (index 0 is a valid builder index).
BuilderIndex uint64 `json:"builder_index"`
HasBuilderIndex bool `json:"has_builder_index"`
BalanceGwei uint64 `json:"balance_gwei,omitempty"`
}
OverviewBuilderKey is one managed builder key, kept small enough that an instance can list its whole fleet in the overview payload.
type OverviewBuilders ¶ added in v0.0.3
type OverviewBuilders struct {
Count uint64 `json:"count"`
Target uint64 `json:"target"`
Active uint64 `json:"active"`
// Indexes are the on-chain indexes of every key currently in the registry,
// ascending. This is the field an indexer wants.
Indexes []uint64 `json:"indexes"`
Keys []OverviewBuilderKey `json:"keys,omitempty"`
TotalBalanceGwei uint64 `json:"total_balance_gwei"`
TotalPendingGwei uint64 `json:"total_pending_payments_gwei"`
TotalEffectiveGwei uint64 `json:"total_effective_gwei"`
}
OverviewBuilders is the managed fleet: the counts a consumer needs to render a summary, plus every registered builder index so an indexer can attribute blocks and bids to this instance.
Consumers must treat it as optional — an instance predating the managed key set omits it, and the legacy top-level builder_pubkey/builder_index fields remain populated with the primary key for exactly that reason.
type OverviewELClient ¶
type OverviewELClient struct {
Code string `json:"code,omitempty"`
Name string `json:"name,omitempty"`
Version string `json:"version,omitempty"`
Commit string `json:"commit,omitempty"`
}
OverviewELClient is the EL client identification surfaced by the overview endpoint.
type OverviewResponse ¶
type OverviewResponse struct {
Version string `json:"version"`
Running bool `json:"running"`
BuilderPubkey string `json:"builder_pubkey,omitempty"`
BuilderIndex uint64 `json:"builder_index,omitempty"`
IsRegistered bool `json:"is_registered"`
CurrentSlot uint64 `json:"current_slot"`
ELClient *OverviewELClient `json:"el_client,omitempty"`
Services OverviewServices `json:"services"`
Balances OverviewBalances `json:"balances"`
Stats OverviewStats `json:"stats"`
Builders *OverviewBuilders `json:"builders,omitempty"`
}
OverviewResponse is the response payload of /api/buildoor/overview — a compact summary used by the multi-instance overview UI.
BuilderPubkey/BuilderIndex/IsRegistered describe the PRIMARY key only and are retained for consumers that predate the managed key set; Builders carries the whole fleet.
type OverviewServices ¶
type OverviewServices struct {
EPBSAvailable bool `json:"epbs_available"`
EPBSEnabled bool `json:"epbs_enabled"`
EPBSRegistrationState string `json:"epbs_registration_state,omitempty"`
BuilderAPIAvailable bool `json:"builder_api_available"`
BuilderAPIEnabled bool `json:"builder_api_enabled"`
LifecycleAvailable bool `json:"lifecycle_available"`
LifecycleEnabled bool `json:"lifecycle_enabled"`
}
OverviewServices captures which optional services are available and toggled on.
type OverviewStats ¶
type OverviewStats struct {
SlotsBuilt uint64 `json:"slots_built"`
BlocksIncluded uint64 `json:"blocks_included"`
BidsSubmitted uint64 `json:"bids_submitted"`
BidsWon uint64 `json:"bids_won"`
BuilderAPIHeadersRequested uint64 `json:"builder_api_headers_requested"`
BuilderAPIBlocksPublished uint64 `json:"builder_api_blocks_published"`
BuilderAPIRegisteredValidators int `json:"builder_api_registered_validators"`
}
OverviewStats is a compact subset of stats useful for the overview view.
type PayloadAttributesStreamEvent ¶
type PayloadAttributesStreamEvent struct {
ProposalSlot uint64 `json:"proposal_slot"`
ProposerIndex uint64 `json:"proposer_index"`
ParentBlockHash string `json:"parent_block_hash"`
ParentBlockRoot string `json:"parent_block_root"`
ParentBlockNumber uint64 `json:"parent_block_number"`
Timestamp uint64 `json:"timestamp"`
PrevRandao string `json:"prev_randao"`
FeeRecipient string `json:"fee_recipient"`
ParentBeaconBlockRoot string `json:"parent_beacon_block_root"`
TargetGasLimit uint64 `json:"target_gas_limit"`
WithdrawalsCount int `json:"withdrawals_count"`
ReceivedAt int64 `json:"received_at"`
InclusionListCount int `json:"inclusion_list_count"`
}
PayloadAttributesStreamEvent is sent when a payload_attributes event is received from the beacon node. It arrives before the slot it targets (ProposalSlot), so the WebUI renders it on the parent slot's graph.
type PayloadAvailableStreamEvent ¶
type PayloadAvailableStreamEvent struct {
Slot uint64 `json:"slot"`
BlockRoot string `json:"block_root"`
ReceivedAt int64 `json:"received_at"`
EnvelopeDetail
}
PayloadAvailableStreamEvent is sent when a payload becomes available.
type PayloadBuildFailedStreamEvent ¶
type PayloadBuildFailedStreamEvent struct {
Slot uint64 `json:"slot"`
Candidate string `json:"candidate,omitempty"`
Error string `json:"error"`
FailedAt int64 `json:"failed_at"`
}
PayloadBuildFailedStreamEvent is sent when a payload build fails, so the WebUI can mark the in-progress build as failed.
type PayloadBuildStartedStreamEvent ¶
type PayloadBuildStartedStreamEvent struct {
Slot uint64 `json:"slot"`
Candidate string `json:"candidate,omitempty"`
StartedAt int64 `json:"started_at"`
}
PayloadBuildStartedStreamEvent is sent when payload building begins, before the payload is ready, so the WebUI can render the build as in-progress.
type PayloadReadyStreamEvent ¶
type PayloadReadyStreamEvent struct {
Slot uint64 `json:"slot"`
Candidate string `json:"candidate,omitempty"`
BlockHash string `json:"block_hash"`
// Parent tuple this payload was built on: the execution parent (hash and,
// where known, its block number) and the beacon parent (root and its
// slot), so the UI can show what the payload actually extends.
ParentBlockHash string `json:"parent_block_hash"`
ParentBlockNumber uint64 `json:"parent_block_number,omitempty"`
ParentBlockRoot string `json:"parent_block_root,omitempty"`
ParentSlot uint64 `json:"parent_slot,omitempty"`
BlockValue string `json:"block_value"`
ReadyAt int64 `json:"ready_at"`
// Full built-payload properties (list fields aggregated to counts).
BlockNumber uint64 `json:"block_number,omitempty"`
FeeRecipient string `json:"fee_recipient,omitempty"`
GasLimit uint64 `json:"gas_limit,omitempty"`
GasUsed uint64 `json:"gas_used,omitempty"`
BaseFeePerGas string `json:"base_fee_per_gas,omitempty"` // wei
ExtraData string `json:"extra_data,omitempty"` // 0x-hex
BlobGasUsed uint64 `json:"blob_gas_used,omitempty"`
ExcessBlobGas uint64 `json:"excess_blob_gas,omitempty"`
NumTransactions int `json:"num_transactions"`
NumWithdrawals int `json:"num_withdrawals"`
NumBlobs int `json:"num_blobs"`
NumExecRequests int `json:"num_exec_requests"`
}
PayloadReadyStreamEvent is sent when a payload becomes available.
type ProposerPreferencesEntry ¶
type ProposerPreferencesEntry struct {
Slot uint64 `json:"slot"`
ValidatorIndex uint64 `json:"validator_index"`
ClientName string `json:"client_name,omitempty"`
FeeRecipient string `json:"fee_recipient"`
TargetGasLimit uint64 `json:"target_gas_limit"`
}
ProposerPreferencesEntry represents a single cached proposer preference for the API response.
type ProposerPreferencesResponse ¶
type ProposerPreferencesResponse struct {
Preferences []ProposerPreferencesEntry `json:"preferences"`
}
ProposerPreferencesResponse is the response for GetProposerPreferences.
type RevealStartedStreamEvent ¶ added in v0.0.3
type RevealStartedStreamEvent struct {
Slot uint64 `json:"slot"`
Attempt int `json:"attempt"`
StartedAt int64 `json:"started_at"`
Timestamp int64 `json:"timestamp"`
}
RevealStartedStreamEvent is sent when a reveal attempt begins (envelope construction + submit call) so the UI can render the in-flight call live; the matching reveal event follows on completion.
type RevealStreamEvent ¶
type RevealStreamEvent struct {
Slot uint64 `json:"slot"`
Transport string `json:"transport,omitempty"`
Success bool `json:"success"`
Skipped bool `json:"skipped"`
SkipReason string `json:"skip_reason,omitempty"` // plan_disabled | disabled | late | vote_gate_timeout (skips only)
Error string `json:"error,omitempty"`
Attempt int `json:"attempt,omitempty"`
MaxAttempts int `json:"max_attempts,omitempty"`
StartedAt int64 `json:"started_at,omitempty"`
Timestamp int64 `json:"timestamp"`
// Envelope is the summary of the built (possibly unpublished) envelope;
// absent on skips and pre-construction failures.
Envelope *EnvelopeDetail `json:"envelope,omitempty"`
}
RevealStreamEvent is sent when we submit or skip a reveal (one per attempt). StartedAt/Timestamp bracket the attempt (construction + submit call) so the UI can render the call's duration; StartedAt is 0 on skips.
type ServiceStatusEvent ¶
type ServiceStatusEvent struct {
EPBSAvailable bool `json:"epbs_available"`
EPBSEnabled bool `json:"epbs_enabled"`
EPBSRegistrationState string `json:"epbs_registration_state"`
BuilderAPIAvailable bool `json:"builder_api_available"`
BuilderAPIEnabled bool `json:"builder_api_enabled"`
LifecycleAvailable bool `json:"lifecycle_available"`
LifecycleEnabled bool `json:"lifecycle_enabled"`
}
ServiceStatusEvent indicates which services are available and enabled.
type SlotBidArtifactsResponse ¶ added in v0.0.3
type SlotBidArtifactsResponse struct {
Slot uint64 `json:"slot"`
Bids []BidArtifactMetaEntry `json:"bids"`
}
SlotBidArtifactsResponse lists a slot's stored bid artifacts.
type SlotResultsResponse ¶ added in v0.0.3
type SlotResultsResponse struct {
Results []*slot_results.SlotResult `json:"results"`
MinSlot uint64 `json:"min_slot"`
MaxSlot uint64 `json:"max_slot"`
}
SlotResultsResponse is the response of the slot results range query.
type SlotStartEvent ¶
type SlotStartEvent struct {
Slot uint64 `json:"slot"`
SlotStartTime int64 `json:"slot_start_time"`
}
SlotStartEvent is sent when a new slot starts.
type SlotStateEvent ¶
type SlotStateEvent struct {
Slot uint64 `json:"slot"`
PayloadReady bool `json:"payload_ready"`
BidCount int `json:"bid_count"`
BidsClosed bool `json:"bids_closed"`
BidIncluded bool `json:"bid_included"`
Revealed bool `json:"revealed"`
HighestBidOurs bool `json:"highest_bid_ours"`
HighestBid uint64 `json:"highest_bid"`
OurBid uint64 `json:"our_bid"`
}
SlotStateEvent represents the current state of a slot.
type StatsResponse ¶
type StatsResponse struct {
SlotsBuilt uint64 `json:"slots_built"`
BlocksIncluded uint64 `json:"blocks_included"`
BidsSubmitted uint64 `json:"bids_submitted"`
BidsWon uint64 `json:"bids_won"`
TotalPaid uint64 `json:"total_paid_gwei"`
RevealsSuccess uint64 `json:"reveals_success"`
RevealsFailed uint64 `json:"reveals_failed"`
RevealsSkipped uint64 `json:"reveals_skipped"`
// Builder API stats
BuilderAPIHeadersRequested uint64 `json:"builder_api_headers_requested"`
BuilderAPIBlocksPublished uint64 `json:"builder_api_blocks_published"`
BuilderAPIRegisteredValidators int `json:"builder_api_registered_validators"`
}
StatsResponse is the response for the stats endpoint.
type StatusResponse ¶
type StatusResponse struct {
Running bool `json:"running"`
BuilderIndex uint64 `json:"builder_index"`
BuilderPubkey string `json:"builder_pubkey"`
CurrentSlot uint64 `json:"current_slot"`
IsRegistered bool `json:"is_registered"`
CLBalance uint64 `json:"cl_balance_gwei,omitempty"`
PendingPayments uint64 `json:"pending_payments_gwei,omitempty"`
EffectiveBalance uint64 `json:"effective_balance_gwei,omitempty"`
LifecycleEnabled bool `json:"lifecycle_enabled"`
WalletAddress string `json:"wallet_address,omitempty"`
WalletBalance string `json:"wallet_balance_wei,omitempty"`
DepositEpoch uint64 `json:"deposit_epoch,omitempty"`
WithdrawableEpoch uint64 `json:"withdrawable_epoch,omitempty"`
}
StatusResponse is the response for the status endpoint.
type StreamEvent ¶
type StreamEvent struct {
Type EventType `json:"type"`
Timestamp int64 `json:"timestamp"`
Seq uint64 `json:"seq,omitempty"`
Data any `json:"data"`
}
StreamEvent is a wrapper for all event types sent to clients.
type TestTransformRequest ¶ added in v0.0.3
type TestTransformRequest struct {
// Target is one of payload | bid | envelope.
Target string `json:"target"`
// Expression is the jq program to evaluate.
Expression string `json:"expression"`
// SampleSlot, when > 0, sources the input from that slot's captured
// artifact (falling back to a template when it is unavailable).
SampleSlot uint64 `json:"sample_slot,omitempty"`
}
TestTransformRequest is the body of POST /api/buildoor/action-plan/test-transform.
type TestTransformResponse ¶ added in v0.0.3
type TestTransformResponse struct {
Target string `json:"target"`
// Input is the JSON the expression ran against (message JSON for bid /
// envelope; the payload for payload), pretty-printed as a string.
Input string `json:"input"`
// InputSource is "artifact:slot-N" or "template".
InputSource string `json:"input_source"`
// Output is the transform result, pretty-printed (present when Error is empty).
Output string `json:"output,omitempty"`
// Error is the parse/eval error message (present when the expression fails).
Error string `json:"error,omitempty"`
}
TestTransformResponse reports the transform result against the sample input. Input and Output are pretty-printed JSON as STRINGS (not embedded JSON), so the UI renders them verbatim in a text area.
type ToggleServiceRequest ¶
type ToggleServiceRequest struct {
EPBSEnabled *bool `json:"epbs_enabled,omitempty"`
BuilderAPIEnabled *bool `json:"builder_api_enabled,omitempty"`
LifecycleEnabled *bool `json:"lifecycle_enabled,omitempty"`
}
ToggleServiceRequest is the request for toggling services.
type UpdateActionPlanRequest ¶ added in v0.0.3
type UpdateActionPlanRequest struct {
Updates []*action_plan.PlanUpdate `json:"updates"`
}
UpdateActionPlanRequest is the bulk plan mutation request. Each update targets explicit slots and/or an inclusive range; category members are three-state (absent/null/object) and the "set" member applies fine-grained path updates (e.g. "bid.bid_min_amount") so partial edits never require the full category object.
type UpdateActionPlanResponse ¶ added in v0.0.3
type UpdateActionPlanResponse struct {
Status string `json:"status"`
Slots []uint64 `json:"slots"`
Plans []*action_plan.SlotPlan `json:"plans"`
}
UpdateActionPlanResponse returns the authoritative normalized result of a committed plan mutation: the changed slots with their resulting plans (a nil plan means the slot's plan was deleted).
type UpdateBuilderAPIConfigRequest ¶
type UpdateBuilderAPIConfigRequest struct {
BlockValueSubsidyGwei *uint64 `json:"block_value_subsidy_gwei,omitempty"`
}
UpdateBuilderAPIConfigRequest is the request for updating Builder API config.
type UpdateBuilderConfigRequest ¶
type UpdateBuilderConfigRequest struct {
BuildStartTime *int64 `json:"build_start_time,omitempty"`
PayloadBuildDelay *int64 `json:"payload_build_delay,omitempty"`
ExtraData *string `json:"extra_data,omitempty"`
}
UpdateBuilderConfigRequest is the request for updating shared builder config.
type UpdateBuilderKeyTargetRequest ¶ added in v0.0.3
type UpdateBuilderKeyTargetRequest struct {
Target uint64 `json:"target"`
}
UpdateBuilderKeyTargetRequest sets how many builder keys are kept registered and funded.
type UpdateEPBSRequest ¶
type UpdateEPBSRequest struct {
BuildStartTime *int64 `json:"build_start_time,omitempty"`
BidStartTime *int64 `json:"bid_start_time,omitempty"`
BidEndTime *int64 `json:"bid_end_time,omitempty"`
RevealTime *int64 `json:"reveal_time,omitempty"`
BidMinAmount *uint64 `json:"bid_min_amount,omitempty"`
BidIncrease *uint64 `json:"bid_increase,omitempty"`
BidInterval *int64 `json:"bid_interval,omitempty"`
PayloadBuildDelay *int64 `json:"payload_build_delay,omitempty"`
BidSubsidy *uint64 `json:"bid_subsidy,omitempty"`
}
UpdateEPBSRequest is the request for updating EPBS config.
type UpdateLifecycleConfigRequest ¶
type UpdateLifecycleConfigRequest struct {
TopupThreshold *uint64 `json:"topup_threshold,omitempty"` // Gwei
TopupAmount *uint64 `json:"topup_amount,omitempty"` // Gwei
}
UpdateLifecycleConfigRequest is the request for updating lifecycle config.
type UpdateScheduleRequest ¶
type UpdateScheduleRequest struct {
Mode string `json:"mode"`
EveryNth uint64 `json:"every_nth,omitempty"`
NextN uint64 `json:"next_n,omitempty"`
StartSlot *uint64 `json:"start_slot,omitempty"`
}
UpdateScheduleRequest is the request for updating schedule config.
type UpdateSettingsRequest ¶ added in v0.0.3
type UpdateSettingsRequest map[string]json.RawMessage
UpdateSettingsRequest is a generic path-based settings mutation: keys are the canonical settings registry keys (e.g. "epbs.bid_subsidy", "schedule.mode", "builder_api.value_override_gwei"), values their JSON encodings. Any subset of settings updates in one call.
type ValidatorRegistrationResponse ¶
type ValidatorRegistrationResponse struct {
Pubkey string `json:"pubkey"` // Hex-encoded BLS public key
FeeRecipient string `json:"fee_recipient"` // Hex-encoded Ethereum address
GasLimit uint64 `json:"gas_limit"` // Gas limit for blocks
Timestamp uint64 `json:"timestamp"` // Unix timestamp
}
GetValidators godoc @Id getValidators @Summary List registered validators @Tags Buildoor @Description Returns the list of validators registered via the Builder API (fee recipient preferences). Not paginated. @Produce json @Success 200 {object} map[string][]object "Success" @Failure 500 {object} map[string]string "Server Error" @Router /api/buildoor/validators [get] ValidatorRegistrationResponse represents a formatted validator registration for the UI.
type VoteCoverageStreamEvent ¶ added in v0.0.3
type VoteCoverageStreamEvent struct {
Slots int `json:"slots"`
Attesters int `json:"attesters"`
SeenPct float64 `json:"seen_pct"`
Low bool `json:"low"`
}
VoteCoverageStreamEvent reports how many next-block attesters were seen as raw single attestations beforehand. `low` marks the vote graph unreliable (beacon node likely running without subscribe-all-subnets).