config

package
v0.0.0-...-76c1feb Latest Latest
Warning

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

Go to latest
Published: Sep 1, 2021 License: AGPL-3.0 Imports: 14 Imported by: 0

Documentation

Index

Constants

View Source
const Betanet protocol.NetworkID = "betanet"

Betanet identifies the 'beta network' use for early releases of feature to the public prior to releasing these to mainnet/testnet

View Source
const CompactCertFilename = "compactcert.sqlite"

CompactCertFilename is the name of the compact certificate database file. It is used to track in-progress compact certificates.

View Source
const ConfigFilename = "config.json"

ConfigFilename is the name of the config.json file where we store per-algod-instance settings

View Source
const ConfigurableConsensusProtocolsFilename = "consensus.json"

ConfigurableConsensusProtocolsFilename defines a set of consensus prototocols that are to be loaded from the data directory ( if present ), to override the built-in supported consensus protocols.

View Source
const CrashFilename = "crash.sqlite"

CrashFilename is the name of the agreement database file. It is used to recover from node crashes.

View Source
const Devnet protocol.NetworkID = "devnet"

Devnet identifies the 'development network' use for development and not generally accessible publicly

View Source
const Devtestnet protocol.NetworkID = "devtestnet"

Devtestnet identifies the 'development network for tests' use for running tests against development and not generally accessible publicly

View Source
const GenesisJSONFile = "genesis.json"

GenesisJSONFile is the name of the genesis.json file

View Source
const LedgerFilenamePrefix = "ledger"

LedgerFilenamePrefix is the prefix of the name of the ledger database files

View Source
const Mainnet protocol.NetworkID = "mainnet"

Mainnet identifies the publicly-available real-money network

View Source
const PhonebookFilename = "phonebook.json" // No longer used in product - still in tests

PhonebookFilename is the name of the phonebook configuration files - no longer used

View Source
const ProposalAssemblyTime time.Duration = 250 * time.Millisecond

ProposalAssemblyTime is the max amount of time to spend on generating a proposal block. This should eventually have it's own configurable value.

View Source
const Testnet protocol.NetworkID = "testnet"

Testnet identifies the publicly-available test network

View Source
const VersionMajor = 2

VersionMajor is the Major semantic version number (#.y.z) - changed when first public release (0.y.z -> 1.y.z) and when backwards compatibility is broken.

View Source
const VersionMinor = 7

VersionMinor is the Minor semantic version number (x.#.z) - changed when backwards-compatible features are introduced. Not enforced until after initial public release (x > 0).

Variables

View Source
var AutogenLocal = getVersionedDefaultLocalConfig(getLatestConfigVersion())

AutogenLocal - this variable is the "input" for the config default generator which automatically updates the above defaultLocal varaible. it's implemented in ./config/defaults_gen.go, and should be the only "consumer" of this exported variable

View Source
var Branch string

Branch is the git branch in effect when the build was created. It will be set by the build tools

View Source
var BuildNumber string

BuildNumber is the monotonic build number, currently based on the date and hour-of-day. It will be set to a build number by the build tools (for 'production' builds for now)

View Source
var Channel string

Channel is the computed release channel based on the Branch in effect when the build was created. It will be set by the build tools

View Source
var CommitHash string

CommitHash is the git commit id in effect when the build was created. It will be set by the build tools (for 'production' builds for now)

View Source
var DefaultDeadlock string

DefaultDeadlock is the default setting to use for EnableDeadlockDetection. It's computed for the build based on the current branch being built - intending to disable deadlock detection in 'production' builds.

View Source
var MaxAppProgramLen int

MaxAppProgramLen is the largest supported app program size supported by any of the consensus protocols. used for decoding purposes.

View Source
var MaxAvailableAppProgramLen int

MaxAvailableAppProgramLen is the largest supported app program size include the extra pages supported supported by any of the consensus protocols. used for decoding purposes.

View Source
var MaxBytesKeyValueLen int

MaxBytesKeyValueLen is a maximum length of key or value across all protocols. used for decoding purposes.

View Source
var MaxEvalDeltaAccounts int

MaxEvalDeltaAccounts is the largest number of accounts that may appear in an eval delta, used for decoding purposes.

View Source
var MaxExtraAppProgramLen int

MaxExtraAppProgramLen is the maximum extra app program length supported by any of the consensus protocols. used for decoding purposes.

View Source
var MaxLogicSigMaxSize int

MaxLogicSigMaxSize is the largest logical signature appear in any of the supported protocols, used for decoding purposes.

View Source
var MaxStateDeltaKeys int

MaxStateDeltaKeys is the largest number of key/value pairs that may appear in a StateDelta, used for decoding purposes.

View Source
var MaxTxGroupSize int

MaxTxGroupSize is the largest supported number of transactions per transaction group supported by any of the consensus protocols. used for decoding purposes.

View Source
var MaxTxnNoteBytes int

MaxTxnNoteBytes is the largest supported nodes field array size supported by any of the consensus protocols. used for decoding purposes.

View Source
var MaxVoteThreshold int

MaxVoteThreshold is the largest threshold for a bundle over all supported consensus protocols, used for decoding purposes.

View Source
var Protocol = Global{
	SmallLambda: 2000 * time.Millisecond,
	BigLambda:   15000 * time.Millisecond,
}

Protocol holds the global configuration settings for the agreement protocol, initialized with our current defaults. This is used across all nodes we create.

Functions

func AccountNameFromPartKeyFilename

func AccountNameFromPartKeyFilename(filename string) string

AccountNameFromPartKeyFilename returns the account name given a participation key filename.

If filename is not a valid participation key filename, this returns the filename unchanged.

func AccountNameFromRootKeyFilename

func AccountNameFromRootKeyFilename(filename string) string

AccountNameFromRootKeyFilename returns the account name given a root key filename.

If filename is not a valid root key filename, this returns the filename unchanged.

func FormatVersionAndLicense

func FormatVersionAndLicense() string

FormatVersionAndLicense prints current version and license information

func GetAlgorandVersion

func GetAlgorandVersion() string

GetAlgorandVersion retrieves the current version formatted as a simple version string (Major.Minor.BuildNumber)

func GetConfigFilePath

func GetConfigFilePath(file string) (string, error)

GetConfigFilePath retrieves the full path to a configuration file These are global configurations - not specific to data-directory / network.

func GetDefaultConfigFilePath

func GetDefaultConfigFilePath() (string, error)

GetDefaultConfigFilePath retrieves the default directory for global (not per-instance) config files By default we store in ~/.algorand/. This will likely only change for tests.

func GetGlobalConfigFileRoot

func GetGlobalConfigFileRoot() (string, error)

GetGlobalConfigFileRoot returns the current root folder for global configuration files. This will likely only change for tests.

func GetLicenseInfo

func GetLicenseInfo() string

GetLicenseInfo retrieves the current license information

func IsPartKeyFilename

func IsPartKeyFilename(filename string) bool

IsPartKeyFilename returns true if the given filename is a valid participation key filename.

func IsRootKeyFilename

func IsRootKeyFilename(filename string) bool

IsRootKeyFilename returns true if the given filename is a valid root key filename.

func LoadConfigurableConsensusProtocols

func LoadConfigurableConsensusProtocols(dataDirectory string) error

LoadConfigurableConsensusProtocols loads the configurable protocols from the data directroy

func LoadPhonebook

func LoadPhonebook(datadir string) ([]string, error)

LoadPhonebook returns a phonebook loaded from the provided directory, if it exists. NOTE: We no longer use phonebook for anything but tests, but users should be able to use it

func MatchesPartKeyFilename

func MatchesPartKeyFilename(s, filename string) bool

MatchesPartKeyFilename returns true if the given filename is the participation key file of the given account name.

func MatchesRootKeyFilename

func MatchesRootKeyFilename(s, filename string) bool

MatchesRootKeyFilename returns true if the given filename is the root key file of the given account name.

func PartKeyFilename

func PartKeyFilename(s string, firstValid, lastValid uint64) string

PartKeyFilename gives the participation key filename that corresponds to the given account name and validity period.

func RootKeyFilename

func RootKeyFilename(s string) string

RootKeyFilename gives the root key filename that corresponds to the given account name.

func SaveConfigurableConsensus

func SaveConfigurableConsensus(dataDirectory string, params ConsensusProtocols) error

SaveConfigurableConsensus saves the configurable protocols file to the provided data directory. if the params contains zero protocols, the existing consensus.json file will be removed if exists.

func SavePhonebookToDisk

func SavePhonebookToDisk(entries []string, root string) error

SavePhonebookToDisk writes the phonebook into a root/PhonebookFilename file

func SetCurrentVersion

func SetCurrentVersion(version Version)

SetCurrentVersion allows replacing the current global Version structure (for the application)

func SetGlobalConfigFileRoot

func SetGlobalConfigFileRoot(rootPath string) string

SetGlobalConfigFileRoot allows overriding the root folder for global configuration files. It returns the current one so it can be restored, if desired. This will likely only change for tests.

func UpdateVersionDataDir

func UpdateVersionDataDir(dataDir string)

UpdateVersionDataDir is a convenience method for setting the data dir on the global Version struct Used by algod and algoh to set built-time ephemeral version component e.g. data directory

Types

type ConsensusParams

type ConsensusParams struct {
	// Consensus protocol upgrades.  Votes for upgrades are collected for
	// UpgradeVoteRounds.  If the number of positive votes is over
	// UpgradeThreshold, the proposal is accepted.
	//
	// UpgradeVoteRounds needs to be long enough to collect an
	// accurate sample of participants, and UpgradeThreshold needs
	// to be high enough to ensure that there are sufficient participants
	// after the upgrade.
	//
	// A consensus protocol upgrade may specify the delay between its
	// acceptance and its execution.  This gives clients time to notify
	// users.  This delay is specified by the upgrade proposer and must
	// be between MinUpgradeWaitRounds and MaxUpgradeWaitRounds (inclusive)
	// in the old protocol's parameters.  Note that these parameters refer
	// to the representation of the delay in a block rather than the actual
	// delay: if the specified delay is zero, it is equivalent to
	// DefaultUpgradeWaitRounds.
	//
	// The maximum length of a consensus version string is
	// MaxVersionStringLen.
	UpgradeVoteRounds        uint64
	UpgradeThreshold         uint64
	DefaultUpgradeWaitRounds uint64
	MinUpgradeWaitRounds     uint64
	MaxUpgradeWaitRounds     uint64
	MaxVersionStringLen      int

	// MaxTxnBytesPerBlock determines the maximum number of bytes
	// that transactions can take up in a block.  Specifically,
	// the sum of the lengths of encodings of each transaction
	// in a block must not exceed MaxTxnBytesPerBlock.
	MaxTxnBytesPerBlock int

	// MaxTxnBytesPerBlock is the maximum size of a transaction's Note field.
	MaxTxnNoteBytes int

	// MaxTxnLife is how long a transaction can be live for:
	// the maximum difference between LastValid and FirstValid.
	//
	// Note that in a protocol upgrade, the ledger must first be upgraded
	// to hold more past blocks for this value to be raised.
	MaxTxnLife uint64

	// ApprovedUpgrades describes the upgrade proposals that this protocol
	// implementation will vote for, along with their delay value
	// (in rounds).  A delay value of zero is the same as a delay of
	// DefaultUpgradeWaitRounds.
	ApprovedUpgrades map[protocol.ConsensusVersion]uint64

	// SupportGenesisHash indicates support for the GenesisHash
	// fields in transactions (and requires them in blocks).
	SupportGenesisHash bool

	// RequireGenesisHash indicates that GenesisHash must be present
	// in every transaction.
	RequireGenesisHash bool

	// DefaultKeyDilution specifies the granularity of top-level ephemeral
	// keys. KeyDilution is the number of second-level keys in each batch,
	// signed by a top-level "batch" key.  The default value can be
	// overriden in the account state.
	DefaultKeyDilution uint64

	// MinBalance specifies the minimum balance that can appear in
	// an account.  To spend money below MinBalance requires issuing
	// an account-closing transaction, which transfers all of the
	// money from the account, and deletes the account state.
	MinBalance uint64

	// MinTxnFee specifies the minimum fee allowed on a transaction.
	// A minimum fee is necessary to prevent DoS. In some sense this is
	// a way of making the spender subsidize the cost of storing this transaction.
	MinTxnFee uint64

	// EnableFeePooling specifies that the sum of the fees in a
	// group must exceed one MinTxnFee per Txn, rather than check that
	// each Txn has a MinFee.
	EnableFeePooling bool

	// RewardUnit specifies the number of MicroAlgos corresponding to one reward
	// unit.
	//
	// Rewards are received by whole reward units.  Fractions of
	// RewardUnits do not receive rewards.
	RewardUnit uint64

	// RewardsRateRefreshInterval is the number of rounds after which the
	// rewards level is recomputed for the next RewardsRateRefreshInterval rounds.
	RewardsRateRefreshInterval uint64

	// seed-related parameters
	SeedLookback        uint64 // how many blocks back we use seeds from in sortition. delta_s in the spec
	SeedRefreshInterval uint64 // how often an old block hash is mixed into the seed. delta_r in the spec

	// ledger retention policy
	MaxBalLookback uint64 // (current round - MaxBalLookback) is the oldest round the ledger must answer balance queries for

	// sortition threshold factors
	NumProposers           uint64
	SoftCommitteeSize      uint64
	SoftCommitteeThreshold uint64
	CertCommitteeSize      uint64
	CertCommitteeThreshold uint64
	NextCommitteeSize      uint64 // for any non-FPR votes >= deadline step, committee sizes and thresholds are constant
	NextCommitteeThreshold uint64
	LateCommitteeSize      uint64
	LateCommitteeThreshold uint64
	RedoCommitteeSize      uint64
	RedoCommitteeThreshold uint64
	DownCommitteeSize      uint64
	DownCommitteeThreshold uint64

	// time for nodes to wait for block proposal headers for period > 0, value should be set to 2 * SmallLambda
	AgreementFilterTimeout time.Duration
	// time for nodes to wait for block proposal headers for period = 0, value should be configured to suit best case
	// critical path
	AgreementFilterTimeoutPeriod0 time.Duration

	FastRecoveryLambda    time.Duration // time between fast recovery attempts
	FastPartitionRecovery bool          // set when fast partition recovery is enabled

	// how to commit to the payset: flat or merkle tree
	PaysetCommit PaysetCommitType

	MaxTimestampIncrement int64 // maximum time between timestamps on successive blocks

	// support for the efficient encoding in SignedTxnInBlock
	SupportSignedTxnInBlock bool

	// force the FeeSink address to be non-participating in the genesis balances.
	ForceNonParticipatingFeeSink bool

	// support for ApplyData in SignedTxnInBlock
	ApplyData bool

	// track reward distributions in ApplyData
	RewardsInApplyData bool

	// domain-separated credentials
	CredentialDomainSeparationEnabled bool

	// support for transactions that mark an account non-participating
	SupportBecomeNonParticipatingTransactions bool

	// fix the rewards calculation by avoiding subtracting too much from the rewards pool
	PendingResidueRewards bool

	// asset support
	Asset bool

	// max number of assets per account
	MaxAssetsPerAccount int

	// max length of asset name
	MaxAssetNameBytes int

	// max length of asset unit name
	MaxAssetUnitNameBytes int

	// max length of asset url
	MaxAssetURLBytes int

	// support sequential transaction counter TxnCounter
	TxnCounter bool

	// transaction groups
	SupportTxGroups bool

	// max group size
	MaxTxGroupSize int

	// support for transaction leases
	// note: if FixTransactionLeases is not set, the transaction
	// leases supported are faulty; specifically, they do not
	// enforce exclusion correctly when the FirstValid of
	// transactions do not match.
	SupportTransactionLeases bool
	FixTransactionLeases     bool

	// 0 for no support, otherwise highest version supported
	LogicSigVersion uint64

	// len(LogicSig.Logic) + len(LogicSig.Args[*]) must be less than this
	LogicSigMaxSize uint64

	// sum of estimated op cost must be less than this
	LogicSigMaxCost uint64

	// max decimal precision for assets
	MaxAssetDecimals uint32

	// SupportRekeying indicates support for account rekeying (the RekeyTo and AuthAddr fields)
	SupportRekeying bool

	// application support
	Application bool

	// max number of ApplicationArgs for an ApplicationCall transaction
	MaxAppArgs int

	// max sum([len(arg) for arg in txn.ApplicationArgs])
	MaxAppTotalArgLen int

	// maximum length of application approval program or clear state
	// program in bytes
	MaxAppProgramLen int

	// extra length for application program in pages. A page is MaxAppProgramLen bytes
	MaxExtraAppProgramPages int

	// maximum number of accounts in the ApplicationCall Accounts field.
	// this determines, in part, the maximum number of balance records
	// accessed by a single transaction
	MaxAppTxnAccounts int

	// maximum number of app ids in the ApplicationCall ForeignApps field.
	// these are the only applications besides the called application for
	// which global state may be read in the transaction
	MaxAppTxnForeignApps int

	// maximum number of asset ids in the ApplicationCall ForeignAssets
	// field. these are the only assets for which the asset parameters may
	// be read in the transaction
	MaxAppTxnForeignAssets int

	// maximum cost of application approval program or clear state program
	MaxAppProgramCost int

	// maximum length of a key used in an application's global or local
	// key/value store
	MaxAppKeyLen int

	// maximum length of a bytes value used in an application's global or
	// local key/value store
	MaxAppBytesValueLen int

	// maximum number of applications a single account can create and store
	// AppParams for at once
	MaxAppsCreated int

	// maximum number of applications a single account can opt in to and
	// store AppLocalState for at once
	MaxAppsOptedIn int

	// flat MinBalance requirement for creating a single application and
	// storing its AppParams
	AppFlatParamsMinBalance uint64

	// flat MinBalance requirement for opting in to a single application
	// and storing its AppLocalState
	AppFlatOptInMinBalance uint64

	// MinBalance requirement per key/value entry in LocalState or
	// GlobalState key/value stores, regardless of value type
	SchemaMinBalancePerEntry uint64

	// MinBalance requirement (in addition to SchemaMinBalancePerEntry) for
	// integer values stored in LocalState or GlobalState key/value stores
	SchemaUintMinBalance uint64

	// MinBalance requirement (in addition to SchemaMinBalancePerEntry) for
	// []byte values stored in LocalState or GlobalState key/value stores
	SchemaBytesMinBalance uint64

	// maximum number of total key/value pairs allowed by a given
	// LocalStateSchema (and therefore allowed in LocalState)
	MaxLocalSchemaEntries uint64

	// maximum number of total key/value pairs allowed by a given
	// GlobalStateSchema (and therefore allowed in GlobalState)
	MaxGlobalSchemaEntries uint64

	// maximum total minimum balance requirement for an account, used
	// to limit the maximum size of a single balance record
	MaximumMinimumBalance uint64

	// CompactCertRounds defines the frequency with which compact
	// certificates are generated.  Every round that is a multiple
	// of CompactCertRounds, the block header will include a Merkle
	// commitment to the set of online accounts (that can vote after
	// another CompactCertRounds rounds), and that block will be signed
	// (forming a compact certificate) by the voters from the previous
	// such Merkle tree commitment.  A value of zero means no compact
	// certificates.
	CompactCertRounds uint64

	// CompactCertTopVoters is a bound on how many online accounts get to
	// participate in forming the compact certificate, by including the
	// top CompactCertTopVoters accounts (by normalized balance) into the
	// Merkle commitment.
	CompactCertTopVoters uint64

	// CompactCertVotersLookback is the number of blocks we skip before
	// publishing a Merkle commitment to the online accounts.  Namely,
	// if block number N contains a Merkle commitment to the online
	// accounts (which, incidentally, means N%CompactCertRounds=0),
	// then the balances reflected in that commitment must come from
	// block N-CompactCertVotersLookback.  This gives each node some
	// time (CompactCertVotersLookback blocks worth of time) to
	// construct this Merkle tree, so as to avoid placing the
	// construction of this Merkle tree (and obtaining the requisite
	// accounts and balances) in the critical path.
	CompactCertVotersLookback uint64

	// CompactCertWeightThreshold specifies the fraction of top voters weight
	// that must sign the message (block header) for security.  The compact
	// certificate ensures this threshold holds; however, forming a valid
	// compact certificate requires a somewhat higher number of signatures,
	// and the more signatures are collected, the smaller the compact cert
	// can be.
	//
	// This threshold can be thought of as the maximum fraction of
	// malicious weight that compact certificates defend against.
	//
	// The threshold is computed as CompactCertWeightThreshold/(1<<32).
	CompactCertWeightThreshold uint32

	// CompactCertSecKQ is the security parameter (k+q) for the compact
	// certificate scheme.
	CompactCertSecKQ uint64

	// EnableAssetCloseAmount adds an extra field to the ApplyData. The field contains the amount of the remaining
	// asset that were sent to the close-to address.
	EnableAssetCloseAmount bool

	// update the initial rewards rate calculation to take the reward pool minimum balance into account
	InitialRewardsRateCalculation bool

	// NoEmptyLocalDeltas updates how ApplyDelta.EvalDelta.LocalDeltas are stored
	NoEmptyLocalDeltas bool

	// EnableKeyregCoherencyCheck enable the following extra checks on key registration transactions:
	// 1. checking that [VotePK/SelectionPK/VoteKeyDilution] are all set or all clear.
	// 2. checking that the VoteFirst is less or equal to VoteLast.
	// 3. checking that in the case of going offline, both the VoteFirst and VoteLast are clear.
	// 4. checking that in the case of going online the VoteLast is non-zero and greater then the current network round.
	// 5. checking that in the case of going online the VoteFirst is less or equal to the LastValid+1.
	// 6. checking that in the case of going online the VoteFirst is less or equal to the next network round.
	EnableKeyregCoherencyCheck bool
}

ConsensusParams specifies settings that might vary based on the particular version of the consensus protocol.

type ConsensusProtocols

type ConsensusProtocols map[protocol.ConsensusVersion]ConsensusParams

ConsensusProtocols defines a set of supported protocol versions and their corresponding parameters.

var Consensus ConsensusProtocols

Consensus tracks the protocol-level settings for different versions of the consensus protocol.

func PreloadConfigurableConsensusProtocols

func PreloadConfigurableConsensusProtocols(dataDirectory string) (ConsensusProtocols, error)

PreloadConfigurableConsensusProtocols loads the configurable protocols from the data directroy and merge it with a copy of the Consensus map. Then, it returns it to the caller.

func (ConsensusProtocols) DeepCopy

func (cp ConsensusProtocols) DeepCopy() ConsensusProtocols

DeepCopy creates a deep copy of a consensus protocols map.

func (ConsensusProtocols) Merge

func (cp ConsensusProtocols) Merge(configurableConsensus ConsensusProtocols) ConsensusProtocols

Merge merges a configurable consensus ontop of the existing consensus protocol and return a new consensus protocol without modify any of the incoming structures.

type Global

type Global struct {
	SmallLambda time.Duration // min amount of time to wait for leader's credential (i.e., time to propagate one credential)
	BigLambda   time.Duration // max amount of time to wait for leader's proposal (i.e., time to propagate one block)
}

Global defines global Algorand protocol parameters which should not be overridden.

type Local

type Local struct {
	// Version tracks the current version of the defaults so we can migrate old -> new
	// This is specifically important whenever we decide to change the default value
	// for an existing parameter. This field tag must be updated any time we add a new version.
	Version uint32 `` /* 268-byte string literal not displayed */

	// environmental (may be overridden)
	// When enabled, stores blocks indefinitally, otherwise, only the most recents blocks
	// are being kept around. ( the precise number of recent blocks depends on the consensus parameters )
	Archival bool `version[0]:"false"`

	// gossipNode.go
	// how many peers to propagate to?
	GossipFanout int    `version[0]:"4"`
	NetAddress   string `version[0]:""`

	// 1 * time.Minute = 60000000000 ns
	ReconnectTime time.Duration `version[0]:"60" version[1]:"60000000000"`

	// what we should tell people to connect to
	PublicAddress string `version[0]:""`

	MaxConnectionsPerIP int `version[3]:"30"`

	// 0 == disable
	PeerPingPeriodSeconds int `version[0]:"0"`

	// for https serving
	TLSCertFile string `version[0]:""`
	TLSKeyFile  string `version[0]:""`

	// Logging
	BaseLoggerDebugLevel uint32 `version[0]:"1" version[1]:"4"`
	// if this is 0, do not produce agreement.cadaver
	CadaverSizeTarget uint64 `version[0]:"1073741824"`

	// IncomingConnectionsLimit specifies the max number of long-lived incoming
	// connections.  0 means no connections allowed.  -1 is unbounded.
	IncomingConnectionsLimit int `version[0]:"-1" version[1]:"10000"`

	// BroadcastConnectionsLimit specifies the number of connections that
	// will receive broadcast (gossip) messages from this node.  If the
	// node has more connections than this number, it will send broadcasts
	// to the top connections by priority (outgoing connections first, then
	// by money held by peers based on their participation key).  0 means
	// no outgoing messages (not even transaction broadcasting to outgoing
	// peers).  -1 means unbounded (default).
	BroadcastConnectionsLimit int `version[4]:"-1"`

	// AnnounceParticipationKey specifies that this node should announce its
	// participation key (with the largest stake) to its gossip peers.  This
	// allows peers to prioritize our connection, if necessary, in case of a
	// DoS attack.  Disabling this means that the peers will not have any
	// additional information to allow them to prioritize our connection.
	AnnounceParticipationKey bool `version[4]:"true"`

	// PriorityPeers specifies peer IP addresses that should always get
	// outgoing broadcast messages from this node.
	PriorityPeers map[string]bool `version[4]:""`

	// To make sure the algod process does not run out of FDs, algod ensures
	// that RLIMIT_NOFILE exceeds the max number of incoming connections (i.e.,
	// IncomingConnectionsLimit) by at least ReservedFDs.  ReservedFDs are meant
	// to leave room for short-lived FDs like DNS queries, SQLite files, etc.
	ReservedFDs uint64 `version[2]:"256"`

	// local server
	// API endpoint address
	EndpointAddress string `version[0]:"127.0.0.1:0"`

	// timeouts passed to the rest http.Server implementation
	RestReadTimeoutSeconds  int `version[4]:"15"`
	RestWriteTimeoutSeconds int `version[4]:"120"`

	// SRV-based phonebook
	DNSBootstrapID string `version[0]:"<network>.coin.plumbing"`

	// Log file size limit in bytes
	LogSizeLimit uint64 `version[0]:"1073741824"`

	// text/template for creating log archive filename.
	// Available template vars:
	// Time at start of log: {{.Year}} {{.Month}} {{.Day}} {{.Hour}} {{.Minute}} {{.Second}}
	// Time at end of log: {{.EndYear}} {{.EndMonth}} {{.EndDay}} {{.EndHour}} {{.EndMinute}} {{.EndSecond}}
	//
	// If the filename ends with .gz or .bz2 it will be compressed.
	//
	// default: "node.archive.log" (no rotation, clobbers previous archive)
	LogArchiveName string `version[4]:"node.archive.log"`

	// LogArchiveMaxAge will be parsed by time.ParseDuration().
	// Valid units are 's' seconds, 'm' minutes, 'h' hours
	LogArchiveMaxAge string `version[4]:""`

	// number of consecutive attempts to catchup after which we replace the peers we're connected to
	CatchupFailurePeerRefreshRate int `version[0]:"10"`

	// where should the node exporter listen for metrics
	NodeExporterListenAddress string `version[0]:":9100"`

	// enable metric reporting flag
	EnableMetricReporting bool `version[0]:"false"`

	// enable top accounts reporting flag
	EnableTopAccountsReporting bool `version[0]:"false"`

	// enable agreement reporting flag. Currently only prints additional period events.
	EnableAgreementReporting bool `version[3]:"false"`

	// enable agreement timing metrics flag
	EnableAgreementTimeMetrics bool `version[3]:"false"`

	// The path to the node exporter.
	NodeExporterPath string `version[0]:"./node_exporter"`

	// The fallback DNS resolver address that would be used if the system resolver would fail to retrieve SRV records
	FallbackDNSResolverAddress string `version[0]:""`

	// exponential increase factor of transaction pool's fee threshold, should always be 2 in production
	TxPoolExponentialIncreaseFactor uint64 `version[0]:"2"`

	SuggestedFeeBlockHistory int `version[0]:"3"`

	// TxPoolSize is the number of transactions that fit in the transaction pool
	TxPoolSize int `version[0]:"50000" version[5]:"15000"`

	// number of seconds allowed for syncing transactions
	TxSyncTimeoutSeconds int64 `version[0]:"30"`

	// number of seconds between transaction synchronizations
	TxSyncIntervalSeconds int64 `version[0]:"60"`

	// the number of incoming message hashes buckets.
	IncomingMessageFilterBucketCount int `version[0]:"5"`

	// the size of each incoming message hash bucket.
	IncomingMessageFilterBucketSize int `version[0]:"512"`

	// the number of outgoing message hashes buckets.
	OutgoingMessageFilterBucketCount int `version[0]:"3"`

	// the size of each outgoing message hash bucket.
	OutgoingMessageFilterBucketSize int `version[0]:"128"`

	// enable the filtering of outgoing messages
	EnableOutgoingNetworkMessageFiltering bool `version[0]:"true"`

	// enable the filtering of incoming messages
	EnableIncomingMessageFilter bool `version[0]:"false"`

	// control enabling / disabling deadlock detection.
	// negative (-1) to disable, positive (1) to enable, 0 for default.
	DeadlockDetection int `version[1]:"0"`

	// Prefer to run algod Hosted (under algoh)
	// Observed by `goal` for now.
	RunHosted bool `version[3]:"false"`

	// The maximal number of blocks that catchup will fetch in parallel.
	// If less than Protocol.SeedLookback, then Protocol.SeedLookback will be used as to limit the catchup.
	// Setting this variable to 0 would disable the catchup
	CatchupParallelBlocks uint64 `version[3]:"50" version[5]:"16"`

	// Generate AssembleBlockMetrics telemetry event
	EnableAssembleStats bool `version[0]:""`

	// Generate ProcessBlockMetrics telemetry event
	EnableProcessBlockStats bool `version[0]:""`

	// SuggestedFeeSlidingWindowSize is number of past blocks that will be considered in computing the suggested fee
	SuggestedFeeSlidingWindowSize uint32 `version[3]:"50"`

	// the max size the sync server would return
	TxSyncServeResponseSize int `version[3]:"1000000"`

	// IsIndexerActive indicates whether to activate the indexer for fast retrieval of transactions
	// Note -- Indexer cannot operate on non Archival nodes
	IsIndexerActive bool `version[3]:"false"`

	// UseXForwardedForAddress indicates whether or not the node should use the X-Forwarded-For HTTP Header when
	// determining the source of a connection.  If used, it should be set to the string "X-Forwarded-For", unless the
	// proxy vendor provides another header field.  In the case of CloudFlare proxy, the "CF-Connecting-IP" header
	// field can be used.
	UseXForwardedForAddressField string `version[0]:""`

	// ForceRelayMessages indicates whether the network library relay messages even in the case that no NetAddress was specified.
	ForceRelayMessages bool `version[0]:"false"`

	// ConnectionsRateLimitingWindowSeconds is being used in conjunction with ConnectionsRateLimitingCount;
	// see ConnectionsRateLimitingCount description for further information. Providing a zero value
	// in this variable disables the connection rate limiting.
	ConnectionsRateLimitingWindowSeconds uint `version[4]:"1"`

	// ConnectionsRateLimitingCount is being used along with ConnectionsRateLimitingWindowSeconds to determine if
	// a connection request should be accepted or not. The gossip network examine all the incoming requests in the past
	// ConnectionsRateLimitingWindowSeconds seconds that share the same origin. If the total count exceed the ConnectionsRateLimitingCount
	// value, the connection is refused.
	ConnectionsRateLimitingCount uint `version[4]:"60"`

	// EnableRequestLogger enabled the logging of the incoming requests to the telemetry server.
	EnableRequestLogger bool `version[4]:"false"`

	// PeerConnectionsUpdateInterval defines the interval at which the peer connections information is being sent to the
	// telemetry ( when enabled ). Defined in seconds.
	PeerConnectionsUpdateInterval int `version[5]:"3600"`

	// EnableProfiler enables the go pprof endpoints, should be false if
	// the algod api will be exposed to untrusted individuals
	EnableProfiler bool `version[0]:"false"`

	// TelemetryToLog records messages to node.log that are normally sent to remote event monitoring
	TelemetryToLog bool `version[5]:"true"`

	// DNSSecurityFlags instructs algod validating DNS responses.
	// Possible fla values
	// 0x00 - disabled
	// 0x01 (dnssecSRV) - validate SRV response
	// 0x02 (dnssecRelayAddr) - validate relays' names to addresses resolution
	// 0x04 (dnssecTelemetryAddr) - validate telemetry and metrics names to addresses resolution
	// ...
	DNSSecurityFlags uint32 `version[6]:"1"`

	// EnablePingHandler controls whether the gossip node would respond to ping messages with a pong message.
	EnablePingHandler bool `version[6]:"true"`

	// DisableOutgoingConnectionThrottling disables the connection throttling of the network library, which
	// allow the network library to continuesly disconnect relays based on their relative ( and absolute ) performance.
	DisableOutgoingConnectionThrottling bool `version[5]:"false"`

	// NetworkProtocolVersion overrides network protocol version ( if present )
	NetworkProtocolVersion string `version[6]:""`

	// CatchpointInterval sets the interval at which catchpoint are being generated. Setting this to 0 disables the catchpoint from being generated.
	// See CatchpointTracking for more details.
	CatchpointInterval uint64 `version[7]:"10000"`

	// CatchpointFileHistoryLength defines how many catchpoint files we want to store back.
	// 0 means don't store any, -1 mean unlimited and positive number suggest the number of most recent catchpoint files.
	CatchpointFileHistoryLength int `version[7]:"365"`

	// EnableLedgerService enables the ledger serving service. The functionality of this depends on NetAddress, which must also be provided.
	// This functionality is required for the catchpoint catchup.
	EnableLedgerService bool `version[7]:"false"`

	// EnableBlockService enables the block serving service. The functionality of this depends on NetAddress, which must also be provided.
	// This functionality is required for the catchup.
	EnableBlockService bool `version[7]:"false"`

	// EnableGossipBlockService enables the block serving service over the gossip network. The functionality of this depends on NetAddress, which must also be provided.
	// This functionality is required for the relays to perform catchup from nodes.
	EnableGossipBlockService bool `version[8]:"true"`

	// CatchupHTTPBlockFetchTimeoutSec controls how long the http query for fetching a block from a relay would take before giving up and trying another relay.
	CatchupHTTPBlockFetchTimeoutSec int `version[9]:"4"`

	// CatchupGossipBlockFetchTimeoutSec controls how long the gossip query for fetching a block from a relay would take before giving up and trying another relay.
	CatchupGossipBlockFetchTimeoutSec int `version[9]:"4"`

	// CatchupLedgerDownloadRetryAttempts controls the number of attempt the ledger fetching would be attempted before giving up catching up to the provided catchpoint.
	CatchupLedgerDownloadRetryAttempts int `version[9]:"50"`

	// CatchupLedgerDownloadRetryAttempts controls the number of attempt the block fetching would be attempted before giving up catching up to the provided catchpoint.
	CatchupBlockDownloadRetryAttempts int `version[9]:"1000"`

	// EnableDeveloperAPI enables teal/compile, teal/dryrun API endpoints.
	// This functionlity is disabled by default.
	EnableDeveloperAPI bool `version[9]:"false"`

	// OptimizeAccountsDatabaseOnStartup controls whether the accounts database would be optimized
	// on algod startup.
	OptimizeAccountsDatabaseOnStartup bool `version[10]:"false"`

	// CatchpointTracking determines if catchpoints are going to be tracked. The value is interpreted as follows:
	// A value of -1 means "don't track catchpoints".
	// A value of 1 means "track catchpoints as long as CatchpointInterval is also set to a positive non-zero value". If CatchpointInterval <= 0, no catchpoint tracking would be performed.
	// A value of 0 means automatic, which is the default value. In this mode, a non archival node would not track the catchpoints, and an archival node would track the catchpoints as long as CatchpointInterval > 0.
	// Other values of CatchpointTracking would give a warning in the log file, and would behave as if the default value was provided.
	CatchpointTracking int64 `version[11]:"0"`

	// LedgerSynchronousMode defines the synchronous mode used by the ledger database. The supported options are:
	// 0 - SQLite continues without syncing as soon as it has handed data off to the operating system.
	// 1 - SQLite database engine will still sync at the most critical moments, but less often than in FULL mode.
	// 2 - SQLite database engine will use the xSync method of the VFS to ensure that all content is safely written to the disk surface prior to continuing. On Mac OS, the data is additionally syncronized via fullfsync.
	// 3 - In addition to what being done in 2, it provides additional durability if the commit is followed closely by a power loss.
	// for further information see the description of SynchronousMode in dbutil.go
	LedgerSynchronousMode int `version[12]:"2"`

	// AccountsRebuildSynchronousMode defines the synchronous mode used by the ledger database while the account database is being rebuilt. This is not a typical operational usecase,
	// and is expected to happen only on either startup ( after enabling the catchpoint interval, or on certain database upgrades ) or during fast catchup. The values specified here
	// and their meanings are identical to the ones in LedgerSynchronousMode.
	AccountsRebuildSynchronousMode int `version[12]:"1"`

	// MaxCatchpointDownloadDuration defines the maximum duration a client will be keeping the outgoing connection of a catchpoint download request open for processing before
	// shutting it down. Networks that have large catchpoint files, slow connection or slow storage could be a good reason to increase this value. Note that this is a client-side only
	// configuration value, and it's independent of the actual catchpoint file size.
	MaxCatchpointDownloadDuration time.Duration `version[13]:"7200000000000"`

	// MinCatchpointFileDownloadBytesPerSecond defines the minimal download speed that would be considered to be "acceptable" by the catchpoint file fetcher, measured in bytes per seconds. If the
	// provided stream speed drops below this threshold, the connection would be recycled. Note that this field is evaluated per catchpoint "chunk" and not on it's own. If this field is zero,
	// the default of 20480 would be used.
	MinCatchpointFileDownloadBytesPerSecond uint64 `version[13]:"20480"`

	// TraceServer is a host:port to report graph propagation trace info to.
	NetworkMessageTraceServer string `version[13]:""`

	// VerifiedTranscationsCacheSize defines the number of transactions that the verified transactions cache would hold before cycling the cache storage in a round-robin fashion.
	VerifiedTranscationsCacheSize int `version[14]:"30000"`

	// EnableCatchupFromArchiveServers controls which peers the catchup service would use in order to catchup.
	// When enabled, the catchup service would use the archive servers before falling back to the relays.
	// On networks that doesn't have archive servers, this becomes a no-op, as the catchup service would have no
	// archive server to pick from, and therefore automatically selects one of the relay nodes.
	EnableCatchupFromArchiveServers bool `version[15]:"false"`

	// DisableLocalhostConnectionRateLimit controls whether the incoming connection rate limit would apply for
	// connections that are originating from the local machine. Setting this to "true", allow to create large
	// local-machine networks that won't trip the incoming connection limit observed by relays.
	DisableLocalhostConnectionRateLimit bool `version[16]:"true"`

	// BlockServiceCustomFallbackEndpoints is a comma delimited list of endpoints which the block service uses to
	// redirect the http requests to in case it does not have the round. If it is not specified, will check
	// EnableBlockServiceFallbackToArchiver.
	BlockServiceCustomFallbackEndpoints string `version[16]:""`

	// EnableBlockServiceFallbackToArchiver controls whether the block service redirects the http requests to
	// an archiver or return StatusNotFound (404) when in does not have the requested round, and
	// BlockServiceCustomFallbackEndpoints is empty.
	// The archiver is randomly selected, if none is available, will return StatusNotFound (404).
	EnableBlockServiceFallbackToArchiver bool `version[16]:"true"`

	// CatchupBlockValidateMode is a development and testing configuration used by the catchup service.
	// It can be used to omit certain validations to speed up the catchup process, or to apply extra validations which are redundant in normal operation.
	// This field is a bit-field with:
	// bit 0: (default 0) 0: verify the block certificate; 1: skip this validation
	// bit 1: (default 0) 0: verify payset committed hash in block header matches payset hash; 1: skip this validation
	// bit 2: (default 0) 0: don't verify the transaction signatures on the block are valid; 1: verify the transaction signatures on block
	// bit 3: (default 0) 0: don't verify that the hash of the recomputed payset matches the hash of the payset committed in the block header; 1: do perform the above verification
	// Note: not all permutations of the above bitset are currently functional. In particular, the ones that are functional are:
	// 0  : default behavior.
	// 3  : speed up catchup by skipping necessary validations
	// 12 : perform all validation methods (normal and additional). These extra tests helps to verify the integrity of the compiled executable against
	//      previously used executabled, and would not provide any additional security guarantees.
	CatchupBlockValidateMode int `version[16]:"0"`

	// Generate AccountUpdates telemetry event
	EnableAccountUpdatesStats bool `version[16]:"false"`

	// Time interval in nanoseconds for generating accountUpdates telemetry event
	AccountUpdatesStatsInterval time.Duration `version[16]:"5000000000"`

	// ParticipationKeysRefreshInterval is the duration between two consecutive checks to see if new participation
	// keys have been placed on the genesis directory.
	ParticipationKeysRefreshInterval time.Duration `version[16]:"60000000000"`

	// DisableNetworking disables all the incoming and outgoing communication a node would perform. This is useful
	// when we have a single-node private network, where there is no other nodes that need to be communicated with.
	// features like catchpoint catchup would be rendered completly non-operational, and many of the node inner
	// working would be completly dis-functional.
	DisableNetworking bool `version[16]:"false"`
}

Local holds the per-node-instance configuration settings for the protocol. !!! WARNING !!!

These versioned struct tags need to be maintained CAREFULLY and treated like UNIVERSAL CONSTANTS - they should not be modified once committed.

New fields may be added to the Local struct, along with a version tag denoting a new version. When doing so, also update the test/testdata/configs/config-v{n}.json and call "make generate" to regenerate the constants.

!!! WARNING !!!

func GetDefaultLocal

func GetDefaultLocal() Local

GetDefaultLocal returns a copy of the current defaultLocal config

func LoadConfigFromDisk

func LoadConfigFromDisk(custom string) (c Local, err error)

LoadConfigFromDisk returns a Local config structure based on merging the defaults with settings loaded from the config file from the custom dir. If the custom file cannot be loaded, the default config is returned (with the error from loading the custom file).

func (Local) CatchupVerifyApplyData

func (cfg Local) CatchupVerifyApplyData() bool

CatchupVerifyApplyData returns true if verifying the ApplyData of the payset needed

func (Local) CatchupVerifyCertificate

func (cfg Local) CatchupVerifyCertificate() bool

CatchupVerifyCertificate returns true if certificate verification is needed

func (Local) CatchupVerifyPaysetHash

func (cfg Local) CatchupVerifyPaysetHash() bool

CatchupVerifyPaysetHash returns true if payset hash verification is needed

func (Local) CatchupVerifyTransactionSignatures

func (cfg Local) CatchupVerifyTransactionSignatures() bool

CatchupVerifyTransactionSignatures returns true if transactions signature verification is needed

func (Local) DNSBootstrap

func (cfg Local) DNSBootstrap(network protocol.NetworkID) string

DNSBootstrap returns the network-specific DNSBootstrap identifier

func (Local) DNSBootstrapArray

func (cfg Local) DNSBootstrapArray(networkID protocol.NetworkID) (bootstrapArray []string)

DNSBootstrapArray returns an array of one or more DNS Bootstrap identifiers

func (Local) DNSSecurityRelayAddrEnforced

func (cfg Local) DNSSecurityRelayAddrEnforced() bool

DNSSecurityRelayAddrEnforced returns true if relay name to ip addr resolution enforced

func (Local) DNSSecuritySRVEnforced

func (cfg Local) DNSSecuritySRVEnforced() bool

DNSSecuritySRVEnforced returns true if SRV response verification enforced

func (Local) DNSSecurityTelemeryAddrEnforced

func (cfg Local) DNSSecurityTelemeryAddrEnforced() bool

DNSSecurityTelemeryAddrEnforced returns true if relay name to ip addr resolution enforced

func (Local) SaveToDisk

func (cfg Local) SaveToDisk(root string) error

SaveToDisk writes the Local settings into a root/ConfigFilename file

func (Local) SaveToFile

func (cfg Local) SaveToFile(filename string) error

SaveToFile saves the config to a specific filename, allowing overriding the default name

type PaysetCommitType

type PaysetCommitType int

PaysetCommitType enumerates possible ways for the block header to commit to the set of transactions in the block.

const (
	// PaysetCommitUnsupported is the zero value, reflecting the fact
	// that some early protocols used a Merkle tree to commit to the
	// transactions in a way that we no longer support.
	PaysetCommitUnsupported PaysetCommitType = iota

	// PaysetCommitFlat hashes the entire payset array.
	PaysetCommitFlat

	// PaysetCommitMerkle uses merklearray to commit to the payset.
	PaysetCommitMerkle
)

type Version

type Version struct {

	// Algorand's major version number
	Major int

	// Algorand's minor version number
	Minor int

	// Algorand's Build Number
	BuildNumber int

	// Suffix for any metadata
	Suffix string

	// Hash of commit the build is based on
	CommitHash string

	// Branch the build is based on
	Branch string

	// Branch-derived release channel the build is based on
	Channel string

	// DataDirectory for the current instance
	DataDirectory string
}

Version is the type holding our full version information.

func GetCurrentVersion

func GetCurrentVersion() Version

GetCurrentVersion retrieves a copy of the current global Version structure (for the application)

func (Version) AsUInt64

func (v Version) AsUInt64() (versionInfo uint64)

AsUInt64 returns the version struct in integer form

func (Version) GetCommitHash

func (v Version) GetCommitHash() string

GetCommitHash returns the commit ID for the build's source

func (Version) String

func (v Version) String() string

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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