Documentation
¶
Index ¶
- Variables
- func DecideOnProposal(ctx fsm.Context, environment ProviderDealEnvironment, ...) error
- func EnsureProviderFunds(ctx fsm.Context, environment ProviderDealEnvironment, ...) error
- func FailDeal(ctx fsm.Context, environment ProviderDealEnvironment, ...) error
- func HandoffDeal(ctx fsm.Context, environment ProviderDealEnvironment, ...) error
- func PublishDeal(ctx fsm.Context, environment ProviderDealEnvironment, ...) error
- func RecordPieceInfo(ctx fsm.Context, environment ProviderDealEnvironment, ...) error
- func TransferData(ctx fsm.Context, environment ProviderDealEnvironment, ...) error
- func ValidateDealProposal(ctx fsm.Context, environment ProviderDealEnvironment, ...) error
- func VerifyData(ctx fsm.Context, environment ProviderDealEnvironment, ...) error
- func VerifyDealActivated(ctx fsm.Context, environment ProviderDealEnvironment, ...) error
- func WaitForFunding(ctx fsm.Context, environment ProviderDealEnvironment, ...) error
- func WaitForPublish(ctx fsm.Context, environment ProviderDealEnvironment, ...) error
- type ProviderDealEnvironment
- type ProviderStateEntryFunc
Constants ¶
This section is empty.
Variables ¶
var ProviderEvents = fsm.Events{ fsm.Event(storagemarket.ProviderEventOpen).From(storagemarket.StorageDealUnknown).To(storagemarket.StorageDealValidating), fsm.Event(storagemarket.ProviderEventNodeErrored).FromAny().To(storagemarket.StorageDealFailing). Action(func(deal *storagemarket.MinerDeal, err error) error { deal.Message = xerrors.Errorf("error calling node: %w", err).Error() return nil }), fsm.Event(storagemarket.ProviderEventDealRejected). FromMany(storagemarket.StorageDealValidating, storagemarket.StorageDealVerifyData, storagemarket.StorageDealAcceptWait).To(storagemarket.StorageDealFailing). Action(func(deal *storagemarket.MinerDeal, err error) error { deal.Message = xerrors.Errorf("deal rejected: %w", err).Error() return nil }), fsm.Event(storagemarket.ProviderEventDealDeciding). From(storagemarket.StorageDealValidating).To(storagemarket.StorageDealAcceptWait), fsm.Event(storagemarket.ProviderEventDealAccepted). From(storagemarket.StorageDealAcceptWait).To(storagemarket.StorageDealProposalAccepted), fsm.Event(storagemarket.ProviderEventWaitingForManualData). From(storagemarket.StorageDealProposalAccepted).To(storagemarket.StorageDealWaitingForData), fsm.Event(storagemarket.ProviderEventDataTransferFailed). FromMany(storagemarket.StorageDealProposalAccepted, storagemarket.StorageDealTransferring).To(storagemarket.StorageDealFailing). Action(func(deal *storagemarket.MinerDeal, err error) error { deal.Message = xerrors.Errorf("error transferring data: %w", err).Error() return nil }), fsm.Event(storagemarket.ProviderEventDataTransferInitiated). From(storagemarket.StorageDealProposalAccepted).To(storagemarket.StorageDealTransferring), fsm.Event(storagemarket.ProviderEventDataTransferCompleted). From(storagemarket.StorageDealTransferring).To(storagemarket.StorageDealVerifyData), fsm.Event(storagemarket.ProviderEventGeneratePieceCIDFailed). From(storagemarket.StorageDealVerifyData).To(storagemarket.StorageDealFailing). Action(func(deal *storagemarket.MinerDeal, err error) error { deal.Message = xerrors.Errorf("generating piece committment: %w", err).Error() return nil }), fsm.Event(storagemarket.ProviderEventVerifiedData). FromMany(storagemarket.StorageDealVerifyData, storagemarket.StorageDealWaitingForData).To(storagemarket.StorageDealEnsureProviderFunds). Action(func(deal *storagemarket.MinerDeal, path filestore.Path, metadataPath filestore.Path) error { deal.PiecePath = path deal.MetadataPath = metadataPath return nil }), fsm.Event(storagemarket.ProviderEventFundingInitiated). From(storagemarket.StorageDealEnsureProviderFunds).To(storagemarket.StorageDealProviderFunding). Action(func(deal *storagemarket.MinerDeal, mcid cid.Cid) error { deal.AddFundsCid = &mcid return nil }), fsm.Event(storagemarket.ProviderEventFunded). FromMany(storagemarket.StorageDealProviderFunding, storagemarket.StorageDealEnsureProviderFunds).To(storagemarket.StorageDealPublish), fsm.Event(storagemarket.ProviderEventDealPublishInitiated). From(storagemarket.StorageDealPublish).To(storagemarket.StorageDealPublishing). Action(func(deal *storagemarket.MinerDeal, publishCid cid.Cid) error { deal.PublishCid = &publishCid return nil }), fsm.Event(storagemarket.ProviderEventDealPublishError). From(storagemarket.StorageDealPublishing).To(storagemarket.StorageDealFailing). Action(func(deal *storagemarket.MinerDeal, err error) error { deal.Message = xerrors.Errorf("PublishStorageDeal error: %w", err).Error() return nil }), fsm.Event(storagemarket.ProviderEventSendResponseFailed). FromMany(storagemarket.StorageDealPublishing, storagemarket.StorageDealFailing).To(storagemarket.StorageDealError). Action(func(deal *storagemarket.MinerDeal, err error) error { deal.Message = xerrors.Errorf("sending response to deal: %w", err).Error() return nil }), fsm.Event(storagemarket.ProviderEventDealPublished). From(storagemarket.StorageDealPublishing).To(storagemarket.StorageDealStaged). Action(func(deal *storagemarket.MinerDeal, dealID abi.DealID) error { deal.ConnectionClosed = true deal.DealID = dealID return nil }), fsm.Event(storagemarket.ProviderEventFileStoreErrored). FromMany(storagemarket.StorageDealStaged, storagemarket.StorageDealSealing, storagemarket.StorageDealActive).To(storagemarket.StorageDealFailing). Action(func(deal *storagemarket.MinerDeal, err error) error { deal.Message = xerrors.Errorf("accessing file store: %w", err).Error() return nil }), fsm.Event(storagemarket.ProviderEventDealHandoffFailed).From(storagemarket.StorageDealStaged).To(storagemarket.StorageDealFailing). Action(func(deal *storagemarket.MinerDeal, err error) error { deal.Message = xerrors.Errorf("handing off deal to node: %w", err).Error() return nil }), fsm.Event(storagemarket.ProviderEventDealHandedOff).From(storagemarket.StorageDealStaged).To(storagemarket.StorageDealSealing), fsm.Event(storagemarket.ProviderEventDealActivationFailed). From(storagemarket.StorageDealSealing).To(storagemarket.StorageDealFailing). Action(func(deal *storagemarket.MinerDeal, err error) error { deal.Message = xerrors.Errorf("error activating deal: %w", err).Error() return nil }), fsm.Event(storagemarket.ProviderEventDealActivated).From(storagemarket.StorageDealSealing).To(storagemarket.StorageDealActive), fsm.Event(storagemarket.ProviderEventPieceStoreErrored).From(storagemarket.StorageDealActive).To(storagemarket.StorageDealFailing). Action(func(deal *storagemarket.MinerDeal, err error) error { deal.Message = xerrors.Errorf("accessing piece store: %w", err).Error() return nil }), fsm.Event(storagemarket.ProviderEventDealCompleted).From(storagemarket.StorageDealActive).To(storagemarket.StorageDealCompleted), fsm.Event(storagemarket.ProviderEventUnableToLocatePiece).From(storagemarket.StorageDealActive).To(storagemarket.StorageDealFailing). Action(func(deal *storagemarket.MinerDeal, dealID abi.DealID, err error) error { deal.Message = xerrors.Errorf("locating piece for deal ID %d in sector: %w", deal.DealID, err).Error() return nil }), fsm.Event(storagemarket.ProviderEventReadMetadataErrored).From(storagemarket.StorageDealActive).To(storagemarket.StorageDealFailing). Action(func(deal *storagemarket.MinerDeal, err error) error { deal.Message = xerrors.Errorf("error reading piece metadata: %w", err).Error() return nil }), fsm.Event(storagemarket.ProviderEventFailed).From(storagemarket.StorageDealFailing).To(storagemarket.StorageDealError), }
ProviderEvents are the events that can happen in a storage provider
var ProviderStateEntryFuncs = fsm.StateEntryFuncs{ storagemarket.StorageDealValidating: ValidateDealProposal, storagemarket.StorageDealAcceptWait: DecideOnProposal, storagemarket.StorageDealProposalAccepted: TransferData, storagemarket.StorageDealVerifyData: VerifyData, storagemarket.StorageDealEnsureProviderFunds: EnsureProviderFunds, storagemarket.StorageDealProviderFunding: WaitForFunding, storagemarket.StorageDealPublish: PublishDeal, storagemarket.StorageDealPublishing: WaitForPublish, storagemarket.StorageDealStaged: HandoffDeal, storagemarket.StorageDealSealing: VerifyDealActivated, storagemarket.StorageDealActive: RecordPieceInfo, storagemarket.StorageDealFailing: FailDeal, }
ProviderStateEntryFuncs are the handlers for different states in a storage client
Functions ¶
func DecideOnProposal ¶ added in v0.2.7
func DecideOnProposal(ctx fsm.Context, environment ProviderDealEnvironment, deal storagemarket.MinerDeal) error
DecideOnProposal allows custom decision logic to run before accepting a deal, such as allowing a manual operator to decide whether or not to accept the deal
func EnsureProviderFunds ¶ added in v0.2.0
func EnsureProviderFunds(ctx fsm.Context, environment ProviderDealEnvironment, deal storagemarket.MinerDeal) error
func FailDeal ¶
func FailDeal(ctx fsm.Context, environment ProviderDealEnvironment, deal storagemarket.MinerDeal) error
FailDeal sends a failure response before terminating a deal
func HandoffDeal ¶
func HandoffDeal(ctx fsm.Context, environment ProviderDealEnvironment, deal storagemarket.MinerDeal) error
HandoffDeal hands off a published deal for sealing and commitment in a sector
func PublishDeal ¶
func PublishDeal(ctx fsm.Context, environment ProviderDealEnvironment, deal storagemarket.MinerDeal) error
PublishDeal sends a message to publish a deal on chain
func RecordPieceInfo ¶
func RecordPieceInfo(ctx fsm.Context, environment ProviderDealEnvironment, deal storagemarket.MinerDeal) error
RecordPieceInfo records sector information about an activated deal so that the data can be retrieved later
func TransferData ¶
func TransferData(ctx fsm.Context, environment ProviderDealEnvironment, deal storagemarket.MinerDeal) error
TransferData initiates a data transfer or places the deal in a waiting state if it is a manual deal
func ValidateDealProposal ¶
func ValidateDealProposal(ctx fsm.Context, environment ProviderDealEnvironment, deal storagemarket.MinerDeal) error
ValidateDealProposal validates a proposed deal against the provider criteria
func VerifyData ¶
func VerifyData(ctx fsm.Context, environment ProviderDealEnvironment, deal storagemarket.MinerDeal) error
VerifyData verifies that data received for a deal matches the pieceCID in the proposal
func VerifyDealActivated ¶
func VerifyDealActivated(ctx fsm.Context, environment ProviderDealEnvironment, deal storagemarket.MinerDeal) error
VerifyDealActivated verifies that a deal has been committed to a sector and activated
func WaitForFunding ¶ added in v0.2.0
func WaitForFunding(ctx fsm.Context, environment ProviderDealEnvironment, deal storagemarket.MinerDeal) error
func WaitForPublish ¶ added in v0.2.0
func WaitForPublish(ctx fsm.Context, environment ProviderDealEnvironment, deal storagemarket.MinerDeal) error
WaitForPublish waits for the publish message on chain and sends the deal id back to the client
Types ¶
type ProviderDealEnvironment ¶
type ProviderDealEnvironment interface { Address() address.Address Node() storagemarket.StorageProviderNode Ask() storagemarket.StorageAsk StartDataTransfer(ctx context.Context, to peer.ID, voucher datatransfer.Voucher, baseCid cid.Cid, selector ipld.Node) error GeneratePieceCommitmentToFile(payloadCid cid.Cid, selector ipld.Node) (cid.Cid, filestore.Path, filestore.Path, error) SendSignedResponse(ctx context.Context, response *network.Response) error TagConnection(proposalCid cid.Cid) error Disconnect(proposalCid cid.Cid) error FileStore() filestore.FileStore PieceStore() piecestore.PieceStore DealAcceptanceBuffer() abi.ChainEpoch RunCustomDecisionLogic(context.Context, storagemarket.MinerDeal) (bool, string, error) }
ProviderDealEnvironment are the dependencies needed for processing deals with a ProviderStateEntryFunc
type ProviderStateEntryFunc ¶
type ProviderStateEntryFunc func(ctx fsm.Context, environment ProviderDealEnvironment, deal storagemarket.MinerDeal) error
ProviderStateEntryFunc is the signature for a StateEntryFunc in the provider FSM