storageadapter: Address review
This commit is contained in:
parent
de0a452282
commit
ea85a2457e
53
markets/storageadapter/api.go
Normal file
53
markets/storageadapter/api.go
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
package storageadapter
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
|
cbor "github.com/ipfs/go-ipld-cbor"
|
||||||
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/go-address"
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/api/apibstore"
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors/builtin/miner"
|
||||||
|
"github.com/filecoin-project/lotus/chain/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
type apiWrapper struct {
|
||||||
|
api interface {
|
||||||
|
StateGetActor(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*types.Actor, error)
|
||||||
|
ChainReadObj(context.Context, cid.Cid) ([]byte, error)
|
||||||
|
ChainHasObj(context.Context, cid.Cid) (bool, error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ca *apiWrapper) diffPreCommits(ctx context.Context, actor address.Address, pre, cur types.TipSetKey) (*miner.PreCommitChanges, error) {
|
||||||
|
store := adt.WrapStore(ctx, cbor.NewCborStore(apibstore.NewAPIBlockstore(ca.api)))
|
||||||
|
|
||||||
|
preAct, err := ca.api.StateGetActor(ctx, actor, pre)
|
||||||
|
if err != nil {
|
||||||
|
return nil, xerrors.Errorf("getting pre actor: %w", err)
|
||||||
|
}
|
||||||
|
curAct, err := ca.api.StateGetActor(ctx, actor, cur)
|
||||||
|
if err != nil {
|
||||||
|
return nil, xerrors.Errorf("getting cur actor: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
preSt, err := miner.Load(store, preAct)
|
||||||
|
if err != nil {
|
||||||
|
return nil, xerrors.Errorf("loading miner actor: %w", err)
|
||||||
|
}
|
||||||
|
curSt, err := miner.Load(store, curAct)
|
||||||
|
if err != nil {
|
||||||
|
return nil, xerrors.Errorf("loading miner actor: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
diff, err := miner.DiffPreCommits(preSt, curSt)
|
||||||
|
if err != nil {
|
||||||
|
return nil, xerrors.Errorf("diff precommits: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return diff, err
|
||||||
|
}
|
@ -9,7 +9,6 @@ import (
|
|||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
cborutil "github.com/filecoin-project/go-cbor-util"
|
cborutil "github.com/filecoin-project/go-cbor-util"
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
cbor "github.com/ipfs/go-ipld-cbor"
|
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-fil-markets/shared"
|
"github.com/filecoin-project/go-fil-markets/shared"
|
||||||
@ -23,11 +22,8 @@ import (
|
|||||||
market2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/market"
|
market2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/market"
|
||||||
|
|
||||||
"github.com/filecoin-project/lotus/api"
|
"github.com/filecoin-project/lotus/api"
|
||||||
"github.com/filecoin-project/lotus/api/apibstore"
|
|
||||||
"github.com/filecoin-project/lotus/build"
|
"github.com/filecoin-project/lotus/build"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
|
||||||
marketactor "github.com/filecoin-project/lotus/chain/actors/builtin/market"
|
marketactor "github.com/filecoin-project/lotus/chain/actors/builtin/market"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/builtin/miner"
|
|
||||||
"github.com/filecoin-project/lotus/chain/events"
|
"github.com/filecoin-project/lotus/chain/events"
|
||||||
"github.com/filecoin-project/lotus/chain/events/state"
|
"github.com/filecoin-project/lotus/chain/events/state"
|
||||||
"github.com/filecoin-project/lotus/chain/market"
|
"github.com/filecoin-project/lotus/chain/market"
|
||||||
@ -39,6 +35,7 @@ import (
|
|||||||
|
|
||||||
type ClientNodeAdapter struct {
|
type ClientNodeAdapter struct {
|
||||||
*clientApi
|
*clientApi
|
||||||
|
*apiWrapper
|
||||||
|
|
||||||
fundmgr *market.FundManager
|
fundmgr *market.FundManager
|
||||||
ev *events.Events
|
ev *events.Events
|
||||||
@ -51,39 +48,11 @@ type clientApi struct {
|
|||||||
full.MpoolAPI
|
full.MpoolAPI
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ca *clientApi) diffPreCommits(ctx context.Context, actor address.Address, pre, cur types.TipSetKey) (*miner.PreCommitChanges, error) {
|
|
||||||
store := adt.WrapStore(ctx, cbor.NewCborStore(apibstore.NewAPIBlockstore(ca)))
|
|
||||||
|
|
||||||
preAct, err := ca.StateGetActor(ctx, actor, pre)
|
|
||||||
if err != nil {
|
|
||||||
return nil, xerrors.Errorf("getting pre actor: %w", err)
|
|
||||||
}
|
|
||||||
curAct, err := ca.StateGetActor(ctx, actor, cur)
|
|
||||||
if err != nil {
|
|
||||||
return nil, xerrors.Errorf("getting cur actor: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
preSt, err := miner.Load(store, preAct)
|
|
||||||
if err != nil {
|
|
||||||
return nil, xerrors.Errorf("loading miner actor: %w", err)
|
|
||||||
}
|
|
||||||
curSt, err := miner.Load(store, curAct)
|
|
||||||
if err != nil {
|
|
||||||
return nil, xerrors.Errorf("loading miner actor: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
diff, err := miner.DiffPreCommits(preSt, curSt)
|
|
||||||
if err != nil {
|
|
||||||
return nil, xerrors.Errorf("diff precommits: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return diff, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewClientNodeAdapter(stateapi full.StateAPI, chain full.ChainAPI, mpool full.MpoolAPI, fundmgr *market.FundManager) storagemarket.StorageClientNode {
|
func NewClientNodeAdapter(stateapi full.StateAPI, chain full.ChainAPI, mpool full.MpoolAPI, fundmgr *market.FundManager) storagemarket.StorageClientNode {
|
||||||
capi := &clientApi{chain, stateapi, mpool}
|
capi := &clientApi{chain, stateapi, mpool}
|
||||||
return &ClientNodeAdapter{
|
return &ClientNodeAdapter{
|
||||||
clientApi: capi,
|
clientApi: capi,
|
||||||
|
apiWrapper: &apiWrapper{api: capi},
|
||||||
|
|
||||||
fundmgr: fundmgr,
|
fundmgr: fundmgr,
|
||||||
ev: events.NewEvents(context.TODO(), capi),
|
ev: events.NewEvents(context.TODO(), capi),
|
||||||
|
@ -48,6 +48,12 @@ func OnDealSectorPreCommitted(ctx context.Context, api getCurrentDealInfoAPI, ev
|
|||||||
return true, false, nil
|
return true, false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check that precommits which landed between when the deal was published
|
||||||
|
// and now don't already contain the deal we care about.
|
||||||
|
// (this can happen when the precommit lands vary quickly (in tests), or
|
||||||
|
// when the client node was down after the deal was published, and when
|
||||||
|
// the precommit containing it landed on chain)
|
||||||
|
|
||||||
if publishTs == types.EmptyTSK {
|
if publishTs == types.EmptyTSK {
|
||||||
lookup, err := api.StateSearchMsg(ctx, *publishCid)
|
lookup, err := api.StateSearchMsg(ctx, *publishCid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -8,7 +8,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
cbor "github.com/ipfs/go-ipld-cbor"
|
|
||||||
logging "github.com/ipfs/go-log/v2"
|
logging "github.com/ipfs/go-log/v2"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
@ -22,12 +21,9 @@ import (
|
|||||||
"github.com/filecoin-project/go-state-types/exitcode"
|
"github.com/filecoin-project/go-state-types/exitcode"
|
||||||
|
|
||||||
"github.com/filecoin-project/lotus/api"
|
"github.com/filecoin-project/lotus/api"
|
||||||
"github.com/filecoin-project/lotus/api/apibstore"
|
|
||||||
"github.com/filecoin-project/lotus/build"
|
"github.com/filecoin-project/lotus/build"
|
||||||
"github.com/filecoin-project/lotus/chain/actors"
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
|
||||||
"github.com/filecoin-project/lotus/chain/actors/builtin/market"
|
"github.com/filecoin-project/lotus/chain/actors/builtin/market"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/builtin/miner"
|
|
||||||
"github.com/filecoin-project/lotus/chain/events"
|
"github.com/filecoin-project/lotus/chain/events"
|
||||||
"github.com/filecoin-project/lotus/chain/events/state"
|
"github.com/filecoin-project/lotus/chain/events/state"
|
||||||
"github.com/filecoin-project/lotus/chain/types"
|
"github.com/filecoin-project/lotus/chain/types"
|
||||||
@ -45,6 +41,7 @@ var log = logging.Logger("storageadapter")
|
|||||||
|
|
||||||
type ProviderNodeAdapter struct {
|
type ProviderNodeAdapter struct {
|
||||||
api.FullNode
|
api.FullNode
|
||||||
|
*apiWrapper
|
||||||
|
|
||||||
// this goes away with the data transfer module
|
// this goes away with the data transfer module
|
||||||
dag dtypes.StagingDAG
|
dag dtypes.StagingDAG
|
||||||
@ -60,6 +57,7 @@ func NewProviderNodeAdapter(fc *config.MinerFeeConfig) func(dag dtypes.StagingDA
|
|||||||
return func(dag dtypes.StagingDAG, secb *sectorblocks.SectorBlocks, full api.FullNode) storagemarket.StorageProviderNode {
|
return func(dag dtypes.StagingDAG, secb *sectorblocks.SectorBlocks, full api.FullNode) storagemarket.StorageProviderNode {
|
||||||
na := &ProviderNodeAdapter{
|
na := &ProviderNodeAdapter{
|
||||||
FullNode: full,
|
FullNode: full,
|
||||||
|
apiWrapper: &apiWrapper{api: full},
|
||||||
|
|
||||||
dag: dag,
|
dag: dag,
|
||||||
secb: secb,
|
secb: secb,
|
||||||
@ -74,35 +72,6 @@ func NewProviderNodeAdapter(fc *config.MinerFeeConfig) func(dag dtypes.StagingDA
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n *ProviderNodeAdapter) diffPreCommits(ctx context.Context, actor address.Address, pre, cur types.TipSetKey) (*miner.PreCommitChanges, error) {
|
|
||||||
store := adt.WrapStore(ctx, cbor.NewCborStore(apibstore.NewAPIBlockstore(n)))
|
|
||||||
|
|
||||||
preAct, err := n.StateGetActor(ctx, actor, pre)
|
|
||||||
if err != nil {
|
|
||||||
return nil, xerrors.Errorf("getting pre actor: %w", err)
|
|
||||||
}
|
|
||||||
curAct, err := n.StateGetActor(ctx, actor, cur)
|
|
||||||
if err != nil {
|
|
||||||
return nil, xerrors.Errorf("getting cur actor: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
preSt, err := miner.Load(store, preAct)
|
|
||||||
if err != nil {
|
|
||||||
return nil, xerrors.Errorf("loading miner actor: %w", err)
|
|
||||||
}
|
|
||||||
curSt, err := miner.Load(store, curAct)
|
|
||||||
if err != nil {
|
|
||||||
return nil, xerrors.Errorf("loading miner actor: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
diff, err := miner.DiffPreCommits(preSt, curSt)
|
|
||||||
if err != nil {
|
|
||||||
return nil, xerrors.Errorf("diff precommits: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return diff, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (n *ProviderNodeAdapter) PublishDeals(ctx context.Context, deal storagemarket.MinerDeal) (cid.Cid, error) {
|
func (n *ProviderNodeAdapter) PublishDeals(ctx context.Context, deal storagemarket.MinerDeal) (cid.Cid, error) {
|
||||||
log.Info("publishing deal")
|
log.Info("publishing deal")
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user