Read a block's transactions from the block, not one receipt at a time

luxfi/indexer v1.5.6 asked eth_getTransactionReceipt once per transaction and
dropped the transaction on any error — `if err != nil || tx == nil { continue }`,
twice over, with nothing logged. Measured on lux mainnet 96369: block 2 carries
571 transactions, the node serves all 571 and all 571 receipts, and the store
holds 562. The nine that vanished are transactionIndex 407..415, one contiguous
run in the middle of 571 back-to-back calls against one node.

v1.5.8 reads eth_getBlockByNumber(full) plus eth_getBlockReceipts — two round
trips per block where this cost two per transaction — so a receipt read that
fails takes the execution result with it and leaves the transaction, and a
transaction can no longer disappear because the node was busy.

The release job also asked for a runner label nothing carries. Every runner this
forge spawns registers `linux-amd64`; `lux-build-linux-amd64` has never existed,
and a job naming a label no runner has does not fail, it waits — which is why
1.5.49 is the newest image.

Co-authored-by: Hanzo Dev <[email protected]>
This commit is contained in:
2026-09-08 19:48:59 -07:00
co-authored by Hanzo Dev
parent dbb11a2593
commit e44378c65e
3 changed files with 10 additions and 4 deletions
+7 -1
View File
@@ -8,6 +8,12 @@ name: Release
# v* tag queued a job nothing could pick up. A job naming a label no runner carries
# does not fail; it waits. That is why v1.5.4 was tagged and never became an image.
#
# `linux-amd64` is that label read off the pool rather than chosen: every runner
# this forge spawns registers `RUNNER_LABELS=linux-amd64:host`, and hanzo/universe
# — which does build — asks for exactly that. `lux-build-linux-amd64` was the
# second name for the same idea and no runner has ever carried it, so this file
# had inherited the waiting-forever it was written to end.
#
# Same shape as luxfi/graph's release.yml: ghcr auth via the org GHCR_USER /
# GHCR_TOKEN secrets sourced from KMS (the instance GITHUB_TOKEN on this forge is a
# Hanzo Git token and carries no rights at ghcr.io), and a registry layer cache
@@ -31,7 +37,7 @@ concurrency:
jobs:
docker:
runs-on: [lux-build-linux-amd64]
runs-on: [linux-amd64]
timeout-minutes: 45
steps:
- uses: actions/checkout@v4
+1 -1
View File
@@ -6,7 +6,7 @@ require (
github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674
github.com/hanzoai/csqlite v0.1.2
github.com/luxfi/graph v1.2.53
github.com/luxfi/indexer v1.5.6
github.com/luxfi/indexer v1.5.8
github.com/luxfi/mdns v0.1.1
gopkg.in/yaml.v3 v3.0.1
)
+2 -2
View File
@@ -185,8 +185,8 @@ github.com/luxfi/graph v1.2.53 h1:v4Wfu9793qsCAsev4H6T9x336AkQ/hXboHqtINN/YB8=
github.com/luxfi/graph v1.2.53/go.mod h1:hMvCipVl2DqbaqlZGNSdENr4el9Z6OL0PidzgpRA9gs=
github.com/luxfi/ids v1.3.2 h1:c6Rft5kZB4XqiCtWaGH47bfhaNFm3FGRfhEzI01GVeI=
github.com/luxfi/ids v1.3.2/go.mod h1:+5l8cYMbKpORJbQ2r98CYJo9TQATgUdnmzpYFZWMwwc=
github.com/luxfi/indexer v1.5.6 h1:gkW4UhvDj5Qak6JTVSUq06uBmPjiWO60Y1K6ytqy27Q=
github.com/luxfi/indexer v1.5.6/go.mod h1:oypCgtib03LylLJY5TQYct8CAhm16gew6d83PusPFoc=
github.com/luxfi/indexer v1.5.8 h1:m//EZyUoo8Of5M7DMGseOTOoIOkXZ9X/4hTi34YGZGE=
github.com/luxfi/indexer v1.5.8/go.mod h1:oypCgtib03LylLJY5TQYct8CAhm16gew6d83PusPFoc=
github.com/luxfi/log v1.4.3 h1:xkUKRWvQ4ZwvlUC2e0/RTtHYZOYSMvSQ9W9lbjwBmiI=
github.com/luxfi/log v1.4.3/go.mod h1:myIkufyiQomSQH34K981kbz6cG4WUoerRUh7F4XhlQI=
github.com/luxfi/math v1.5.1 h1:FDOY75e4vn/Xra1ij99xOS/9XdxQGCPP6HONHRkCwfg=