Skip to content

Commit e949a2e

Browse files
zeligfjl
authored andcommitted
cmd/bzzd: swarm daemon fixes (#3359)
* cmd/bzzd: add missing p2p/discovery flags * cmd/bzzd: fix two bugs crashing bzzd if bootnodes flag given * cmd/bzzd: make no swap default, renamed flag bzznoswap->bzzswap * internal/web3ext: correct methods for bzz IPC module * cmd/bzzd: ethapi param not mandatory. Warning if no blockchain * cmd/bzzd: correct default IPC modules in help string * cmd/utils: fix help description for networkId - add Ropsten * cmd/bzz, swarm/api, swarm/network: add swarm networkId flag * cmd/bzzd: change nosync flag to sync and BootTFlag
1 parent 8d0108f commit e949a2e

File tree

7 files changed

+56
-46
lines changed

7 files changed

+56
-46
lines changed

cmd/bzzd/main.go

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"os"
2424
"runtime"
2525
"strconv"
26+
"strings"
2627

2728
"github.com/ethereum/go-ethereum/accounts"
2829
"github.com/ethereum/go-ethereum/cmd/utils"
@@ -38,6 +39,7 @@ import (
3839
"github.com/ethereum/go-ethereum/p2p/discover"
3940
"github.com/ethereum/go-ethereum/swarm"
4041
bzzapi "github.com/ethereum/go-ethereum/swarm/api"
42+
"github.com/ethereum/go-ethereum/swarm/network"
4143
"gopkg.in/urfave/cli.v1"
4244
)
4345

@@ -61,17 +63,22 @@ var (
6163
Name: "bzzport",
6264
Usage: "Swarm local http api port",
6365
}
66+
SwarmNetworkIdFlag = cli.IntFlag{
67+
Name: "bzznetworkid",
68+
Usage: "Network identifier (integer, default 322=swarm testnet)",
69+
Value: network.NetworkId,
70+
}
6471
SwarmConfigPathFlag = cli.StringFlag{
6572
Name: "bzzconfig",
6673
Usage: "Swarm config file path (datadir/bzz)",
6774
}
68-
SwarmSwapDisabled = cli.BoolFlag{
69-
Name: "bzznoswap",
70-
Usage: "Swarm SWAP disabled (default false)",
75+
SwarmSwapEnabled = cli.BoolFlag{
76+
Name: "swap",
77+
Usage: "Swarm SWAP enabled (default false)",
7178
}
72-
SwarmSyncDisabled = cli.BoolFlag{
73-
Name: "bzznosync",
74-
Usage: "Swarm Syncing disabled (default false)",
79+
SwarmSyncEnabled = cli.BoolTFlag{
80+
Name: "sync",
81+
Usage: "Swarm Syncing enabled (default true)",
7582
}
7683
EthAPI = cli.StringFlag{
7784
Name: "ethapi",
@@ -86,6 +93,7 @@ func init() {
8693
// Override flag defaults so bzzd can run alongside geth.
8794
utils.ListenPortFlag.Value = 30399
8895
utils.IPCPathFlag.Value = utils.DirectoryString{Value: "bzzd.ipc"}
96+
utils.IPCApiFlag.Value = "admin, bzz, chequebook, debug, rpc, web3"
8997

9098
// Set up the cli app.
9199
app.Commands = nil
@@ -96,21 +104,24 @@ func init() {
96104
utils.BootnodesFlag,
97105
utils.KeyStoreDirFlag,
98106
utils.ListenPortFlag,
107+
utils.NoDiscoverFlag,
108+
utils.DiscoveryV5Flag,
99109
utils.NetrestrictFlag,
100-
utils.MaxPeersFlag,
101-
utils.NATFlag,
102110
utils.NodeKeyFileFlag,
103111
utils.NodeKeyHexFlag,
112+
utils.MaxPeersFlag,
113+
utils.NATFlag,
104114
utils.IPCDisabledFlag,
105115
utils.IPCApiFlag,
106116
utils.IPCPathFlag,
107117
// bzzd-specific flags
108118
EthAPI,
109119
SwarmConfigPathFlag,
110-
SwarmSwapDisabled,
111-
SwarmSyncDisabled,
120+
SwarmSwapEnabled,
121+
SwarmSyncEnabled,
112122
SwarmPortFlag,
113123
SwarmAccountFlag,
124+
SwarmNetworkIdFlag,
114125
ChequebookAddrFlag,
115126
}
116127
app.Flags = append(app.Flags, debug.Flags...)
@@ -138,7 +149,8 @@ func bzzd(ctx *cli.Context) error {
138149

139150
// Add bootnodes as initial peers.
140151
if ctx.GlobalIsSet(utils.BootnodesFlag.Name) {
141-
injectBootnodes(stack.Server(), ctx.GlobalStringSlice(utils.BootnodesFlag.Name))
152+
bootnodes := strings.Split(ctx.GlobalString(utils.BootnodesFlag.Name), ",")
153+
injectBootnodes(stack.Server(), bootnodes)
142154
} else {
143155
injectBootnodes(stack.Server(), defaultBootnodes)
144156
}
@@ -155,24 +167,26 @@ func registerBzzService(ctx *cli.Context, stack *node.Node) {
155167
if bzzdir == "" {
156168
bzzdir = stack.InstanceDir()
157169
}
158-
bzzconfig, err := bzzapi.NewConfig(bzzdir, chbookaddr, prvkey)
170+
bzzconfig, err := bzzapi.NewConfig(bzzdir, chbookaddr, prvkey, ctx.GlobalUint64(SwarmNetworkIdFlag.Name))
159171
if err != nil {
160172
utils.Fatalf("unable to configure swarm: %v", err)
161173
}
162174
bzzport := ctx.GlobalString(SwarmPortFlag.Name)
163175
if len(bzzport) > 0 {
164176
bzzconfig.Port = bzzport
165177
}
166-
swapEnabled := !ctx.GlobalBool(SwarmSwapDisabled.Name)
167-
syncEnabled := !ctx.GlobalBool(SwarmSyncDisabled.Name)
178+
swapEnabled := ctx.GlobalBool(SwarmSwapEnabled.Name)
179+
syncEnabled := ctx.GlobalBoolT(SwarmSyncEnabled.Name)
168180

169181
ethapi := ctx.GlobalString(EthAPI.Name)
170-
if ethapi == "" {
171-
utils.Fatalf("Option %q must not be empty", EthAPI.Name)
172-
}
173182

174183
boot := func(ctx *node.ServiceContext) (node.Service, error) {
175-
client, err := ethclient.Dial(ethapi)
184+
var client *ethclient.Client
185+
if ethapi == "" {
186+
err = fmt.Errorf("use ethapi flag to connect to a an eth client and talk to the blockchain")
187+
} else {
188+
client, err = ethclient.Dial(ethapi)
189+
}
176190
if err != nil {
177191
utils.Fatalf("Can't connect: %v", err)
178192
}
@@ -241,6 +255,7 @@ func injectBootnodes(srv *p2p.Server, nodes []string) {
241255
n, err := discover.ParseNode(url)
242256
if err != nil {
243257
glog.Errorf("invalid bootnode %q", err)
258+
continue
244259
}
245260
srv.AddPeer(n)
246261
}

cmd/utils/flags.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ var (
116116
}
117117
NetworkIdFlag = cli.IntFlag{
118118
Name: "networkid",
119-
Usage: "Network identifier (integer, 0=Olympic, 1=Frontier, 2=Morden)",
119+
Usage: "Network identifier (integer, 0=Olympic (disused), 1=Frontier, 2=Morden (disused), 3=Ropsten)",
120120
Value: eth.NetworkId,
121121
}
122122
OlympicFlag = cli.BoolFlag{

internal/web3ext/web3ext.go

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,6 @@ web3._extend({
3737
property: 'bzz',
3838
methods:
3939
[
40-
new web3._extend.Method({
41-
name: 'blockNetworkRead',
42-
call: 'bzz_blockNetworkRead',
43-
params: 1,
44-
inputFormatter: [null]
45-
}),
4640
new web3._extend.Method({
4741
name: 'syncEnabled',
4842
call: 'bzz_syncEnabled',
@@ -68,17 +62,11 @@ web3._extend({
6862
inputFormatter: [null, null]
6963
}),
7064
new web3._extend.Method({
71-
name: 'retrieve',
72-
call: 'bzz_retrieve',
65+
name: 'resolve',
66+
call: 'bzz_resolve',
7367
params: 1,
7468
inputFormatter: [null]
7569
}),
76-
new web3._extend.Method({
77-
name: 'store',
78-
call: 'bzz_store',
79-
params: 2,
80-
inputFormatter: [null]
81-
}),
8270
new web3._extend.Method({
8371
name: 'get',
8472
call: 'bzz_get',

swarm/api/config.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,12 @@ type Config struct {
5454
PublicKey string
5555
BzzKey string
5656
EnsRoot common.Address
57+
NetworkId uint64
5758
}
5859

5960
// config is agnostic to where private key is coming from
6061
// so managing accounts is outside swarm and left to wrappers
61-
func NewConfig(path string, contract common.Address, prvKey *ecdsa.PrivateKey) (self *Config, err error) {
62+
func NewConfig(path string, contract common.Address, prvKey *ecdsa.PrivateKey, networkId uint64) (self *Config, err error) {
6263
address := crypto.PubkeyToAddress(prvKey.PublicKey) // default beneficiary address
6364
dirpath := filepath.Join(path, "bzz-"+common.Bytes2Hex(address.Bytes()))
6465
err = os.MkdirAll(dirpath, os.ModePerm)
@@ -82,6 +83,7 @@ func NewConfig(path string, contract common.Address, prvKey *ecdsa.PrivateKey) (
8283
PublicKey: pubkeyhex,
8384
BzzKey: keyhex,
8485
EnsRoot: toyNetEnsRoot,
86+
NetworkId: networkId,
8587
}
8688
data, err = ioutil.ReadFile(confpath)
8789
if err != nil {

swarm/api/config_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ var (
8383
"Port": "8500",
8484
"PublicKey": "0x045f5cfd26692e48d0017d380349bcf50982488bc11b5145f3ddf88b24924299048450542d43527fbe29a5cb32f38d62755393ac002e6bfdd71b8d7ba725ecd7a3",
8585
"BzzKey": "0xe861964402c0b78e2d44098329b8545726f215afa737d803714a4338552fcb81",
86-
"EnsRoot": "0xd344889e0be3e9ef6c26b0f60ef66a32e83c1b69"
86+
"EnsRoot": "0xd344889e0be3e9ef6c26b0f60ef66a32e83c1b69",
87+
"NetworkId": 323
8788
}`
8889
)
8990

@@ -95,7 +96,7 @@ func TestConfigWriteRead(t *testing.T) {
9596
defer os.RemoveAll(tmp)
9697

9798
prvkey := crypto.ToECDSA(common.Hex2Bytes(hexprvkey))
98-
orig, err := NewConfig(tmp, common.Address{}, prvkey)
99+
orig, err := NewConfig(tmp, common.Address{}, prvkey, 323)
99100
if err != nil {
100101
t.Fatalf("expected no error, got %v", err)
101102
}
@@ -109,7 +110,7 @@ func TestConfigWriteRead(t *testing.T) {
109110
t.Fatalf("default config mismatch:\nexpected: %v\ngot: %v", exp, string(data))
110111
}
111112

112-
conf, err := NewConfig(tmp, common.Address{}, prvkey)
113+
conf, err := NewConfig(tmp, common.Address{}, prvkey, 323)
113114
if err != nil {
114115
t.Fatalf("expected no error, got %v", err)
115116
}

swarm/network/protocol.go

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ type bzz struct {
9595
errors *errs.Errors // errors table
9696
backend chequebook.Backend
9797
lastActive time.Time
98+
NetworkId uint64
9899

99100
swap *swap.Swap // swap instance for the peer connection
100101
swapParams *bzzswap.SwapParams // swap settings both local and remote
@@ -126,21 +127,23 @@ on each peer connection
126127
The Run function of the Bzz protocol class creates a bzz instance
127128
which will represent the peer for the swarm hive and all peer-aware components
128129
*/
129-
func Bzz(cloud StorageHandler, backend chequebook.Backend, hive *Hive, dbaccess *DbAccess, sp *bzzswap.SwapParams, sy *SyncParams) (p2p.Protocol, error) {
130+
func Bzz(cloud StorageHandler, backend chequebook.Backend, hive *Hive, dbaccess *DbAccess, sp *bzzswap.SwapParams, sy *SyncParams, networkId uint64) (p2p.Protocol, error) {
130131

131132
// a single global request db is created for all peer connections
132133
// this is to persist delivery backlog and aid syncronisation
133134
requestDb, err := storage.NewLDBDatabase(sy.RequestDbPath)
134135
if err != nil {
135136
return p2p.Protocol{}, fmt.Errorf("error setting up request db: %v", err)
136137
}
137-
138+
if networkId == 0 {
139+
networkId = NetworkId
140+
}
138141
return p2p.Protocol{
139142
Name: "bzz",
140143
Version: Version,
141144
Length: ProtocolLength,
142145
Run: func(p *p2p.Peer, rw p2p.MsgReadWriter) error {
143-
return run(requestDb, cloud, backend, hive, dbaccess, sp, sy, p, rw)
146+
return run(requestDb, cloud, backend, hive, dbaccess, sp, sy, networkId, p, rw)
144147
},
145148
}, nil
146149
}
@@ -157,7 +160,7 @@ the main protocol loop that
157160
* whenever the loop terminates, the peer will disconnect with Subprotocol error
158161
* whenever handlers return an error the loop terminates
159162
*/
160-
func run(requestDb *storage.LDBDatabase, depo StorageHandler, backend chequebook.Backend, hive *Hive, dbaccess *DbAccess, sp *bzzswap.SwapParams, sy *SyncParams, p *p2p.Peer, rw p2p.MsgReadWriter) (err error) {
163+
func run(requestDb *storage.LDBDatabase, depo StorageHandler, backend chequebook.Backend, hive *Hive, dbaccess *DbAccess, sp *bzzswap.SwapParams, sy *SyncParams, networkId uint64, p *p2p.Peer, rw p2p.MsgReadWriter) (err error) {
161164

162165
self := &bzz{
163166
storage: depo,
@@ -175,6 +178,7 @@ func run(requestDb *storage.LDBDatabase, depo StorageHandler, backend chequebook
175178
syncParams: sy,
176179
swapEnabled: hive.swapEnabled,
177180
syncEnabled: true,
181+
NetworkId: networkId,
178182
}
179183

180184
// handle handshake
@@ -340,7 +344,7 @@ func (self *bzz) handleStatus() (err error) {
340344
Version: uint64(Version),
341345
ID: "honey",
342346
Addr: self.selfAddr(),
343-
NetworkId: uint64(NetworkId),
347+
NetworkId: uint64(self.NetworkId),
344348
Swap: &bzzswap.SwapProfile{
345349
Profile: self.swapParams.Profile,
346350
PayProfile: self.swapParams.PayProfile,
@@ -372,8 +376,8 @@ func (self *bzz) handleStatus() (err error) {
372376
return self.protoError(ErrDecode, " %v: %v", msg, err)
373377
}
374378

375-
if status.NetworkId != NetworkId {
376-
return self.protoError(ErrNetworkIdMismatch, "%d (!= %d)", status.NetworkId, NetworkId)
379+
if status.NetworkId != self.NetworkId {
380+
return self.protoError(ErrNetworkIdMismatch, "%d (!= %d)", status.NetworkId, self.NetworkId)
377381
}
378382

379383
if Version != status.Version {

swarm/swarm.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ func (self *Swarm) Stop() error {
209209

210210
// implements the node.Service interface
211211
func (self *Swarm) Protocols() []p2p.Protocol {
212-
proto, err := network.Bzz(self.depo, self.backend, self.hive, self.dbAccess, self.config.Swap, self.config.SyncParams)
212+
proto, err := network.Bzz(self.depo, self.backend, self.hive, self.dbAccess, self.config.Swap, self.config.SyncParams, self.config.NetworkId)
213213
if err != nil {
214214
return nil
215215
}
@@ -279,7 +279,7 @@ func NewLocalSwarm(datadir, port string) (self *Swarm, err error) {
279279
return
280280
}
281281

282-
config, err := api.NewConfig(datadir, common.Address{}, prvKey)
282+
config, err := api.NewConfig(datadir, common.Address{}, prvKey, network.NetworkId)
283283
if err != nil {
284284
return
285285
}

0 commit comments

Comments
 (0)