Documentation ¶
Overview ¶
Package accounting provides functionalities needed to do per-peer accounting.
Index ¶
- Variables
- type Accounting
- func (a *Accounting) Balance(peer swarm.Address) (balance *big.Int, err error)
- func (a *Accounting) Balances() (map[string]*big.Int, error)
- func (a *Accounting) Close() error
- func (a *Accounting) CompensatedBalance(peer swarm.Address) (compensated *big.Int, err error)
- func (a *Accounting) CompensatedBalances() (map[string]*big.Int, error)
- func (a *Accounting) Connect(peer swarm.Address, fullNode bool)
- func (a *Accounting) Disconnect(peer swarm.Address)
- func (a *Accounting) Metrics() []prometheus.Collector
- func (a *Accounting) NotifyPaymentReceived(peer swarm.Address, amount *big.Int) error
- func (a *Accounting) NotifyPaymentSent(peer swarm.Address, amount *big.Int, receivedError error)
- func (a *Accounting) NotifyPaymentThreshold(peer swarm.Address, paymentThreshold *big.Int) error
- func (a *Accounting) NotifyRefreshmentReceived(peer swarm.Address, amount *big.Int, timestamp int64) error
- func (a *Accounting) NotifyRefreshmentSent(peer swarm.Address, attemptedAmount, amount *big.Int, timestamp int64, ...)
- func (a *Accounting) OriginatedBalance(peer swarm.Address) (balance *big.Int, err error)
- func (a *Accounting) PeerAccounting() (map[string]PeerInfo, error)
- func (a *Accounting) PeerDebt(peer swarm.Address) (*big.Int, error)
- func (a *Accounting) PrepareCredit(ctx context.Context, peer swarm.Address, price uint64, originated bool) (Action, error)
- func (a *Accounting) PrepareDebit(ctx context.Context, peer swarm.Address, price uint64) (Action, error)
- func (a *Accounting) SetPayFunc(f PayFunc)
- func (a *Accounting) SetRefreshFunc(f RefreshFunc)
- func (a *Accounting) SurplusBalance(peer swarm.Address) (balance *big.Int, err error)
- type Action
- type Interface
- type Mutex
- type PayFunc
- type PeerInfo
- type RefreshFunc
Constants ¶
This section is empty.
Variables ¶
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") // ErrInvalidValue denotes an invalid value read from store ErrInvalidValue = errors.New("invalid value") // ErrOverRelease ErrOverRelease = errors.New("attempting to release more balance than was reserved for peer") // ErrEnforceRefresh ErrEnforceRefresh = errors.New("allowance expectation refused") )
var ErrFailToLock = errors.New("failed to lock")
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 *big.Int, PaymentTolerance, EarlyPayment int64, logger log.Logger, Store storage.StateStorer, Pricing pricing.Interface, refreshRate *big.Int, lightFactor int64, p2pService p2p.Service, ) (*Accounting, error)
NewAccounting creates a new Accounting instance with the provided options.
func (*Accounting) Balances ¶
func (a *Accounting) Balances() (map[string]*big.Int, error)
Balances gets balances for all peers from store.
func (*Accounting) Close ¶
func (a *Accounting) Close() error
Close hangs up running websockets on shutdown.
func (*Accounting) CompensatedBalance ¶
CompensatedBalance returns balance decreased by surplus balance
func (*Accounting) CompensatedBalances ¶
func (a *Accounting) CompensatedBalances() (map[string]*big.Int, error)
CompensatedBalances gets balances for all peers from store.
func (*Accounting) Disconnect ¶
func (a *Accounting) Disconnect(peer swarm.Address)
func (*Accounting) Metrics ¶
func (a *Accounting) Metrics() []prometheus.Collector
Metrics returns the prometheus Collector for the accounting service.
func (*Accounting) NotifyPaymentReceived ¶
NotifyPaymentReceived is called by Settlement when we receive a payment.
func (*Accounting) NotifyPaymentSent ¶
NotifyPaymentSent is triggered by async monetary settlement to update our balance and remove it's price from the shadow reserve
func (*Accounting) NotifyPaymentThreshold ¶
NotifyPaymentThreshold should be called to notify accounting of changes in the payment threshold
func (*Accounting) NotifyRefreshmentReceived ¶
func (a *Accounting) NotifyRefreshmentReceived(peer swarm.Address, amount *big.Int, timestamp int64) error
NotifyRefreshmentReceived is called by pseudosettle when we receive a time based settlement.
func (*Accounting) NotifyRefreshmentSent ¶
func (a *Accounting) NotifyRefreshmentSent(peer swarm.Address, attemptedAmount, amount *big.Int, timestamp int64, allegedInterval int64, receivedError error)
NotifyRefreshmentSent is called by pseudosettle when refreshment is done or failed
func (*Accounting) OriginatedBalance ¶
OriginatedBalance returns the current balance for the given peer.
func (*Accounting) PeerAccounting ¶
func (a *Accounting) PeerAccounting() (map[string]PeerInfo, error)
func (*Accounting) PeerDebt ¶
PeerDebt returns the positive part of the sum of the outstanding balance and the shadow reserve
func (*Accounting) PrepareCredit ¶
func (*Accounting) PrepareDebit ¶
func (a *Accounting) PrepareDebit(ctx context.Context, peer swarm.Address, price uint64) (Action, error)
PrepareDebit prepares a debit operation by increasing the shadowReservedBalance
func (*Accounting) SetPayFunc ¶
func (a *Accounting) SetPayFunc(f PayFunc)
func (*Accounting) SetRefreshFunc ¶
func (a *Accounting) SetRefreshFunc(f RefreshFunc)
func (*Accounting) SurplusBalance ¶
SurplusBalance returns the current balance for the given peer.
type Action ¶
type Action interface { // Cleanup cleans up an action. Must be called whether it was applied or not. Cleanup() // Apply applies an action Apply() error }
Action represents an accounting action that can be applied
type Interface ¶
type Interface interface { // PrepareCredit action to prevent overspending in case of concurrent requests. PrepareCredit(ctx context.Context, peer swarm.Address, price uint64, originated bool) (Action, error) // PrepareDebit returns an accounting Action for the later debit to be executed on and to implement shadowing a possibly credited part of reserve on the other side. PrepareDebit(ctx context.Context, peer swarm.Address, price uint64) (Action, error) // Balance returns the current balance for the given peer. Balance(peer swarm.Address) (*big.Int, error) // SurplusBalance returns the current surplus balance for the given peer. SurplusBalance(peer swarm.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 swarm.Address) (*big.Int, error) // CompensatedBalances returns the compensated balances for all known peers. CompensatedBalances() (map[string]*big.Int, error) // PeerAccounting returns the associated values for all known peers PeerAccounting() (map[string]PeerInfo, error) }
Interface is the Accounting interface.
type Mutex ¶
type Mutex struct {
// contains filtered or unexported fields
}
Mutex is a drop in replacement for the sync.Mutex it will not lock if the context is expired