aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/puppeth
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2017-10-19 22:50:34 +0800
committerPéter Szilágyi <peterke@gmail.com>2017-11-21 21:09:33 +0800
commit9e095251b71255ff346ee9300df8754eb6b64903 (patch)
treead5a277c3c69b0ef482f5fbe67a73c75b932b23f /cmd/puppeth
parentda3b9f831e6bb8f8a3c589e5cd8426fd9da72eea (diff)
downloaddexon-9e095251b71255ff346ee9300df8754eb6b64903.tar.gz
dexon-9e095251b71255ff346ee9300df8754eb6b64903.tar.zst
dexon-9e095251b71255ff346ee9300df8754eb6b64903.zip
cmd/puppeth: mount ethash dir from the host to cache DAGs
Diffstat (limited to 'cmd/puppeth')
-rw-r--r--cmd/puppeth/module_node.go36
-rw-r--r--cmd/puppeth/wizard_node.go10
2 files changed, 33 insertions, 13 deletions
diff --git a/cmd/puppeth/module_node.go b/cmd/puppeth/module_node.go
index 17e8a1a99..37da770aa 100644
--- a/cmd/puppeth/module_node.go
+++ b/cmd/puppeth/module_node.go
@@ -42,7 +42,7 @@ ADD genesis.json /genesis.json
RUN \
echo 'geth init /genesis.json' > geth.sh && \{{if .Unlock}}
echo 'mkdir -p /root/.ethereum/keystore/ && cp /signer.json /root/.ethereum/keystore/' >> geth.sh && \{{end}}
- echo $'geth --networkid {{.NetworkID}} --cache 512 --port {{.Port}} --maxpeers {{.Peers}} {{.LightFlag}} --ethstats \'{{.Ethstats}}\' {{if .BootV4}}--bootnodesv4 {{.BootV4}}{{end}} {{if .BootV5}}--bootnodesv5 {{.BootV5}}{{end}} {{if .Etherbase}}--etherbase {{.Etherbase}} --mine{{end}}{{if .Unlock}}--unlock 0 --password /signer.pass --mine{{end}} --targetgaslimit {{.GasTarget}} --gasprice {{.GasPrice}}' >> geth.sh
+ echo $'geth --networkid {{.NetworkID}} --cache 512 --port {{.Port}} --maxpeers {{.Peers}} {{.LightFlag}} --ethstats \'{{.Ethstats}}\' {{if .BootV4}}--bootnodesv4 {{.BootV4}}{{end}} {{if .BootV5}}--bootnodesv5 {{.BootV5}}{{end}} {{if .Etherbase}}--etherbase {{.Etherbase}} --mine --minerthreads 1{{end}} {{if .Unlock}}--unlock 0 --password /signer.pass --mine{{end}} --targetgaslimit {{.GasTarget}} --gasprice {{.GasPrice}}' >> geth.sh
ENTRYPOINT ["/bin/sh", "geth.sh"]
`
@@ -60,7 +60,8 @@ services:
- "{{.FullPort}}:{{.FullPort}}/udp"{{if .Light}}
- "{{.LightPort}}:{{.LightPort}}/udp"{{end}}
volumes:
- - {{.Datadir}}:/root/.ethereum
+ - {{.Datadir}}:/root/.ethereum{{if .Ethashdir}}
+ - {{.Ethashdir}}:/root/.ethash{{end}}
environment:
- FULL_PORT={{.FullPort}}/tcp
- LIGHT_PORT={{.LightPort}}/udp
@@ -116,6 +117,7 @@ func deployNode(client *sshClient, network string, bootv4, bootv5 []string, conf
template.Must(template.New("").Parse(nodeComposefile)).Execute(composefile, map[string]interface{}{
"Type": kind,
"Datadir": config.datadir,
+ "Ethashdir": config.ethashdir,
"Network": network,
"FullPort": config.portFull,
"TotalPeers": config.peersTotal,
@@ -155,6 +157,7 @@ type nodeInfos struct {
genesis []byte
network int64
datadir string
+ ethashdir string
ethstats string
portFull int
portLight int
@@ -180,23 +183,29 @@ func (info *nodeInfos) Report() map[string]string {
"Ethstats username": info.ethstats,
}
if info.peersLight > 0 {
+ // Light server enabled
report["Listener port (light nodes)"] = strconv.Itoa(info.portLight)
}
if info.gasTarget > 0 {
+ // Miner or signer node
report["Gas limit (baseline target)"] = fmt.Sprintf("%0.3f MGas", info.gasTarget)
report["Gas price (minimum accepted)"] = fmt.Sprintf("%0.3f GWei", info.gasPrice)
- }
- if info.etherbase != "" {
- report["Miner account"] = info.etherbase
- }
- if info.keyJSON != "" {
- var key struct {
- Address string `json:"address"`
+
+ if info.etherbase != "" {
+ // Ethash proof-of-work miner
+ report["Ethash directory"] = info.ethashdir
+ report["Miner account"] = info.etherbase
}
- if err := json.Unmarshal([]byte(info.keyJSON), &key); err == nil {
- report["Signer account"] = common.HexToAddress(key.Address).Hex()
- } else {
- log.Error("Failed to retrieve signer address", "err", err)
+ if info.keyJSON != "" {
+ // Clique proof-of-authority signer
+ var key struct {
+ Address string `json:"address"`
+ }
+ if err := json.Unmarshal([]byte(info.keyJSON), &key); err == nil {
+ report["Signer account"] = common.HexToAddress(key.Address).Hex()
+ } else {
+ log.Error("Failed to retrieve signer address", "err", err)
+ }
}
}
return report
@@ -251,6 +260,7 @@ func checkNode(client *sshClient, network string, boot bool) (*nodeInfos, error)
stats := &nodeInfos{
genesis: genesis,
datadir: infos.volumes["/root/.ethereum"],
+ ethashdir: infos.volumes["/root/.ethash"],
portFull: infos.portmap[infos.envvars["FULL_PORT"]],
portLight: infos.portmap[infos.envvars["LIGHT_PORT"]],
peersTotal: totalPeers,
diff --git a/cmd/puppeth/wizard_node.go b/cmd/puppeth/wizard_node.go
index 023da8e1e..f1b4619b5 100644
--- a/cmd/puppeth/wizard_node.go
+++ b/cmd/puppeth/wizard_node.go
@@ -65,6 +65,16 @@ func (w *wizard) deployNode(boot bool) {
fmt.Printf("Where should data be stored on the remote machine? (default = %s)\n", infos.datadir)
infos.datadir = w.readDefaultString(infos.datadir)
}
+ if w.conf.genesis.Config.Ethash != nil {
+ fmt.Println()
+ if infos.ethashdir == "" {
+ fmt.Printf("Where should the ethash mining DAGs be stored on the remote machine?\n")
+ infos.ethashdir = w.readString()
+ } else {
+ fmt.Printf("Where should the ethash mining DAGs be stored on the remote machine? (default = %s)\n", infos.ethashdir)
+ infos.ethashdir = w.readDefaultString(infos.ethashdir)
+ }
+ }
// Figure out which port to listen on
fmt.Println()
fmt.Printf("Which TCP/UDP port to listen on? (default = %d)\n", infos.portFull)