Merge pull request #2976 from fjl/utils-version
cmd/evm, cmd/geth, cmd/utils: move version handling to cmd/utils
This commit is contained in:
commit
eac390f289
@ -35,8 +35,11 @@ import (
|
|||||||
"gopkg.in/urfave/cli.v1"
|
"gopkg.in/urfave/cli.v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var gitCommit = "" // Git SHA1 commit hash of the release (set via linker flags)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
app *cli.App
|
app = utils.NewApp(gitCommit, "the evm command line interface")
|
||||||
|
|
||||||
DebugFlag = cli.BoolFlag{
|
DebugFlag = cli.BoolFlag{
|
||||||
Name: "debug",
|
Name: "debug",
|
||||||
Usage: "output full trace logs",
|
Usage: "output full trace logs",
|
||||||
@ -91,7 +94,6 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
app = utils.NewApp("0.2", "the evm command line interface")
|
|
||||||
app.Flags = []cli.Flag{
|
app.Flags = []cli.Flag{
|
||||||
CreateFlag,
|
CreateFlag,
|
||||||
DebugFlag,
|
DebugFlag,
|
||||||
|
@ -168,7 +168,7 @@ nodes.
|
|||||||
)
|
)
|
||||||
|
|
||||||
func accountList(ctx *cli.Context) error {
|
func accountList(ctx *cli.Context) error {
|
||||||
stack := utils.MakeNode(ctx, clientIdentifier, verString)
|
stack := utils.MakeNode(ctx, clientIdentifier, gitCommit)
|
||||||
for i, acct := range stack.AccountManager().Accounts() {
|
for i, acct := range stack.AccountManager().Accounts() {
|
||||||
fmt.Printf("Account #%d: {%x} %s\n", i, acct.Address, acct.File)
|
fmt.Printf("Account #%d: {%x} %s\n", i, acct.Address, acct.File)
|
||||||
}
|
}
|
||||||
@ -261,7 +261,7 @@ func ambiguousAddrRecovery(am *accounts.Manager, err *accounts.AmbiguousAddrErro
|
|||||||
|
|
||||||
// accountCreate creates a new account into the keystore defined by the CLI flags.
|
// accountCreate creates a new account into the keystore defined by the CLI flags.
|
||||||
func accountCreate(ctx *cli.Context) error {
|
func accountCreate(ctx *cli.Context) error {
|
||||||
stack := utils.MakeNode(ctx, clientIdentifier, verString)
|
stack := utils.MakeNode(ctx, clientIdentifier, gitCommit)
|
||||||
password := getPassPhrase("Your new account is locked with a password. Please give a password. Do not forget this password.", true, 0, utils.MakePasswordList(ctx))
|
password := getPassPhrase("Your new account is locked with a password. Please give a password. Do not forget this password.", true, 0, utils.MakePasswordList(ctx))
|
||||||
|
|
||||||
account, err := stack.AccountManager().NewAccount(password)
|
account, err := stack.AccountManager().NewAccount(password)
|
||||||
@ -278,7 +278,7 @@ func accountUpdate(ctx *cli.Context) error {
|
|||||||
if len(ctx.Args()) == 0 {
|
if len(ctx.Args()) == 0 {
|
||||||
utils.Fatalf("No accounts specified to update")
|
utils.Fatalf("No accounts specified to update")
|
||||||
}
|
}
|
||||||
stack := utils.MakeNode(ctx, clientIdentifier, verString)
|
stack := utils.MakeNode(ctx, clientIdentifier, gitCommit)
|
||||||
account, oldPassword := unlockAccount(ctx, stack.AccountManager(), ctx.Args().First(), 0, nil)
|
account, oldPassword := unlockAccount(ctx, stack.AccountManager(), ctx.Args().First(), 0, nil)
|
||||||
newPassword := getPassPhrase("Please give a new password. Do not forget this password.", true, 0, nil)
|
newPassword := getPassPhrase("Please give a new password. Do not forget this password.", true, 0, nil)
|
||||||
if err := stack.AccountManager().Update(account, oldPassword, newPassword); err != nil {
|
if err := stack.AccountManager().Update(account, oldPassword, newPassword); err != nil {
|
||||||
@ -297,7 +297,7 @@ func importWallet(ctx *cli.Context) error {
|
|||||||
utils.Fatalf("Could not read wallet file: %v", err)
|
utils.Fatalf("Could not read wallet file: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
stack := utils.MakeNode(ctx, clientIdentifier, verString)
|
stack := utils.MakeNode(ctx, clientIdentifier, gitCommit)
|
||||||
passphrase := getPassPhrase("", false, 0, utils.MakePasswordList(ctx))
|
passphrase := getPassPhrase("", false, 0, utils.MakePasswordList(ctx))
|
||||||
acct, err := stack.AccountManager().ImportPreSaleKey(keyJson, passphrase)
|
acct, err := stack.AccountManager().ImportPreSaleKey(keyJson, passphrase)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -316,7 +316,7 @@ func accountImport(ctx *cli.Context) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
utils.Fatalf("Failed to load the private key: %v", err)
|
utils.Fatalf("Failed to load the private key: %v", err)
|
||||||
}
|
}
|
||||||
stack := utils.MakeNode(ctx, clientIdentifier, verString)
|
stack := utils.MakeNode(ctx, clientIdentifier, gitCommit)
|
||||||
passphrase := getPassPhrase("Your new account is locked with a password. Please give a password. Do not forget this password.", true, 0, utils.MakePasswordList(ctx))
|
passphrase := getPassPhrase("Your new account is locked with a password. Please give a password. Do not forget this password.", true, 0, utils.MakePasswordList(ctx))
|
||||||
acct, err := stack.AccountManager().ImportECDSA(key, passphrase)
|
acct, err := stack.AccountManager().ImportECDSA(key, passphrase)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -28,6 +28,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/ethereum/go-ethereum/cmd/utils"
|
||||||
"github.com/ethereum/go-ethereum/rpc"
|
"github.com/ethereum/go-ethereum/rpc"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -45,7 +46,7 @@ func TestConsoleWelcome(t *testing.T) {
|
|||||||
// Gather all the infos the welcome message needs to contain
|
// Gather all the infos the welcome message needs to contain
|
||||||
geth.setTemplateFunc("goos", func() string { return runtime.GOOS })
|
geth.setTemplateFunc("goos", func() string { return runtime.GOOS })
|
||||||
geth.setTemplateFunc("gover", runtime.Version)
|
geth.setTemplateFunc("gover", runtime.Version)
|
||||||
geth.setTemplateFunc("gethver", func() string { return verString })
|
geth.setTemplateFunc("gethver", func() string { return utils.Version })
|
||||||
geth.setTemplateFunc("niltime", func() string { return time.Unix(0, 0).Format(time.RFC1123) })
|
geth.setTemplateFunc("niltime", func() string { return time.Unix(0, 0).Format(time.RFC1123) })
|
||||||
geth.setTemplateFunc("apis", func() []string {
|
geth.setTemplateFunc("apis", func() []string {
|
||||||
apis := append(strings.Split(rpc.DefaultIPCApis, ","), rpc.MetadataApi)
|
apis := append(strings.Split(rpc.DefaultIPCApis, ","), rpc.MetadataApi)
|
||||||
@ -131,7 +132,7 @@ func testAttachWelcome(t *testing.T, geth *testgeth, endpoint string) {
|
|||||||
// Gather all the infos the welcome message needs to contain
|
// Gather all the infos the welcome message needs to contain
|
||||||
attach.setTemplateFunc("goos", func() string { return runtime.GOOS })
|
attach.setTemplateFunc("goos", func() string { return runtime.GOOS })
|
||||||
attach.setTemplateFunc("gover", runtime.Version)
|
attach.setTemplateFunc("gover", runtime.Version)
|
||||||
attach.setTemplateFunc("gethver", func() string { return verString })
|
attach.setTemplateFunc("gethver", func() string { return utils.Version })
|
||||||
attach.setTemplateFunc("etherbase", func() string { return geth.Etherbase })
|
attach.setTemplateFunc("etherbase", func() string { return geth.Etherbase })
|
||||||
attach.setTemplateFunc("niltime", func() string { return time.Unix(0, 0).Format(time.RFC1123) })
|
attach.setTemplateFunc("niltime", func() string { return time.Unix(0, 0).Format(time.RFC1123) })
|
||||||
attach.setTemplateFunc("ipc", func() bool { return strings.HasPrefix(endpoint, "ipc") })
|
attach.setTemplateFunc("ipc", func() bool { return strings.HasPrefix(endpoint, "ipc") })
|
||||||
|
@ -100,7 +100,10 @@ func TestCustomGenesis(t *testing.T) {
|
|||||||
runGeth(t, "--datadir", datadir, "init", json).cmd.Wait()
|
runGeth(t, "--datadir", datadir, "init", json).cmd.Wait()
|
||||||
|
|
||||||
// Query the custom genesis block
|
// Query the custom genesis block
|
||||||
geth := runGeth(t, "--datadir", datadir, "--maxpeers", "0", "--nodiscover", "--nat", "none", "--ipcdisable", "--exec", tt.query, "console")
|
geth := runGeth(t,
|
||||||
|
"--datadir", datadir, "--maxpeers", "0", "--port", "0",
|
||||||
|
"--nodiscover", "--nat", "none", "--ipcdisable",
|
||||||
|
"--exec", tt.query, "console")
|
||||||
geth.expectRegexp(tt.result)
|
geth.expectRegexp(tt.result)
|
||||||
geth.expectExit()
|
geth.expectExit()
|
||||||
}
|
}
|
||||||
|
@ -42,49 +42,24 @@ import (
|
|||||||
"github.com/ethereum/go-ethereum/logger/glog"
|
"github.com/ethereum/go-ethereum/logger/glog"
|
||||||
"github.com/ethereum/go-ethereum/metrics"
|
"github.com/ethereum/go-ethereum/metrics"
|
||||||
"github.com/ethereum/go-ethereum/node"
|
"github.com/ethereum/go-ethereum/node"
|
||||||
"github.com/ethereum/go-ethereum/params"
|
|
||||||
"github.com/ethereum/go-ethereum/rlp"
|
|
||||||
"gopkg.in/urfave/cli.v1"
|
"gopkg.in/urfave/cli.v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
clientIdentifier = "Geth" // Client identifier to advertise over the network
|
clientIdentifier = "Geth" // Client identifier to advertise over the network
|
||||||
versionMajor = 1 // Major version component of the current release
|
|
||||||
versionMinor = 5 // Minor version component of the current release
|
|
||||||
versionPatch = 0 // Patch version component of the current release
|
|
||||||
versionMeta = "unstable" // Version metadata to append to the version string
|
|
||||||
|
|
||||||
versionOracle = "0xfa7b9770ca4cb04296cac84f37736d4041251cdf" // Ethereum address of the Geth release oracle
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
gitCommit string // Git SHA1 commit hash of the release (set via linker flags)
|
// Git SHA1 commit hash of the release (set via linker flags)
|
||||||
verString string // Combined textual representation of all the version components
|
gitCommit = ""
|
||||||
relConfig release.Config // Structured version information and release oracle config
|
// Ethereum address of the Geth release oracle.
|
||||||
app *cli.App
|
relOracle = common.HexToAddress("0xfa7b9770ca4cb04296cac84f37736d4041251cdf")
|
||||||
|
// The app that holds all commands and flags.
|
||||||
|
app = utils.NewApp(gitCommit, "the go-ethereum command line interface")
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
// Construct the textual version string from the individual components
|
|
||||||
verString = fmt.Sprintf("%d.%d.%d", versionMajor, versionMinor, versionPatch)
|
|
||||||
if versionMeta != "" {
|
|
||||||
verString += "-" + versionMeta
|
|
||||||
}
|
|
||||||
if gitCommit != "" {
|
|
||||||
verString += "-" + gitCommit[:8]
|
|
||||||
}
|
|
||||||
// Construct the version release oracle configuration
|
|
||||||
relConfig.Oracle = common.HexToAddress(versionOracle)
|
|
||||||
|
|
||||||
relConfig.Major = uint32(versionMajor)
|
|
||||||
relConfig.Minor = uint32(versionMinor)
|
|
||||||
relConfig.Patch = uint32(versionPatch)
|
|
||||||
|
|
||||||
commit, _ := hex.DecodeString(gitCommit)
|
|
||||||
copy(relConfig.Commit[:], commit)
|
|
||||||
|
|
||||||
// Initialize the CLI app and start Geth
|
// Initialize the CLI app and start Geth
|
||||||
app = utils.NewApp(verString, "the go-ethereum command line interface")
|
|
||||||
app.Action = geth
|
app.Action = geth
|
||||||
app.HideVersion = true // we have a command to print the version
|
app.HideVersion = true // we have a command to print the version
|
||||||
app.Commands = []cli.Command{
|
app.Commands = []cli.Command{
|
||||||
@ -290,35 +265,32 @@ func initGenesis(ctx *cli.Context) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func makeFullNode(ctx *cli.Context) *node.Node {
|
func makeFullNode(ctx *cli.Context) *node.Node {
|
||||||
node := utils.MakeNode(ctx, clientIdentifier, verString)
|
stack := utils.MakeNode(ctx, clientIdentifier, gitCommit)
|
||||||
utils.RegisterEthService(ctx, node, relConfig, makeDefaultExtra())
|
utils.RegisterEthService(ctx, stack, utils.MakeDefaultExtraData(clientIdentifier))
|
||||||
|
|
||||||
// Whisper must be explicitly enabled, but is auto-enabled in --dev mode.
|
// Whisper must be explicitly enabled, but is auto-enabled in --dev mode.
|
||||||
shhEnabled := ctx.GlobalBool(utils.WhisperEnabledFlag.Name)
|
shhEnabled := ctx.GlobalBool(utils.WhisperEnabledFlag.Name)
|
||||||
shhAutoEnabled := !ctx.GlobalIsSet(utils.WhisperEnabledFlag.Name) && ctx.GlobalIsSet(utils.DevModeFlag.Name)
|
shhAutoEnabled := !ctx.GlobalIsSet(utils.WhisperEnabledFlag.Name) && ctx.GlobalIsSet(utils.DevModeFlag.Name)
|
||||||
if shhEnabled || shhAutoEnabled {
|
if shhEnabled || shhAutoEnabled {
|
||||||
utils.RegisterShhService(node)
|
utils.RegisterShhService(stack)
|
||||||
}
|
|
||||||
return node
|
|
||||||
}
|
|
||||||
|
|
||||||
func makeDefaultExtra() []byte {
|
|
||||||
var clientInfo = struct {
|
|
||||||
Version uint
|
|
||||||
Name string
|
|
||||||
GoVersion string
|
|
||||||
Os string
|
|
||||||
}{uint(versionMajor<<16 | versionMinor<<8 | versionPatch), clientIdentifier, runtime.Version(), runtime.GOOS}
|
|
||||||
extra, err := rlp.EncodeToBytes(clientInfo)
|
|
||||||
if err != nil {
|
|
||||||
glog.V(logger.Warn).Infoln("error setting canonical miner information:", err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if uint64(len(extra)) > params.MaximumExtraDataSize.Uint64() {
|
// Add the release oracle service so it boots along with node.
|
||||||
glog.V(logger.Warn).Infoln("error setting canonical miner information: extra exceeds", params.MaximumExtraDataSize)
|
if err := stack.Register(func(ctx *node.ServiceContext) (node.Service, error) {
|
||||||
glog.V(logger.Debug).Infof("extra: %x\n", extra)
|
config := release.Config{
|
||||||
return nil
|
Oracle: relOracle,
|
||||||
|
Major: uint32(utils.VersionMajor),
|
||||||
|
Minor: uint32(utils.VersionMinor),
|
||||||
|
Patch: uint32(utils.VersionPatch),
|
||||||
|
}
|
||||||
|
commit, _ := hex.DecodeString(gitCommit)
|
||||||
|
copy(config.Commit[:], commit)
|
||||||
|
return release.NewReleaseService(ctx, config)
|
||||||
|
}); err != nil {
|
||||||
|
utils.Fatalf("Failed to register the Geth release oracle service: %v", err)
|
||||||
}
|
}
|
||||||
return extra
|
|
||||||
|
return stack
|
||||||
}
|
}
|
||||||
|
|
||||||
// startNode boots up the system node and all registered protocols, after which
|
// startNode boots up the system node and all registered protocols, after which
|
||||||
@ -326,7 +298,8 @@ func makeDefaultExtra() []byte {
|
|||||||
// miner.
|
// miner.
|
||||||
func startNode(ctx *cli.Context, stack *node.Node) {
|
func startNode(ctx *cli.Context, stack *node.Node) {
|
||||||
// Report geth version
|
// Report geth version
|
||||||
glog.V(logger.Info).Infof("instance: Geth/%s/%s/%s\n", verString, runtime.Version(), runtime.GOOS)
|
glog.V(logger.Info).Infof("instance: Geth/%s/%s/%s\n", utils.Version, runtime.Version(), runtime.GOOS)
|
||||||
|
|
||||||
// Start up the node itself
|
// Start up the node itself
|
||||||
utils.StartNode(stack)
|
utils.StartNode(stack)
|
||||||
|
|
||||||
@ -408,7 +381,10 @@ func gpubench(ctx *cli.Context) error {
|
|||||||
|
|
||||||
func version(c *cli.Context) error {
|
func version(c *cli.Context) error {
|
||||||
fmt.Println(clientIdentifier)
|
fmt.Println(clientIdentifier)
|
||||||
fmt.Println("Version:", verString)
|
fmt.Println("Version:", utils.Version)
|
||||||
|
if gitCommit != "" {
|
||||||
|
fmt.Println("Git Commit:", gitCommit)
|
||||||
|
}
|
||||||
fmt.Println("Protocol Versions:", eth.ProtocolVersions)
|
fmt.Println("Protocol Versions:", eth.ProtocolVersions)
|
||||||
fmt.Println("Network Id:", c.GlobalInt(utils.NetworkIdFlag.Name))
|
fmt.Println("Network Id:", c.GlobalInt(utils.NetworkIdFlag.Name))
|
||||||
fmt.Println("Go Version:", runtime.Version())
|
fmt.Println("Go Version:", runtime.Version())
|
||||||
|
@ -33,7 +33,6 @@ import (
|
|||||||
"github.com/ethereum/ethash"
|
"github.com/ethereum/ethash"
|
||||||
"github.com/ethereum/go-ethereum/accounts"
|
"github.com/ethereum/go-ethereum/accounts"
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/contracts/release"
|
|
||||||
"github.com/ethereum/go-ethereum/core"
|
"github.com/ethereum/go-ethereum/core"
|
||||||
"github.com/ethereum/go-ethereum/core/state"
|
"github.com/ethereum/go-ethereum/core/state"
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
@ -80,13 +79,16 @@ OPTIONS:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewApp creates an app with sane defaults.
|
// NewApp creates an app with sane defaults.
|
||||||
func NewApp(version, usage string) *cli.App {
|
func NewApp(gitCommit, usage string) *cli.App {
|
||||||
app := cli.NewApp()
|
app := cli.NewApp()
|
||||||
app.Name = filepath.Base(os.Args[0])
|
app.Name = filepath.Base(os.Args[0])
|
||||||
app.Author = ""
|
app.Author = ""
|
||||||
//app.Authors = nil
|
//app.Authors = nil
|
||||||
app.Email = ""
|
app.Email = ""
|
||||||
app.Version = version
|
app.Version = Version
|
||||||
|
if gitCommit != "" {
|
||||||
|
app.Version += "-" + gitCommit[:8]
|
||||||
|
}
|
||||||
app.Usage = usage
|
app.Usage = usage
|
||||||
return app
|
return app
|
||||||
}
|
}
|
||||||
@ -608,13 +610,18 @@ func MakePasswordList(ctx *cli.Context) []string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// MakeNode configures a node with no services from command line flags.
|
// MakeNode configures a node with no services from command line flags.
|
||||||
func MakeNode(ctx *cli.Context, name, version string) *node.Node {
|
func MakeNode(ctx *cli.Context, name, gitCommit string) *node.Node {
|
||||||
|
vsn := Version
|
||||||
|
if gitCommit != "" {
|
||||||
|
vsn += "-" + gitCommit[:8]
|
||||||
|
}
|
||||||
|
|
||||||
config := &node.Config{
|
config := &node.Config{
|
||||||
DataDir: MustMakeDataDir(ctx),
|
DataDir: MustMakeDataDir(ctx),
|
||||||
KeyStoreDir: ctx.GlobalString(KeyStoreDirFlag.Name),
|
KeyStoreDir: ctx.GlobalString(KeyStoreDirFlag.Name),
|
||||||
UseLightweightKDF: ctx.GlobalBool(LightKDFFlag.Name),
|
UseLightweightKDF: ctx.GlobalBool(LightKDFFlag.Name),
|
||||||
PrivateKey: MakeNodeKey(ctx),
|
PrivateKey: MakeNodeKey(ctx),
|
||||||
Name: MakeNodeName(name, version, ctx),
|
Name: MakeNodeName(name, vsn, ctx),
|
||||||
NoDiscovery: ctx.GlobalBool(NoDiscoverFlag.Name),
|
NoDiscovery: ctx.GlobalBool(NoDiscoverFlag.Name),
|
||||||
BootstrapNodes: MakeBootstrapNodes(ctx),
|
BootstrapNodes: MakeBootstrapNodes(ctx),
|
||||||
ListenAddr: MakeListenAddress(ctx),
|
ListenAddr: MakeListenAddress(ctx),
|
||||||
@ -648,7 +655,7 @@ func MakeNode(ctx *cli.Context, name, version string) *node.Node {
|
|||||||
|
|
||||||
// RegisterEthService configures eth.Ethereum from command line flags and adds it to the
|
// RegisterEthService configures eth.Ethereum from command line flags and adds it to the
|
||||||
// given node.
|
// given node.
|
||||||
func RegisterEthService(ctx *cli.Context, stack *node.Node, relconf release.Config, extra []byte) {
|
func RegisterEthService(ctx *cli.Context, stack *node.Node, extra []byte) {
|
||||||
// Avoid conflicting network flags
|
// Avoid conflicting network flags
|
||||||
networks, netFlags := 0, []cli.BoolFlag{DevModeFlag, TestNetFlag, OlympicFlag}
|
networks, netFlags := 0, []cli.BoolFlag{DevModeFlag, TestNetFlag, OlympicFlag}
|
||||||
for _, flag := range netFlags {
|
for _, flag := range netFlags {
|
||||||
@ -723,11 +730,6 @@ func RegisterEthService(ctx *cli.Context, stack *node.Node, relconf release.Conf
|
|||||||
}); err != nil {
|
}); err != nil {
|
||||||
Fatalf("Failed to register the Ethereum service: %v", err)
|
Fatalf("Failed to register the Ethereum service: %v", err)
|
||||||
}
|
}
|
||||||
if err := stack.Register(func(ctx *node.ServiceContext) (node.Service, error) {
|
|
||||||
return release.NewReleaseService(ctx, relconf)
|
|
||||||
}); err != nil {
|
|
||||||
Fatalf("Failed to register the Geth release oracle service: %v", err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// RegisterShhService configures whisper and adds it to the given node.
|
// RegisterShhService configures whisper and adds it to the given node.
|
||||||
|
64
cmd/utils/version.go
Normal file
64
cmd/utils/version.go
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
// Copyright 2014 The go-ethereum Authors
|
||||||
|
// This file is part of go-ethereum.
|
||||||
|
//
|
||||||
|
// go-ethereum is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// go-ethereum is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
// Package utils contains internal helper functions for go-ethereum commands.
|
||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"runtime"
|
||||||
|
|
||||||
|
"github.com/ethereum/go-ethereum/logger"
|
||||||
|
"github.com/ethereum/go-ethereum/logger/glog"
|
||||||
|
"github.com/ethereum/go-ethereum/params"
|
||||||
|
"github.com/ethereum/go-ethereum/rlp"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
VersionMajor = 1 // Major version component of the current release
|
||||||
|
VersionMinor = 5 // Minor version component of the current release
|
||||||
|
VersionPatch = 0 // Patch version component of the current release
|
||||||
|
VersionMeta = "unstable" // Version metadata to append to the version string
|
||||||
|
)
|
||||||
|
|
||||||
|
// Version holds the textual version string.
|
||||||
|
var Version = func() string {
|
||||||
|
v := fmt.Sprintf("%d.%d.%d", VersionMajor, VersionMinor, VersionPatch)
|
||||||
|
if VersionMeta != "" {
|
||||||
|
v += "-" + VersionMeta
|
||||||
|
}
|
||||||
|
return v
|
||||||
|
}()
|
||||||
|
|
||||||
|
// MakeDefaultExtraData returns the default Ethereum block extra data blob.
|
||||||
|
func MakeDefaultExtraData(clientIdentifier string) []byte {
|
||||||
|
var clientInfo = struct {
|
||||||
|
Version uint
|
||||||
|
Name string
|
||||||
|
GoVersion string
|
||||||
|
Os string
|
||||||
|
}{uint(VersionMajor<<16 | VersionMinor<<8 | VersionPatch), clientIdentifier, runtime.Version(), runtime.GOOS}
|
||||||
|
extra, err := rlp.EncodeToBytes(clientInfo)
|
||||||
|
if err != nil {
|
||||||
|
glog.V(logger.Warn).Infoln("error setting canonical miner information:", err)
|
||||||
|
}
|
||||||
|
if uint64(len(extra)) > params.MaximumExtraDataSize.Uint64() {
|
||||||
|
glog.V(logger.Warn).Infoln("error setting canonical miner information: extra exceeds", params.MaximumExtraDataSize)
|
||||||
|
glog.V(logger.Debug).Infof("extra: %x\n", extra)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return extra
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user