b7a4dbb07f
And use the new CidBuilder from the spec actors. This patch does not switch over to inline CIDs by default, but paves the way.
46 lines
1.8 KiB
Go
46 lines
1.8 KiB
Go
package modules
|
|
|
|
import (
|
|
"go.uber.org/fx"
|
|
"golang.org/x/xerrors"
|
|
|
|
"github.com/multiformats/go-multiaddr"
|
|
|
|
"github.com/filecoin-project/lotus/lib/blockstore"
|
|
"github.com/filecoin-project/lotus/lib/bufbstore"
|
|
"github.com/filecoin-project/lotus/lib/ipfsbstore"
|
|
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
|
"github.com/filecoin-project/lotus/node/modules/helpers"
|
|
)
|
|
|
|
// IpfsClientBlockstore returns a ClientBlockstore implementation backed by an IPFS node.
|
|
// If ipfsMaddr is empty, a local IPFS node is assumed considering IPFS_PATH configuration.
|
|
// If ipfsMaddr is not empty, it will connect to the remote IPFS node with the provided multiaddress.
|
|
// The flag useForRetrieval indicates if the IPFS node will also be used for storing retrieving deals.
|
|
func IpfsClientBlockstore(ipfsMaddr string, useForRetrieval bool) func(helpers.MetricsCtx, fx.Lifecycle, dtypes.ClientImportMgr) (dtypes.ClientBlockstore, error) {
|
|
return func(mctx helpers.MetricsCtx, lc fx.Lifecycle, localStore dtypes.ClientImportMgr) (dtypes.ClientBlockstore, error) {
|
|
var err error
|
|
var ipfsbs blockstore.Blockstore
|
|
if ipfsMaddr != "" {
|
|
var ma multiaddr.Multiaddr
|
|
ma, err = multiaddr.NewMultiaddr(ipfsMaddr)
|
|
if err != nil {
|
|
return nil, xerrors.Errorf("parsing ipfs multiaddr: %w", err)
|
|
}
|
|
ipfsbs, err = ipfsbstore.NewRemoteIpfsBstore(helpers.LifecycleCtx(mctx, lc), ma)
|
|
} else {
|
|
ipfsbs, err = ipfsbstore.NewIpfsBstore(helpers.LifecycleCtx(mctx, lc))
|
|
}
|
|
if err != nil {
|
|
return nil, xerrors.Errorf("constructing ipfs blockstore: %w", err)
|
|
}
|
|
ipfsbs = blockstore.WrapIDStore(ipfsbs)
|
|
var ws blockstore.Blockstore
|
|
ws = ipfsbs
|
|
if !useForRetrieval {
|
|
ws = blockstore.WrapIDStore(localStore.Blockstore)
|
|
}
|
|
return bufbstore.NewTieredBstore(ipfsbs, ws), nil
|
|
}
|
|
}
|