note about encryption and why it must be test datastore now using same settings as seed badger options extracted from storage for test and other uses one place it was missing all using badger/v3 now peer database entry count implemented fixed stray incorrect refactorings added expiry to interface, now propagates correctly eliminated type switch with extending of interface Access to badger View and Update now in Engine Datastore now available via Listener
105 lines
2.3 KiB
Go
105 lines
2.3 KiB
Go
package p2p
|
|
|
|
import (
|
|
"context"
|
|
"crypto/rand"
|
|
"github.com/indra-labs/indra/pkg/cfg"
|
|
"github.com/indra-labs/indra/pkg/crypto/sha256"
|
|
"github.com/indra-labs/indra/pkg/engine/transport"
|
|
"github.com/indra-labs/indra/pkg/interrupt"
|
|
"github.com/indra-labs/indra/pkg/p2p/metrics"
|
|
"github.com/libp2p/go-libp2p/core/crypto"
|
|
"github.com/libp2p/go-libp2p/core/host"
|
|
"github.com/spf13/viper"
|
|
"time"
|
|
|
|
"github.com/multiformats/go-multiaddr"
|
|
|
|
"github.com/indra-labs/indra"
|
|
crypto2 "github.com/indra-labs/indra/pkg/crypto"
|
|
)
|
|
|
|
var (
|
|
userAgent = "/indra:" + indra.SemVer + "/"
|
|
privKey crypto.PrivKey
|
|
p2pHost host.Host
|
|
seedAddresses []multiaddr.Multiaddr
|
|
listenAddresses []multiaddr.Multiaddr
|
|
netParams *cfg.Params
|
|
)
|
|
|
|
func init() {
|
|
seedAddresses = []multiaddr.Multiaddr{}
|
|
listenAddresses = []multiaddr.Multiaddr{}
|
|
}
|
|
|
|
// Run is the main entrypoint for the seed p2p service.
|
|
func Run() {
|
|
|
|
// storage.Update(func(txn *badger.Txn) error {
|
|
// txn.Delete([]byte(storeKeyKey))
|
|
// return nil
|
|
// })
|
|
|
|
configure()
|
|
|
|
var e error
|
|
|
|
netParams = cfg.SelectNetworkParams(viper.GetString("network"))
|
|
dataPath := viper.GetString("data-dir")
|
|
var pkr []byte
|
|
if pkr, e = privKey.Raw(); check(e) {
|
|
return
|
|
}
|
|
var ctx context.Context
|
|
var cancel context.CancelFunc
|
|
ctx, cancel = context.WithCancel(context.Background())
|
|
interrupt.AddHandler(cancel)
|
|
pkk := crypto2.PrvKeyFromBytes(pkr)
|
|
keys := crypto2.MakeKeys(pkk)
|
|
var l []*transport.Listener
|
|
var la []string
|
|
for i := range listenAddresses {
|
|
la = append(la, listenAddresses[i].String())
|
|
}
|
|
var list *transport.Listener
|
|
secret := sha256.New()
|
|
rand.Read(secret[:])
|
|
store, closer := transport.BadgerStore(dataPath, secret[:])
|
|
if store == nil {
|
|
panic("could not open database")
|
|
}
|
|
list, e = transport.NewListener(netParams.GetSeedsMultiAddrStrings(),
|
|
la, keys, store, closer, ctx, transport.DefaultMTU, cancel)
|
|
l = append(l, list)
|
|
p2pHost = list.Host
|
|
log.I.Ln("starting p2p server")
|
|
|
|
log.I.Ln("host id:")
|
|
log.I.Ln("-", p2pHost.ID())
|
|
|
|
log.I.Ln("p2p listeners:")
|
|
log.I.Ln("-", p2pHost.Addrs())
|
|
|
|
metrics.SetInterval(30 * time.Second)
|
|
|
|
metrics.HostStatus(ctx, p2pHost)
|
|
|
|
isReadyChan <- true
|
|
}
|
|
|
|
func Shutdown() (err error) {
|
|
|
|
log.I.Ln("shutting down p2p server")
|
|
|
|
if p2pHost != nil {
|
|
if err = p2pHost.Close(); check(err) {
|
|
// continue
|
|
}
|
|
}
|
|
|
|
log.I.Ln("- p2p server shutdown complete")
|
|
|
|
return
|
|
}
|