api

package
v0.0.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 12, 2026 License: GPL-3.0 Imports: 41 Imported by: 0

Documentation

Index

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 BlockDetailPayload struct {
	BlockNumber     uint64 `json:"block_number"`
	BlockHash       string `json:"block_hash"`
	GasLimit        uint64 `json:"gas_limit"`
	GasUsed         uint64 `json:"gas_used"`
	NumTransactions int    `json:"num_transactions"`
	NumWithdrawals  int    `json:"num_withdrawals"`
}

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).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL