Documentation ¶
Index ¶
- Constants
- Variables
- func AccountNameFromPartKeyFilename(filename string) string
- func AccountNameFromRootKeyFilename(filename string) string
- func ApplyShorterUpgradeRoundsForDevNetworks(id protocol.NetworkID)
- func FormatVersionAndLicense() string
- func GetAlgorandVersion() string
- func GetConfigFilePath(file string) (string, error)
- func GetDefaultConfigFilePath() (string, error)
- func GetGlobalConfigFileRoot() (string, error)
- func GetLicenseInfo() string
- func GetNonDefaultConfigValues(cfg Local, fieldNames []string) map[string]interface{}
- func IsPartKeyFilename(filename string) bool
- func IsRootKeyFilename(filename string) bool
- func LoadConfigurableConsensusProtocols(dataDirectory string) error
- func LoadPhonebook(datadir string) ([]string, error)
- func MatchesPartKeyFilename(s, filename string) bool
- func MatchesRootKeyFilename(s, filename string) bool
- func PartKeyFilename(s string, firstValid, lastValid uint64) string
- func RootKeyFilename(s string) string
- func SaveConfigurableConsensus(dataDirectory string, params ConsensusProtocols) error
- func SavePhonebookToDisk(entries []string, root string) error
- func SetCurrentVersion(version Version)
- func SetGlobalConfigFileRoot(rootPath string) string
- func UpdateVersionDataDir(dataDir string)
- type BonusPlan
- type ConsensusParams
- type ConsensusProtocols
- type DNSBootstrap
- type Global
- type Local
- func (cfg *Local) AdjustConnectionLimits(requiredFDs, maxFDs uint64) bool
- func (cfg Local) CatchupVerifyApplyData() bool
- func (cfg Local) CatchupVerifyCertificate() bool
- func (cfg Local) CatchupVerifyPaysetHash() bool
- func (cfg Local) CatchupVerifyTransactionSignatures() bool
- func (cfg Local) DNSBootstrapArray(networkID protocol.NetworkID) []*DNSBootstrap
- func (cfg Local) DNSSecurityRelayAddrEnforced() bool
- func (cfg Local) DNSSecuritySRVEnforced() bool
- func (cfg Local) DNSSecurityTXTEnforced() bool
- func (cfg Local) DNSSecurityTelemetryAddrEnforced() bool
- func (cfg *Local) EnsureAndResolveGenesisDirs(rootDir, genesisID string, logger logger) (ResolvedGenesisDirs, error)
- func (cfg Local) IsGossipServer() bool
- func (cfg Local) IsHybridServer() bool
- func (cfg Local) IsP2PGossipServer() bool
- func (cfg Local) IsWsGossipServer() bool
- func (cfg *Local) ResolveLogPaths(rootDir string) (liveLog, archive string)
- func (cfg Local) SaveAllToDisk(root string) error
- func (cfg Local) SaveToDisk(root string) error
- func (cfg Local) SaveToFile(filename string) error
- func (cfg *Local) StoresCatchpoints() bool
- func (cfg *Local) TracksCatchpoints() bool
- func (cfg Local) TxFilterCanonicalEnabled() bool
- func (cfg Local) TxFilterRawMsgEnabled() bool
- func (cfg Local) ValidateDNSBootstrapArray(networkID protocol.NetworkID) ([]*DNSBootstrap, error)
- func (cfg Local) ValidateP2PHybridConfig() error
- type PaysetCommitType
- type ProposerPayoutRules
- type ResolvedGenesisDirs
- type Version
Constants ¶
const Alphanet protocol.NetworkID = "alphanet"
Alphanet identifies the 'alpha network' use for performance releases of feature/alphanet to the public prior to releasing these to mainnet/testnet
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
const CatchpointTrackingModeAutomatic = 0
CatchpointTrackingModeAutomatic defines the CatchpointTracking mode that automatically determines catchpoint tracking and storage based on the Archival property and CatchpointInterval.
const CatchpointTrackingModeStored = 2
CatchpointTrackingModeStored defines the CatchpointTracking mode that tracks and stores catchpoints as long as CatchpointInterval > 0
const CatchpointTrackingModeTracked = 1
CatchpointTrackingModeTracked defines the CatchpointTracking mode that tracks catchpoint as long as CatchpointInterval > 0
const CatchpointTrackingModeUntracked = -1
CatchpointTrackingModeUntracked defines the CatchpointTracking mode that does _not_ track catchpoints
const ConfigFilename = "config.json"
ConfigFilename is the name of the config.json file where we store per-algod-instance settings
const ConfigurableConsensusProtocolsFilename = "consensus.json"
ConfigurableConsensusProtocolsFilename defines a set of consensus protocols that are to be loaded from the data directory ( if present ), to override the built-in supported consensus protocols.
const CrashFilename = "crash.sqlite"
CrashFilename is the name of the agreement database file. It is used to recover from node crashes.
const Devnet protocol.NetworkID = "devnet"
Devnet identifies the 'development network' use for development and not generally accessible publicly
const Devtestnet protocol.NetworkID = "devtestnet"
Devtestnet identifies the 'development network for tests' use for running tests against development and not generally accessible publicly
const GenesisJSONFile = "genesis.json"
GenesisJSONFile is the name of the genesis.json file
const LedgerFilenamePrefix = "ledger"
LedgerFilenamePrefix is the prefix of the name of the ledger database files
const Mainnet protocol.NetworkID = "mainnet"
Mainnet identifies the publicly-available real-money network
const MaxEvalDeltaTotalLogSize = 1024
MaxEvalDeltaTotalLogSize is the maximum size of the sum of all log sizes in a single eval delta.
const MaxGenesisIDLen = 128
MaxGenesisIDLen is the maximum length of the genesis ID set for purpose of setting allocbounds on structs containing GenesisID and for purposes of calculating MaxSize functions on those types. Current value is larger than the existing network IDs and the ones used in testing
const ParticipationRegistryFilename = "partregistry.sqlite"
ParticipationRegistryFilename is the name of the participation registry database file. It is used for tracking participation key metadata.
const PhonebookFilename = "phonebook.json" // No longer used in product - still in tests
PhonebookFilename is the name of the phonebook configuration files - no longer used
const PlaceholderPublicAddress = "PLEASE_SET_ME"
PlaceholderPublicAddress is a placeholder for the public address generated in certain profiles
const StateProofFileName = "stateproof.sqlite"
StateProofFileName is the name of the state proof database file. It is used to track in-progress state proofs.
const Testnet protocol.NetworkID = "testnet"
Testnet identifies the publicly-available test network
const VersionMajor = 4
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.
const VersionMinor = 1
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 ¶
var AutogenLocal = GetVersionedDefaultLocalConfig(getLatestConfigVersion())
AutogenLocal - this variable is the "input" for the config default generator which automatically updates the above defaultLocal variable. it's implemented in ./config/defaults_gen.go, and should be the only "consumer" of this exported variable
var Branch string
Branch is the git branch in effect when the build was created. It will be set by the build tools
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)
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
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)
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.
var MaxAppBytesKeyLen int
MaxAppBytesKeyLen is the maximum length of a key used in an application's global or local key/value store
var MaxAppBytesValueLen int
MaxAppBytesValueLen is the maximum length of a bytes value used in an application's global or local key/value store
var MaxAppProgramLen int
MaxAppProgramLen is the largest supported app program size supported by any of the consensus protocols. used for decoding purposes.
var MaxAppTotalArgLen int
MaxAppTotalArgLen is the maximum number of bytes across all arguments of an application max sum([len(arg) for arg in txn.ApplicationArgs])
var MaxAppTxnForeignApps int
MaxAppTxnForeignApps is the max number of foreign apps per txn across all consensus versions
var MaxAssetNameBytes int
MaxAssetNameBytes is the maximum asset name length in bytes
var MaxAssetURLBytes int
MaxAssetURLBytes is the maximum asset URL length in bytes
var MaxAssetUnitNameBytes int
MaxAssetUnitNameBytes is the maximum asset unit name length in bytes
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.
var MaxBytesKeyValueLen int
MaxBytesKeyValueLen is a maximum length of key or value across all protocols. used for decoding purposes.
var MaxEvalDeltaAccounts int
MaxEvalDeltaAccounts is the largest number of accounts that may appear in an eval delta, used for decoding purposes.
var MaxExtraAppProgramLen int
MaxExtraAppProgramLen is the maximum extra app program length supported by any of the consensus protocols. used for decoding purposes.
var MaxInnerTransactionsPerDelta int
MaxInnerTransactionsPerDelta is the maximum number of inner transactions in one EvalDelta
var MaxLogCalls int
MaxLogCalls is the highest allowable log messages that may appear in any version, used only for decoding purposes. Never decrease this value.
var MaxLogicSigMaxSize int
MaxLogicSigMaxSize is the largest logical signature appear in any of the supported protocols, used for decoding purposes.
var MaxMarkAbsent int
MaxMarkAbsent is the maximum number of online accounts that a proposer can suspend for not proposing "lately"
var MaxProposedExpiredOnlineAccounts int
MaxProposedExpiredOnlineAccounts is the maximum number of online accounts that a proposer can take offline for having expired voting keys.
var MaxStateDeltaKeys int
MaxStateDeltaKeys is the largest number of key/value pairs that may appear in a StateDelta, used for decoding purposes.
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.
var MaxTxnBytesPerBlock 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.
var MaxTxnNoteBytes int
MaxTxnNoteBytes is the largest supported nodes field array size supported by any of the consensus protocols. used for decoding purposes.
var MaxVoteThreshold int
MaxVoteThreshold is the largest threshold for a bundle over all supported consensus protocols, used for decoding purposes.
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.
var StateProofTopVoters int
StateProofTopVoters is a bound on how many online accounts get to participate in forming the state proof, by including the top StateProofTopVoters accounts (by normalized balance) into the vector commitment.
Functions ¶
func AccountNameFromPartKeyFilename ¶
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 ¶
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 ApplyShorterUpgradeRoundsForDevNetworks ¶
ApplyShorterUpgradeRoundsForDevNetworks applies a shorter upgrade round time for the Devnet and Betanet networks. This function should not take precedence over settings loaded via `PreloadConfigurableConsensusProtocols`.
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 ¶
GetConfigFilePath retrieves the full path to a configuration file These are global configurations - not specific to data-directory / network.
func GetDefaultConfigFilePath ¶
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 ¶
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 GetNonDefaultConfigValues ¶
GetNonDefaultConfigValues takes a provided cfg and list of field names, and returns a map of all values in cfg that are not set to the default for the latest version.
func IsPartKeyFilename ¶
IsPartKeyFilename returns true if the given filename is a valid participation key filename.
func IsRootKeyFilename ¶
IsRootKeyFilename returns true if the given filename is a valid root key filename.
func LoadConfigurableConsensusProtocols ¶
LoadConfigurableConsensusProtocols loads the configurable protocols from the data directory
func LoadPhonebook ¶
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 ¶
MatchesPartKeyFilename returns true if the given filename is the participation key file of the given account name.
func MatchesRootKeyFilename ¶
MatchesRootKeyFilename returns true if the given filename is the root key file of the given account name.
func PartKeyFilename ¶
PartKeyFilename gives the participation key filename that corresponds to the given account name and validity period.
func RootKeyFilename ¶
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 ¶
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 ¶
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 BonusPlan ¶
type BonusPlan struct { // BaseRound is the earliest round this plan can apply. Of course, the // consensus update must also have happened. So using a low value makes it // go into effect immediately upon upgrade. BaseRound uint64 // BaseAmount is the bonus to be paid when this plan first applies (see // baseRound). If it is zero, then no explicit change is made to the bonus // (useful for only changing the decay rate). BaseAmount uint64 // DecayInterval is the time in rounds between 1% decays. For simplicity, // decay occurs based on round % BonusDecayInterval, so a decay can happen right // after going into effect. The BonusDecayInterval goes into effect at upgrade // time, regardless of `baseRound`. DecayInterval uint64 }
BonusPlan describes how the "extra" proposer payouts are to be made. It specifies an exponential decay in which the bonus decreases by 1% every n rounds. If we need to change the decay rate (only), we would create a new plan like:
BaseAmount: 0, DecayInterval: XXX
by using a zero baseAmount, the amount is not affected. For a bigger change, we'd use a plan like:
BaseRound: <FUTURE round>, BaseAmount: <new amount>, DecayInterval: <new>
or just
BaseAmount: <new amount>, DecayInterval: <new>
the new decay rate would go into effect at upgrade time, and the new amount would be set at baseRound or at upgrade time.
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 // overridden 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 // EnableAppCostPooling specifies that the sum of fees for application calls // in a group is checked against the sum of the budget for application calls, // rather than check each individual app call is within the budget. EnableAppCostPooling bool // EnableLogicSigCostPooling specifies LogicSig budgets are pooled across a // group. The total available is len(group) * LogicSigMaxCost EnableLogicSigCostPooling bool // EnableLogicSigSizePooling specifies LogicSig sizes are pooled across a // group. The total available is len(group) * LogicSigMaxSize EnableLogicSigSizePooling 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. // // Ensure both considerations below are taken into account if RewardUnit is planned for change: // 1. RewardUnits should not be changed without touching all accounts to apply their rewards // based on the old RewardUnits and then use the new RewardUnits for all subsequent calculations. // 2. Having a consistent RewardUnit is also important for preserving // a constant amount of total algos in the system: // the block header tracks how many reward units worth of algos are in existence // and have logically received 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 // Duration of the second agreement step for period=0, value should be configured to suit best case critical path AgreementDeadlineTimeoutPeriod0 time.Duration FastRecoveryLambda time.Duration // time between fast recovery attempts // 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 (unless pooling is enabled) 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 byte len of application approval program or clear state // When MaxExtraAppProgramPages > 0, this is the size of those pages. // So two "extra pages" would mean 3*MaxAppProgramLen bytes are available. MaxAppProgramLen int // maximum total length of an application's programs (approval + clear state) // When MaxExtraAppProgramPages > 0, this is the size of those pages. // So two "extra pages" would mean 3*MaxAppTotalProgramLen bytes are available. MaxAppTotalProgramLen 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 number of "foreign references" (accounts, asa, app, boxes) // that can be attached to a single app call. MaxAppTotalTxnReferences 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 sum of the lengths of the key and value of one app state entry MaxAppSumKeyValueLens int // maximum number of inner transactions that can be created by an app call. // with EnableInnerTransactionPooling, limit is multiplied by MaxTxGroupSize // and enforced over the whole group. MaxInnerTransactions int // should the number of inner transactions be pooled across group? EnableInnerTransactionPooling bool // provide greater isolation for clear state programs IsolateClearState bool // The minimum app version that can be called in an inner transaction MinInnerApplVersion uint64 // 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 length of a box (Does not include name/key length. That is capped by MaxAppKeyLen) MaxBoxSize uint64 // Minimum Balance Requirement (MBR) per box created (this accounts for a // bit of overhead used to store the box bytes) BoxFlatMinBalance uint64 // MBR per byte of box storage. MBR is incremented by BoxByteMinBalance * (len(name)+len(value)) BoxByteMinBalance uint64 // Number of box references allowed MaxAppBoxReferences int // Amount added to a txgroup's box I/O budget per box ref supplied. // For reads: the sum of the sizes of all boxes in the group must be less than I/O budget // For writes: the sum of the sizes of all boxes created or written must be less than I/O budget // In both cases, what matters is the sizes of the boxes touched, not the // number of times they are touched, or the size of the touches. BytesPerBoxReference 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 // StateProofInterval defines the frequency with which state // proofs are generated. Every round that is a multiple // of StateProofInterval, the block header will include a vector // commitment to the set of online accounts (that can vote after // another StateProofInterval rounds), and that block will be signed // (forming a state proof) by the voters from the previous // such vector commitment. A value of zero means no state proof. StateProofInterval uint64 // StateProofTopVoters is a bound on how many online accounts get to // participate in forming the state proof, by including the // top StateProofTopVoters accounts (by normalized balance) into the // vector commitment. StateProofTopVoters uint64 // StateProofVotersLookback is the number of blocks we skip before // publishing a vector commitment to the online accounts. Namely, // if block number N contains a vector commitment to the online // accounts (which, incidentally, means N%StateProofInterval=0), // then the balances reflected in that commitment must come from // block N-StateProofVotersLookback. This gives each node some // time (StateProofVotersLookback blocks worth of time) to // construct this vector commitment, so as to avoid placing the // construction of this vector commitment (and obtaining the requisite // accounts and balances) in the critical path. StateProofVotersLookback uint64 // StateProofWeightThreshold specifies the fraction of top voters weight // that must sign the message (block header) for security. The state // proof ensures this threshold holds; however, forming a valid // state proof requires a somewhat higher number of signatures, // and the more signatures are collected, the smaller the state proof // can be. // // This threshold can be thought of as the maximum fraction of // malicious weight that state proofs defend against. // // The threshold is computed as StateProofWeightThreshold/(1<<32). StateProofWeightThreshold uint32 // StateProofStrengthTarget represents either k+q (for pre-quantum security) or k+2q (for post-quantum security) StateProofStrengthTarget uint64 // StateProofMaxRecoveryIntervals represents the number of state proof intervals that the network will try to catch-up with. // When the difference between the latest state proof and the current round will be greater than value, Nodes will // release resources allocated for creating state proofs. StateProofMaxRecoveryIntervals uint64 // StateProofExcludeTotalWeightWithRewards specifies whether to subtract rewards from excluded online accounts along with // their account balances. StateProofExcludeTotalWeightWithRewards bool // StateProofBlockHashInLightHeader specifies that the LightBlockHeader // committed to by state proofs should contain the BlockHash of each // block, instead of the seed. StateProofBlockHashInLightHeader bool // 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 EnableExtraPagesOnAppUpdate bool // MaxProposedExpiredOnlineAccounts is the maximum number of online accounts // that a proposer can take offline for having expired voting keys. MaxProposedExpiredOnlineAccounts int // EnableAccountDataResourceSeparation enables the support for extended application and asset storage // in a separate table. EnableAccountDataResourceSeparation bool // When rewards rate changes, use the new value immediately. RewardsCalculationFix bool // EnableStateProofKeyregCheck enables the check for stateProof key on key registration EnableStateProofKeyregCheck bool // MaxKeyregValidPeriod defines the longest period (in rounds) allowed for a keyreg transaction. // This number sets a limit to prevent the number of StateProof keys generated by the user from being too large, and also checked by the WellFormed method. // The hard-limit for number of StateProof keys is derived from the maximum depth allowed for the merkle signature scheme's tree - 2^16. // More keys => deeper merkle tree => longer proof required => infeasible for our SNARK. MaxKeyregValidPeriod uint64 // UnifyInnerTxIDs enables a consistent, unified way of computing inner transaction IDs UnifyInnerTxIDs bool // EnableSHA256TxnCommitmentHeader enables the creation of a transaction vector commitment tree using SHA256 hash function. (vector commitment extends Merkle tree by having a position binding property). // This new header is in addition to the existing SHA512_256 merkle root. // It is useful for verifying transaction on different blockchains, as some may not support SHA512_256 OPCODE natively but SHA256 is common. EnableSHA256TxnCommitmentHeader bool // CatchpointLookback specifies a round lookback to take catchpoints at. // Accounts snapshot for round X will be taken at X-CatchpointLookback CatchpointLookback uint64 // DeeperBlockHeaderHistory defines number of rounds in addition to MaxTxnLife // available for lookup for smart contracts and smart signatures. // Setting it to 1 for example allows querying data up to MaxTxnLife + 1 rounds back from the Latest. DeeperBlockHeaderHistory uint64 // EnableOnlineAccountCatchpoints specifies when to re-enable catchpoints after the online account table migration has occurred. EnableOnlineAccountCatchpoints bool // UnfundedSenders ensures that accounts with no balance (so they don't even // "exist") can still be a transaction sender by avoiding updates to rewards // state for accounts with no algos. The actual change implemented to allow // this is to avoid updating an account if the only change would have been // the rewardsLevel, but the rewardsLevel has no meaning because the account // has fewer than RewardUnit algos. UnfundedSenders bool // EnablePrecheckECDSACurve means that ecdsa_verify opcode will bail early, // returning false, if pubkey is not on the curve. EnablePrecheckECDSACurve bool // EnableBareBudgetError specifies that I/O budget overruns should not be considered EvalError EnableBareBudgetError bool // StateProofUseTrackerVerification specifies whether the node will use data from state proof verification tracker // in order to verify state proofs. StateProofUseTrackerVerification bool // EnableCatchpointsWithSPContexts specifies when to re-enable version 7 catchpoints. // Version 7 includes state proof verification contexts EnableCatchpointsWithSPContexts bool // EnableCatchpointsWithOnlineAccounts specifies when to enable version 8 catchpoints. // Version 8 includes onlineaccounts and onlineroundparams amounts, for historical stake lookups. EnableCatchpointsWithOnlineAccounts bool // AppForbidLowResources enforces a rule that prevents apps from accessing // asas and apps below 256, in an effort to decrease the ambiguity of // opcodes that accept IDs or slot indexes. Simultaneously, the first ID // allocated in new chains is raised to 1001. AppForbidLowResources bool // EnableBoxRefNameError specifies that box ref names should be validated early EnableBoxRefNameError bool // ExcludeExpiredCirculation excludes expired stake from the total online stake // used by agreement for Circulation, and updates the calculation of StateProofOnlineTotalWeight used // by state proofs to use the same method (rather than excluding stake from the top N stakeholders as before). ExcludeExpiredCirculation bool // DynamicFilterTimeout indicates whether the filter timeout is set // dynamically, at run time, according to the recent history of credential // arrival times or is set to a static value. Even if this flag disables the // dynamic filter, it will be calculated and logged (but not used). DynamicFilterTimeout bool // Payouts contains parameters for amounts and eligibility for block proposer // payouts. It excludes information about the "unsustainable" payouts // described in BonusPlan. Payouts ProposerPayoutRules // Bonus contains parameters related to the extra payout made to block // proposers, unrelated to the fees paid in that block. For it to actually // occur, extra funds need to be put into the FeeSink. The bonus amount // decays exponentially. Bonus BonusPlan // Heartbeat support Heartbeat 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 directory and merge it with a copy of the Consensus map. Then, it returns it to the caller.
func SetConfigurableConsensusProtocols ¶
func SetConfigurableConsensusProtocols(newConsensus ConsensusProtocols) ConsensusProtocols
SetConfigurableConsensusProtocols sets the configurable protocols.
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 on top of the existing consensus protocol and return a new consensus protocol without modify any of the incoming structures.
type DNSBootstrap ¶
type DNSBootstrap struct { PrimarySRVBootstrap string // Optional Fields BackupSRVBootstrap string // Per documentation, thread-safe save for configuration method DedupExp *regexp.Regexp }
DNSBootstrap represents parsed / validated components derived from a DNSBootstrapID
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 `` /* 591-byte string literal not displayed */ // Archival nodes retain a full copy of the block history. Non-Archival nodes will delete old blocks and only retain what's need to properly validate blockchain messages (the precise number of recent blocks depends on the consensus parameters. Currently the last 1321 blocks are required). This means that non-Archival nodes require significantly less storage than Archival nodes. If setting this to true for the first time, the existing ledger may need to be deleted to get the historical values stored as the setting only affects current blocks forward. To do this, shutdown the node and delete all .sqlite files within the data/testnet-version directory, except the crash.sqlite file. Restart the node and wait for the node to sync. Archival bool `version[0]:"false"` // GossipFanout sets the maximum number of peers the node will connect to with outgoing connections. If the list of peers is less than this setting, fewer connections will be made. The node will not connect to the same peer multiple times (with outgoing connections). GossipFanout int `version[0]:"4"` // NetAddress is the address and/or port on which a node listens for incoming connections, or blank to ignore incoming connections. Specify an IP and port or just a port. For example, 127.0.0.1:0 will listen on a random port on the localhost. NetAddress string `version[0]:""` // ReconnectTime is deprecated and unused. ReconnectTime time.Duration `version[0]:"60" version[1]:"60000000000"` // PublicAddress is the public address to connect to that is advertised to other nodes. // For MainNet relays, make sure this entry includes the full SRV host name // plus the publicly-accessible port number. // A valid entry will avoid "self-gossip" and is used for identity exchange // to de-duplicate redundant connections PublicAddress string `version[0]:""` // MaxConnectionsPerIP is the maximum number of connections allowed per IP address. MaxConnectionsPerIP int `version[3]:"30" version[27]:"15" version[35]:"8"` // PeerPingPeriodSeconds is deprecated and unused. PeerPingPeriodSeconds int `version[0]:"0"` // TLSCertFile is the certificate file used for the websocket network if povided. TLSCertFile string `version[0]:""` // TLSKeyFile is the key file used for the websocket network if povided. TLSKeyFile string `version[0]:""` // BaseLoggerDebugLevel specifies the logging level for algod (node.log). The levels range from 0 (critical error / silent) to 5 (debug / verbose). The default value is 4 (‘Info’ - fairly verbose). BaseLoggerDebugLevel uint32 `version[0]:"1" version[1]:"4"` // CadaverSizeTarget specifies the maximum size of the agreement.cfv file in bytes. Once full the file will be renamed to agreement.archive.log and a new agreement.cdv will be created. CadaverSizeTarget uint64 `version[0]:"1073741824" version[24]:"0"` // if this is not set, MakeService will attempt to use ColdDataDir instead CadaverDirectory string `version[27]:""` // HotDataDir is an optional directory to store data that is frequently accessed by the node. // For isolation, the node will create a subdirectory in this location, named by the genesis-id of the network. // If not specified, the node will use the runtime supplied datadir to store this data. // Individual resources may have their own override specified, which would override this setting for that resource. // Setting HotDataDir to a dedicated high performance disk allows for basic disc tuning. HotDataDir string `version[31]:""` // ColdDataDir is an optional directory to store data that is infrequently accessed by the node. // For isolation, the node will create a subdirectory in this location, named by the genesis-id of the network. // If not specified, the node will use the runtime supplied datadir. // Individual resources may have their own override specified, which would override this setting for that resource. // Setting ColdDataDir to a less critical or cheaper disk allows for basic disc tuning. ColdDataDir string `version[31]:""` // TrackerDbDir is an optional directory to store the tracker database. // For isolation, the node will create a subdirectory in this location, named by the genesis-id of the network. // If not specified, the node will use the HotDataDir. TrackerDBDir string `version[31]:""` // BlockDBDir is an optional directory to store the block database. // For isolation, the node will create a subdirectory in this location, named by the genesis-id of the network. // If not specified, the node will use the ColdDataDir. BlockDBDir string `version[31]:""` // CatchpointDir is an optional directory to store catchpoint files, // except for the in-progress temp file, which will use the HotDataDir and is not separately configurable. // For isolation, the node will create a subdirectory in this location, named by the genesis-id of the network. // If not specified, the node will use the ColdDataDir. CatchpointDir string `version[31]:""` // StateproofDir is an optional directory to persist state about observed and issued state proof messages. // For isolation, the node will create a subdirectory in this location, named by the genesis-id of the network. // If not specified, the node will use the HotDataDir. StateproofDir string `version[31]:""` // CrashDBDir is an optional directory to persist agreement's consensus participation state. // For isolation, the node will create a subdirectory in this location, named by the genesis-id of the network. // If not specified, the node will use the HotDataDir CrashDBDir string `version[31]:""` // LogFileDir is an optional directory to store the log, node.log // If not specified, the node will use the HotDataDir. // The -o command line option can be used to override this output location. LogFileDir string `version[31]:""` // LogArchiveDir is an optional directory to store the log archive. // If not specified, the node will use the ColdDataDir. LogArchiveDir string `version[31]:""` // IncomingConnectionsLimit specifies the max number of incoming connections // for the gossip protocol configured in NetAddress. 0 means no connections allowed. Must be non-negative. // Estimating 1.5MB per incoming connection, 1.5MB*2400 = 3.6GB IncomingConnectionsLimit int `version[0]:"-1" version[1]:"10000" version[17]:"800" version[27]:"2400"` // P2PHybridIncomingConnectionsLimit is used as IncomingConnectionsLimit for P2P connections in hybrid mode. // For pure P2P nodes IncomingConnectionsLimit is used. P2PHybridIncomingConnectionsLimit int `version[34]:"1200"` // 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]:""` // ReservedFDs is used to make sure the algod process does not run out of file descriptors (FDs). Algod ensures // that RLIMIT_NOFILE >= IncomingConnectionsLimit + RestConnectionsHardLimit + // ReservedFDs. ReservedFDs are meant to leave room for short-lived FDs like // DNS queries, SQLite files, etc. This parameter shouldn't be changed. // If RLIMIT_NOFILE < IncomingConnectionsLimit + RestConnectionsHardLimit + ReservedFDs // then either RestConnectionsHardLimit or IncomingConnectionsLimit decreased. ReservedFDs uint64 `version[2]:"256"` // EndpointAddress configures the address the node listens to for REST API calls. Specify an IP and port or just port. For example, 127.0.0.1:0 will listen on a random port on the localhost (preferring 8080). EndpointAddress string `version[0]:"127.0.0.1:0"` // Respond to Private Network Access preflight requests sent to the node. Useful when a public website is trying to access a node that's hosted on a local network. EnablePrivateNetworkAccessHeader bool `version[35]:"false"` // RestReadTimeoutSeconds is passed to the API servers rest http.Server implementation. RestReadTimeoutSeconds int `version[4]:"15"` // RestWriteTimeoutSeconds is passed to the API servers rest http.Server implementation. RestWriteTimeoutSeconds int `version[4]:"120"` // DNSBootstrapID specifies the names of a set of DNS SRV records that identify the set of nodes available to connect to. // This is applicable to both relay and archival nodes - they are assumed to use the same DNSBootstrapID today. // When resolving the bootstrap ID <network> will be replaced by the genesis block's network name. This string uses a URL // parsing library and supports optional backup and dedup parameters. 'backup' is used to provide a second DNS entry to use // in case the primary is unavailable. dedup is intended to be used to deduplicate SRV records returned from the primary // and backup DNS address. If the <name> macro is used in the dedup mask, it must be at the beginning of the expression. // This is not typically something a user would configure. For more information see config/dnsbootstrap.go. DNSBootstrapID string `` /* 156-byte string literal not displayed */ // LogSizeLimit is the log file size limit in bytes. When set to 0 logs will be written to stdout. LogSizeLimit uint64 `version[0]:"1073741824"` // LogArchiveName 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]:""` // CatchupFailurePeerRefreshRate is the maximum number of consecutive attempts to catchup after which we replace the peers we're connected to. CatchupFailurePeerRefreshRate int `version[0]:"10"` // NodeExporterListenAddress is used to set the specific address for publishing metrics; the Prometheus server connects to this incoming port to retrieve metrics. NodeExporterListenAddress string `version[0]:":9100"` // EnableMetricReporting determines if the metrics service for a node is to be enabled. This setting controls metrics being collected from this specific instance of algod. If any instance has metrics enabled, machine-wide metrics are also collected. EnableMetricReporting bool `version[0]:"false"` // EnableTopAccountsReporting enable top accounts reporting flag. Deprecated, do not use. EnableTopAccountsReporting bool `version[0]:"false"` // EnableAgreementReporting controls the agreement reporting flag. Currently only prints additional period events. EnableAgreementReporting bool `version[3]:"false"` // EnableAgreementTimeMetrics controls the agreement timing metrics flag. EnableAgreementTimeMetrics bool `version[3]:"false"` // NodeExporterPath is the path to the node_exporter binary. NodeExporterPath string `version[0]:"./node_exporter"` // FallbackDNSResolverAddress defines the fallback DNS resolver address that would be used if the system resolver would fail to retrieve SRV records. FallbackDNSResolverAddress string `version[0]:""` // TxPoolExponentialIncreaseFactor exponential increase factor of transaction pool's fee threshold, should always be 2 in production. TxPoolExponentialIncreaseFactor uint64 `version[0]:"2"` // SuggestedFeeBlockHistory is deprecated and unused. SuggestedFeeBlockHistory int `version[0]:"3"` // TxBacklogServiceRateWindowSeconds is the window size used to determine the service rate of the txBacklog TxBacklogServiceRateWindowSeconds int `version[27]:"10"` // TxBacklogReservedCapacityPerPeer determines how much dedicated serving capacity the TxBacklog gives each peer TxBacklogReservedCapacityPerPeer int `version[27]:"20"` // TxBacklogAppTxRateLimiterMaxSize denotes a max size for the tx rate limiter // calculated as "a thousand apps on a network of thousand of peers" TxBacklogAppTxRateLimiterMaxSize int `version[32]:"1048576"` // TxBacklogAppTxPerSecondRate determines a target app per second rate for the app tx rate limiter TxBacklogAppTxPerSecondRate int `version[32]:"100"` // TxBacklogRateLimitingCongestionRatio determines the backlog filling threshold percentage at which the app limiter kicks in // or the tx backlog rate limiter kicks off. TxBacklogRateLimitingCongestionPct int `version[32]:"50"` // EnableTxBacklogAppRateLimiting controls if an app rate limiter should be attached to the tx backlog enqueue process EnableTxBacklogAppRateLimiting bool `version[32]:"true"` // TxBacklogAppRateLimitingCountERLDrops feeds messages dropped by the ERL congestion manager & rate limiter (enabled by // EnableTxBacklogRateLimiting) to the app rate limiter (enabled by EnableTxBacklogAppRateLimiting), so that all TX messages // are counted. This provides more accurate rate limiting for the app rate limiter, at the potential expense of additional // deserialization overhead. TxBacklogAppRateLimitingCountERLDrops bool `version[35]:"false"` // EnableTxBacklogRateLimiting controls if a rate limiter and congestion manager should be attached to the tx backlog enqueue process // if enabled, the over-all TXBacklog Size will be larger by MAX_PEERS*TxBacklogReservedCapacityPerPeer EnableTxBacklogRateLimiting bool `version[27]:"false" version[30]:"true"` // TxBacklogSize is the queue size used for receiving transactions. default of 26000 to approximate 1 block of transactions // if EnableTxBacklogRateLimiting enabled, the over-all size will be larger by MAX_PEERS*TxBacklogReservedCapacityPerPeer TxBacklogSize int `version[27]:"26000"` // TxPoolSize is the number of transactions in the transaction pool buffer. TxPoolSize int `version[0]:"50000" version[5]:"15000" version[23]:"75000"` // number of seconds allowed for syncing transactions TxSyncTimeoutSeconds int64 `version[0]:"30"` // TxSyncIntervalSeconds number of seconds between transaction synchronizations. TxSyncIntervalSeconds int64 `version[0]:"60"` // IncomingMessageFilterBucketCount is the number of incoming message hash buckets. IncomingMessageFilterBucketCount int `version[0]:"5"` // IncomingMessageFilterBucketSize is the size of each incoming message hash bucket. IncomingMessageFilterBucketSize int `version[0]:"512"` // OutgoingMessageFilterBucketCount is the number of outgoing message hash buckets. OutgoingMessageFilterBucketCount int `version[0]:"3"` // OutgoingMessageFilterBucketSize is the size of each outgoing message hash bucket. OutgoingMessageFilterBucketSize int `version[0]:"128"` // EnableOutgoingNetworkMessageFiltering enable the filtering of outgoing messages EnableOutgoingNetworkMessageFiltering bool `version[0]:"true"` // EnableIncomingMessageFilter enable the filtering of incoming messages. EnableIncomingMessageFilter bool `version[0]:"false"` // DeadlockDetection controls enabling or disabling deadlock detection. // negative (-1) to disable, positive (1) to enable, 0 for default. DeadlockDetection int `version[1]:"0"` // DeadlockDetectionThreshold is the threshold used for deadlock detection, in seconds. DeadlockDetectionThreshold int `version[20]:"30"` // RunHosted configures whether to run algod in Hosted mode (under algoh). Observed by `goal` for now. RunHosted bool `version[3]:"false"` // CatchupParallelBlocks is the maximum 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"` // EnableAssembleStats specifies whether or not to emit the AssembleBlockMetrics telemetry event. EnableAssembleStats bool `version[0]:""` // EnableProcessBlockStats specifies whether or not to emit the ProcessBlockMetrics telemetry event. EnableProcessBlockStats bool `version[0]:""` // SuggestedFeeSlidingWindowSize is deprecated and unused. SuggestedFeeSlidingWindowSize uint32 `version[3]:"50"` // TxSyncServeResponseSize the max size the sync server would return. TxSyncServeResponseSize int `version[3]:"1000000"` // UseXForwardedForAddressField 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. // This setting does not support multiple X-Forwarded-For HTTP headers or multiple values in in the header and always uses the last value // from the last X-Forwarded-For HTTP header that corresponds to a single reverse proxy (even if it received the request from another reverse proxy or adversary node). // // WARNING: By enabling this option, you are trusting peers to provide accurate forwarding addresses. // Bad actors can easily spoof these headers to circumvent this node's rate and connection limiting // logic. Do not enable this if your node is publicly reachable or used by untrusted parties. UseXForwardedForAddressField string `version[0]:""` // ForceRelayMessages indicates whether the network library should relay messages even in the case that no NetAddress was specified. ForceRelayMessages bool `version[0]:"false"` // ConnectionsRateLimitingWindowSeconds is being used along 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 examines 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 sent to // telemetry (when enabled). Defined in seconds. PeerConnectionsUpdateInterval int `version[5]:"3600"` // HeartbeatUpdateInterval defines the interval at which the heartbeat information is being sent to the // telemetry (when enabled). Defined in seconds. Minimum value is 60. HeartbeatUpdateInterval int `version[27]:"600"` // EnableProfiler enables the go pprof endpoints, should be false if // the algod api will be exposed to untrusted individuals EnableProfiler bool `version[0]:"false"` // EnableRuntimeMetrics exposes Go runtime metrics in /metrics and via node_exporter. EnableRuntimeMetrics bool `version[22]:"false"` // EnableNetDevMetrics exposes network interface total bytes sent/received metrics in /metrics EnableNetDevMetrics bool `version[34]:"false"` // TelemetryToLog configures whether to record messages to node.log that are normally only 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 // 0x08 (dnssecTXT) - validate TXT response // ... DNSSecurityFlags uint32 `version[6]:"1" version[34]:"9"` // 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 continuously 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 to store. // 0 means don't store any, -1 mean unlimited and positive number suggest the maximum number of most recent catchpoint files to store. CatchpointFileHistoryLength int `version[7]:"365"` // EnableGossipService enables the gossip network HTTP websockets endpoint. The functionality of this depends on NetAddress, which must also be provided. // This functionality is required for serving gossip traffic. EnableGossipService bool `version[33]:"true"` // 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 controls whether to enables the block serving service. The functionality of this depends on NetAddress, which must also be provided. // This functionality is required for 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"` // CatchupBlockDownloadRetryAttempts controls the number of attempts the block fetcher would make before giving up on a provided catchpoint. CatchupBlockDownloadRetryAttempts int `version[9]:"1000"` // EnableDeveloperAPI enables teal/compile and teal/dryrun API endpoints. // This functionality 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 > 0". // A value of 2 means "track catchpoints and always generate catchpoint files as long as CatchpointInterval > 0". // 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 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 use-case, // 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" version[28]:"43200000000000"` // 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"` // NetworkMessageTraceServer is a host:port address 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" version[23]:"150000"` // 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 empty, the block service will return // StatusNotFound (404) BlockServiceCustomFallbackEndpoints string `version[16]:""` // 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"` // EnableAccountUpdatesStats specifies whether or not to emit the AccountUpdates telemetry event. EnableAccountUpdatesStats bool `version[16]:"false"` // AccountUpdatesStatsInterval is the time interval in nanoseconds between accountUpdates telemetry events. 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. Deprecated and unused. 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 are no other nodes that need to be communicated with. // Features like catchpoint catchup would be rendered completely non-operational, and many of the node inner // working would be completely dis-functional. DisableNetworking bool `version[16]:"false"` // ForceFetchTransactions allows to explicitly configure a node to retrieve all the transactions // into it's transaction pool, even if those would not be required as the node doesn't // participate in consensus and is not used to relay transactions. ForceFetchTransactions bool `version[17]:"false"` // EnableVerbosedTransactionSyncLogging enables the transaction sync to write extensive // message exchange information to the log file. This option is disabled by default, // so that the log files would not grow too rapidly. EnableVerbosedTransactionSyncLogging bool `version[17]:"false"` // TransactionSyncDataExchangeRate overrides the auto-calculated data exchange rate between each // two peers. The unit of the data exchange rate is in bytes per second. Setting the value to // zero implies allowing the transaction sync to dynamically calculate the value. TransactionSyncDataExchangeRate uint64 `version[17]:"0"` // TransactionSyncSignificantMessageThreshold define the threshold used for a transaction sync // message before it can be used for calculating the data exchange rate. Setting this to zero // would use the default values. The threshold is defined in units of bytes. TransactionSyncSignificantMessageThreshold uint64 `version[17]:"0"` // ProposalAssemblyTime is the max amount of time to spend on generating a proposal block. ProposalAssemblyTime time.Duration `version[19]:"250000000" version[23]:"500000000"` // RestConnectionsSoftLimit is the maximum number of active requests the API server // When the number of http connections to the REST layer exceeds the soft limit, // we start returning http code 429 Too Many Requests. RestConnectionsSoftLimit uint64 `version[20]:"1024"` // RestConnectionsHardLimit is the maximum number of active connections the API server will accept before closing requests with no response. RestConnectionsHardLimit uint64 `version[20]:"2048"` // MaxAPIResourcesPerAccount sets the maximum total number of resources (created assets, created apps, // asset holdings, and application local state) per account that will be allowed in AccountInformation // REST API responses before returning a 400 Bad Request. Set zero for no limit. MaxAPIResourcesPerAccount uint64 `version[21]:"100000"` // AgreementIncomingVotesQueueLength sets the size of the buffer holding incoming votes. AgreementIncomingVotesQueueLength uint64 `version[21]:"10000" version[27]:"20000"` // AgreementIncomingProposalsQueueLength sets the size of the buffer holding incoming proposals. AgreementIncomingProposalsQueueLength uint64 `version[21]:"25" version[27]:"50"` // AgreementIncomingBundlesQueueLength sets the size of the buffer holding incoming bundles. AgreementIncomingBundlesQueueLength uint64 `version[21]:"7" version[27]:"15"` // MaxAcctLookback sets the maximum lookback range for account states, // i.e. the ledger can answer account states questions for the range Latest-MaxAcctLookback...Latest MaxAcctLookback uint64 `version[23]:"4"` // BlockHistoryLookback sets the max lookback range for block information. // i.e. the block DB can return transaction IDs for questions for the range Latest-MaxBlockHistoryLookback...Latest MaxBlockHistoryLookback uint64 `version[31]:"0"` // EnableUsageLog enables 10Hz log of CPU and RAM usage. // Also adds 'algod_ram_usage` (number of bytes in use) to /metrics EnableUsageLog bool `version[24]:"false"` // MaxAPIBoxPerApplication defines the maximum total number of boxes per application that will be returned // in GetApplicationBoxes REST API responses. MaxAPIBoxPerApplication uint64 `version[25]:"100000"` // TxIncomingFilteringFlags instructs algod filtering incoming tx messages // Flag values: // 0x00 - disabled // 0x01 (txFilterRawMsg) - check for raw tx message duplicates // 0x02 (txFilterCanonical) - check for canonical tx group duplicates TxIncomingFilteringFlags uint32 `version[26]:"1"` // EnableExperimentalAPI enables experimental API endpoint. Note that these endpoints have no // guarantees in terms of functionality or future support. EnableExperimentalAPI bool `version[26]:"false"` // DisableLedgerLRUCache disables LRU caches in ledger. // Setting it to TRUE might result in significant performance degradation // and SHOULD NOT be used for other reasons than testing. DisableLedgerLRUCache bool `version[27]:"false"` // EnableFollowMode launches the node in "follower" mode. This turns off the agreement service, // and APIs related to broadcasting transactions, and enables APIs which can retrieve detailed information // from ledger caches and can control the ledger round. EnableFollowMode bool `version[27]:"false"` // EnableTxnEvalTracer turns on features in the BlockEvaluator which collect data on transactions, exposing them via algod APIs. // It will store txn deltas created during block evaluation, potentially consuming much larger amounts of memory, EnableTxnEvalTracer bool `version[27]:"false"` // StorageEngine allows to control which type of storage to use for the ledger. // Available options are: // - sqlite (default) // - pebbledb (experimental, in development) StorageEngine string `version[28]:"sqlite"` // TxIncomingFilterMaxSize sets the maximum size for the de-duplication cache used by the incoming tx filter // only relevant if TxIncomingFilteringFlags is non-zero TxIncomingFilterMaxSize uint64 `version[28]:"500000"` // BlockServiceMemCap is the memory capacity in bytes which is allowed for the block service to use for HTTP block requests. // When it exceeds this capacity, it redirects the block requests to a different node BlockServiceMemCap uint64 `version[28]:"500000000"` // EnableP2P turns on the peer to peer network. // When both EnableP2P and EnableP2PHybridMode (below) are set, EnableP2PHybridMode takes precedence. EnableP2P bool `version[31]:"false"` // EnableP2PHybridMode turns on both websockets and P2P networking. // Enabling this setting also requires PublicAddress to be set. EnableP2PHybridMode bool `version[34]:"false"` // P2PHybridNetAddress sets the listen address used for P2P networking, if hybrid mode is set. P2PHybridNetAddress string `version[34]:""` // EnableDHT will turn on the hash table for use with capabilities advertisement EnableDHTProviders bool `version[34]:"false"` // P2PPersistPeerID will write the private key used for the node's PeerID to the P2PPrivateKeyLocation. // This is only used when P2PEnable is true. If P2PPrivateKey is not specified, it uses the default location. P2PPersistPeerID bool `version[29]:"false"` // P2PPrivateKeyLocation allows the user to specify a custom path to the private key used for the node's PeerID. // The private key provided must be an ed25519 private key. // This is only used when P2PEnable is true. If the parameter is not set, it uses the default location. P2PPrivateKeyLocation string `version[29]:""` // DisableAPIAuth turns off authentication for public (non-admin) API endpoints. DisableAPIAuth bool `version[30]:"false"` // GoMemLimit provides the Go runtime with a soft memory limit. The default behavior is no limit, // unless the GOMEMLIMIT environment variable is set. GoMemLimit uint64 `version[34]:"0"` }
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 GetVersionedDefaultLocalConfig ¶
GetVersionedDefaultLocalConfig returns the default config for the given version.
func LoadConfigFromDisk ¶
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) AdjustConnectionLimits ¶
AdjustConnectionLimits updates RestConnectionsSoftLimit, RestConnectionsHardLimit, IncomingConnectionsLimit if requiredFDs greater than maxFDs
func (Local) CatchupVerifyApplyData ¶
CatchupVerifyApplyData returns true if verifying the ApplyData of the payset needed
func (Local) CatchupVerifyCertificate ¶
CatchupVerifyCertificate returns true if certificate verification is needed
func (Local) CatchupVerifyPaysetHash ¶
CatchupVerifyPaysetHash returns true if payset hash verification is needed
func (Local) CatchupVerifyTransactionSignatures ¶
CatchupVerifyTransactionSignatures returns true if transactions signature verification is needed
func (Local) DNSBootstrapArray ¶
func (cfg Local) DNSBootstrapArray(networkID protocol.NetworkID) []*DNSBootstrap
DNSBootstrapArray returns an array of one or more DNS Bootstrap identifiers
func (Local) DNSSecurityRelayAddrEnforced ¶
DNSSecurityRelayAddrEnforced returns true if relay name to ip addr resolution enforced
func (Local) DNSSecuritySRVEnforced ¶
DNSSecuritySRVEnforced returns true if SRV response verification enforced
func (Local) DNSSecurityTXTEnforced ¶
DNSSecurityTXTEnforced returns true if TXT response verification enforced
func (Local) DNSSecurityTelemetryAddrEnforced ¶
DNSSecurityTelemetryAddrEnforced returns true if relay name to ip addr resolution enforced
func (*Local) EnsureAndResolveGenesisDirs ¶
func (cfg *Local) EnsureAndResolveGenesisDirs(rootDir, genesisID string, logger logger) (ResolvedGenesisDirs, error)
EnsureAndResolveGenesisDirs will resolve the supplied config paths to absolute paths, and will create the genesis directories of each returns a ResolvedGenesisDirs struct with the resolved paths for use during runtime
func (Local) IsGossipServer ¶
IsGossipServer returns true if this node supposed to start websocket or p2p server
func (Local) IsHybridServer ¶
IsHybridServer returns true if a node configured to run a listening both ws and p2p networks
func (Local) IsP2PGossipServer ¶
IsP2PGossipServer returns true if a node is configured to run a listening p2p net
func (Local) IsWsGossipServer ¶
IsWsGossipServer returns true if a node is configured to run a listening ws net
func (*Local) ResolveLogPaths ¶
ResolveLogPaths will return the most appropriate location for liveLog and archive, given user config
func (Local) SaveAllToDisk ¶
SaveAllToDisk writes the all Local settings into a root/ConfigFilename file
func (Local) SaveToDisk ¶
SaveToDisk writes the non-default Local settings into a root/ConfigFilename file
func (Local) SaveToFile ¶
SaveToFile saves the config to a specific filename, allowing overriding the default name
func (*Local) StoresCatchpoints ¶
StoresCatchpoints returns true if the node is configured to store catchpoints
func (*Local) TracksCatchpoints ¶
TracksCatchpoints returns true if the node is configured to track catchpoints
func (Local) TxFilterCanonicalEnabled ¶
TxFilterCanonicalEnabled returns true if canonical tx group filtering is enabled
func (Local) TxFilterRawMsgEnabled ¶
TxFilterRawMsgEnabled returns true if raw tx filtering is enabled
func (Local) ValidateDNSBootstrapArray ¶
func (cfg Local) ValidateDNSBootstrapArray(networkID protocol.NetworkID) ([]*DNSBootstrap, error)
ValidateDNSBootstrapArray returns an array of one or more DNS Bootstrap identifiers or an error if any one fails to parse
func (Local) ValidateP2PHybridConfig ¶
ValidateP2PHybridConfig checks if both NetAddress and P2PHybridNetAddress are set or unset in hybrid mode.
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 merkle array to commit to the payset. PaysetCommitMerkle )
type ProposerPayoutRules ¶
type ProposerPayoutRules struct { // Enabled turns on several things needed for paying block incentives, // including tracking of the proposer and fees collected. Enabled bool // GoOnlineFee imparts a small cost on moving from offline to online. This // will impose a cost to running unreliable nodes that get suspended and // then come back online. GoOnlineFee uint64 // Percent specifies the percent of fees paid in a block that go to the // proposer instead of the FeeSink. Percent uint64 // MinBalance is the minimum balance an account must have to be eligible for // incentives. It ensures that smaller accounts continue to operate for the // same motivations they had before block incentives were // introduced. Without that assurance, it is difficult to model their // behaviour - might many participants join for the hope of easy financial // rewards, but without caring enough to run a high-quality node? MinBalance uint64 // MaxBalance is the maximum balance an account can have to be eligible for // incentives. It encourages large accounts to split their stake to add // resilience to consensus in the case of outages. Nothing in protocol can // prevent such accounts from running nodes that share fate (same machine, // same data center, etc), but this serves as a gentle reminder. MaxBalance uint64 // MaxMarkAbsent is the maximum number of online accounts, that a proposer // can suspend for not proposing "lately" (In 10x expected interval, or // within a grace period from being challenged) MaxMarkAbsent int // Challenges occur once every challengeInterval rounds. ChallengeInterval uint64 // Suspensions happen between 1 and 2 grace periods after a challenge. Must // be less than half MaxTxnLife to ensure the Block header will be cached // and less than half ChallengeInterval to avoid overlapping challenges. A larger // grace period means larger stake nodes will probably propose before they // need to consider an active heartbeat. ChallengeGracePeriod uint64 // An account is challenged if the first challengeBits match the start of // the account address. An online account will be challenged about once // every interval*2^bits rounds. ChallengeBits int }
ProposerPayoutRules puts several related consensus parameters in one place. The same care for backward compatibility with old blocks must be taken.
type ResolvedGenesisDirs ¶
type ResolvedGenesisDirs struct { RootGenesisDir string HotGenesisDir string ColdGenesisDir string TrackerGenesisDir string BlockGenesisDir string CatchpointGenesisDir string StateproofGenesisDir string CrashGenesisDir string }
ResolvedGenesisDirs is a collection of directories including Genesis ID Subdirectories for execution of a node
func (ResolvedGenesisDirs) String ¶
func (rgd ResolvedGenesisDirs) String() string
String returns the Genesis Directory values as a string
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) GetCommitHash ¶
GetCommitHash returns the commit ID for the build's source