Documentation ¶
Index ¶
- Constants
- Variables
- type Batch
- type BatchEventListener
- type ChainState
- type EventUpdater
- type Listener
- type RadiusSetter
- type ReserveState
- type Service
- type Stamp
- func (s *Stamp) BatchID() []byte
- func (s *Stamp) Index() []byte
- func (s *Stamp) MarshalBinary() ([]byte, error)
- func (s *Stamp) Sig() []byte
- func (s *Stamp) Timestamp() []byte
- func (s *Stamp) UnmarshalBinary(buf []byte) error
- func (s *Stamp) Valid(chunkAddr swarm.Address, ownerAddr []byte, depth, bucketDepth uint8, ...) error
- type StampIssuer
- func (si *StampIssuer) Amount() *big.Int
- func (si *StampIssuer) BlockNumber() uint64
- func (si *StampIssuer) BucketDepth() uint8
- func (si *StampIssuer) BucketUpperBound() uint32
- func (si *StampIssuer) Buckets() []uint32
- func (si *StampIssuer) Depth() uint8
- func (si *StampIssuer) ID() []byte
- func (si *StampIssuer) ImmutableFlag() bool
- func (si *StampIssuer) Label() string
- func (si *StampIssuer) MarshalBinary() ([]byte, error)
- func (si *StampIssuer) UnmarshalBinary(data []byte) error
- func (si *StampIssuer) Utilization() uint32
- type Stamper
- type Storer
- type UnreserveIteratorFn
- type ValidStampFn
Constants ¶
const ( StampSize = 113 IndexSize = 8 BucketDepth = 16 )
StampSize is the number of bytes in the serialisation of a stamp
Variables ¶
var ( // ErrNotFound is the error returned when issuer with given batch ID does not exist. ErrNotFound = errors.New("not found") // ErrNotUsable is the error returned when issuer with given batch ID is not usable. ErrNotUsable = errors.New("not usable") )
var ( // ErrOwnerMismatch is the error given for invalid signatures. ErrOwnerMismatch = errors.New("owner mismatch") // ErrInvalidIndex the error given for invalid stamp index. ErrInvalidIndex = errors.New("invalid index") // ErrStampInvalid is the error given if stamp cannot deserialise. ErrStampInvalid = errors.New("invalid stamp") // ErrBucketMismatch is the error given if stamp index bucket verification fails. ErrBucketMismatch = errors.New("bucket mismatch") )
var ( // ErrBucketFull is the error when a collision bucket is full. ErrBucketFull = errors.New("bucket full") )
Functions ¶
This section is empty.
Types ¶
type Batch ¶
type Batch struct { ID []byte // batch ID Value *big.Int // normalised balance of the batch Start uint64 // block number the batch was created Owner []byte // owner's ethereum address Depth uint8 // batch depth, i.e., size = 2^{depth} BucketDepth uint8 // the depth of neighbourhoods t Immutable bool // if the batch allows adding new capacity (dilution) Radius uint8 // reserve radius, non-serialised }
Batch represents a postage batch, a payment on the blockchain.
func (*Batch) MarshalBinary ¶
MarshalBinary implements BinaryMarshaller. It will attempt to serialize the postage batch to a byte slice. serialised as ID(32)|big endian value(32)|start block(8)|owner addr(20)|BucketDepth(1)|depth(1)|immutable(1)
func (*Batch) UnmarshalBinary ¶
UnmarshalBinary implements BinaryUnmarshaller. It will attempt deserialize the given byte slice into the batch.
type BatchEventListener ¶ added in v1.2.0
type ChainState ¶
type ChainState struct { Block uint64 // The block number of the last postage event. TotalAmount *big.Int // Cumulative amount paid per stamp. CurrentPrice *big.Int // Bzz/chunk/block normalised price. }
ChainState contains data the batch service reads from the chain.
type EventUpdater ¶
type EventUpdater interface { Create(id []byte, owner []byte, normalisedBalance *big.Int, depth, bucketDepth uint8, immutable bool, txHash []byte) error TopUp(id []byte, normalisedBalance *big.Int, txHash []byte) error UpdateDepth(id []byte, depth uint8, normalisedBalance *big.Int, txHash []byte) error UpdatePrice(price *big.Int, txHash []byte) error UpdateBlockNumber(blockNumber uint64) error Start(startBlock uint64) (<-chan struct{}, error) TransactionStart() error TransactionEnd() error }
EventUpdater interface definitions reflect the updates triggered by events emitted by the postage contract on the blockchain.
type Listener ¶
type Listener interface { io.Closer Listen(from uint64, updater EventUpdater) <-chan struct{} }
Listener provides a blockchain event iterator.
type RadiusSetter ¶
type RadiusSetter interface {
SetRadius(uint8)
}
RadiusSetter is used as a callback when the radius of a node changes.
type ReserveState ¶
type Service ¶
type Service interface { Add(*StampIssuer) error StampIssuers() []*StampIssuer GetStampIssuer([]byte) (*StampIssuer, error) IssuerUsable(*StampIssuer) bool BatchEventListener io.Closer }
Service is the postage service interface.
func NewService ¶
NewService constructs a new Service.
type Stamp ¶
type Stamp struct {
// contains filtered or unexported fields
}
Stamp represents a postage stamp as attached to a chunk.
func (*Stamp) MarshalBinary ¶
MarshalBinary gives the byte slice serialisation of a stamp: batchID[32]|index[8]|timestamp[8]|Signature[65].
func (*Stamp) UnmarshalBinary ¶
UnmarshalBinary parses a serialised stamp into id and signature.
func (*Stamp) Valid ¶
func (s *Stamp) Valid(chunkAddr swarm.Address, ownerAddr []byte, depth, bucketDepth uint8, immutable bool) error
Valid checks the validity of the postage stamp; in particular: - authenticity - check batch is valid on the blockchain - authorisation - the batch owner is the stamp signer the validity check is only meaningful in its association of a chunk this chunk address needs to be given as argument
type StampIssuer ¶
type StampIssuer struct {
// contains filtered or unexported fields
}
StampIssuer is a local extension of a batch issuing stamps for uploads. A StampIssuer instance extends a batch with bucket collision tracking embedded in multiple Stampers, can be used concurrently.
func NewStampIssuer ¶
func NewStampIssuer(label, keyID string, batchID []byte, batchAmount *big.Int, batchDepth, bucketDepth uint8, blockNumber uint64, immutableFlag bool) *StampIssuer
NewStampIssuer constructs a StampIssuer as an extension of a batch for local upload.
BucketDepth must always be smaller than batchDepth otherwise inc() panics.
func (*StampIssuer) Amount ¶ added in v1.0.0
func (si *StampIssuer) Amount() *big.Int
Amount represent issued batch amount paid.
func (*StampIssuer) BlockNumber ¶ added in v1.0.0
func (si *StampIssuer) BlockNumber() uint64
BlockNumber when this batch was created.
func (*StampIssuer) BucketDepth ¶ added in v1.0.0
func (si *StampIssuer) BucketDepth() uint8
BucketDepth the depth of collision Buckets uniformity.
func (*StampIssuer) BucketUpperBound ¶ added in v1.1.0
func (si *StampIssuer) BucketUpperBound() uint32
BucketUpperBound returns the maximum number of collisions possible in a bucket given the batch's depth and bucket depth.
func (*StampIssuer) Buckets ¶ added in v1.1.0
func (si *StampIssuer) Buckets() []uint32
func (*StampIssuer) Depth ¶ added in v1.0.0
func (si *StampIssuer) Depth() uint8
Depth represent issued batch depth.
func (*StampIssuer) ImmutableFlag ¶ added in v1.0.0
func (si *StampIssuer) ImmutableFlag() bool
ImmutableFlag immutability of the created batch.
func (*StampIssuer) Label ¶
func (si *StampIssuer) Label() string
Label returns the label of the issuer.
func (*StampIssuer) MarshalBinary ¶
func (si *StampIssuer) MarshalBinary() ([]byte, error)
MarshalBinary implements the encoding.BinaryMarshaler interface.
func (*StampIssuer) UnmarshalBinary ¶
func (si *StampIssuer) UnmarshalBinary(data []byte) error
UnmarshalBinary implements the encoding.BinaryUnmarshaler interface.
func (*StampIssuer) Utilization ¶
func (si *StampIssuer) Utilization() uint32
Utilization returns the batch utilization in the form of an integer between 0 and 4294967295. Batch fullness can be calculated with: max_bucket_value / 2 ^ (batch_depth - bucket_depth)
type Stamper ¶
Stamper can issue stamps from the given address.
func NewStamper ¶
func NewStamper(st *StampIssuer, signer crypto.Signer) Stamper
NewStamper constructs a Stamper.
type Storer ¶
type Storer interface { // Get returns a batch from the store with the given ID. Get([]byte) (*Batch, error) // Exists reports whether batch referenced by the give id exists. Exists([]byte) (bool, error) // Iterate iterates through stored batches. Iterate(func(*Batch) (bool, error)) error // Save stores given batch in the store. The call is idempotent, so // a subsequent call would not create new batches if a batch with // such ID already exists. Save(*Batch) error // Update updates a given batch in the store by first deleting the // existing batch and then creating a new one. It's an error to update // non-existing batch. Update(*Batch, *big.Int, uint8) error // GetChainState returns the stored chain state from the store. GetChainState() *ChainState // PutChainState puts given chain state into the store. PutChainState(*ChainState) error // GetReserveState returns a copy of stored reserve state. GetReserveState() *ReserveState // SetRadiusSetter sets the RadiusSetter to the given value. // The given RadiusSetter will be called when radius changes. SetRadiusSetter(RadiusSetter) // Unreserve evict batches from the unreserve queue of the storage. // During the eviction process, the given UnreserveIteratorFn is called. Unreserve(UnreserveIteratorFn) error // Reset resets chain state and reserve state of the storage. Reset() error }
Storer represents the persistence layer for batches on the current (highest available) block.
type UnreserveIteratorFn ¶ added in v1.0.0
UnreserveIteratorFn is used as a callback on Storer.Unreserve method calls.
type ValidStampFn ¶ added in v1.1.0
func ValidStamp ¶
func ValidStamp(batchStore Storer) ValidStampFn
ValidStamp returns a stampvalidator function passed to protocols with chunk entrypoints.
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package batchstore implements the reserve the reserve serves to maintain chunks in the area of responsibility it has two components - the batchstore reserve which maintains information about batches, their values, priorities and synchronises with the blockchain - the localstore which stores chunks and manages garbage collection when a new chunk arrives in the localstore, the batchstore reserve is asked to check the batch used in the postage stamp attached to the chunk.
|
Package batchstore implements the reserve the reserve serves to maintain chunks in the area of responsibility it has two components - the batchstore reserve which maintains information about batches, their values, priorities and synchronises with the blockchain - the localstore which stores chunks and manages garbage collection when a new chunk arrives in the localstore, the batchstore reserve is asked to check the batch used in the postage stamp attached to the chunk. |