config

package
v0.101.0 Latest Latest
Warning

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

Go to latest
Published: Jan 13, 2023 License: MIT Imports: 13 Imported by: 4

Documentation

Overview

Package config contains NeoGo node configuration definition.

Index

Constants

View Source
const (
	// UserAgentWrapper is a string that user agent string should be wrapped into.
	UserAgentWrapper = "/"
	// UserAgentPrefix is a prefix used to generate user agent string.
	UserAgentPrefix = "NEO-GO:"
	// UserAgentFormat is a formatted string used to generate user agent string.
	UserAgentFormat = UserAgentWrapper + UserAgentPrefix + "%s" + UserAgentWrapper
	// DefaultMaxIteratorResultItems is the default upper bound of traversed
	// iterator items per JSON-RPC response.
	DefaultMaxIteratorResultItems = 100
)

Variables

View Source
var Version string

Version is the version of the node, set at the build time.

Functions

func IsHardforkValid added in v0.99.0

func IsHardforkValid(s string) bool

IsHardforkValid denotes whether the provided string represents a valid Hardfork name.

Types

type AnnounceableAddress added in v0.100.0

type AnnounceableAddress struct {
	Address       string
	AnnouncedPort uint16
}

AnnounceableAddress is a pair of node address in the form of "[host]:[port]" with optional corresponding announced port to be used in version exchange.

type ApplicationConfiguration

type ApplicationConfiguration struct {
	Ledger `yaml:",inline"`

	// Deprecated: please, use Addresses field of P2P section instead, this field will be removed in future versions.
	Address *string `yaml:"Address,omitempty"`
	// Deprecated: please, use Addresses field of P2P section instead, this field will be removed in future versions.
	AnnouncedNodePort *uint16 `yaml:"AnnouncedPort,omitempty"`
	// Deprecated: this option is moved to the P2P section.
	AttemptConnPeers int `yaml:"AttemptConnPeers"`
	// BroadcastFactor is the factor (0-100) controlling gossip fan-out number optimization.
	//
	// Deprecated: this option is moved to the P2P section.
	BroadcastFactor int                      `yaml:"BroadcastFactor"`
	DBConfiguration dbconfig.DBConfiguration `yaml:"DBConfiguration"`
	// Deprecated: this option is moved to the P2P section.
	DialTimeout int64  `yaml:"DialTimeout"`
	LogLevel    string `yaml:"LogLevel"`
	LogPath     string `yaml:"LogPath"`
	// Deprecated: this option is moved to the P2P section.
	MaxPeers int `yaml:"MaxPeers"`
	// Deprecated: this option is moved to the P2P section.
	MinPeers int `yaml:"MinPeers"`
	// Deprecated: please, use Addresses field of P2P section instead, this field will be removed in future versions.
	NodePort *uint16 `yaml:"NodePort,omitempty"`
	P2P      P2P     `yaml:"P2P"`
	// Deprecated: this option is moved to the P2P section.
	PingInterval int64 `yaml:"PingInterval"`
	// Deprecated: this option is moved to the P2P section.
	PingTimeout int64        `yaml:"PingTimeout"`
	Pprof       BasicService `yaml:"Pprof"`
	Prometheus  BasicService `yaml:"Prometheus"`
	// Deprecated: this option is moved to the P2P section.
	ProtoTickInterval int64               `yaml:"ProtoTickInterval"`
	Relay             bool                `yaml:"Relay"`
	Consensus         Consensus           `yaml:"Consensus"`
	RPC               RPC                 `yaml:"RPC"`
	UnlockWallet      Wallet              `yaml:"UnlockWallet"`
	Oracle            OracleConfiguration `yaml:"Oracle"`
	P2PNotary         P2PNotary           `yaml:"P2PNotary"`
	StateRoot         StateRoot           `yaml:"StateRoot"`
	// ExtensiblePoolSize is the maximum amount of the extensible payloads from a single sender.
	//
	// Deprecated: this option is moved to the P2P section.
	ExtensiblePoolSize int `yaml:"ExtensiblePoolSize"`
}

