// Copyright 2017 Monax Industries Limited // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package config import "fmt" const headerCopyright = `# Copyright 2017 Monax Industries Limited # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # This is a TOML configuration for burrow chains generated by burrow config. ` const sectionServiceGeneral = `[service] # NOTE: this section is read by CLI tooling, and ignored by burrow. # Image specifies the image name monax needs to pull # for running the chain. image = "{{.ChainImageName}}" # Define whether monax needs to attach the data container # for the chain. data_container = {{.UseDataContainer}} # Specify a list of ports that need to be exported on the container. ports = {{.ExportedPorts}} {{ if ne .ContainerEntrypoint "" }}# Entrypoint points to the default action to execute # in the chain container. entry_point = "{{.ContainerEntrypoint}}"{{ end }} ` const sectionServiceDependencies = `[dependencies] # NOTE: this section is read by Monax tooling, and ignored by burrow. # burrow expects these services to be available; eric-cli tooling will # automatically set these services up for you. # Services to boot with/required by the chain services = [ "keys" ] ` const majorVersionKey = "major_version" const minorVersionKey = "minor_version" var sectionChainGeneral string = fmt.Sprintf(`[chain] # ChainId is a human-readable name to identify the chain. # This must correspond to the chain_id defined in the genesis file # and the assertion here provides a safe-guard on misconfiguring chains. assert_chain_id = "{{.AssertChainId}}" # semantic major and minor version %s = {{.BurrowMajorVersion}} %s = {{.BurrowMinorVersion}} # genesis file, relative path is to burrow working directory genesis_file = "{{.GenesisRelativePath}}" `, majorVersionKey, minorVersionKey) const separatorChainConsensus = ` ################################################################################ ## ## consensus ## ################################################################################ ` const sectionChainConsensus = ` [chain.consensus] # consensus defines the module to use for consensus and # this will define the peer-to-peer consensus network; # accepted values are ("noops", "abci",) "tendermint" name = "{{.Name}}" # relative path to consensus' module root folder relative_root = "{{.ModuleRelativeRoot}}" ` const separatorChainApplicationManager = ` ################################################################################ ## ## application manager ## ################################################################################ ` const sectionChainApplicationManager = ` [chain.manager] # application manager name defines the module to use for handling # the transactions. Supported names are "burrowmint" name = "{{.Name}}" # relative path to application manager root folder relative_root = "{{.ModuleRelativeRoot}}" ` const separatorServerConfiguration = ` ################################################################################ ################################################################################ ## ## Server configurations ## ################################################################################ ################################################################################ ` // TODO: [ben] map entries to structure defined in burrow const sectionServers = `[servers] [servers.bind] address = "" port = 1337 [servers.tls] tls = false cert_path = "" key_path = "" [servers.cors] enable = false allow_origins = [] allow_credentials = false allow_methods = [] allow_headers = [] expose_headers = [] max_age = 0 [servers.http] json_rpc_endpoint = "/rpc" [servers.websocket] endpoint = "/socketrpc" max_sessions = 50 read_buffer_size = 4096 write_buffer_size = 4096 [servers.tendermint] # Multiple listeners can be separated with a comma rpc_local_address = "0.0.0.0:46657" endpoint = "/websocket" ` const separatorModules = ` ################################################################################ ################################################################################ ## ## Module configurations - dynamically loaded based on chain configuration ## ################################################################################ ################################################################################ ` // TODO: [ben] minimal fields have been made configurable; expand where needed const sectionTendermint = ` ################################################################################ ## ## Tendermint ## ## in-process execution of Tendermint consensus engine ## ################################################################################ [tendermint] # private validator file is used by tendermint to keep the status # of the private validator, but also (currently) holds the private key # for the private vaildator to sign with. This private key needs to be moved # out and directly managed by monax-keys # This file needs to be in the root directory private_validator_file = "priv_validator.json" # Tendermint requires additional configuration parameters. # burrow's tendermint consensus module will load [tendermint.configuration] # as the configuration for Tendermint. # burrow will respect the configurations set in this file where applicable, # but reserves the option to override or block conflicting settings. [tendermint.configuration] # moniker is the name of the node on the tendermint p2p network moniker = "{{.Moniker}}" # seeds lists the peers tendermint can connect to join the network seeds = "{{.Seeds}}" # fast_sync allows a tendermint node to catch up faster when joining # the network. # NOTE: Tendermint has reported potential issues with fast_sync enabled. # The recommended setting is for keeping it disabled. fast_sync = {{.FastSync}} # database backend to use for Tendermint. Supported "leveldb" and "memdb". db_backend = "leveldb" # logging level. Supported "error" < "warn" < "notice" < "info" < "debug" log_level = "info" # node local address node_laddr = "0.0.0.0:46656" # rpc local address # NOTE: value is ignored when run in-process as RPC is # handled by [servers.tendermint] rpc_laddr = "0.0.0.0:46657" # proxy application address - used for abci connections, # and this port should not be exposed for in-process Tendermint proxy_app = "tcp://127.0.0.1:46658" # Extended Tendermint configuration settings # for reference to Tendermint see https://github.com/tendermint/tendermint/blob/master/config/tendermint/config.go # genesis_file = "./data/tendermint/genesis.json" # skip_upnp = false # addrbook_file = "./data/tendermint/addrbook.json" # addrbook_strict = true # pex_reactor = false # priv_validator_file = "./data/tendermint/priv_validator.json" # db_dir = "./data/tendermint/data" # prof_laddr = "" # revision_file = "./data/tendermint/revision" # cs_wal_file = "./data/tendermint/data/cs.wal/wal" # cs_wal_light = false # filter_peers = false # block_size = 10000 # block_part_size = 65536 # disable_data_hash = false # timeout_propose = 3000 # timeout_propose_delta = 500 # timeout_prevote = 1000 # timeout_prevote_delta = 500 # timeout_precommit = 1000 # timeout_precommit_delta = 500 # timeout_commit = 1000 # skip_timeout_commit = false # mempool_recheck = true # mempool_recheck_empty = true # mempool_broadcast = true # mempool_wal_dir = "./data/tendermint/data/mempool.wal" [tendermint.configuration.p2p] # Switch config keys dial_timeout_seconds = 3 handshake_timeout_seconds = 20 max_num_peers = 20 authenticated_encryption = true # MConnection config keys send_rate = 512000 recv_rate = 512000 # Fuzz params fuzz_enable = false # use the fuzz wrapped conn fuzz_active = false # toggle fuzzing fuzz_mode = "drop" # eg. drop, delay fuzz_max_delay_milliseconds = 3000 fuzz_prob_drop_rw = 0.2 fuzz_prob_drop_conn = 0.00 fuzz_prob_sleep = 0.00 ` const sectionBurrowMint = ` ################################################################################ ## ## Burrow-Mint ## ## The original Ethereum virtual machine with IAVL merkle trees ## and tendermint/go-wire encoding ## ################################################################################ [burrowmint] # Database backend to use for BurrowMint state database. # Supported "leveldb" and "memdb". db_backend = "leveldb" # tendermint host address needs to correspond to tendermints configuration # of the rpc local address tendermint_host = "0.0.0.0:46657" ` // TODO: [Silas]: before next logging release (finalising this stuff and adding // presets) add full documentation of transforms, outputs, and their available // configuration options. const sectionLoggingHeader = ` ################################################################################ ## ## System-wide logging configuration ## ## Log messages are sent to one of two 'channels': info or trace ## ## They are delivered on a single non-blocking stream to a 'root sink'. ## ## A sink may optionally define any of a 'transform', an 'output', and a list of ## downstream sinks. Log messages flow through a sink by first having that ## sink's transform applied and then writing to its output and downstream sinks. ## In this way the log messages can output can be finely controlled and sent to ## a multiple different outputs having been filtered, modified, augmented, or ## labelled. This can be used to give more relevant output or to drive external ## systems. ## ## ################################################################################ ## A minimal logging config for multi-line, colourised terminal output would be: # # [logging] # [logging.root_sink] # [logging.root_sink.output] # output_type = "stderr" # format = "terminal" `