Skip to content

Commit ba3822e

Browse files
refactor: revise and add tests for exporter/modules/relays.go (#1372)
* refactor: updated relays.go handlers * refactor: move and update relays db functions * test: add ConsensusDBI mocks wth mockery * refactor: add ctx cancellation in exporter and fetch payloads loop * refactor: updated base.go * refactor: add RelayClient to fetch delivered payloads in relays.go * test: add relays tests * fix: lint * refactor: updated relayClient interface, rm SaveBlocksTags & SaveBlocksRelays db func and added SaveBlockTagsAndRelays db func, moved BidTrace type to /commons/types, updated tests * refactor:rename ConsensusDBI to ConsensusRepository and ConsensusDB to DBConsensusRepository, moved repository implementation to a separate file * test: rm ConsensusDBI mocks, create new mocks for ConsensusRepository woth mockery and update tests * refactor: update consensus repository * fix: update import in base.go * refactor: move ConsensusRepository to db2/consensus.go and rename consensusRepository to ConsensusDB * test: update ConsensusRepository mocks with mockery
1 parent e0691a7 commit ba3822e

File tree

6 files changed

+603
-165
lines changed

6 files changed

+603
-165
lines changed

backend/pkg/commons/db2/consensus.go

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package db2
22

33
import (
4+
"database/sql"
45
"fmt"
56

7+
"github.com/gobitfly/beaconchain/pkg/commons/log"
68
"github.com/gobitfly/beaconchain/pkg/commons/types"
79
"github.com/gobitfly/beaconchain/pkg/commons/utils"
810
"github.com/jmoiron/sqlx"
@@ -16,6 +18,13 @@ type ConsensusRepository interface {
1618
UpdateBlockDepositCount(count int) error
1719
SaveNetworkLivenessData(head *types.ChainHead) error
1820
GetNetworkLivenessPreviousHeadEpoch() (uint64, error)
21+
GetRelays() ([]types.Relay, error)
22+
UpdateRelay(tagID, endpoint string) error
23+
UpdateRelayLastExportTry(tagID, endpoint string) error
24+
UpdateRelayExportFailureCount(exportFailureCount uint64, tagID, endpoint string) error
25+
GetFirstRelayBlock(tagID string) (types.RelayBlock, error)
26+
GetLastRelayBlock(tagID string) (types.RelayBlock, error)
27+
SaveBlockTagsAndRelays(tagID string, payload types.BidTrace) error
1928
}
2029

2130
type ConsensusDB struct {
@@ -125,3 +134,124 @@ func (c *ConsensusDB) GetNetworkLivenessPreviousHeadEpoch() (uint64, error) {
125134
err := c.WriterDb.Get(&headEpoch, "SELECT COALESCE(MAX(headepoch), 0) FROM network_liveness")
126135
return headEpoch, err
127136
}
137+
138+
func (c *ConsensusDB) GetRelays() ([]types.Relay, error) {
139+
var relays []types.Relay
140+
err := c.ReaderDb.Select(&relays, `
141+
SELECT tag_id, endpoint, public_link, is_censoring, is_ethical, export_failure_count, last_export_try_ts, last_export_success_ts
142+
FROM relays`)
143+
144+
if err != nil && err != sql.ErrNoRows {
145+
return nil, err
146+
}
147+
return relays, nil
148+
}
149+
150+
func (c *ConsensusDB) UpdateRelay(tagID, endpoint string) error {
151+
_, err := c.WriterDb.Exec(`
152+
UPDATE relays SET
153+
export_failure_count = 0,
154+
last_export_try_ts = NOW() AT TIME ZONE 'utc',
155+
last_export_success_ts = NOW() AT TIME ZONE 'utc'
156+
WHERE tag_id = $1 AND endpoint = $2`, tagID, endpoint)
157+
158+
return err
159+
}
160+
161+
func (c *ConsensusDB) UpdateRelayLastExportTry(tagID, endpoint string) error {
162+
_, err := c.WriterDb.Exec(`
163+
UPDATE relays SET
164+
last_export_try_ts = (NOW() AT TIME ZONE 'utc')
165+
WHERE tag_id = $1 AND endpoint = $2`, tagID, endpoint)
166+
167+
return err
168+
}
169+
170+
func (c *ConsensusDB) UpdateRelayExportFailureCount(exportFailureCount uint64, tagID, endpoint string) error {
171+
_, err := c.WriterDb.Exec(`
172+
UPDATE relays SET
173+
export_failure_count = $1,
174+
last_export_try_ts = (NOW() AT TIME ZONE 'utc')
175+
WHERE tag_id = $2 AND endpoint = $3`, exportFailureCount+1, tagID, endpoint)
176+
177+
return err
178+
}
179+
180+
func (c *ConsensusDB) GetFirstRelayBlock(tagID string) (types.RelayBlock, error) {
181+
var block types.RelayBlock
182+
err := c.ReaderDb.Get(&block, `
183+
SELECT tag_id, block_slot, block_root, exec_block_hash, value, builder_pubkey, proposer_pubkey, proposer_fee_recipient
184+
FROM relays_blocks
185+
WHERE tag_id=$1
186+
ORDER BY block_slot ASC
187+
LIMIT 1`, tagID)
188+
189+
return block, err
190+
}
191+
192+
func (c *ConsensusDB) GetLastRelayBlock(tagID string) (types.RelayBlock, error) {
193+
var block types.RelayBlock
194+
err := c.ReaderDb.Get(&block, `
195+
SELECT tag_id, block_slot, block_root, exec_block_hash, value, builder_pubkey, proposer_pubkey, proposer_fee_recipient
196+
FROM relays_blocks
197+
WHERE tag_id=$1
198+
ORDER BY block_slot DESC
199+
LIMIT 1`, tagID)
200+
201+
return block, err
202+
}
203+
204+
func (c *ConsensusDB) SaveBlockTagsAndRelays(tagID string, payload types.BidTrace) error {
205+
tx, err := c.WriterDb.Beginx()
206+
if err != nil {
207+
return err
208+
}
209+
defer utils.Rollback(tx)
210+
211+
// first insert the tag into the blocks_tags table
212+
_, err = tx.Exec(`
213+
INSERT INTO blocks_tags
214+
SELECT blocks.slot, blocks.blockroot, $1
215+
FROM blocks
216+
WHERE blocks.slot = $2 AND blocks.exec_block_hash = $3
217+
ON CONFLICT DO NOTHING`, tagID, payload.Slot,
218+
utils.MustParseHex(payload.BlockHash))
219+
220+
if err != nil {
221+
log.Error(fmt.Errorf("failed to insert payload into blocks_tags table"), "", 0, map[string]interface{}{"relay": tagID})
222+
return err
223+
}
224+
225+
// save relays
226+
_, err = tx.Exec(`
227+
INSERT INTO relays_blocks
228+
(
229+
tag_id,
230+
block_slot,
231+
block_root,
232+
exec_block_hash,
233+
value,
234+
builder_pubkey,
235+
proposer_pubkey,
236+
proposer_fee_recipient
237+
)
238+
SELECT
239+
$1, blocks.slot, blocks.blockroot, blocks.exec_block_hash, $4, $5, $6, $7
240+
FROM blocks
241+
WHERE
242+
blocks.slot = $2 and
243+
blocks.exec_block_hash = $3
244+
ON CONFLICT (block_slot, block_root, tag_id) DO NOTHING`,
245+
tagID, payload.Slot, payload.Value,
246+
utils.MustParseHex(payload.BlockHash),
247+
utils.MustParseHex(payload.BuilderPubkey),
248+
utils.MustParseHex(payload.ProposerPubkey),
249+
utils.MustParseHex(payload.ProposerFeeRecipient))
250+
251+
if err != nil {
252+
log.Error(fmt.Errorf("failed to insert payload into relays_blocks table"), "", 0, map[string]interface{}{"relay": tagID})
253+
return err
254+
}
255+
256+
return tx.Commit()
257+
}

backend/pkg/commons/db2/mocks/ConsensusRepository.go

Lines changed: 158 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/pkg/commons/types/exporter.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -575,6 +575,18 @@ type RelayBlock struct {
575575
ProposerFeeRecipient string `db:"proposer_fee_recipient" json:"proposer_fee_recipient"`
576576
}
577577

578+
type BidTrace struct {
579+
Slot uint64 `json:"slot,string"`
580+
ParentHash string `json:"parent_hash"`
581+
BlockHash string `json:"block_hash"`
582+
BuilderPubkey string `json:"builder_pubkey"`
583+
ProposerPubkey string `json:"proposer_pubkey"`
584+
ProposerFeeRecipient string `json:"proposer_fee_recipient"`
585+
GasLimit uint64 `json:"gas_limit,string"`
586+
GasUsed uint64 `json:"gas_used,string"`
587+
Value WeiString `json:"value"`
588+
}
589+
578590
type BlockTag struct {
579591
ID string `db:"tag_id"`
580592
BlockSlot uint64 `db:"slot"`

backend/pkg/exporter/modules/base.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"time"
88

99
"github.com/gobitfly/beaconchain/pkg/commons/config"
10+
1011
"github.com/gobitfly/beaconchain/pkg/commons/db"
1112
db2 "github.com/gobitfly/beaconchain/pkg/commons/db2"
1213
"github.com/gobitfly/beaconchain/pkg/commons/log"
@@ -64,7 +65,8 @@ func StartAll(moduleCtx ModuleContext, modules []ModuleInterface, justV2 bool) {
6465
}
6566

6667
if utils.Config.MevBoostRelayExporter.Enabled {
67-
go mevBoostRelaysExporter()
68+
relaysExporter := newRelaysExporter(ctx, consDB)
69+
go relaysExporter.MEVBoostRelaysExporter()
6870
}
6971
}
7072
// wait until the beacon-node is available

0 commit comments

Comments
 (0)