ApplicationConfiguration config specific to the node.

func (*ApplicationConfiguration) EqualsButServices added in v0.99.2

func (a *ApplicationConfiguration) EqualsButServices(o *ApplicationConfiguration) bool

EqualsButServices returns true when the o is the same as a except for services (Oracle, P2PNotary, Pprof, Prometheus, RPC, StateRoot and UnlockWallet sections) and LogLevel field.

func (*ApplicationConfiguration) GetAddresses added in v0.100.0

func (a *ApplicationConfiguration) GetAddresses() ([]AnnounceableAddress, error)

GetAddresses parses returns the list of AnnounceableAddress containing information gathered from both deprecated Address / NodePort / AnnouncedNodePort and newly created Addresses fields.

type BasicService added in v0.99.1

type BasicService struct {
	Enabled bool `yaml:"Enabled"`
	// Deprecated: please, use Addresses section instead. This field will be removed later.
	Address *string `yaml:"Address,omitempty"`
	// Deprecated: please, use Addresses section instead. This field will be removed later.
	Port *string `yaml:"Port,omitempty"`
	// Addresses holds the list of bind addresses in the form of "address:port".
	Addresses []string `yaml:"Addresses"`
}

BasicService is used as a simple base for node services like Pprof, RPC or Prometheus monitoring.

func (BasicService) GetAddresses added in v0.100.0

func (s BasicService) GetAddresses() []string

GetAddresses returns the set of unique (in terms of raw strings) pairs host:port for the given basic service.

type Blockchain added in v0.100.0

type Blockchain struct {
	ProtocolConfiguration
	Ledger
}

Blockchain is a set of settings for core.Blockchain to use, it includes protocol settings and local node-specific ones.

type Config

type Config struct {
	ProtocolConfiguration    ProtocolConfiguration    `yaml:"ProtocolConfiguration"`
	ApplicationConfiguration ApplicationConfiguration `yaml:"ApplicationConfiguration"`
}

Config top level struct representing the config for the node.

func Load

func Load(path string, netMode netmode.Magic) (Config, error)

Load attempts to load the config from the given path for the given netMode.

func LoadFile added in v0.90.0

func LoadFile(configPath string) (Config, error)

LoadFile loads config from the provided path. It also applies backwards compatibility fixups if necessary.

func (Config) Blockchain added in v0.100.0

func (c Config) Blockchain() Blockchain

Blockchain generates a Blockchain configuration based on Protocol and Application settings.

func (Config) GenerateUserAgent

func (c Config) GenerateUserAgent() string

GenerateUserAgent creates a user agent string based on the build time environment.

type Consensus added in v0.100.0

type Consensus InternalService

Consensus contains consensus service configuration.

type Hardfork added in v0.99.0

type Hardfork byte

Hardfork represents the application hard-fork identifier.

const (
	// HFAspidochelone represents hard-fork introduced in #2469 (ported from
	// https://github.com/neo-project/neo/pull/2712) and #2519 (ported from
	// https://github.com/neo-project/neo/pull/2749).
	HFAspidochelone Hardfork = 1 << iota // Aspidochelone
)

func (Hardfork) String added in v0.99.0

func (i Hardfork) String() string

type InternalService added in v0.100.0

type InternalService struct {
	Enabled      bool   `yaml:"Enabled"`
	UnlockWallet Wallet `yaml:"UnlockWallet"`
}

InternalService stores configuration for internal services that don't have any network configuration, but use a wallet and can be enabled/disabled.

type Ledger added in v0.100.0

