partition

package
v1.0.1 Latest Latest
Warning

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

Go to latest
Published: Apr 29, 2025 License: AGPL-3.0 Imports: 42 Imported by: 2

Documentation

Index

Constants

View Source
const (
	KeyAlgorithmSecp256k1 = "secp256k1"

	DefaultT1Timeout                       = 750
	DefaultReplicationMaxBlocks     uint64 = 1000
	DefaultReplicationMaxTx         uint32 = 10000
	DefaultBlockSubscriptionTimeout        = 3000 * time.Millisecond
	DefaultLedgerReplicationTimeout        = 1500 * time.Millisecond
)
View Source
const UnknownLeader = ""

Variables

View Source
var (
	ErrShardConfIsNil = errors.New("shard configuration is nil")
	ErrKeyConfIsNil   = errors.New("key configuration is nil")
	ErrTrustBaseIsNil = errors.New("trust base is nil")
)
View Source
var (
	ErrIndexNotFound = errors.New("index not found")
)
View Source
var ErrNodeDoesNotHaveLatestBlock = errors.New("recovery needed, node does not have the latest block")
View Source
var ErrTxTimeout = errors.New("transaction has timed out")

Functions

func ReadUnitProofIndex

func ReadUnitProofIndex(db keyvaluedb.KeyValueDB, unitID []byte, txOrderHash []byte) (*types.UnitStateWithProof, error)

Types

type BlockAndState

type BlockAndState struct {
	Block *types.Block
	State UnitAndProof
}

type BlockProposalValidator

type BlockProposalValidator interface {
	// Validate validates the given blockproposal.BlockProposal. Returns an error if given block proposal
	// is not valid.
	Validate(bp *blockproposal.BlockProposal, sigVerifier crypto.Verifier, shardConfHash []byte) error
}

BlockProposalValidator is used to validate block proposals.

func NewDefaultBlockProposalValidator

func NewDefaultBlockProposalValidator(
	partitionID types.PartitionID,
	shardID types.ShardID,
	trustBase types.RootTrustBase,
	hashAlg gocrypto.Hash,
) (BlockProposalValidator, error)

NewDefaultBlockProposalValidator creates a new instance of default BlockProposalValidator.

type DefaultBlockProposalValidator

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

DefaultBlockProposalValidator is a default implementation of UnicityCertificateValidator.

func (*DefaultBlockProposalValidator) Validate

func (bpv *DefaultBlockProposalValidator) Validate(bp *blockproposal.BlockProposal, nodeSignatureVerifier crypto.Verifier, shardConfHash []byte) error

type DefaultTxValidator

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

func (*DefaultTxValidator) Validate

func (dtv *DefaultTxValidator) Validate(tx *types.TransactionOrder, currentRoundNumber uint64) error

type DefaultUnicityCertificateValidator

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

DefaultUnicityCertificateValidator is a default implementation of UnicityCertificateValidator.

func (*DefaultUnicityCertificateValidator) Validate

func (ucv *DefaultUnicityCertificateValidator) Validate(uc *types.UnicityCertificate, shardConfHash []byte) error

type IndexReader added in v0.4.0

type IndexReader interface {
	GetOwnerUnits(ownerID []byte, sinceUnitID *types.UnitID, limit int) ([]types.UnitID, error)
}

type IndexWriter added in v0.4.0

type IndexWriter interface {
	LoadState(s txsystem.StateReader) error
	IndexBlock(b *types.Block, s StateProvider) error
}

type Key added in v1.0.0

type Key struct {
	Algorithm  string    `json:"algorithm"`
	PrivateKey hex.Bytes `json:"privateKey"`
}

type KeyConf added in v1.0.0

type KeyConf struct {
	SigKey  Key `json:"sigKey"`
	AuthKey Key `json:"authKey"`
}

func (*KeyConf) AuthKeyPair added in v1.0.0

func (c *KeyConf) AuthKeyPair() (*network.PeerKeyPair, error)

func (*KeyConf) NodeID added in v1.0.0

func (c *KeyConf) NodeID() (peer.ID, error)

