Documentation
¶
Overview ¶
Example (SortTransactionsBySenderAndNonce) ¶
txs := []*txcache.WrappedTransaction{
{Tx: &transaction.Transaction{Nonce: 3, SndAddr: []byte("bbbb")}, TxHash: []byte("w")},
{Tx: &transaction.Transaction{Nonce: 1, SndAddr: []byte("aaaa")}, TxHash: []byte("x")},
{Tx: &transaction.Transaction{Nonce: 5, SndAddr: []byte("bbbb")}, TxHash: []byte("y")},
{Tx: &transaction.Transaction{Nonce: 2, SndAddr: []byte("aaaa")}, TxHash: []byte("z")},
{Tx: &transaction.Transaction{Nonce: 7, SndAddr: []byte("aabb")}, TxHash: []byte("t")},
{Tx: &transaction.Transaction{Nonce: 6, SndAddr: []byte("aabb")}, TxHash: []byte("a")},
{Tx: &transaction.Transaction{Nonce: 3, SndAddr: []byte("ffff")}, TxHash: []byte("b")},
{Tx: &transaction.Transaction{Nonce: 3, SndAddr: []byte("eeee")}, TxHash: []byte("c")},
}
sortTransactionsBySenderAndNonceLegacy(txs)
for _, item := range txs {
fmt.Println(item.Tx.GetNonce(), string(item.Tx.GetSndAddr()), string(item.TxHash))
}
Output: 1 aaaa x 2 aaaa z 6 aabb a 7 aabb t 3 bbbb w 5 bbbb y 3 eeee c 3 ffff b
Example (SortTransactionsBySenderAndNonce2) ¶
txs := []*txcache.WrappedTransaction{
{Tx: &transaction.Transaction{Nonce: 2, SndAddr: []byte("bbbb")}, TxHash: []byte("w")},
{Tx: &transaction.Transaction{Nonce: 1, SndAddr: []byte("aaaa")}, TxHash: []byte("x")},
{Tx: &transaction.Transaction{Nonce: 1, SndAddr: []byte("bbbb")}, TxHash: []byte("y")},
{Tx: &transaction.Transaction{Nonce: 2, SndAddr: []byte("aaaa")}, TxHash: []byte("z")},
{Tx: &transaction.Transaction{Nonce: 7, SndAddr: []byte("aabb")}, TxHash: []byte("t")},
{Tx: &transaction.Transaction{Nonce: 6, SndAddr: []byte("aabb")}, TxHash: []byte("a")},
{Tx: &transaction.Transaction{Nonce: 1, SndAddr: []byte("ffff")}, TxHash: []byte("b")},
{Tx: &transaction.Transaction{Nonce: 3, SndAddr: []byte("eeee")}, TxHash: []byte("c")},
{Tx: &transaction.Transaction{Nonce: 3, SndAddr: []byte("bbbb")}, TxHash: []byte("c")},
}
sortTransactionsBySenderAndNonceLegacy(txs)
for _, item := range txs {
fmt.Println(item.Tx.GetNonce(), string(item.Tx.GetSndAddr()), string(item.TxHash))
}
Output: 1 aaaa x 2 aaaa z 6 aabb a 7 aabb t 1 bbbb y 2 bbbb w 3 bbbb c 3 eeee c 1 ffff b
Example (SortTransactionsBySenderAndNonceWithFrontRunningProtection) ¶
randomness := "randomness"
txPreproc := transactions{
basePreProcess: &basePreProcess{
hasher: &mock.HasherStub{
ComputeCalled: func(s string) []byte {
if s == randomness {
return []byte{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}
}
return []byte(s)
},
},
},
}
nbSenders := 5
usedRandomness := txPreproc.hasher.Compute(randomness)
senders := make([][]byte, 0)
for i := 0; i < nbSenders; i++ {
sender := make([]byte, len(usedRandomness))
copy(sender, usedRandomness)
sender[len(usedRandomness)-1-i] = 0
senders = append(senders, sender)
}
txs := []*txcache.WrappedTransaction{
{Tx: &transaction.Transaction{Nonce: 2, SndAddr: senders[2]}, TxHash: []byte("w")},
{Tx: &transaction.Transaction{Nonce: 1, SndAddr: senders[0]}, TxHash: []byte("x")},
{Tx: &transaction.Transaction{Nonce: 1, SndAddr: senders[2]}, TxHash: []byte("y")},
{Tx: &transaction.Transaction{Nonce: 2, SndAddr: senders[0]}, TxHash: []byte("z")},
{Tx: &transaction.Transaction{Nonce: 7, SndAddr: senders[1]}, TxHash: []byte("t")},
{Tx: &transaction.Transaction{Nonce: 6, SndAddr: senders[1]}, TxHash: []byte("a")},
{Tx: &transaction.Transaction{Nonce: 1, SndAddr: senders[4]}, TxHash: []byte("b")},
{Tx: &transaction.Transaction{Nonce: 3, SndAddr: senders[3]}, TxHash: []byte("c")},
{Tx: &transaction.Transaction{Nonce: 3, SndAddr: senders[2]}, TxHash: []byte("c")},
}
txPreproc.sortTransactionsBySenderAndNonceWithFrontRunningProtection(txs, []byte(randomness))
for _, item := range txs {
fmt.Println(item.Tx.GetNonce(), hex.EncodeToString(item.Tx.GetSndAddr()), string(item.TxHash))
}
Output: 1 ffffffffffffffffffffffffffffff00 x 2 ffffffffffffffffffffffffffffff00 z 6 ffffffffffffffffffffffffffff00ff a 7 ffffffffffffffffffffffffffff00ff t 1 ffffffffffffffffffffffffff00ffff y 2 ffffffffffffffffffffffffff00ffff w 3 ffffffffffffffffffffffffff00ffff c 3 ffffffffffffffffffffffff00ffffff c 1 ffffffffffffffffffffff00ffffffff b
Index ¶
- func NewBalanceComputation() (*balanceComputation, error)
- func NewBlockSizeComputation(marshalizer marshal.Marshalizer, blockSizeThrottler BlockSizeThrottler, ...) (*blockSizeComputation, error)
- func NewGasComputation(economicsFee process.FeeHandler, txTypeHandler process.TxTypeHandler, ...) (*gasComputation, error)
- func NewRewardTxPreprocessor(rewardTxDataPool dataRetriever.ShardedDataCacherNotifier, ...) (*rewardTxPreprocessor, error)
- func NewScheduledTxsExecution(txProcessor process.TransactionProcessor, ...) (*scheduledTxsExecution, error)
- func NewSmartContractResultPreprocessor(scrDataPool dataRetriever.ShardedDataCacherNotifier, ...) (*smartContractResults, error)
- func NewTransactionPreprocessor(args ArgsTransactionPreProcessor) (*transactions, error)
- func NewValidatorInfoPreprocessor(hasher hashing.Hasher, marshalizer marshal.Marshalizer, ...) (*validatorInfoPreprocessor, error)
- type ArgsTransactionPreProcessor
- type BalanceComputationHandler
- type BlockSizeComputationHandler
- type BlockSizeThrottler
- type BlockTracker
- type SortedTransactionsProvider
- type TxCache
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func NewBalanceComputation ¶
func NewBalanceComputation() (*balanceComputation, error)
NewBalanceComputation creates a new object which computes the addresses balances
func NewBlockSizeComputation ¶
func NewBlockSizeComputation( marshalizer marshal.Marshalizer, blockSizeThrottler BlockSizeThrottler, maxSize uint32, ) (*blockSizeComputation, error)
NewBlockSizeComputation creates a blockSizeComputation instance
func NewGasComputation ¶
func NewGasComputation( economicsFee process.FeeHandler, txTypeHandler process.TxTypeHandler, enableEpochsHandler common.EnableEpochsHandler, ) (*gasComputation, error)
NewGasComputation creates a new object which computes the gas consumption
func NewRewardTxPreprocessor ¶
func NewRewardTxPreprocessor( rewardTxDataPool dataRetriever.ShardedDataCacherNotifier, store dataRetriever.StorageService, hasher hashing.Hasher, marshalizer marshal.Marshalizer, rewardProcessor process.RewardTransactionProcessor, shardCoordinator sharding.Coordinator, accounts state.AccountsAdapter, onRequestRewardTransaction func(shardID uint32, txHashes [][]byte), gasHandler process.GasHandler, pubkeyConverter core.PubkeyConverter, blockSizeComputation BlockSizeComputationHandler, balanceComputation BalanceComputationHandler, processedMiniBlocksTracker process.ProcessedMiniBlocksTracker, ) (*rewardTxPreprocessor, error)
NewRewardTxPreprocessor creates a new reward transaction preprocessor object
func NewScheduledTxsExecution ¶
func NewScheduledTxsExecution( txProcessor process.TransactionProcessor, txCoordinator process.TransactionCoordinator, storer storage.Storer, marshaller marshal.Marshalizer, hasher hashing.Hasher, shardCoordinator sharding.Coordinator, ) (*scheduledTxsExecution, error)
NewScheduledTxsExecution creates a new object which handles the execution of scheduled transactions
func NewSmartContractResultPreprocessor ¶
func NewSmartContractResultPreprocessor( scrDataPool dataRetriever.ShardedDataCacherNotifier, store dataRetriever.StorageService, hasher hashing.Hasher, marshalizer marshal.Marshalizer, scrProcessor process.SmartContractResultProcessor, shardCoordinator sharding.Coordinator, accounts state.AccountsAdapter, onRequestSmartContractResult func(shardID uint32, txHashes [][]byte), gasHandler process.GasHandler, economicsFee process.FeeHandler, pubkeyConverter core.PubkeyConverter, blockSizeComputation BlockSizeComputationHandler, balanceComputation BalanceComputationHandler, enableEpochsHandler common.EnableEpochsHandler, processedMiniBlocksTracker process.ProcessedMiniBlocksTracker, ) (*smartContractResults, error)
NewSmartContractResultPreprocessor creates a new smartContractResult preprocessor object
func NewTransactionPreprocessor ¶
func NewTransactionPreprocessor( args ArgsTransactionPreProcessor, ) (*transactions, error)
NewTransactionPreprocessor creates a new transaction preprocessor object
func NewValidatorInfoPreprocessor ¶
func NewValidatorInfoPreprocessor( hasher hashing.Hasher, marshalizer marshal.Marshalizer, blockSizeComputation BlockSizeComputationHandler, validatorsInfoPool dataRetriever.ShardedDataCacherNotifier, store dataRetriever.StorageService, enableEpochsHandler common.EnableEpochsHandler, ) (*validatorInfoPreprocessor, error)
NewValidatorInfoPreprocessor creates a new validatorInfo preprocessor object
Types ¶
type ArgsTransactionPreProcessor ¶
type ArgsTransactionPreProcessor struct {
TxDataPool dataRetriever.ShardedDataCacherNotifier
Store dataRetriever.StorageService
Hasher hashing.Hasher
Marshalizer marshal.Marshalizer
TxProcessor process.TransactionProcessor
ShardCoordinator sharding.Coordinator
Accounts state.AccountsAdapter
OnRequestTransaction func(shardID uint32, txHashes [][]byte)
EconomicsFee process.FeeHandler
GasHandler process.GasHandler
BlockTracker BlockTracker
BlockType block.Type
PubkeyConverter core.PubkeyConverter
BlockSizeComputation BlockSizeComputationHandler
BalanceComputation BalanceComputationHandler
EnableEpochsHandler common.EnableEpochsHandler
TxTypeHandler process.TxTypeHandler
ScheduledTxsExecutionHandler process.ScheduledTxsExecutionHandler
ProcessedMiniBlocksTracker process.ProcessedMiniBlocksTracker
}
ArgsTransactionPreProcessor holds the arguments to create a txs pre processor
type BalanceComputationHandler ¶
type BalanceComputationHandler interface {
Init()
SetBalanceToAddress(address []byte, value *big.Int)
AddBalanceToAddress(address []byte, value *big.Int) bool
SubBalanceFromAddress(address []byte, value *big.Int) bool
IsAddressSet(address []byte) bool
AddressHasEnoughBalance(address []byte, value *big.Int) bool
IsInterfaceNil() bool
}
BalanceComputationHandler defines the functionality for addresses balances computation, used in preventing executing too many debit transactions, after the proposer executed a credit transaction on the same account in the same block
type BlockSizeComputationHandler ¶
type BlockSizeComputationHandler interface {
Init()
AddNumMiniBlocks(numMiniBlocks int)
AddNumTxs(numTxs int)
IsMaxBlockSizeReached(numNewMiniBlocks int, numNewTxs int) bool
IsMaxBlockSizeWithoutThrottleReached(numNewMiniBlocks int, numNewTxs int) bool
IsInterfaceNil() bool
}
BlockSizeComputationHandler defines the functionality for block size computation
type BlockSizeThrottler ¶
BlockSizeThrottler defines the functionality of adapting the node to the network speed/latency when it should send a block to its peers which should be received in a limited time frame
type BlockTracker ¶
type BlockTracker interface {
IsShardStuck(shardID uint32) bool
ShouldSkipMiniBlocksCreationFromSelf() bool
IsInterfaceNil() bool
}
BlockTracker defines the functionality for node to track the blocks which are received from network
type SortedTransactionsProvider ¶
type SortedTransactionsProvider interface {
GetSortedTransactions() []*txcache.WrappedTransaction
NotifyAccountNonce(accountKey []byte, nonce uint64)
IsInterfaceNil() bool
}
SortedTransactionsProvider defines the public API of the transactions cache
type TxCache ¶
type TxCache interface {
SelectTransactionsWithBandwidth(numRequested int, batchSizePerSender int, bandwidthPerSender uint64) []*txcache.WrappedTransaction
NotifyAccountNonce(accountKey []byte, nonce uint64)
IsInterfaceNil() bool
}
TxCache defines the functionality for the transactions cache