type Ledger struct {
	// GarbageCollectionPeriod sets the number of blocks to wait before
	// starting the next MPT garbage collection cycle when RemoveUntraceableBlocks
	// option is used.
	GarbageCollectionPeriod uint32 `yaml:"GarbageCollectionPeriod"`
	// KeepOnlyLatestState specifies if MPT should only store the latest state.
	// If true, DB size will be smaller, but older roots won't be accessible.
	// This value should remain the same for the same database.
	KeepOnlyLatestState bool `yaml:"KeepOnlyLatestState"`
	// RemoveUntraceableBlocks specifies if old data should be removed.
	RemoveUntraceableBlocks bool `yaml:"RemoveUntraceableBlocks"`
	// SaveStorageBatch enables storage batch saving before every persist.
	SaveStorageBatch bool `yaml:"SaveStorageBatch"`
	// SkipBlockVerification allows to disable verification of received
	// blocks (including cryptographic checks).
	SkipBlockVerification bool `yaml:"SkipBlockVerification"`
}

Ledger contains core node-specific settings that are not a part of the ProtocolConfiguration (which is common for every node on the network).

type NeoFSConfiguration added in v0.94.0

type NeoFSConfiguration struct {
	Nodes   []string      `yaml:"Nodes"`
	Timeout time.Duration `yaml:"Timeout"`
}

NeoFSConfiguration is a config for the NeoFS service.

type OracleConfiguration added in v0.93.0

type OracleConfiguration struct {
	Enabled               bool               `yaml:"Enabled"`
	AllowPrivateHost      bool               `yaml:"AllowPrivateHost"`
	AllowedContentTypes   []string           `yaml:"AllowedContentTypes"`
	Nodes                 []string           `yaml:"Nodes"`
	NeoFS                 NeoFSConfiguration `yaml:"NeoFS"`
	MaxTaskTimeout        time.Duration      `yaml:"MaxTaskTimeout"`
	RefreshInterval       time.Duration      `yaml:"RefreshInterval"`
	MaxConcurrentRequests int                `yaml:"MaxConcurrentRequests"`
	RequestTimeout        time.Duration      `yaml:"RequestTimeout"`
	ResponseTimeout       time.Duration      `yaml:"ResponseTimeout"`
	UnlockWallet          Wallet             `yaml:"UnlockWallet"`
}

OracleConfiguration is a config for the oracle module.

type P2P added in v0.100.0

type P2P struct {
	// Addresses stores the node address list in the form of "[host]:[port][:announcedPort]".
	Addresses        []string `yaml:"Addresses"`
	AttemptConnPeers int      `yaml:"AttemptConnPeers"`
	// BroadcastFactor is the factor (0-100) controlling gossip fan-out number optimization.
	BroadcastFactor    int           `yaml:"BroadcastFactor"`
	DialTimeout        time.Duration `yaml:"DialTimeout"`
	ExtensiblePoolSize int           `yaml:"ExtensiblePoolSize"`
	MaxPeers           int           `yaml:"MaxPeers"`
	MinPeers           int           `yaml:"MinPeers"`
	PingInterval       time.Duration `yaml:"PingInterval"`
	PingTimeout        time.Duration `yaml:"PingTimeout"`
	ProtoTickInterval  time.Duration `yaml:"ProtoTickInterval"`
}

P2P holds P2P node settings.

type P2PNotary added in v0.93.0

type P2PNotary InternalService

P2PNotary stores configuration for Notary node service.

type ProtocolConfiguration

