Construct enough to run hello
This commit is contained in:
parent
b3239d9b23
commit
e162b5395c
@ -5,11 +5,12 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/filecoin-project/go-lotus/lib/cborrpc"
|
"github.com/filecoin-project/go-lotus/lib/cborrpc"
|
||||||
|
exchange "github.com/ipfs/go-ipfs-exchange-interface"
|
||||||
|
"github.com/libp2p/go-libp2p-core/host"
|
||||||
"github.com/libp2p/go-libp2p-core/protocol"
|
"github.com/libp2p/go-libp2p-core/protocol"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/ipfs/go-bitswap"
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
cbor "github.com/ipfs/go-ipld-cbor"
|
cbor "github.com/ipfs/go-ipld-cbor"
|
||||||
inet "github.com/libp2p/go-libp2p-core/network"
|
inet "github.com/libp2p/go-libp2p-core/network"
|
||||||
@ -180,17 +181,17 @@ func (bss *BlockSyncService) gatherMessages(ts *TipSet) ([]*SignedMessage, [][]i
|
|||||||
}
|
}
|
||||||
|
|
||||||
type BlockSync struct {
|
type BlockSync struct {
|
||||||
bswap *bitswap.Bitswap
|
bswap exchange.Interface
|
||||||
newStream NewStreamFunc
|
newStream NewStreamFunc
|
||||||
|
|
||||||
syncPeersLk sync.Mutex
|
syncPeersLk sync.Mutex
|
||||||
syncPeers map[peer.ID]struct{}
|
syncPeers map[peer.ID]struct{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewBlockSyncClient(bswap *bitswap.Bitswap, newStreamF NewStreamFunc) *BlockSync {
|
func NewBlockSyncClient(bswap exchange.Interface, h host.Host) *BlockSync {
|
||||||
return &BlockSync{
|
return &BlockSync{
|
||||||
bswap: bswap,
|
bswap: bswap,
|
||||||
newStream: newStreamF,
|
newStream: h.NewStream,
|
||||||
syncPeers: make(map[peer.ID]struct{}),
|
syncPeers: make(map[peer.ID]struct{}),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -173,7 +173,7 @@ type ChainStore struct {
|
|||||||
headChange func(rev, app []*TipSet) error
|
headChange func(rev, app []*TipSet) error
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewChainStore(bs bstore.Blockstore, ds datastore.Datastore) *ChainStore {
|
func NewChainStore(bs bstore.Blockstore, ds datastore.Batching) *ChainStore {
|
||||||
return &ChainStore{
|
return &ChainStore{
|
||||||
bs: bs,
|
bs: bs,
|
||||||
ds: ds,
|
ds: ds,
|
||||||
|
1
go.mod
1
go.mod
@ -12,6 +12,7 @@ require (
|
|||||||
github.com/ipfs/go-datastore v0.0.5
|
github.com/ipfs/go-datastore v0.0.5
|
||||||
github.com/ipfs/go-hamt-ipld v0.0.0-20190613164304-cd074602062f
|
github.com/ipfs/go-hamt-ipld v0.0.0-20190613164304-cd074602062f
|
||||||
github.com/ipfs/go-ipfs-blockstore v0.0.1
|
github.com/ipfs/go-ipfs-blockstore v0.0.1
|
||||||
|
github.com/ipfs/go-ipfs-exchange-interface v0.0.1
|
||||||
github.com/ipfs/go-ipfs-routing v0.1.0
|
github.com/ipfs/go-ipfs-routing v0.1.0
|
||||||
github.com/ipfs/go-ipld-cbor v0.0.2
|
github.com/ipfs/go-ipld-cbor v0.0.2
|
||||||
github.com/ipfs/go-ipld-format v0.0.2
|
github.com/ipfs/go-ipld-format v0.0.2
|
||||||
|
@ -3,6 +3,9 @@ package node
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
|
"github.com/filecoin-project/go-lotus/node/modules/testing"
|
||||||
|
blockstore "github.com/ipfs/go-ipfs-blockstore"
|
||||||
|
exchange "github.com/ipfs/go-ipfs-exchange-interface"
|
||||||
"reflect"
|
"reflect"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -18,7 +21,9 @@ import (
|
|||||||
|
|
||||||
"github.com/filecoin-project/go-lotus/api"
|
"github.com/filecoin-project/go-lotus/api"
|
||||||
"github.com/filecoin-project/go-lotus/build"
|
"github.com/filecoin-project/go-lotus/build"
|
||||||
|
"github.com/filecoin-project/go-lotus/chain"
|
||||||
"github.com/filecoin-project/go-lotus/node/config"
|
"github.com/filecoin-project/go-lotus/node/config"
|
||||||
|
"github.com/filecoin-project/go-lotus/node/hello"
|
||||||
"github.com/filecoin-project/go-lotus/node/modules"
|
"github.com/filecoin-project/go-lotus/node/modules"
|
||||||
"github.com/filecoin-project/go-lotus/node/modules/helpers"
|
"github.com/filecoin-project/go-lotus/node/modules/helpers"
|
||||||
"github.com/filecoin-project/go-lotus/node/modules/lp2p"
|
"github.com/filecoin-project/go-lotus/node/modules/lp2p"
|
||||||
@ -44,13 +49,17 @@ var (
|
|||||||
|
|
||||||
type invoke int
|
type invoke int
|
||||||
|
|
||||||
|
//nolint:golint
|
||||||
const (
|
const (
|
||||||
// PstoreAddSelfKeysKey is a key for Override for PstoreAddSelfKeys
|
// libp2p
|
||||||
PstoreAddSelfKeysKey = invoke(iota)
|
|
||||||
|
|
||||||
// StartListeningKey is a key for Override for StartListening
|
PstoreAddSelfKeysKey = invoke(iota)
|
||||||
StartListeningKey
|
StartListeningKey
|
||||||
|
|
||||||
|
// filecoin
|
||||||
|
SetGenisisKey
|
||||||
|
RunHelloKey
|
||||||
|
|
||||||
_nInvokes // keep this last
|
_nInvokes // keep this last
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -97,8 +106,13 @@ var defaults = []Option{
|
|||||||
|
|
||||||
randomIdentity(),
|
randomIdentity(),
|
||||||
|
|
||||||
Override(new(datastore.Batching), datastore.NewMapDatastore),
|
Override(new(datastore.Batching), testing.MapDatastore),
|
||||||
|
Override(new(blockstore.Blockstore), testing.MapBlockstore), // NOT on top of ds above
|
||||||
Override(new(record.Validator), modules.RecordValidator),
|
Override(new(record.Validator), modules.RecordValidator),
|
||||||
|
|
||||||
|
// Filecoin modules
|
||||||
|
|
||||||
|
Override(new(*chain.ChainStore), chain.NewChainStore),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Online sets up basic libp2p node
|
// Online sets up basic libp2p node
|
||||||
@ -134,7 +148,25 @@ func Online() Option {
|
|||||||
|
|
||||||
Override(PstoreAddSelfKeysKey, lp2p.PstoreAddSelfKeys),
|
Override(PstoreAddSelfKeysKey, lp2p.PstoreAddSelfKeys),
|
||||||
Override(StartListeningKey, lp2p.StartListening(defConf.Libp2p.ListenAddresses)),
|
Override(StartListeningKey, lp2p.StartListening(defConf.Libp2p.ListenAddresses)),
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
|
Override(new(blockstore.GCLocker), blockstore.NewGCLocker),
|
||||||
|
Override(new(blockstore.GCBlockstore), blockstore.NewGCBlockstore),
|
||||||
|
Override(new(exchange.Interface), modules.Bitswap),
|
||||||
|
|
||||||
|
// Filecoin services
|
||||||
|
Override(new(*chain.Syncer), chain.NewSyncer),
|
||||||
|
Override(new(*chain.BlockSync), chain.NewBlockSyncClient),
|
||||||
|
Override(new(*chain.Wallet), chain.NewWallet),
|
||||||
|
|
||||||
|
Override(new(modules.Genesis), testing.MakeGenesis),
|
||||||
|
Override(SetGenisisKey, modules.SetGenesis),
|
||||||
|
|
||||||
|
Override(new(*hello.Service), hello.NewHelloService),
|
||||||
|
Override(RunHelloKey, hello.Run),
|
||||||
)
|
)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Config sets up constructors based on the provided config
|
// Config sets up constructors based on the provided config
|
||||||
|
@ -5,6 +5,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"github.com/filecoin-project/go-lotus/chain"
|
"github.com/filecoin-project/go-lotus/chain"
|
||||||
"github.com/filecoin-project/go-lotus/lib/cborrpc"
|
"github.com/filecoin-project/go-lotus/lib/cborrpc"
|
||||||
|
"github.com/filecoin-project/go-lotus/node/modules/helpers"
|
||||||
|
"go.uber.org/fx"
|
||||||
|
|
||||||
"github.com/libp2p/go-libp2p-core/host"
|
"github.com/libp2p/go-libp2p-core/host"
|
||||||
|
|
||||||
@ -36,9 +38,12 @@ type Service struct {
|
|||||||
syncer *chain.Syncer
|
syncer *chain.Syncer
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewHelloService(h host.Host) *Service {
|
func NewHelloService(h host.Host, cs *chain.ChainStore, syncer *chain.Syncer) *Service {
|
||||||
return &Service{
|
return &Service{
|
||||||
newStream: h.NewStream,
|
newStream: h.NewStream,
|
||||||
|
|
||||||
|
cs: cs,
|
||||||
|
syncer: syncer,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,3 +102,20 @@ func (hs *Service) SayHello(ctx context.Context, pid peer.ID) error {
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Run(mctx helpers.MetricsCtx, lc fx.Lifecycle, hs *Service, h host.Host) {
|
||||||
|
ctx := helpers.LifecycleCtx(mctx, lc)
|
||||||
|
h.SetStreamHandler(ProtocolID, hs.HandleStream)
|
||||||
|
|
||||||
|
bundle := inet.NotifyBundle{
|
||||||
|
ConnectedF: func(_ inet.Network, c inet.Conn) {
|
||||||
|
go func() {
|
||||||
|
if err := hs.SayHello(ctx, c.RemotePeer()); err != nil {
|
||||||
|
log.Error("failed to say hello: ", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
},
|
||||||
|
}
|
||||||
|
h.Network().Notify(&bundle)
|
||||||
|
}
|
||||||
|
@ -1,16 +1,43 @@
|
|||||||
package modules
|
package modules
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
|
"github.com/filecoin-project/go-lotus/chain"
|
||||||
|
"github.com/filecoin-project/go-lotus/node/modules/helpers"
|
||||||
|
"github.com/ipfs/go-bitswap"
|
||||||
|
"github.com/ipfs/go-bitswap/network"
|
||||||
|
blockstore "github.com/ipfs/go-ipfs-blockstore"
|
||||||
|
exchange "github.com/ipfs/go-ipfs-exchange-interface"
|
||||||
logging "github.com/ipfs/go-log"
|
logging "github.com/ipfs/go-log"
|
||||||
|
"github.com/libp2p/go-libp2p-core/host"
|
||||||
"github.com/libp2p/go-libp2p-core/peerstore"
|
"github.com/libp2p/go-libp2p-core/peerstore"
|
||||||
|
"github.com/libp2p/go-libp2p-core/routing"
|
||||||
record "github.com/libp2p/go-libp2p-record"
|
record "github.com/libp2p/go-libp2p-record"
|
||||||
|
"go.uber.org/fx"
|
||||||
)
|
)
|
||||||
|
|
||||||
var log = logging.Logger("modules")
|
var log = logging.Logger("modules")
|
||||||
|
|
||||||
|
type Genesis *chain.BlockHeader
|
||||||
|
|
||||||
// RecordValidator provides namesys compatible routing record validator
|
// RecordValidator provides namesys compatible routing record validator
|
||||||
func RecordValidator(ps peerstore.Peerstore) record.Validator {
|
func RecordValidator(ps peerstore.Peerstore) record.Validator {
|
||||||
return record.NamespacedValidator{
|
return record.NamespacedValidator{
|
||||||
"pk": record.PublicKeyValidator{},
|
"pk": record.PublicKeyValidator{},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Bitswap(mctx helpers.MetricsCtx, lc fx.Lifecycle, host host.Host, rt routing.Routing, bs blockstore.GCBlockstore) exchange.Interface {
|
||||||
|
bitswapNetwork := network.NewFromIpfsHost(host, rt)
|
||||||
|
exch := bitswap.New(helpers.LifecycleCtx(mctx, lc), bitswapNetwork, bs)
|
||||||
|
lc.Append(fx.Hook{
|
||||||
|
OnStop: func(ctx context.Context) error {
|
||||||
|
return exch.Close()
|
||||||
|
},
|
||||||
|
})
|
||||||
|
return exch
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetGenesis(cs *chain.ChainStore, g Genesis) error {
|
||||||
|
return cs.SetGenesis(g)
|
||||||
|
}
|
||||||
|
15
node/modules/testing/genesis.go
Normal file
15
node/modules/testing/genesis.go
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package testing
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/filecoin-project/go-lotus/chain"
|
||||||
|
"github.com/filecoin-project/go-lotus/node/modules"
|
||||||
|
blockstore "github.com/ipfs/go-ipfs-blockstore"
|
||||||
|
)
|
||||||
|
|
||||||
|
func MakeGenesis(bs blockstore.Blockstore, w *chain.Wallet) (modules.Genesis, error) {
|
||||||
|
genb, err := chain.MakeGenesisBlock(bs, w)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return genb.Genesis, nil
|
||||||
|
}
|
18
node/modules/testing/storage.go
Normal file
18
node/modules/testing/storage.go
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
package testing
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/ipfs/go-datastore"
|
||||||
|
dsync "github.com/ipfs/go-datastore/sync"
|
||||||
|
blockstore "github.com/ipfs/go-ipfs-blockstore"
|
||||||
|
)
|
||||||
|
|
||||||
|
func MapBlockstore() blockstore.Blockstore {
|
||||||
|
// TODO: proper datastore
|
||||||
|
bds := dsync.MutexWrap(datastore.NewMapDatastore())
|
||||||
|
bs := blockstore.NewBlockstore(bds)
|
||||||
|
return blockstore.NewIdStore(bs)
|
||||||
|
}
|
||||||
|
|
||||||
|
func MapDatastore() datastore.Batching {
|
||||||
|
return dsync.MutexWrap(datastore.NewMapDatastore())
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user