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.
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
`
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"
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
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
################################################################################
##
## 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
## version 0.6
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
##
## 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,
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
# 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
## version 0.16
##
## 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"
`