type ProtocolConfiguration struct {
	// CommitteeHistory stores committee size change history (height: size).
	CommitteeHistory map[uint32]int `yaml:"CommitteeHistory"`
	// GarbageCollectionPeriod sets the number of blocks to wait before
	// starting the next MPT garbage collection cycle when RemoveUntraceableBlocks
	// option is used.
	//
	// Deprecated: please use the same setting in the ApplicationConfiguration, this field will be removed in future versions.
	GarbageCollectionPeriod uint32 `yaml:"GarbageCollectionPeriod"`

	Magic       netmode.Magic `yaml:"Magic"`
	MemPoolSize int           `yaml:"MemPoolSize"`

	// Hardforks is a map of hardfork names that enables version-specific application
	// logic dependent on the specified height.
	Hardforks map[string]uint32 `yaml:"Hardforks"`
	// InitialGASSupply is the amount of GAS generated in the genesis block.
	InitialGASSupply fixedn.Fixed8 `yaml:"InitialGASSupply"`
	// P2PNotaryRequestPayloadPoolSize specifies the memory pool size for P2PNotaryRequestPayloads.
	// It is valid only if P2PSigExtensions are enabled.
	P2PNotaryRequestPayloadPoolSize int `yaml:"P2PNotaryRequestPayloadPoolSize"`
	// KeepOnlyLatestState specifies if MPT should only store the latest state.
	// If true, DB size will be smaller, but older roots won't be accessible.
	// This value should remain the same for the same database.
	//
	// Deprecated: please use the same setting in the ApplicationConfiguration, this field will be removed in future versions.
	KeepOnlyLatestState bool `yaml:"KeepOnlyLatestState"`
	// RemoveUntraceableBlocks specifies if old data should be removed.
	//
	// Deprecated: please use the same setting in the ApplicationConfiguration, this field will be removed in future versions.
	RemoveUntraceableBlocks bool `yaml:"RemoveUntraceableBlocks"`
	// MaxBlockSize is the maximum block size in bytes.
	MaxBlockSize uint32 `yaml:"MaxBlockSize"`
	// MaxBlockSystemFee is the maximum overall system fee per block.
	MaxBlockSystemFee int64 `yaml:"MaxBlockSystemFee"`
	// MaxTraceableBlocks is the length of the chain accessible to smart contracts.
	MaxTraceableBlocks uint32 `yaml:"MaxTraceableBlocks"`
	// MaxTransactionsPerBlock is the maximum amount of transactions per block.
	MaxTransactionsPerBlock uint16 `yaml:"MaxTransactionsPerBlock"`
	// MaxValidUntilBlockIncrement is the upper increment size of blockchain height in blocks
	// exceeding that a transaction should fail validation. It is set to estimated daily number
	// of blocks with 15s interval.
	MaxValidUntilBlockIncrement uint32 `yaml:"MaxValidUntilBlockIncrement"`
	// NativeUpdateHistories is a list of histories of native contracts updates.
	NativeUpdateHistories map[string][]uint32 `yaml:"NativeActivations"`
	// P2PSigExtensions enables additional signature-related logic.
	P2PSigExtensions bool `yaml:"P2PSigExtensions"`
	// P2PStateExchangeExtensions enables additional P2P MPT state data exchange logic.
	P2PStateExchangeExtensions bool `yaml:"P2PStateExchangeExtensions"`
	// ReservedAttributes allows to have reserved attributes range for experimental or private purposes.
	ReservedAttributes bool `yaml:"ReservedAttributes"`
	// SaveStorageBatch enables storage batch saving before every persist.
	//
	// Deprecated: please use the same setting in the ApplicationConfiguration, this field will be removed in future versions.
	SaveStorageBatch bool `yaml:"SaveStorageBatch"`
	// SecondsPerBlock is the time interval (in seconds) between blocks that consensus nodes work with.
	//
	// Deprecated: replaced by TimePerBlock, to be removed in future versions.
	SecondsPerBlock  int      `yaml:"SecondsPerBlock"`
	SeedList         []string `yaml:"SeedList"`
	StandbyCommittee []string `yaml:"StandbyCommittee"`
	// StateRooInHeader enables storing state root in block header.
	StateRootInHeader bool `yaml:"StateRootInHeader"`
	// StateSyncInterval is the number of blocks between state heights available for MPT state data synchronization.
	// It is valid only if P2PStateExchangeExtensions are enabled.
	StateSyncInterval int `yaml:"StateSyncInterval"`
	// TimePerBlock is the time interval between blocks that consensus nodes work with.
	// It must be an integer number of milliseconds.
	TimePerBlock    time.Duration `yaml:"TimePerBlock"`
	ValidatorsCount int           `yaml:"ValidatorsCount"`
	// Validators stores history of changes to consensus node number (height: number).
	ValidatorsHistory map[uint32]int `yaml:"ValidatorsHistory"`
	// Whether to verify received blocks.
	//
	// Deprecated: please use the same setting in the ApplicationConfiguration, this field will be removed in future versions.
	VerifyBlocks bool `yaml:"VerifyBlocks"`
	// Whether to verify transactions in the received blocks.
	VerifyTransactions bool `yaml:"VerifyTransactions"`
}

