跳到主要内容

seller

import "github.com/bsv8/go-bitfs/seller"

seller 包实现 BitFS v3 的卖方工作流。

Workflow 创建已签名报价、协调费用池开池、验证内容请求、交付已签名内容、推进累计支付并准备仲裁证据。钱包、存储、内容、交易和节点能力由应用自行拥有,并通过 WorkflowConfig 注入。卖方通常创建 001 报价并完成 002 开池,使用 004 交付来服务经过验证的 003 请求,接受 005 支付;仅当买方授权状态需要仲裁时才构建 007 证据。

索引

类型 ContentSource

ContentSource 读取已验证内容请求所选定的种子或区块字节。

type ContentSource interface {
LoadContent(context.Context, bitfs.Hash32) ([]byte, error)
}

类型 QuoteStore

QuoteStore 按规范条款哈希保存卖方签名的 001 报价凭证,使后续 003 请求能够独立验证。

type QuoteStore interface {
SaveQuote(context.Context, *bitfs.SignedFileQuote) error
LoadQuote(context.Context, bitfs.Hash32) (*bitfs.SignedFileQuote, error)
}

类型 Workflow

Workflow 实现 001–007 的卖方部分:创建报价、完成费用池开池、序列化内容交付、验证买方支付,并通过注入的端口准备或提交仲裁人授权的状态。

type Workflow struct {
// contains filtered or unexported fields
}

函数 NewWorkflow

func NewWorkflow(config WorkflowConfig) (*Workflow, error)

NewWorkflow 验证所有必需的卖方依赖并返回工作流。nil Clock 会替换为 time.Now;如果缺少签名、存储、内容、交易、参与者或节点端口,则在产生任何副作用前拒绝创建。

函数 (*Workflow) AcceptPayment

func (workflow *Workflow) AcceptPayment(ctx context.Context, update *pool.PaymentUpdate) (*pool.PaymentState, error)

AcceptPayment 将买方的 005 更新与已接受费用池状态进行验证,添加卖方签名并提交原始交易;只有节点确认预期交易和序列号后,才推进已保存状态。

函数 (*Workflow) AcceptPoolFunding

func (workflow *Workflow) AcceptPoolFunding(ctx context.Context, delivery *pool.FundingTxDelivery) (*pool.OpeningProof, error)

AcceptPoolFunding 验证交付的注资交易,完成开池证明,并记录初始已接受的退款状态。

函数 (*Workflow) BuildArbitrationRequest

func (workflow *Workflow) BuildArbitrationRequest(context.Context, *pool.OpeningProof, *pool.PaymentUpdate) (*arbitration.ArbitrationRequest, error)

BuildArbitrationRequest 被有意禁用:仲裁必须基于已签名的 003 授权构建,绝不能基于买方支付包装器构建。

函数 (*Workflow) BuildArbitrationRequestFromAuthorization

func (workflow *Workflow) BuildArbitrationRequestFromAuthorization(ctx context.Context, proof *pool.OpeningProof, authorization *bitfs.SignedContentRequest, latest *pool.PaymentState) (*arbitration.ArbitrationRequest, error)

BuildArbitrationRequestFromAuthorization 将保留的开池证明、已签名 003 授权、最新支付状态和卖方签名封装为 007 证据请求。它绝不会构造替代的候选交易。

函数 (*Workflow) CreateQuote

func (workflow *Workflow) CreateQuote(ctx context.Context, draft bitfs.FileQuoteTerms, recommendedFilename string) (*bitfs.SignedFileQuote, error)

CreateQuote 使用卖方密钥为确定性的 001 报价条款签名,按条款哈希持久化完整凭证,并返回由调用方拥有的副本。推荐文件名仅是展示元数据,不属于签名内容。

函数 (*Workflow) DeliverRequestedContent

func (workflow *Workflow) DeliverRequestedContent(ctx context.Context, request *bitfs.SignedContentRequest) (delivery *bitfs.SignedContentDelivery, err error)

DeliverRequestedContent 验证买方的 003 请求及其报价,从 ContentSource 读取请求的种子或区块,并签名生成 004 交付。同一费用池的待处理请求租约会阻止并发交付。

函数 (*Workflow) PresignPoolOpening

func (workflow *Workflow) PresignPoolOpening(ctx context.Context, request *pool.RefundPresignRequest) (*pool.RefundPresignResponse, error)

PresignPoolOpening 准备并记录费用池开池的预签名证据。

函数 (*Workflow) SignImmediateClose

func (workflow *Workflow) SignImmediateClose(ctx context.Context, unsigned *pool.UnsignedPayment, buyerSig []byte, _ pool.Signer) (*pool.SignedPayment, error)

SignImmediateClose 补充买方的最终关闭签名。它不会提交或修改费用池状态;由买方决定何时调用 SubmitFinal。

函数 (*Workflow) SubmitArbitratedPayment

func (workflow *Workflow) SubmitArbitratedPayment(ctx context.Context, request *arbitration.ArbitrationRequest, response *arbitration.ArbitrationResponse) (*pool.PaymentState, error)

SubmitArbitratedPayment 验证 007 响应中的哈希和仲裁人签名,将卖方与仲裁人签名合并到获授权的未签名状态上,提交该原始交易,并仅在节点接受后持久化。

类型 WorkflowConfig

WorkflowConfig 提供卖方的全部依赖:签名与验证能力、报价/费用池/待处理请求存储、内容源、开池和交易端口、参与者检查、节点提交能力,以及可选的测试 Clock。

type WorkflowConfig struct {
Signer pool.Signer
SignatureVerifier bitfs.ContentTermsSignatureVerifier
QuoteVerifier bitfs.QuoteTermsSignatureVerifier
Clock func() time.Time
Quotes QuoteStore
Pools pool.PoolStore
OpeningHooks pool.SellerPoolOpeningHooks
Pending pool.PendingRequestStore
Content ContentSource
Transactions pool.SellerPoolPort
Participants pool.ParticipantVerifier
Node pool.NonFinalPoolNode
}

gomarkdoc 生成