github.com/Blockdaemon/celo-blockchain@v0.0.0-20200129231733-e667f6b08419/consensus/istanbul/config.go (about) 1 // Copyright 2017 The go-ethereum Authors 2 // This file is part of the go-ethereum library. 3 // 4 // The go-ethereum library is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU Lesser General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // The go-ethereum library is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU Lesser General Public License for more details. 13 // 14 // You should have received a copy of the GNU Lesser General Public License 15 // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. 16 17 package istanbul 18 19 import ( 20 "github.com/ethereum/go-ethereum/common" 21 "github.com/ethereum/go-ethereum/p2p/enode" 22 ) 23 24 type ProposerPolicy uint64 25 26 const ( 27 RoundRobin ProposerPolicy = iota 28 Sticky 29 ShuffledRoundRobin 30 ) 31 32 type Config struct { 33 RequestTimeout uint64 `toml:",omitempty"` // The timeout for each Istanbul round in milliseconds. 34 TimeoutBackoffFactor uint64 `toml:",omitempty"` // Timeout at subsequent rounds is: RequestTimeout + 2**round * TimeoutBackoffFactor (in milliseconds) 35 MinResendRoundChangeTimeout uint64 `toml:",omitempty"` // Minimum interval with which to resend RoundChange messages for same round 36 MaxResendRoundChangeTimeout uint64 `toml:",omitempty"` // Maximum interval with which to resend RoundChange messages for same round 37 BlockPeriod uint64 `toml:",omitempty"` // Default minimum difference between two consecutive block's timestamps in second 38 ProposerPolicy ProposerPolicy `toml:",omitempty"` // The policy for proposer selection 39 Epoch uint64 `toml:",omitempty"` // The number of blocks after which to checkpoint and reset the pending votes 40 LookbackWindow uint64 `toml:",omitempty"` // The window of blocks in which a validator is forgived from voting 41 ValidatorEnodeDBPath string `toml:",omitempty"` // The location for the validator enodes DB 42 RoundStateDBPath string `toml:",omitempty"` // The location for the round states DB 43 44 // Proxy Configs 45 Proxy bool `toml:",omitempty"` // Specifies if this node is a proxy 46 ProxiedValidatorAddress common.Address `toml:",omitempty"` // The address of the proxied validator 47 48 // Proxied Validator Configs 49 Proxied bool `toml:",omitempty"` // Specifies if this node is proxied 50 ProxyInternalFacingNode *enode.Node `toml:",omitempty"` // The internal facing node of the proxy that this proxied validator will contect to 51 ProxyExternalFacingNode *enode.Node `toml:",omitempty"` // The external facing node of the proxy that the proxied validator will broadcast via the announce message 52 } 53 54 var DefaultConfig = &Config{ 55 RequestTimeout: 3000, 56 TimeoutBackoffFactor: 1000, 57 MinResendRoundChangeTimeout: 15 * 1000, 58 MaxResendRoundChangeTimeout: 2 * 60 * 1000, 59 BlockPeriod: 1, 60 ProposerPolicy: ShuffledRoundRobin, 61 Epoch: 30000, 62 LookbackWindow: 12, 63 ValidatorEnodeDBPath: "validatorenodes", 64 RoundStateDBPath: "roundstates", 65 Proxy: false, 66 Proxied: false, 67 }