func (*KeyConf) Signer added in v1.0.0

func (c *KeyConf) Signer() (abcrypto.Signer, error)

type Leader added in v1.0.0

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

func (*Leader) Get added in v1.0.0

func (l *Leader) Get() peer.ID

func (*Leader) IsLeader added in v1.0.0

func (l *Leader) IsLeader(peerID peer.ID) bool

func (*Leader) Set added in v1.0.0

func (l *Leader) Set(leader peer.ID)

type Node

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

Node represents a member in the partition and implements an instance of a specific TransactionSystem. Partition is a distributed system, it consists of either a set of shards, or one or more partition nodes.

func NewNode

func NewNode(ctx context.Context, txSystem txsystem.TransactionSystem, conf *NodeConf) (*Node, error)

NewNode creates a new instance of the partition node. All parameters expect the nodeOptions are required. Functions implementing the NodeOption interface can be used to override default configuration values.

The following restrictions apply to the inputs:

  • the network peer and signer must use the same keys that were used to generate node genesis file;

func (*Node) CurrentRoundInfo added in v1.0.0

func (n *Node) CurrentRoundInfo(ctx context.Context) (*RoundInfo, error)

func (*Node) FilterValidatorNodes added in v1.0.0

func (n *Node) FilterValidatorNodes(exclude peer.ID) []peer.ID

func (*Node) GetBlock

func (n *Node) GetBlock(_ context.Context, blockNr uint64) (*types.Block, error)

func (*Node) GetTransactionRecordProof added in v1.0.0

func (n *Node) GetTransactionRecordProof(ctx context.Context, txoHash []byte) (*types.TxRecordProof, error)

func (*Node) GetTrustBase added in v1.0.0

func (n *Node) GetTrustBase(epochNumber uint64) (types.RootTrustBase, error)

func (*Node) IsFeelessMode added in v1.0.0

func (n *Node) IsFeelessMode() bool

func (*Node) IsPermissionedMode added in v1.0.0

func (n *Node) IsPermissionedMode() bool

func (*Node) IsValidator added in v1.0.0

func (n *Node) IsValidator() bool

func (*Node) LatestBlockNumber

func (n *Node) LatestBlockNumber() (uint64, error)

LatestBlockNumber returns the latest committed round number. It's part of the public API exposed by node.

func (*Node) NetworkID added in v1.0.0

func (n *Node) NetworkID() types.NetworkID

func (*Node) PartitionID added in v1.0.0

func (n *Node) PartitionID() types.PartitionID

func (*Node) PartitionTypeID added in v1.0.0

func (n *Node) PartitionTypeID() types.PartitionTypeID

func (*Node) Peer added in v1.0.0

func (n *Node) Peer() *network.Peer

func (*Node) RegisterShardConf added in v1.0.0

func (n *Node) RegisterShardConf(shardConf *types.PartitionDescriptionRecord) error

func (*Node) Run

func (n *Node) Run(ctx context.Context) error

func (*Node) SerializeState

func (n *Node) SerializeState(w io.Writer) error

func (*Node) ShardID added in v1.0.0

func (n *Node) ShardID() types.ShardID

func (*Node) SubmitTx

func (n *Node) SubmitTx(ctx context.Context, tx *types.TransactionOrder) (txOrderHash []byte, err error)

func (*Node) TransactionSystemState added in v0.4.0

func (n *Node) TransactionSystemState() txsystem.StateReader

func (*Node) Validators added in v1.0.0

func (n *Node) Validators() peer.IDSlice

type NodeConf added in v1.0.0

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

func NewNodeConf added in v1.0.0

func NewNodeConf(
	keyConf *KeyConf,
	shardConf *types.PartitionDescriptionRecord,
	trustBase types.RootTrustBase,
	observability Observability,
	nodeOptions ...NodeOption,
) (*NodeConf, error)

func (*NodeConf) BlockStore added in v1.0.0

func (c *NodeConf) BlockStore() keyvaluedb.KeyValueDB

func (*NodeConf) GetT2Timeout added in v1.0.0

