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  }