client: add bzz client, update smoke tests (#1582)
This commit is contained in:
committed by
GitHub
parent
48857ae88e
commit
090197227f
81
client/bzz.go
Normal file
81
client/bzz.go
Normal file
@@ -0,0 +1,81 @@
|
||||
package client
|
||||
|
||||
import (
|
||||
"github.com/ethereum/go-ethereum/rpc"
|
||||
"github.com/ethersphere/swarm"
|
||||
"github.com/ethersphere/swarm/log"
|
||||
"github.com/ethersphere/swarm/storage"
|
||||
)
|
||||
|
||||
type Bzz struct {
|
||||
client *rpc.Client
|
||||
}
|
||||
|
||||
// NewBzz is a constructor for a Bzz API
|
||||
func NewBzz(client *rpc.Client) *Bzz {
|
||||
return &Bzz{
|
||||
client: client,
|
||||
}
|
||||
}
|
||||
|
||||
// GetChunksBitVector returns a bit vector of presence for a given slice of chunks
|
||||
func (b *Bzz) GetChunksBitVector(addrs []storage.Address) (string, error) {
|
||||
var hostChunks string
|
||||
const trackChunksPageSize = 7500
|
||||
|
||||
for len(addrs) > 0 {
|
||||
var pageChunks string
|
||||
// get current page size, so that we avoid a slice out of bounds on the last page
|
||||
pagesize := trackChunksPageSize
|
||||
if len(addrs) < trackChunksPageSize {
|
||||
pagesize = len(addrs)
|
||||
}
|
||||
|
||||
err := b.client.Call(&pageChunks, "bzz_has", addrs[:pagesize])
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
hostChunks += pageChunks
|
||||
addrs = addrs[pagesize:]
|
||||
}
|
||||
|
||||
return hostChunks, nil
|
||||
}
|
||||
|
||||
// GetBzzAddr returns the bzzAddr of the node
|
||||
func (b *Bzz) GetBzzAddr() (string, error) {
|
||||
var info swarm.Info
|
||||
|
||||
err := b.client.Call(&info, "bzz_info")
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return info.BzzKey[2:], nil
|
||||
}
|
||||
|
||||
// IsPullSyncing is checking if the node is still receiving chunk deliveries due to pull syncing
|
||||
func (b *Bzz) IsPullSyncing() (bool, error) {
|
||||
var isSyncing bool
|
||||
|
||||
err := b.client.Call(&isSyncing, "bzz_isPullSyncing")
|
||||
if err != nil {
|
||||
log.Error("error calling host for isPullSyncing", "err", err)
|
||||
return false, err
|
||||
}
|
||||
|
||||
return isSyncing, nil
|
||||
}
|
||||
|
||||
// IsPushSynced checks if the given `tag` is done syncing, i.e. we've received receipts for all chunks
|
||||
func (b *Bzz) IsPushSynced(tagname string) (bool, error) {
|
||||
var isSynced bool
|
||||
|
||||
err := b.client.Call(&isSynced, "bzz_isPushSynced", tagname)
|
||||
if err != nil {
|
||||
log.Error("error calling host for isPushSynced", "err", err)
|
||||
return false, err
|
||||
}
|
||||
|
||||
return isSynced, nil
|
||||
}
|
Reference in New Issue
Block a user