func (c *NodeConf) GetT2Timeout() time.Duration

func (*NodeConf) HashAlgorithm added in v1.0.0

func (c *NodeConf) HashAlgorithm() crypto.Hash

func (*NodeConf) NetworkID added in v1.0.0

func (c *NodeConf) NetworkID() types.NetworkID

func (*NodeConf) Observability added in v1.0.0

func (c *NodeConf) Observability() Observability

func (*NodeConf) OwnerIndexer added in v1.0.0

func (c *NodeConf) OwnerIndexer() *OwnerIndexer

func (*NodeConf) PartitionID added in v1.0.0

func (c *NodeConf) PartitionID() types.PartitionID

func (*NodeConf) PeerConf added in v1.0.0

func (c *NodeConf) PeerConf() (*network.PeerConfiguration, error)

func (*NodeConf) ProofStore added in v1.0.0

func (c *NodeConf) ProofStore() keyvaluedb.KeyValueDB

func (*NodeConf) ShardConf added in v1.0.0

func (c *NodeConf) ShardConf() *types.PartitionDescriptionRecord

func (*NodeConf) ShardID added in v1.0.0

func (c *NodeConf) ShardID() types.ShardID

func (*NodeConf) TrustBase added in v1.0.0

func (c *NodeConf) TrustBase() types.RootTrustBase

type NodeOption

type NodeOption func(c *NodeConf)

func WithAddress added in v1.0.0

func WithAddress(address string) NodeOption

func WithAnnounceAddresses added in v1.0.0

func WithAnnounceAddresses(announceAddresses []string) NodeOption

func WithBlockProposalValidator

func WithBlockProposalValidator(blockProposalValidator BlockProposalValidator) NodeOption

func WithBlockStore

func WithBlockStore(blockStore keyvaluedb.KeyValueDB) NodeOption

func WithBlockSubscriptionTimeout added in v1.0.0

func WithBlockSubscriptionTimeout(t time.Duration) NodeOption

func WithBootstrapAddresses added in v1.0.0

func WithBootstrapAddresses(bootstrapAddresses []string) NodeOption

func WithEventHandler

func WithEventHandler(eh event.Handler, eventChCapacity int) NodeOption

func WithOwnerIndex added in v0.4.0

func WithOwnerIndex(ownerIndexer *OwnerIndexer) NodeOption

func WithProofIndex

func WithProofIndex(db keyvaluedb.KeyValueDB, history uint64) NodeOption

func WithReplicationParams

func WithReplicationParams(maxFetchBlocks, maxReturnBlocks uint64, maxTx uint32, timeout time.Duration) NodeOption

func WithShardStore added in v1.0.0

func WithShardStore(shardStore keyvaluedb.KeyValueDB) NodeOption

func WithT1Timeout

func WithT1Timeout(t1Timeout time.Duration) NodeOption

func WithTxValidator

func WithTxValidator(txValidator TxValidator) NodeOption

func WithUnicityCertificateValidator

func WithUnicityCertificateValidator(unicityCertificateValidator UnicityCertificateValidator) NodeOption

func WithValidatorNetwork added in v1.0.0

func WithValidatorNetwork(validatorNetwork ValidatorNetwork) NodeOption

type Observability

type Observability interface {
	TracerProvider() trace.TracerProvider
	Tracer(name string, options ...trace.TracerOption) trace.Tracer
	Meter(name string, opts ...metric.MeterOption) metric.Meter
	PrometheusRegisterer() prometheus.Registerer
	Logger() *slog.Logger
	RoundLogger(curRound func() uint64) *slog.Logger
	Shutdown() error
}

type OwnerIndexer

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

OwnerIndexer manages index of unit owners based on txsystem state.

func NewOwnerIndexer

func NewOwnerIndexer(l *slog.Logger) *OwnerIndexer

func (*OwnerIndexer) GetOwnerUnits

func (o *OwnerIndexer) GetOwnerUnits(ownerID []byte, sinceUnitID *types.UnitID, limit int) ([]types.UnitID, error)

