Skip to content
Snippets Groups Projects
templates.go 10 KiB
Newer Older
// 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.
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 Eris-DB chains generated by Eris.

`

const sectionServiceGeneral = `[service]
# NOTE: this section is read by Eris tooling, and ignored by eris-db.
# Image specifies the image name eris-cli needs to pull 
# for running the chain.
image = "{{.ChainImageName}}"
# Define whether eris-cli 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 Eris tooling, and ignored by eris-db.
# Eris-db 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 sectionChainGeneral = `[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
major_version = {{.ErisdbMajorVersion}}
minor_version = {{.ErisdbMinorVersion}}
# genesis file, relative path is to eris-db working directory
genesis_file = "{{.GenesisRelativePath}}"

`

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}}"
  # version is the major and minor semantic version;
  # the version will be asserted on
  major_version = {{.MajorVersion}}
  minor_version = {{.MinorVersion}}
  # 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 "erismint"
  name = "{{.Name}}"
  # version is the major and minor semantic version;
  # the version will be asserted on
  major_version = {{.MajorVersion}}
  minor_version = {{.MinorVersion}}
  # relative path to application manager root folder
  relative_root = "{{.ModuleRelativeRoot}}"

  `

const separatorServerConfiguration = `
################################################################################
################################################################################
##
## Server configurations
##
################################################################################
################################################################################

`

// TODO: [ben] map entries to structure defined in eris-db
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"

  [servers.logging]
  console_log_level = "info"
  file_log_level = "warn"
  log_file = ""

  `

const separatorModules = `
################################################################################
################################################################################
##
## Module configurations - dynamically loaded based on chain configuration
##
################################################################################
################################################################################

`

// TODO: [ben] make configurable
const sectionabci = `
################################################################################
##
## Tendermint Socket Protocol (abci)
## abci expects a tendermint consensus process to run and connect to Eris-DB
##
################################################################################

# listener address for accepting tendermint socket protocol connections
listener = "tcp://0.0.0.0:46658"

`

// 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 eris-keys
# This file needs to be in the root directory
private_validator_file = "priv_validator.json"

  # Tendermint requires additional configuration parameters.
  # Eris-DB's tendermint consensus module will load [tendermint.configuration]
  # as the configuration for Tendermint.
  # Eris-DB 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"
  # priv_validator_file = "./data/tendermint/priv_validator.json"
  # db_dir = "./data/tendermint/data"
  # prof_laddr = ""
  # revision_file = "./data/tendermint/revision"
  # cswal = "./data/tendermint/data/cswal"
  # cswal_light = false

  # block_size = 10000
  # 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
  # mempool_recheck = true
  # mempool_recheck_empty = true
  # mempool_broadcast = true

		[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 sectionErisMint = `
################################################################################
##
## Eris-Mint
##
## The original Ethereum virtual machine with IAVL merkle trees
## and tendermint/go-wire encoding
##
################################################################################

[erismint]
# Database backend to use for ErisMint 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"

`