2023-12-01 10:09:38 +02:00

78 lines
3.6 KiB
Go

package mempool
import (
"time"
"github.com/kaspanet/kaspad/domain/consensus/utils/constants"
"github.com/kaspanet/kaspad/util"
"github.com/kaspanet/kaspad/domain/dagconfig"
)
const (
defaultMaximumTransactionCount = 1_000_000
defaultTransactionExpireIntervalSeconds uint64 = 60
defaultTransactionExpireScanIntervalSeconds uint64 = 10
defaultOrphanExpireIntervalSeconds uint64 = 60
defaultOrphanExpireScanIntervalSeconds uint64 = 10
defaultMaximumOrphanTransactionMass = 100000
// defaultMaximumOrphanTransactionCount should remain small as long as we have recursion in
// removeOrphans when removeRedeemers = true
defaultMaximumOrphanTransactionCount = 50
// defaultMinimumRelayTransactionFee specifies the minimum transaction fee for a transaction to be accepted to
// the mempool and relayed. It is specified in sompi per 1kg (or 1000 grams) of transaction mass.
defaultMinimumRelayTransactionFee = util.Amount(1000)
// Standard transaction version range might be different from what consensus accepts, therefore
// we define separate values in mempool.
// However, currently there's exactly one transaction version, so mempool accepts the same version
// as consensus.
defaultMinimumStandardTransactionVersion = constants.MaxTransactionVersion
defaultMaximumStandardTransactionVersion = constants.MaxTransactionVersion
defaultDustConst = 1e12 // TODO: Determine real value
)
// Config represents a mempool configuration
type Config struct {
MaximumTransactionCount uint64
TransactionExpireIntervalDAAScore uint64
TransactionExpireScanIntervalDAAScore uint64
TransactionExpireScanIntervalSeconds uint64
OrphanExpireIntervalDAAScore uint64
OrphanExpireScanIntervalDAAScore uint64
MaximumOrphanTransactionMass uint64
MaximumOrphanTransactionCount uint64
AcceptNonStandard bool
MaximumMassPerBlock uint64
MinimumRelayTransactionFee util.Amount
MinimumStandardTransactionVersion uint16
MaximumStandardTransactionVersion uint16
DustConst uint64
}
// DefaultConfig returns the default mempool configuration
func DefaultConfig(dagParams *dagconfig.Params) *Config {
targetBlocksPerSecond := time.Second.Seconds() / dagParams.TargetTimePerBlock.Seconds()
return &Config{
MaximumTransactionCount: defaultMaximumTransactionCount,
TransactionExpireIntervalDAAScore: uint64(float64(defaultTransactionExpireIntervalSeconds) / targetBlocksPerSecond),
TransactionExpireScanIntervalDAAScore: uint64(float64(defaultTransactionExpireScanIntervalSeconds) / targetBlocksPerSecond),
TransactionExpireScanIntervalSeconds: defaultTransactionExpireScanIntervalSeconds,
OrphanExpireIntervalDAAScore: uint64(float64(defaultOrphanExpireIntervalSeconds) / targetBlocksPerSecond),
OrphanExpireScanIntervalDAAScore: uint64(float64(defaultOrphanExpireScanIntervalSeconds) / targetBlocksPerSecond),
MaximumOrphanTransactionMass: defaultMaximumOrphanTransactionMass,
MaximumOrphanTransactionCount: defaultMaximumOrphanTransactionCount,
AcceptNonStandard: dagParams.RelayNonStdTxs,
MaximumMassPerBlock: dagParams.MaxBlockMass,
MinimumRelayTransactionFee: defaultMinimumRelayTransactionFee,
MinimumStandardTransactionVersion: defaultMinimumStandardTransactionVersion,
MaximumStandardTransactionVersion: defaultMaximumStandardTransactionVersion,
DustConst: defaultDustConst,
}
}