Skip to content

Commit

Permalink
refactor: frequent on-chain refresh and payment error code
Browse files Browse the repository at this point in the history
  • Loading branch information
hopeyen committed Oct 25, 2024
1 parent c1aae4d commit 118a697
Show file tree
Hide file tree
Showing 3 changed files with 5 additions and 37 deletions.
2 changes: 1 addition & 1 deletion core/meterer/meterer.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ func NewMeterer(
// Start starts to periodically refreshing the on-chain state
func (m *Meterer) Start(ctx context.Context) {
go func() {
ticker := time.NewTicker(1 * time.Hour)
ticker := time.NewTicker(1 * time.Second)
defer ticker.Stop()

for {
Expand Down
38 changes: 3 additions & 35 deletions core/meterer/onchain_state.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,45 +99,13 @@ func GetPaymentVaultParams(ctx context.Context, tx *eth.Reader) (PaymentVaultPar
}, nil
}

// RefreshOnchainPaymentState returns the current onchain payment state (TODO: can optimize based on contract interface)
// RefreshOnchainPaymentState returns the current onchain payment state
func (pcs *OnchainPaymentState) RefreshOnchainPaymentState(ctx context.Context, tx *eth.Reader) error {
blockNumber, err := tx.GetCurrentBlockNumber(ctx)
if err != nil {
return err
}

pcs.ReservationsLock.Lock()
accountIDs := make([]string, 0, len(pcs.ActiveReservations))
for accountID := range pcs.ActiveReservations {
accountIDs = append(accountIDs, accountID)
}

activeReservations, err := tx.GetActiveReservations(ctx, blockNumber, accountIDs)
if err != nil {
return err
}
pcs.ActiveReservations = activeReservations
pcs.ReservationsLock.Unlock()

pcs.OnDemandLocks.Lock()
accountIDs = make([]string, 0, len(pcs.OnDemandPayments))
for accountID := range pcs.OnDemandPayments {
accountIDs = append(accountIDs, accountID)
}

onDemandPayments, err := tx.GetOnDemandPayments(ctx, blockNumber, accountIDs)
if err != nil {
return err
}
pcs.OnDemandPayments = onDemandPayments
pcs.OnDemandLocks.Unlock()

// These parameters should be rarely updated, but we refresh them anyway
pcs.PaymentVaultParams, err = GetPaymentVaultParams(ctx, tx)
paymentVaultParams, err := GetPaymentVaultParams(ctx, tx)
if err != nil {
return err
}

pcs.PaymentVaultParams = paymentVaultParams
return nil
}

Expand Down
2 changes: 1 addition & 1 deletion disperser/apiserver/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ func (s *DispersalServer) disperseBlob(ctx context.Context, blob *core.Blob, aut
if paymentHeader != nil && *paymentHeader != (core.PaymentMetadata{}) {
err := s.meterer.MeterRequest(ctx, *blob, *paymentHeader)
if err != nil {
return nil, err
return nil, api.NewErrorResourceExhausted(err.Error())
}
} else if s.ratelimiter != nil {
err := s.checkRateLimitsAndAddRatesToHeader(ctx, blob, origin, authenticatedAddress, apiMethodName)
Expand Down

0 comments on commit 118a697

Please sign in to comment.