@@ -16,7 +16,6 @@ package dingo
1616
1717import (
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.
856857type 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
878877func (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