aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/bzzd
diff options
context:
space:
mode:
authorzelig <viktor.tron@gmail.com>2016-12-11 01:45:52 +0800
committerzelig <viktor.tron@gmail.com>2016-12-13 19:54:05 +0800
commit5f5d0aa4ff3988d81406f2e79e45a32610894c7b (patch)
treed58bda374ad8f5fa118c75a10808c897487ecb19 /cmd/bzzd
parenta98e8c0889d7c4c1bded452c577bd4b9c7fa0f6b (diff)
downloadgo-tangerine-5f5d0aa4ff3988d81406f2e79e45a32610894c7b.tar
go-tangerine-5f5d0aa4ff3988d81406f2e79e45a32610894c7b.tar.gz
go-tangerine-5f5d0aa4ff3988d81406f2e79e45a32610894c7b.tar.bz2
go-tangerine-5f5d0aa4ff3988d81406f2e79e45a32610894c7b.tar.lz
go-tangerine-5f5d0aa4ff3988d81406f2e79e45a32610894c7b.tar.xz
go-tangerine-5f5d0aa4ff3988d81406f2e79e45a32610894c7b.tar.zst
go-tangerine-5f5d0aa4ff3988d81406f2e79e45a32610894c7b.zip
cmd/swarm: subsume cmd/bzz* as subcommands under swarm
cmd/swarm: subsume cmd/bzz* under cmd/swarm as subcommands
Diffstat (limited to 'cmd/bzzd')
-rw-r--r--cmd/bzzd/main.go262
1 files changed, 0 insertions, 262 deletions
diff --git a/cmd/bzzd/main.go b/cmd/bzzd/main.go
deleted file mode 100644
index 4bb2ca04a..000000000
--- a/cmd/bzzd/main.go
+++ /dev/null
@@ -1,262 +0,0 @@
-// Copyright 2016 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 main
-
-import (
- "crypto/ecdsa"
- "fmt"
- "io/ioutil"
- "os"
- "runtime"
- "strconv"
- "strings"
-
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/console"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/ethclient"
- "github.com/ethereum/go-ethereum/internal/debug"
- "github.com/ethereum/go-ethereum/logger"
- "github.com/ethereum/go-ethereum/logger/glog"
- "github.com/ethereum/go-ethereum/node"
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/p2p/discover"
- "github.com/ethereum/go-ethereum/swarm"
- bzzapi "github.com/ethereum/go-ethereum/swarm/api"
- "github.com/ethereum/go-ethereum/swarm/network"
- "gopkg.in/urfave/cli.v1"
-)
-
-const clientIdentifier = "bzzd"
-
-var (
- gitCommit string // Git SHA1 commit hash of the release (set via linker flags)
- app = utils.NewApp(gitCommit, "Ethereum Swarm server daemon")
-)
-
-var (
- ChequebookAddrFlag = cli.StringFlag{
- Name: "chequebook",
- Usage: "chequebook contract address",
- }
- SwarmAccountFlag = cli.StringFlag{
- Name: "bzzaccount",
- Usage: "Swarm account key file",
- }
- SwarmPortFlag = cli.StringFlag{
- Name: "bzzport",
- Usage: "Swarm local http api port",
- }
- SwarmNetworkIdFlag = cli.IntFlag{
- Name: "bzznetworkid",
- Usage: "Network identifier (integer, default 322=swarm testnet)",
- Value: network.NetworkId,
- }
- SwarmConfigPathFlag = cli.StringFlag{
- Name: "bzzconfig",
- Usage: "Swarm config file path (datadir/bzz)",
- }
- SwarmSwapEnabled = cli.BoolFlag{
- Name: "swap",
- Usage: "Swarm SWAP enabled (default false)",
- }
- SwarmSyncEnabled = cli.BoolTFlag{
- Name: "sync",
- Usage: "Swarm Syncing enabled (default true)",
- }
- EthAPI = cli.StringFlag{
- Name: "ethapi",
- Usage: "URL of the Ethereum API provider",
- Value: node.DefaultIPCEndpoint("geth"),
- }
-)
-
-var defaultBootnodes = []string{}
-
-func init() {
- // Override flag defaults so bzzd can run alongside geth.
- utils.ListenPortFlag.Value = 30399
- utils.IPCPathFlag.Value = utils.DirectoryString{Value: "bzzd.ipc"}
- utils.IPCApiFlag.Value = "admin, bzz, chequebook, debug, rpc, web3"
-
- // Set up the cli app.
- app.Commands = nil
- app.Action = bzzd
- app.Flags = []cli.Flag{
- utils.IdentityFlag,
- utils.DataDirFlag,
- utils.BootnodesFlag,
- utils.KeyStoreDirFlag,
- utils.ListenPortFlag,
- utils.NoDiscoverFlag,
- utils.DiscoveryV5Flag,
- utils.NetrestrictFlag,
- utils.NodeKeyFileFlag,
- utils.NodeKeyHexFlag,
- utils.MaxPeersFlag,
- utils.NATFlag,
- utils.IPCDisabledFlag,
- utils.IPCApiFlag,
- utils.IPCPathFlag,
- // bzzd-specific flags
- EthAPI,
- SwarmConfigPathFlag,
- SwarmSwapEnabled,
- SwarmSyncEnabled,
- SwarmPortFlag,
- SwarmAccountFlag,
- SwarmNetworkIdFlag,
- ChequebookAddrFlag,
- }
- app.Flags = append(app.Flags, debug.Flags...)
- app.Before = func(ctx *cli.Context) error {
- runtime.GOMAXPROCS(runtime.NumCPU())
- return debug.Setup(ctx)
- }
- app.After = func(ctx *cli.Context) error {
- debug.Exit()
- return nil
- }
-}
-
-func main() {
- if err := app.Run(os.Args); err != nil {
- fmt.Fprintln(os.Stderr, err)
- os.Exit(1)
- }
-}
-
-func bzzd(ctx *cli.Context) error {
- stack := utils.MakeNode(ctx, clientIdentifier, gitCommit)
- registerBzzService(ctx, stack)
- utils.StartNode(stack)
-
- // Add bootnodes as initial peers.
- if ctx.GlobalIsSet(utils.BootnodesFlag.Name) {
- bootnodes := strings.Split(ctx.GlobalString(utils.BootnodesFlag.Name), ",")
- injectBootnodes(stack.Server(), bootnodes)
- } else {
- injectBootnodes(stack.Server(), defaultBootnodes)
- }
-
- stack.Wait()
- return nil
-}
-
-func registerBzzService(ctx *cli.Context, stack *node.Node) {
- prvkey := getAccount(ctx, stack)
-
- chbookaddr := common.HexToAddress(ctx.GlobalString(ChequebookAddrFlag.Name))
- bzzdir := ctx.GlobalString(SwarmConfigPathFlag.Name)
- if bzzdir == "" {
- bzzdir = stack.InstanceDir()
- }
- bzzconfig, err := bzzapi.NewConfig(bzzdir, chbookaddr, prvkey, ctx.GlobalUint64(SwarmNetworkIdFlag.Name))
- if err != nil {
- utils.Fatalf("unable to configure swarm: %v", err)
- }
- bzzport := ctx.GlobalString(SwarmPortFlag.Name)
- if len(bzzport) > 0 {
- bzzconfig.Port = bzzport
- }
- swapEnabled := ctx.GlobalBool(SwarmSwapEnabled.Name)
- syncEnabled := ctx.GlobalBoolT(SwarmSyncEnabled.Name)
-
- ethapi := ctx.GlobalString(EthAPI.Name)
-
- boot := func(ctx *node.ServiceContext) (node.Service, error) {
- var client *ethclient.Client
- if ethapi == "" {
- err = fmt.Errorf("use ethapi flag to connect to a an eth client and talk to the blockchain")
- } else {
- client, err = ethclient.Dial(ethapi)
- }
- if err != nil {
- utils.Fatalf("Can't connect: %v", err)
- }
- return swarm.NewSwarm(ctx, client, bzzconfig, swapEnabled, syncEnabled)
- }
- if err := stack.Register(boot); err != nil {
- utils.Fatalf("Failed to register the Swarm service: %v", err)
- }
-}
-
-func getAccount(ctx *cli.Context, stack *node.Node) *ecdsa.PrivateKey {
- keyid := ctx.GlobalString(SwarmAccountFlag.Name)
- if keyid == "" {
- utils.Fatalf("Option %q is required", SwarmAccountFlag.Name)
- }
- // Try to load the arg as a hex key file.
- if key, err := crypto.LoadECDSA(keyid); err == nil {
- glog.V(logger.Info).Infof("swarm account key loaded: %#x", crypto.PubkeyToAddress(key.PublicKey))
- return key
- }
- // Otherwise try getting it from the keystore.
- return decryptStoreAccount(stack.AccountManager(), keyid)
-}
-
-func decryptStoreAccount(accman *accounts.Manager, account string) *ecdsa.PrivateKey {
- var a accounts.Account
- var err error
- if common.IsHexAddress(account) {
- a, err = accman.Find(accounts.Account{Address: common.HexToAddress(account)})
- } else if ix, ixerr := strconv.Atoi(account); ixerr == nil {
- a, err = accman.AccountByIndex(ix)
- } else {
- utils.Fatalf("Can't find swarm account key %s", account)
- }
- if err != nil {
- utils.Fatalf("Can't find swarm account key: %v", err)
- }
- keyjson, err := ioutil.ReadFile(a.File)
- if err != nil {
- utils.Fatalf("Can't load swarm account key: %v", err)
- }
- for i := 1; i <= 3; i++ {
- passphrase := promptPassphrase(fmt.Sprintf("Unlocking swarm account %s [%d/3]", a.Address.Hex(), i))
- key, err := accounts.DecryptKey(keyjson, passphrase)
- if err == nil {
- return key.PrivateKey
- }
- }
- utils.Fatalf("Can't decrypt swarm account key")
- return nil
-}
-
-func promptPassphrase(prompt string) string {
- if prompt != "" {
- fmt.Println(prompt)
- }
- password, err := console.Stdin.PromptPassword("Passphrase: ")
- if err != nil {
- utils.Fatalf("Failed to read passphrase: %v", err)
- }
- return password
-}
-
-func injectBootnodes(srv *p2p.Server, nodes []string) {
- for _, url := range nodes {
- n, err := discover.ParseNode(url)
- if err != nil {
- glog.Errorf("invalid bootnode %q", err)
- continue
- }
- srv.AddPeer(n)
- }
-}