Skip to content

Commit 010fcba

Browse files
authored
fix: stake adapter direct metadata queries (#1450)
Signed-off-by: Chris Gianelloni <wolf31o2@blinklabs.io>
1 parent e45db2b commit 010fcba

File tree

1 file changed

+15
-25
lines changed

1 file changed

+15
-25
lines changed

node.go

Lines changed: 15 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ package dingo
1616

1717
import (
1818
"context"
19-
"encoding/hex"
2019
"errors"
2120
"fmt"
2221
"log/slog"
@@ -853,6 +852,8 @@ func (b *blockBroadcaster) AddBlock(
853852
}
854853

855854
// stakeDistributionAdapter adapts ledger.LedgerState to leader.StakeDistributionProvider.
855+
// It queries the metadata store directly with a nil transaction so the SQLite
856+
// read pool is used, avoiding contention with block-processing write locks.
856857
type stakeDistributionAdapter struct {
857858
ledgerState *ledger.LedgerState
858859
}
@@ -861,35 +862,24 @@ func (a *stakeDistributionAdapter) GetPoolStake(
861862
epoch uint64,
862863
poolKeyHash []byte,
863864
) (uint64, error) {
864-
txn := a.ledgerState.Database().Transaction(false)
865-
var stake uint64
866-
err := txn.Do(func(txn *database.Txn) error {
867-
view := a.ledgerState.NewView(txn)
868-
dist, err := view.GetStakeDistribution(epoch)
869-
if err != nil {
870-
return err
871-
}
872-
stake = dist.PoolStakes[hex.EncodeToString(poolKeyHash)]
873-
return nil
874-
})
875-
return stake, err
865+
snapshot, err := a.ledgerState.Database().Metadata().GetPoolStakeSnapshot(
866+
epoch, "mark", poolKeyHash, nil,
867+
)
868+
if err != nil {
869+
return 0, err
870+
}
871+
if snapshot == nil {
872+
return 0, nil
873+
}
874+
return uint64(snapshot.TotalStake), nil
876875
}
877876

878877
func (a *stakeDistributionAdapter) GetTotalActiveStake(
879878
epoch uint64,
880879
) (uint64, error) {
881-
txn := a.ledgerState.Database().Transaction(false)
882-
var stake uint64
883-
err := txn.Do(func(txn *database.Txn) error {
884-
view := a.ledgerState.NewView(txn)
885-
dist, err := view.GetStakeDistribution(epoch)
886-
if err != nil {
887-
return err
888-
}
889-
stake = dist.TotalStake
890-
return nil
891-
})
892-
return stake, err
880+
return a.ledgerState.Database().Metadata().GetTotalActiveStake(
881+
epoch, "mark", nil,
882+
)
893883
}
894884

895885
// epochInfoAdapter adapts ledger.LedgerState to leader.EpochInfoProvider.

0 commit comments

Comments
 (0)