Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add limits for number of transactions by sender #1716

Merged
merged 41 commits into from
May 15, 2020
Merged
Show file tree
Hide file tree
Changes from 32 commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
2586fec
Remove eviction phase 1 (not necessary).
andreibancioiu May 11, 2020
a8642f2
Sketch config.
andreibancioiu May 11, 2020
879add5
Fix initialization of mocks etc.
andreibancioiu May 11, 2020
65b3c12
Sketch application of limits.
May 11, 2020
b0b1d0c
Fix build.
May 11, 2020
ae53ec5
Temporarily bypass application of limits.
May 11, 2020
dfdc4c4
Add type alias.
May 11, 2020
264c1ee
Sketch deduplication.
May 11, 2020
89e7113
Merge branch 'development' into pool++limits
May 11, 2020
edef44f
Fix deduplication logic.
May 11, 2020
a2efbd5
Fix some tests, remove unused code.
May 11, 2020
959d65b
Verify cache config. Extract interface. Add disabled cache (for criti…
May 11, 2020
e79c8ca
Fix tests.
May 11, 2020
c94bbfa
Merge branch 'development' into pool++limits
andreibancioiu May 11, 2020
10f74e8
Fix remaining mock.
andreibancioiu May 12, 2020
19e7eb1
Add some tests.
andreibancioiu May 12, 2020
d966ebd
Extra tests / coverage.
andreibancioiu May 12, 2020
e3d0dd4
Cover disabled cache.
andreibancioiu May 12, 2020
51a5af4
Merge branch 'development' into pool++limits
andreibancioiu May 12, 2020
f4ffcab
Fix long test.
andreibancioiu May 12, 2020
6c3a403
Add extra tests.
May 12, 2020
50c1f4f
Merge branch 'development' into pool++limits
andreibancioiu May 12, 2020
636ad8b
Adjust order of magnitude for gas price.
andreibancioiu May 12, 2020
e9e4739
Extra log.
andreibancioiu May 12, 2020
ba3a4fe
Merge branch 'minor-fixes-scripts-trace' into pool++limits
andreibancioiu May 12, 2020
b3858ef
Fix ERD scale for score.
May 12, 2020
fc8c411
Merge branch 'development' into pool++limits
andreibancioiu May 12, 2020
9c169a7
Remove log.
andreibancioiu May 12, 2020
7f50aec
Fix after self review.
andreibancioiu May 12, 2020
973f9e6
Merge branch 'development' into pool++limits
andreibancioiu May 12, 2020
43b5701
Merge branch 'development' into pool++limits
andreibancioiu May 13, 2020
fa0294f
Merge branch 'development' into pool++limits
andreibancioiu May 13, 2020
7240a23
Merge branch 'development' into pool++limits
LucianMincu May 13, 2020
4761832
Merge branch 'development' into pool++limits
andreibancioiu May 14, 2020
4d044bb
Fix after review.
andreibancioiu May 14, 2020
b63e42f
Merge branch 'development' into pool++limits
andreibancioiu May 14, 2020
b488b4d
Fix after review, plus fix tests to use the correct Equals() function.
andreibancioiu May 14, 2020
aa26f11
Merge branch 'development' into pool++limits
andreibancioiu May 14, 2020
87dc724
Merge branch 'development' into pool++limits
andreibancioiu May 14, 2020
48e3573
Merge branch 'development' into pool++limits
LucianMincu May 15, 2020
4dcb960
Merge branch 'development' into pool++limits
LucianMincu May 15, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions cmd/node/config/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,9 @@

[TxDataPool]
Size = 900000
SizePerSender = 1000
SizeInBytes = 524288000
SizeInBytesPerSender = 614400
Type = "TxCache"
Shards = 16

Expand Down
10 changes: 6 additions & 4 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ package config

// CacheConfig will map the json cache configuration
type CacheConfig struct {
Type string `json:"type"`
Size uint32 `json:"size"`
SizeInBytes uint32 `json:"sizeInBytes"`
Shards uint32 `json:"shards"`
Type string `json:"type"`
Size uint32 `json:"size"`
SizePerSender uint32 `json:"sizePerSender"`
SizeInBytes uint32 `json:"sizeInBytes"`
SizeInBytesPerSender uint32 `json:"sizeInBytesPerSender"`
Shards uint32 `json:"shards"`
}

//HeadersPoolConfig will map the headers cache configuration
Expand Down
8 changes: 0 additions & 8 deletions dataRetriever/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,5 @@ package dataRetriever
// TxPoolNumSendersToEvictInOneStep instructs tx pool eviction algorithm to remove this many senders when eviction takes place
const TxPoolNumSendersToEvictInOneStep = uint32(100)

// TxPoolLargeNumOfTxsForASender instructs tx pool eviction algorithm to tag a sender with more transactions than this value
// as a "sender with a large number of transactions"
const TxPoolLargeNumOfTxsForASender = uint32(500)

// TxPoolNumTxsToEvictFromASender instructs tx pool eviction algorithm to remove this many transactions
// for "a sender with a large number of transactions" when eviction takes place
const TxPoolNumTxsToEvictFromASender = uint32(100)

// TxPoolMinSizeInBytes is the lower limit of the tx cache / eviction parameter "sizeInBytes"
const TxPoolMinSizeInBytes = uint32(40960)
8 changes: 4 additions & 4 deletions dataRetriever/factory/txpool/txPoolFactory_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,22 +10,22 @@ import (

func Test_CreateNewTxPool_ShardedData(t *testing.T) {
config := storageUnit.CacheConfig{Type: storageUnit.FIFOShardedCache, Size: 100, SizeInBytes: 40960, Shards: 1}
args := txpool.ArgShardedTxPool{Config: config, MinGasPrice: 100000000000000, NumberOfShards: 1}
args := txpool.ArgShardedTxPool{Config: config, MinGasPrice: 200000000000, NumberOfShards: 1}

txPool, err := CreateTxPool(args)
require.Nil(t, err)
require.NotNil(t, txPool)

config = storageUnit.CacheConfig{Type: storageUnit.LRUCache, Size: 100, SizeInBytes: 40960, Shards: 1}
args = txpool.ArgShardedTxPool{Config: config, MinGasPrice: 100000000000000, NumberOfShards: 1}
args = txpool.ArgShardedTxPool{Config: config, MinGasPrice: 200000000000, NumberOfShards: 1}
txPool, err = CreateTxPool(args)
require.Nil(t, err)
require.NotNil(t, txPool)
}

func Test_CreateNewTxPool_ShardedTxPool(t *testing.T) {
config := storageUnit.CacheConfig{Size: 100, SizeInBytes: 40960, Shards: 1}
args := txpool.ArgShardedTxPool{Config: config, MinGasPrice: 100000000000000, NumberOfShards: 1}
config := storageUnit.CacheConfig{Size: 100, SizePerSender: 1, SizeInBytes: 40960, SizeInBytesPerSender: 40960, Shards: 1}
args := txpool.ArgShardedTxPool{Config: config, MinGasPrice: 200000000000, NumberOfShards: 1}

txPool, err := CreateTxPool(args)
require.Nil(t, err)
Expand Down
6 changes: 6 additions & 0 deletions dataRetriever/txpool/argShardedTxPool.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,15 @@ func (args *ArgShardedTxPool) verify() error {
if config.SizeInBytes < dataRetriever.TxPoolMinSizeInBytes {
return fmt.Errorf("%w: config.SizeInBytes is less than [dataRetriever.TxPoolMinSizeInBytes]", dataRetriever.ErrCacheConfigInvalidSizeInBytes)
}
if config.SizeInBytesPerSender < dataRetriever.TxPoolMinSizeInBytes {
return fmt.Errorf("%w: config.SizeInBytesPerSender is less than [dataRetriever.TxPoolMinSizeInBytes]", dataRetriever.ErrCacheConfigInvalidSizeInBytes)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what size does TxPoolMinSizeInBytes refer to?
if it is the size of a transaction then it is fine, although name is confusing, if it refers to the size of the pool itself then I don't think the condition is entirely correct, unless the minimum size we want for txpool is one tx.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TxPoolMinSizeInBytes is (was) ~ 40kb, and added mostly to ensure that there are no zeros (just positives) in the configuration. This was an arbitrary number to account for the size in bytes of one transaction, indeed (like 1 was used for counts / num shards and so on).

Fixed to remove ambiguity, and now we use a simple condition for "strictly positive".

}
if config.Size < 1 {
return fmt.Errorf("%w: config.Size is less than 1", dataRetriever.ErrCacheConfigInvalidSize)
}
if config.SizePerSender < 1 {
return fmt.Errorf("%w: config.SizePerSender is less than 1", dataRetriever.ErrCacheConfigInvalidSize)
}
if config.Shards < 1 {
return fmt.Errorf("%w: config.Shards (map chunks) is less than 1", dataRetriever.ErrCacheConfigInvalidShards)
}
Expand Down
16 changes: 16 additions & 0 deletions dataRetriever/txpool/interface.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package txpool

import (
"github.com/ElrondNetwork/elrond-go/storage"
"github.com/ElrondNetwork/elrond-go/storage/txcache"
)

type txCache interface {
iulianpascalau marked this conversation as resolved.
Show resolved Hide resolved
storage.Cacher

AddTx(tx *txcache.WrappedTransaction) (ok bool, added bool)
GetByTxHash(txHash []byte) (*txcache.WrappedTransaction, bool)
RemoveTxByHash(txHash []byte) error
CountTx() int64
ForEachTransaction(function txcache.ForEachTransaction)
}
31 changes: 21 additions & 10 deletions dataRetriever/txpool/shardedTxPool.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import (
"strconv"
"sync"

"github.com/ElrondNetwork/elrond-go-logger"
logger "github.com/ElrondNetwork/elrond-go-logger"
"github.com/ElrondNetwork/elrond-go/core/counting"
"github.com/ElrondNetwork/elrond-go/data"
"github.com/ElrondNetwork/elrond-go/dataRetriever"
Expand All @@ -31,31 +31,31 @@ type shardedTxPool struct {

type txPoolShard struct {
CacheID string
Cache *txcache.TxCache
Cache txCache
}

// NewShardedTxPool creates a new sharded tx pool
// Implements "dataRetriever.TxPool"
func NewShardedTxPool(args ArgShardedTxPool) (dataRetriever.ShardedDataCacherNotifier, error) {
log.Trace("NewShardedTxPool", "args", args)
log.Info("NewShardedTxPool", "args", args)

err := args.verify()
if err != nil {
return nil, err
}

const oneTrilion = 1000000 * 1000000
const oneBillion = 1000000 * 1000
numCaches := 2*args.NumberOfShards - 1

cacheConfigPrototype := txcache.CacheConfig{
NumChunksHint: args.Config.Shards,
EvictionEnabled: true,
NumBytesThreshold: args.Config.SizeInBytes / numCaches,
NumBytesPerSenderThreshold: args.Config.SizeInBytesPerSender,
CountThreshold: args.Config.Size / numCaches,
CountPerSenderThreshold: args.Config.SizePerSender,
NumSendersToEvictInOneStep: dataRetriever.TxPoolNumSendersToEvictInOneStep,
LargeNumOfTxsForASender: dataRetriever.TxPoolLargeNumOfTxsForASender,
NumTxsToEvictFromASender: dataRetriever.TxPoolNumTxsToEvictFromASender,
MinGasPriceMicroErd: uint32(args.MinGasPrice / oneTrilion),
MinGasPriceNanoErd: uint32(args.MinGasPrice / oneBillion),
}

cacheConfigPrototypeForSelfShard := cacheConfigPrototype
Expand All @@ -82,7 +82,7 @@ func (txPool *shardedTxPool) ShardDataStore(cacheID string) storage.Cacher {
}

// getTxCache returns the requested cache
func (txPool *shardedTxPool) getTxCache(cacheID string) *txcache.TxCache {
func (txPool *shardedTxPool) getTxCache(cacheID string) txCache {
shard := txPool.getOrCreateShard(cacheID)
return shard.Cache
}
Expand All @@ -108,8 +108,7 @@ func (txPool *shardedTxPool) createShard(cacheID string) *txPoolShard {

shard, ok := txPool.backingMap[cacheID]
if !ok {
cacheConfig := txPool.getCacheConfig(cacheID)
cache := txcache.NewTxCache(cacheConfig)
cache := txPool.createTxCache(cacheID)
shard = &txPoolShard{
CacheID: cacheID,
Cache: cache,
Expand All @@ -121,6 +120,17 @@ func (txPool *shardedTxPool) createShard(cacheID string) *txPoolShard {
return shard
}

func (txPool *shardedTxPool) createTxCache(cacheID string) txCache {
cacheConfig := txPool.getCacheConfig(cacheID)
cache, err := txcache.NewTxCache(cacheConfig)
if err != nil {
log.Error("shardedTxPool.createTxCache()", "err", err)
return txcache.NewDisabledCache()
}

return cache
}

func (txPool *shardedTxPool) getCacheConfig(cacheID string) txcache.CacheConfig {
var cacheConfig txcache.CacheConfig

Expand All @@ -144,6 +154,7 @@ func (txPool *shardedTxPool) AddData(key []byte, value interface{}, cacheID stri

sourceShardID, destinationShardID, err := process.ParseShardCacherIdentifier(cacheID)
if err != nil {
log.Error("shardedTxPool.AddData()", "err", err)
return
}

Expand Down
48 changes: 31 additions & 17 deletions dataRetriever/txpool/shardedTxPool_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,29 +24,43 @@ func Test_NewShardedTxPool(t *testing.T) {
}

func Test_NewShardedTxPool_WhenBadConfig(t *testing.T) {
goodArgs := ArgShardedTxPool{Config: storageUnit.CacheConfig{Size: 100, SizeInBytes: 40960, Shards: 16}, MinGasPrice: 100000000000000, NumberOfShards: 1}
goodArgs := ArgShardedTxPool{Config: storageUnit.CacheConfig{Size: 100, SizePerSender: 10, SizeInBytes: 409600, SizeInBytesPerSender: 40960, Shards: 16}, MinGasPrice: 200000000000, NumberOfShards: 1}

args := goodArgs
args.Config = storageUnit.CacheConfig{SizeInBytes: 1}
args.Config.SizeInBytes = 1
pool, err := NewShardedTxPool(args)
require.Nil(t, pool)
require.NotNil(t, err)
require.Errorf(t, err, dataRetriever.ErrCacheConfigInvalidSizeInBytes.Error())

args = goodArgs
args.Config = storageUnit.CacheConfig{SizeInBytes: 40960, Size: 1}
args.Config.SizeInBytesPerSender = 1
pool, err = NewShardedTxPool(args)
require.Nil(t, pool)
require.NotNil(t, err)
require.Errorf(t, err, dataRetriever.ErrCacheConfigInvalidShards.Error())
require.Errorf(t, err, dataRetriever.ErrCacheConfigInvalidSizeInBytes.Error())

args = goodArgs
args.Config.Size = 0
pool, err = NewShardedTxPool(args)
require.Nil(t, pool)
require.NotNil(t, err)
require.Errorf(t, err, dataRetriever.ErrCacheConfigInvalidSize.Error())

args = goodArgs
args.Config = storageUnit.CacheConfig{SizeInBytes: 40960, Shards: 1}
args.Config.SizePerSender = 0
pool, err = NewShardedTxPool(args)
require.Nil(t, pool)
require.NotNil(t, err)
require.Errorf(t, err, dataRetriever.ErrCacheConfigInvalidSize.Error())

args = goodArgs
args.Config.Shards = 0
pool, err = NewShardedTxPool(args)
require.Nil(t, pool)
require.NotNil(t, err)
require.Errorf(t, err, dataRetriever.ErrCacheConfigInvalidShards.Error())

args = goodArgs
args.MinGasPrice = 0
pool, err = NewShardedTxPool(args)
Expand All @@ -63,8 +77,8 @@ func Test_NewShardedTxPool_WhenBadConfig(t *testing.T) {
}

func Test_NewShardedTxPool_ComputesCacheConfig(t *testing.T) {
config := storageUnit.CacheConfig{SizeInBytes: 524288000, Size: 900000, Shards: 1}
args := ArgShardedTxPool{Config: config, MinGasPrice: 100000000000000, NumberOfShards: 5}
config := storageUnit.CacheConfig{SizeInBytes: 524288000, SizeInBytesPerSender: 614400, Size: 900000, SizePerSender: 1000, Shards: 1}
args := ArgShardedTxPool{Config: config, MinGasPrice: 200000000000, NumberOfShards: 5}

poolAsInterface, err := NewShardedTxPool(args)
require.Nil(t, err)
Expand All @@ -73,11 +87,11 @@ func Test_NewShardedTxPool_ComputesCacheConfig(t *testing.T) {

require.Equal(t, true, pool.cacheConfigPrototype.EvictionEnabled)
require.Equal(t, uint32(58254222), pool.cacheConfigPrototype.NumBytesThreshold)
require.Equal(t, uint32(614400), pool.cacheConfigPrototype.NumBytesPerSenderThreshold)
require.Equal(t, uint32(100000), pool.cacheConfigPrototype.CountThreshold)
require.Equal(t, uint32(1000), pool.cacheConfigPrototype.CountPerSenderThreshold)
require.Equal(t, uint32(100), pool.cacheConfigPrototype.NumSendersToEvictInOneStep)
require.Equal(t, uint32(500), pool.cacheConfigPrototype.LargeNumOfTxsForASender)
require.Equal(t, uint32(100), pool.cacheConfigPrototype.NumTxsToEvictFromASender)
require.Equal(t, uint32(100), pool.cacheConfigPrototype.MinGasPriceMicroErd)
require.Equal(t, uint32(200), pool.cacheConfigPrototype.MinGasPriceNanoErd)
require.Equal(t, uint32(291271110), pool.cacheConfigPrototypeForSelfShard.NumBytesThreshold)
require.Equal(t, uint32(500000), pool.cacheConfigPrototypeForSelfShard.CountThreshold)
}
Expand Down Expand Up @@ -161,7 +175,7 @@ func Test_AddData_CallsOnAddedHandlers(t *testing.T) {

// Second addition is ignored (txhash-based deduplication)
pool.AddData([]byte("hash-1"), createTx("alice", 42), "1")
pool.AddData([]byte("hash-1"), createTx("whatever", 43), "1")
pool.AddData([]byte("hash-1"), createTx("alice", 42), "1")

waitABit()
require.Equal(t, uint32(1), atomic.LoadUint32(&numAdded))
Expand Down Expand Up @@ -304,8 +318,8 @@ func Test_NotImplementedFunctions(t *testing.T) {
}

func Test_routeToCacheUnions(t *testing.T) {
config := storageUnit.CacheConfig{Size: 100, SizeInBytes: 40960, Shards: 16}
args := ArgShardedTxPool{Config: config, MinGasPrice: 100000000000000, NumberOfShards: 4, SelfShardID: 42}
config := storageUnit.CacheConfig{Size: 100, SizePerSender: 10, SizeInBytes: 409600, SizeInBytesPerSender: 40960, Shards: 16}
args := ArgShardedTxPool{Config: config, MinGasPrice: 200000000000, NumberOfShards: 4, SelfShardID: 42}
poolAsInterface, _ := NewShardedTxPool(args)
pool := poolAsInterface.(*shardedTxPool)

Expand All @@ -319,8 +333,8 @@ func Test_routeToCacheUnions(t *testing.T) {
}

func Test_getCacheConfig(t *testing.T) {
config := storageUnit.CacheConfig{Size: 150, SizeInBytes: 61440, Shards: 16}
args := ArgShardedTxPool{Config: config, MinGasPrice: 100000000000000, NumberOfShards: 8, SelfShardID: 4}
config := storageUnit.CacheConfig{Size: 150, SizePerSender: 1, SizeInBytes: 61440, SizeInBytesPerSender: 40960, Shards: 16}
args := ArgShardedTxPool{Config: config, MinGasPrice: 200000000000, NumberOfShards: 8, SelfShardID: 4}
poolAsInterface, _ := NewShardedTxPool(args)
pool := poolAsInterface.(*shardedTxPool)

Expand Down Expand Up @@ -353,7 +367,7 @@ type thisIsNotATransaction struct {
}

func newTxPoolToTest() (dataRetriever.ShardedDataCacherNotifier, error) {
config := storageUnit.CacheConfig{Size: 100, SizeInBytes: 40960, Shards: 16}
args := ArgShardedTxPool{Config: config, MinGasPrice: 100000000000000, NumberOfShards: 4}
config := storageUnit.CacheConfig{Size: 100, SizePerSender: 10, SizeInBytes: 409600, SizeInBytesPerSender: 40960, Shards: 16}
args := ArgShardedTxPool{Config: config, MinGasPrice: 200000000000, NumberOfShards: 4}
return NewShardedTxPool(args)
}
10 changes: 6 additions & 4 deletions epochStart/metachain/epochStartData_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,11 +102,13 @@ func createTxPool(selfShardID uint32) (dataRetriever.ShardedDataCacherNotifier,
return txpool.NewShardedTxPool(
txpool.ArgShardedTxPool{
Config: storageUnit.CacheConfig{
Size: 100000,
SizeInBytes: 1000000000,
Shards: 16,
Size: 100000,
SizePerSender: 1000,
SizeInBytes: 1000000000,
SizeInBytesPerSender: 10000000,
Shards: 16,
},
MinGasPrice: 100000000000000,
MinGasPrice: 200000000000,
NumberOfShards: 1,
SelfShardID: selfShardID,
},
Expand Down
10 changes: 6 additions & 4 deletions genesis/mock/poolsHolderMock.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,13 @@ func NewPoolsHolderMock() *PoolsHolderMock {
phf.transactions, _ = txpool.NewShardedTxPool(
txpool.ArgShardedTxPool{
Config: storageUnit.CacheConfig{
Size: 10000,
SizeInBytes: 1000000000,
Shards: 16,
Size: 100000,
SizePerSender: 1000,
SizeInBytes: 1000000000,
SizeInBytesPerSender: 10000000,
Shards: 16,
},
MinGasPrice: 100000000000000,
MinGasPrice: 200000000000,
NumberOfShards: 1,
},
)
Expand Down
10 changes: 6 additions & 4 deletions integrationTests/consensus/testInitializer.go
Original file line number Diff line number Diff line change
Expand Up @@ -164,11 +164,13 @@ func createTestShardDataPool() dataRetriever.PoolsHolder {
txPool, _ := txpool.NewShardedTxPool(
txpool.ArgShardedTxPool{
Config: storageUnit.CacheConfig{
Size: 100000,
SizeInBytes: 1000000000,
Shards: 1,
Size: 100000,
SizePerSender: 1000,
SizeInBytes: 1000000000,
SizeInBytesPerSender: 10000000,
Shards: 16,
},
MinGasPrice: 100000000000000,
MinGasPrice: 200000000000,
NumberOfShards: 1,
},
)
Expand Down
11 changes: 7 additions & 4 deletions integrationTests/testInitializer.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"encoding/hex"
"fmt"
"io/ioutil"
"math"
"math/big"
"strings"
"sync"
Expand Down Expand Up @@ -1913,11 +1914,13 @@ func createTxPool(selfShardID uint32) (dataRetriever.ShardedDataCacherNotifier,
return txpool.NewShardedTxPool(
txpool.ArgShardedTxPool{
Config: storageUnit.CacheConfig{
Size: 100000,
SizeInBytes: 1000000000,
Shards: 16,
Size: 100000,
SizePerSender: math.MaxUint32,
SizeInBytes: 1000000000,
SizeInBytesPerSender: math.MaxUint32,
Shards: 16,
},
MinGasPrice: 100000000000000,
MinGasPrice: 200000000000,
NumberOfShards: 1,
SelfShardID: selfShardID,
},
Expand Down
Loading