ProtocolConfiguration represents the protocol config.

func (*ProtocolConfiguration) Equals added in v0.99.2

Equals allows to compare two ProtocolConfiguration instances, returns true if they're equal.

func (*ProtocolConfiguration) GetCommitteeSize added in v0.98.2

func (p *ProtocolConfiguration) GetCommitteeSize(height uint32) int

GetCommitteeSize returns the committee size for the given height. It implies valid configuration file.

func (*ProtocolConfiguration) GetNumOfCNs added in v0.98.2

func (p *ProtocolConfiguration) GetNumOfCNs(height uint32) int

GetNumOfCNs returns the number of validators for the given height. It implies valid configuration file.

func (*ProtocolConfiguration) ShouldUpdateCommitteeAt added in v0.98.2

func (p *ProtocolConfiguration) ShouldUpdateCommitteeAt(height uint32) bool

ShouldUpdateCommitteeAt answers the question of whether the committee should be updated at the given height.

func (*ProtocolConfiguration) Validate added in v0.98.2

func (p *ProtocolConfiguration) Validate() error

Validate checks ProtocolConfiguration for internal consistency and returns an error if anything inappropriate found. Other methods can rely on protocol validity after this.

type RPC added in v0.99.1

type RPC struct {
	BasicService         `yaml:",inline"`
	EnableCORSWorkaround bool `yaml:"EnableCORSWorkaround"`
	// MaxGasInvoke is the maximum amount of GAS which
	// can be spent during an RPC call.
	MaxGasInvoke           fixedn.Fixed8 `yaml:"MaxGasInvoke"`
	MaxIteratorResultItems int           `yaml:"MaxIteratorResultItems"`
	MaxFindResultItems     int           `yaml:"MaxFindResultItems"`
	MaxNEP11Tokens         int           `yaml:"MaxNEP11Tokens"`
	MaxWebSocketClients    int           `yaml:"MaxWebSocketClients"`
	SessionEnabled         bool          `yaml:"SessionEnabled"`
	SessionExpirationTime  int           `yaml:"SessionExpirationTime"`
	SessionBackedByMPT     bool          `yaml:"SessionBackedByMPT"`
	SessionPoolSize        int           `yaml:"SessionPoolSize"`
	StartWhenSynchronized  bool          `yaml:"StartWhenSynchronized"`
	TLSConfig              TLS           `yaml:"TLSConfig"`
}

RPC is an RPC service configuration information.

type StateRoot added in v0.94.0

type StateRoot InternalService

StateRoot contains state root service configuration.

type TLS added in v0.99.1

type TLS struct {
	BasicService `yaml:",inline"`
	CertFile     string `yaml:"CertFile"`
	KeyFile      string `yaml:"KeyFile"`
}

TLS describes SSL/TLS configuration.

type Wallet added in v0.90.0

type Wallet struct {
	Path     string `yaml:"Path"`
	Password string `yaml:"Password"`
}

Wallet is a wallet info.

Directories

Path Synopsis
Package limits contains a number of system-wide hardcoded constants.
Package limits contains a number of system-wide hardcoded constants.
Package netmode contains well-known network magic numbers.
Package netmode contains well-known network magic numbers.

Jump to

Keyboard shortcuts

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