GetOwnerUnits returns all unit ids for given owner. If sinceUnitID is set, only units after sinceUnitID are returned

func (*OwnerIndexer) IndexBlock added in v0.4.0

func (o *OwnerIndexer) IndexBlock(b *types.Block, s StateProvider) error

IndexBlock updates the index based on current committed state and transactions in a block (changed units).

func (*OwnerIndexer) LoadState

func (o *OwnerIndexer) LoadState(s txsystem.StateReader) error

LoadState fills the index from state.

type ProofIndexer

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

func NewProofIndexer

func NewProofIndexer(algo crypto.Hash, db keyvaluedb.KeyValueDB, historySize uint64, obs Observability) *ProofIndexer

func (*ProofIndexer) GetDB

func (p *ProofIndexer) GetDB() keyvaluedb.KeyValueDB

func (*ProofIndexer) Handle

func (p *ProofIndexer) Handle(ctx context.Context, block *types.Block, state UnitAndProof)

func (*ProofIndexer) IndexBlock added in v0.4.0

func (p *ProofIndexer) IndexBlock(ctx context.Context, block *types.Block, roundNumber uint64, state UnitAndProof) error

type RoundInfo added in v1.0.0

type RoundInfo struct {
	RoundNumber uint64 `json:"roundNumber"`
	EpochNumber uint64 `json:"epochNumber"`
}

type StateProvider added in v0.4.0

type StateProvider interface {
	GetUnit(id types.UnitID, committed bool) (state.Unit, error)
}

type TxIndex

type TxIndex struct {
	RoundNumber  uint64
	TxOrderIndex int
}

func ReadTransactionIndex

func ReadTransactionIndex(db keyvaluedb.KeyValueDB, txOrderHash []byte) (*TxIndex, error)

type TxValidator

type TxValidator interface {
	Validate(tx *types.TransactionOrder, currentRoundNumber uint64) error
}

TxValidator is used to validate generic transactions (e.g. timeouts, partition identifiers, etc.). This validator should not contain transaction system specific validation logic.

func NewDefaultTxValidator

func NewDefaultTxValidator(partitionID types.PartitionID) (TxValidator, error)

NewDefaultTxValidator creates a new instance of default TxValidator.

type UnicityCertificateValidator

type UnicityCertificateValidator interface {
	// Validate validates the given UC. Returns an error if UC is not valid.
	Validate(uc *types.UnicityCertificate, shardConfHash []byte) error
}

UnicityCertificateValidator is used to validate certificates.UnicityCertificate.

func NewDefaultUnicityCertificateValidator

func NewDefaultUnicityCertificateValidator(
	partitionID types.PartitionID,
	shardID types.ShardID,
	trustBase types.RootTrustBase,
	hashAlg gocrypto.Hash,
) (UnicityCertificateValidator, error)

NewDefaultUnicityCertificateValidator creates a new instance of default UnicityCertificateValidator.

type UnitAndProof

type UnitAndProof interface {
	// GetUnit - access tx system unit state
	GetUnit(id types.UnitID, committed bool) (state.Unit, error)
	// CreateUnitStateProof - create unit proofs
	CreateUnitStateProof(id types.UnitID, logIndex int) (*types.UnitStateProof, error)
}

UnitAndProof read access to state to access unit and unit proofs

type ValidatorNetwork

type ValidatorNetwork interface {
	Send(ctx context.Context, msg any, receivers ...peer.ID) error
	ReceivedChannel() <-chan any

	PublishBlock(ctx context.Context, block *types.Block) error
	SubscribeToBlocks(ctx context.Context) error
	UnsubscribeFromBlocks()
	RegisterValidatorProtocols() error
	UnregisterValidatorProtocols()

	AddTransaction(ctx context.Context, tx *types.TransactionOrder) ([]byte, error)
	ForwardTransactions(ctx context.Context, receiverFunc network.TxReceiver)
	ProcessTransactions(ctx context.Context, txProcessor network.TxProcessor)
}

ValidatorNetwork provides an interface for sending and receiving validator network messages.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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