accounting

package
v0.0.0-...-34ee9b9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 24, 2021 License: BSD-3-Clause Imports: 15 Imported by: 0

Documentation

Overview

Package accounting provides functionalities needed to do per-peer accounting.

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrOverdraft denotes the expected debt in Reserve would exceed the payment thresholds.
	ErrOverdraft = errors.New("attempted overdraft")
	// ErrDisconnectThresholdExceeded denotes a peer has exceeded the disconnect threshold.
	ErrDisconnectThresholdExceeded = errors.New("disconnect threshold exceeded")
	// ErrPeerNoBalance is the error returned if no balance in store exists for a peer
	ErrPeerNoBalance = errors.New("no balance for peer")
	// ErrOverflow denotes an arithmetic operation overflowed.
	ErrOverflow = errors.New("overflow error")
	// ErrInvalidValue denotes an invalid value read from store
	ErrInvalidValue = errors.New("invalid value")
)

Functions

This section is empty.

Types

type Accounting

type Accounting struct {
	// contains filtered or unexported fields
}

Accounting is the main implementation of the accounting interface.

func NewAccounting

func NewAccounting(
	PaymentThreshold,
	PaymentTolerance,
	EarlyPayment *big.Int,
	Logger logging.Logger,
	Store storage.StateStorer,
	Settlement settlement.Interface,
	Pricing pricing.Interface,
) (*Accounting, error)

NewAccounting creates a new Accounting instance with the provided options.

func (*Accounting) AsyncNotifyPayment

func (a *Accounting) AsyncNotifyPayment(peer infinity.Address, amount *big.Int) error

AsyncNotifyPayment calls notify payment in a go routine. This is needed when accounting needs to be notified but the accounting lock is already held.

func (*Accounting) Balance

func (a *Accounting) Balance(peer infinity.Address) (balance *big.Int, err error)

Balance returns the current balance for the given peer.

func (*Accounting) Balances

func (a *Accounting) Balances() (map[string]*big.Int, error)

Balances gets balances for all peers from store.

func (*Accounting) CompensatedBalance

func (a *Accounting) CompensatedBalance(peer infinity.Address) (compensated *big.Int, err error)

CompensatedBalance returns balance decreased by surplus balance

func (*Accounting) CompensatedBalances

func (a *Accounting) CompensatedBalances() (map[string]*big.Int, error)

Balances gets balances for all peers from store.

func (*Accounting) Credit

func (a *Accounting) Credit(peer infinity.Address, price uint64) error

Credit increases the amount of credit we have with the given peer (and decreases existing debt).

func (*Accounting) Debit

func (a *Accounting) Debit(peer infinity.Address, price uint64) error

Debit increases the amount of debt we have with the given peer (and decreases existing credit).

func (*Accounting) Metrics

func (a *Accounting) Metrics() []prometheus.Collector

Metrics returns the prometheus Collector for the accounting service.

func (*Accounting) NotifyPayment

func (a *Accounting) NotifyPayment(peer infinity.Address, amount *big.Int) error

NotifyPayment is called by Settlement when we receive a payment.

func (*Accounting) NotifyPaymentThreshold

func (a *Accounting) NotifyPaymentThreshold(peer infinity.Address, paymentThreshold *big.Int) error

NotifyPaymentThreshold should be called to notify accounting of changes in the payment threshold

func (*Accounting) Release

func (a *Accounting) Release(peer infinity.Address, price uint64)

Release releases reserved funds.

func (*Accounting) Reserve

func (a *Accounting) Reserve(ctx context.Context, peer infinity.Address, price uint64) error

Reserve reserves a portion of the balance for peer and attempts settlements if necessary.

func (*Accounting) SurplusBalance

func (a *Accounting) SurplusBalance(peer infinity.Address) (balance *big.Int, err error)

SurplusBalance returns the current balance for the given peer.

type FixedPricer

type FixedPricer struct {
	// contains filtered or unexported fields
}

FixedPricer is a Pricer that has a fixed price for chunks.

func NewFixedPricer

func NewFixedPricer(overlay infinity.Address, poPrice uint64) *FixedPricer

NewFixedPricer returns a new FixedPricer with a given price.

func (*FixedPricer) PeerPrice

func (pricer *FixedPricer) PeerPrice(peer, chunk infinity.Address) uint64

PeerPrice implements Pricer.

func (*FixedPricer) Price

func (pricer *FixedPricer) Price(chunk infinity.Address) uint64

Price implements Pricer.

type Interface

type Interface interface {
	// Reserve reserves a portion of the balance for peer and attempts settlements if necessary.
	// Returns an error if the operation risks exceeding the disconnect threshold or an attempted settlement failed.
	//
	// This has to be called (always in combination with Release) before a
	// Credit action to prevent overspending in case of concurrent requests.
	Reserve(ctx context.Context, peer infinity.Address, price uint64) error
	// Release releases the reserved funds.
	Release(peer infinity.Address, price uint64)
	// Credit increases the balance the peer has with us (we "pay" the peer).
	Credit(peer infinity.Address, price uint64) error
	// Debit increases the balance we have with the peer (we get "paid" back).
	Debit(peer infinity.Address, price uint64) error
	// Balance returns the current balance for the given peer.
	Balance(peer infinity.Address) (*big.Int, error)
	// SurplusBalance returns the current surplus balance for the given peer.
	SurplusBalance(peer infinity.Address) (*big.Int, error)
	// Balances returns balances for all known peers.
	Balances() (map[string]*big.Int, error)
	// CompensatedBalance returns the current balance deducted by current surplus balance for the given peer.
	CompensatedBalance(peer infinity.Address) (*big.Int, error)
	// CompensatedBalances returns the compensated balances for all known peers.
	CompensatedBalances() (map[string]*big.Int, error)
}

Interface is the Accounting interface.

type Pricer

type Pricer interface {
	// PeerPrice is the price the peer charges for a given chunk hash.
	PeerPrice(peer, chunk infinity.Address) uint64
	// Price is the price we charge for a given chunk hash.
	Price(chunk infinity.Address) uint64
}

Pricer returns pricing information for chunk hashes.

Directories

Path Synopsis
Package mock provides a mock implementation for the accounting interface.
Package mock provides a mock implementation for the accounting interface.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL