<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>go-bitfs</title><link>https://63812707.go-bitfs.pages.dev/</link><description>Recent content on go-bitfs</description><generator>Hugo</generator><language>zh-cn</language><atom:link href="https://63812707.go-bitfs.pages.dev/index.xml" rel="self" type="application/rss+xml"/><item><title/><link>https://63812707.go-bitfs.pages.dev/guide/legacy/bitfs-%E4%BB%B2%E8%A3%81%E4%B8%8E%E7%BB%93%E7%AE%97%E8%A7%84%E8%8C%83-v1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://63812707.go-bitfs.pages.dev/guide/legacy/bitfs-%E4%BB%B2%E8%A3%81%E4%B8%8E%E7%BB%93%E7%AE%97%E8%A7%84%E8%8C%83-v1/</guid><description>&lt;h1 id="bitfs-仲裁与-2-of-3-结算规范-v1"&gt;BitFS 仲裁与 2-of-3 结算规范 v1&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;历史兼容文档，不作为新施工依据。&lt;/strong&gt; 本文的 &lt;code&gt;HashGetTicket&lt;/code&gt;、&lt;code&gt;session_id&lt;/code&gt;、服务端记录、&lt;code&gt;proposal_id&lt;/code&gt;、仲裁最终金额和签名域属于旧 V1 设计。新设计以 &lt;a href="../protocol/001-%E6%8A%A5%E4%BB%B7%E5%87%AD%E8%AF%81%E8%A7%84%E8%8C%83.md"&gt;001-报价凭证规范&lt;/a&gt; 至 &lt;a href="../protocol/006-%E8%B4%B9%E7%94%A8%E6%B1%A0%E6%97%A0%E6%9D%A1%E4%BB%B6%E5%85%B3%E9%97%AD%E8%A7%84%E8%8C%83.md"&gt;006-费用池无条件关闭规范&lt;/a&gt; 为准；尤其 V1 新关闭路径不在池内定义仲裁金额。&lt;/p&gt;</description></item><item><title/><link>https://63812707.go-bitfs.pages.dev/guide/legacy/bitfs-%E5%8D%8F%E8%AE%AE%E8%A7%84%E8%8C%83-v1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://63812707.go-bitfs.pages.dev/guide/legacy/bitfs-%E5%8D%8F%E8%AE%AE%E8%A7%84%E8%8C%83-v1/</guid><description>&lt;h1 id="bitfs-协议规范-v1"&gt;BitFS 协议规范 v1&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;历史兼容文档，不作为新施工依据。&lt;/strong&gt; 本文描述的 &lt;code&gt;FileQuote&lt;/code&gt;、&lt;code&gt;HashGetTicket&lt;/code&gt;、&lt;code&gt;session_id&lt;/code&gt;、&lt;code&gt;content_index&lt;/code&gt;、&lt;code&gt;expected_size&lt;/code&gt;、票据价格和签名域，均属于旧 V1 会话模型。新设计按业务顺序以 &lt;a href="../protocol/001-%E6%8A%A5%E4%BB%B7%E5%87%AD%E8%AF%81%E8%A7%84%E8%8C%83.md"&gt;001-报价凭证规范&lt;/a&gt; 至 &lt;a href="../protocol/006-%E8%B4%B9%E7%94%A8%E6%B1%A0%E6%97%A0%E6%9D%A1%E4%BB%B6%E5%85%B3%E9%97%AD%E8%A7%84%E8%8C%83.md"&gt;006-费用池无条件关闭规范&lt;/a&gt; 为准；新实现不得混用两套字段或把本文件的会话 ID 当作真值。&lt;/p&gt;</description></item><item><title/><link>https://63812707.go-bitfs.pages.dev/guide/migration/%E4%BB%8Ebsv8-gateway%E8%BF%81%E7%A7%BB/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://63812707.go-bitfs.pages.dev/guide/migration/%E4%BB%8Ebsv8-gateway%E8%BF%81%E7%A7%BB/</guid><description>&lt;h1 id="从-bsv8-gateway-迁移"&gt;从 bsv8-gateway 迁移&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;go-bitfs&lt;/code&gt; 现在是 BitFS v3 文件交换、仲裁与 MultisigPool v4 费用池协议的唯一来源。目录名为 &lt;code&gt;spec/v1&lt;/code&gt; 的 CDDL 文件仅因历史路径保留，不能用于当前协议；当前真值是 &lt;code&gt;spec/v3&lt;/code&gt; 和 001–007 的 v3 文档。&lt;/p&gt;</description></item><item><title/><link>https://63812707.go-bitfs.pages.dev/guide/protocol/001-%E6%8A%A5%E4%BB%B7%E5%87%AD%E8%AF%81%E8%A7%84%E8%8C%83/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://63812707.go-bitfs.pages.dev/guide/protocol/001-%E6%8A%A5%E4%BB%B7%E5%87%AD%E8%AF%81%E8%A7%84%E8%8C%83/</guid><description>&lt;h1 id="001--bitfs-报价凭证规范"&gt;001 · BitFS 报价凭证规范&lt;/h1&gt;
&lt;h2 id="编码签名与哈希"&gt;编码、签名与哈希&lt;/h2&gt;
&lt;p&gt;所有结构使用 RFC 8949 core deterministic CBOR。&lt;code&gt;TermsCBOR&lt;/code&gt; 必须是 &lt;code&gt;FileQuoteTerms&lt;/code&gt; 的原始确定性 CBOR 字节：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;TermsSignature = Sign_seller(TermsCBOR)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Verify(SellerPubkey, TermsCBOR, TermsSignature)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;FileQuoteTermsHash = SHA256(TermsCBOR)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;不使用签名域。实现必须只把 &lt;code&gt;TermsSignature&lt;/code&gt; 按上述报价条款验证。&lt;/p&gt;</description></item><item><title/><link>https://63812707.go-bitfs.pages.dev/guide/protocol/001-%E6%8A%A5%E4%BB%B7%E5%87%AD%E8%AF%81%E9%9C%80%E6%B1%82/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://63812707.go-bitfs.pages.dev/guide/protocol/001-%E6%8A%A5%E4%BB%B7%E5%87%AD%E8%AF%81%E9%9C%80%E6%B1%82/</guid><description>&lt;h1 id="001--报价凭证需求"&gt;001 · 报价凭证需求&lt;/h1&gt;
&lt;h2 id="要解决什么"&gt;要解决什么&lt;/h2&gt;
&lt;p&gt;卖方需要向一个确定买方承诺：某个 seed 对应文件可以怎样出售、种子多少钱、完整文件块多少钱、哪些仲裁者可以接受，以及报价何时失效。&lt;/p&gt;</description></item><item><title/><link>https://63812707.go-bitfs.pages.dev/guide/protocol/002-%E8%B4%B9%E7%94%A8%E6%B1%A0%E5%BC%80%E6%B1%A0%E8%A7%84%E8%8C%83/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://63812707.go-bitfs.pages.dev/guide/protocol/002-%E8%B4%B9%E7%94%A8%E6%B1%A0%E5%BC%80%E6%B1%A0%E8%A7%84%E8%8C%83/</guid><description>&lt;h1 id="002--v3-费用池开池规范"&gt;002 · v3 费用池开池规范&lt;/h1&gt;
&lt;p&gt;Buyer 使用 MultisigPool v4 的 &lt;code&gt;ArbitratedPoolRoles{Buyer, Seller, Arbiter}&lt;/code&gt; 创建池锁，公钥顺序固定为 &lt;code&gt;[Buyer, Seller, Arbiter]&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;Opening/refund state 必须恰好包含三个资金输出：Buyer、Seller、Arbiter。Seller 和 Arbiter 初始金额为 0，Arbiter 输出仍必须存在。Opening sequence 由 v4 返回，当前为 2；go-bitfs 不重写 sequence、locktime、手续费或脚本。&lt;/p&gt;</description></item><item><title/><link>https://63812707.go-bitfs.pages.dev/guide/protocol/002-%E8%B4%B9%E7%94%A8%E6%B1%A0%E5%BC%80%E6%B1%A0%E9%9C%80%E6%B1%82/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://63812707.go-bitfs.pages.dev/guide/protocol/002-%E8%B4%B9%E7%94%A8%E6%B1%A0%E5%BC%80%E6%B1%A0%E9%9C%80%E6%B1%82/</guid><description>&lt;h1 id="002--费用池开池需求"&gt;002 · 费用池开池需求&lt;/h1&gt;
&lt;h2 id="要解决什么"&gt;要解决什么&lt;/h2&gt;
&lt;p&gt;买方需要先准备一笔可供后续累计支付的 2-of-3 费用池，但不能因为卖方拒绝后续签名而把资金永久锁死。开池与 BitFS 文件购买无关：它不应知道报价、seed、文件块或价格。&lt;/p&gt;</description></item><item><title/><link>https://63812707.go-bitfs.pages.dev/guide/protocol/003-%E5%86%85%E5%AE%B9%E8%8E%B7%E5%8F%96%E8%AF%B7%E6%B1%82%E8%A7%84%E8%8C%83/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://63812707.go-bitfs.pages.dev/guide/protocol/003-%E5%86%85%E5%AE%B9%E8%8E%B7%E5%8F%96%E8%AF%B7%E6%B1%82%E8%A7%84%E8%8C%83/</guid><description>&lt;h1 id="003--v3-内容获取请求规范"&gt;003 · v3 内容获取请求规范&lt;/h1&gt;
&lt;p&gt;003 的业务字段保持原有报价、内容和交付期限语义，编码 major 提升为 3。最终授权固定绑定 pool &lt;code&gt;SpendTxID&lt;/code&gt;、base/target sequence、Seller 绝对累计金额、整数费率及 Buyer/Seller/Arbiter 公钥。&lt;/p&gt;</description></item><item><title/><link>https://63812707.go-bitfs.pages.dev/guide/protocol/003-%E5%86%85%E5%AE%B9%E8%8E%B7%E5%8F%96%E8%AF%B7%E6%B1%82%E9%9C%80%E6%B1%82/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://63812707.go-bitfs.pages.dev/guide/protocol/003-%E5%86%85%E5%AE%B9%E8%8E%B7%E5%8F%96%E8%AF%B7%E6%B1%82%E9%9C%80%E6%B1%82/</guid><description>&lt;h1 id="003--内容获取请求需求"&gt;003 · 内容获取请求需求&lt;/h1&gt;
&lt;h2 id="要解决什么"&gt;要解决什么&lt;/h2&gt;
&lt;p&gt;买方已经选中报价并拥有可用费用池后，需要向卖方提出“请交付这个确定内容”的请求。请求必须让卖方能够验证：买方选择了自己的哪份报价、使用哪个池的当前支付能力、选了哪个仲裁者、要种子还是某个文件块，以及最晚何时交付。&lt;/p&gt;</description></item><item><title/><link>https://63812707.go-bitfs.pages.dev/guide/protocol/004-%E5%86%85%E5%AE%B9%E4%BA%A4%E4%BB%98%E5%87%AD%E8%AF%81%E8%A7%84%E8%8C%83/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://63812707.go-bitfs.pages.dev/guide/protocol/004-%E5%86%85%E5%AE%B9%E4%BA%A4%E4%BB%98%E5%87%AD%E8%AF%81%E8%A7%84%E8%8C%83/</guid><description>&lt;h1 id="004--v3-内容交付凭证规范"&gt;004 · v3 内容交付凭证规范&lt;/h1&gt;
&lt;p&gt;004 编码 major 为 3，引用 003 的 &lt;code&gt;PaymentAuthorizationHash&lt;/code&gt; 并携带内容字节。Seller 对确定性 CBOR 交付条款签名；Buyer 验证内容哈希、报价、期限和 Seller 身份后，才构造 005 无签名状态并产生 detached Buyer signature。&lt;/p&gt;</description></item><item><title/><link>https://63812707.go-bitfs.pages.dev/guide/protocol/004-%E5%86%85%E5%AE%B9%E4%BA%A4%E4%BB%98%E5%87%AD%E8%AF%81%E9%9C%80%E6%B1%82/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://63812707.go-bitfs.pages.dev/guide/protocol/004-%E5%86%85%E5%AE%B9%E4%BA%A4%E4%BB%98%E5%87%AD%E8%AF%81%E9%9C%80%E6%B1%82/</guid><description>&lt;h1 id="004--内容交付凭证需求"&gt;004 · 内容交付凭证需求&lt;/h1&gt;
&lt;h2 id="要解决什么"&gt;要解决什么&lt;/h2&gt;
&lt;p&gt;卖方收到 003 后，需要交付种子本体或文件块本体。交付不能把报价、费用池、仲裁者和请求参数逐项回传；它只要明确回答“这是对哪一张买方请求的交付，以及交付的确切字节是什么”。&lt;/p&gt;</description></item><item><title/><link>https://63812707.go-bitfs.pages.dev/guide/protocol/005-%E7%B4%AF%E8%AE%A1%E6%94%AF%E4%BB%98%E8%A7%84%E8%8C%83/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://63812707.go-bitfs.pages.dev/guide/protocol/005-%E7%B4%AF%E8%AE%A1%E6%94%AF%E4%BB%98%E8%A7%84%E8%8C%83/</guid><description>&lt;h1 id="005--v3-累计支付规范"&gt;005 · v3 累计支付规范&lt;/h1&gt;
&lt;p&gt;005 是对 003 最终付款授权的正常履行消息。交易模板、费用、序号、输出和签名由 MultisigPool v4.0.0 唯一决定；go-bitfs 只传递授权哈希、无签名状态交易和独立 Buyer 签名。&lt;/p&gt;</description></item><item><title/><link>https://63812707.go-bitfs.pages.dev/guide/protocol/005-%E7%B4%AF%E8%AE%A1%E6%94%AF%E4%BB%98%E9%9C%80%E6%B1%82/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://63812707.go-bitfs.pages.dev/guide/protocol/005-%E7%B4%AF%E8%AE%A1%E6%94%AF%E4%BB%98%E9%9C%80%E6%B1%82/</guid><description>&lt;h1 id="005--累计支付需求"&gt;005 · 累计支付需求&lt;/h1&gt;
&lt;h2 id="要解决什么"&gt;要解决什么&lt;/h2&gt;
&lt;p&gt;买方验证 004 的内容后，才签出本次累计付款状态并交给卖方。费用池不为每个块独立扣一笔临时金额，而采用覆盖式的累计支付状态：同一池始终花费同一个基础输出，最新状态完整承接此前已付金额。&lt;/p&gt;</description></item><item><title/><link>https://63812707.go-bitfs.pages.dev/guide/protocol/006-%E8%B4%B9%E7%94%A8%E6%B1%A0%E5%85%B3%E9%97%AD%E9%9C%80%E6%B1%82/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://63812707.go-bitfs.pages.dev/guide/protocol/006-%E8%B4%B9%E7%94%A8%E6%B1%A0%E5%85%B3%E9%97%AD%E9%9C%80%E6%B1%82/</guid><description>&lt;h1 id="006--费用池关闭需求"&gt;006 · 费用池关闭需求&lt;/h1&gt;
&lt;h2 id="要解决什么"&gt;要解决什么&lt;/h2&gt;
&lt;p&gt;买方没有承诺必须购买多少内容，甚至可以一项也不买。因此买方不必请求卖方关闭，也不因卖方不作为而起诉；买方只需等待费用池到期并提交自己在 002 已取得的退款交易。关闭不是对报价、文件或交付重新争论。&lt;/p&gt;</description></item><item><title/><link>https://63812707.go-bitfs.pages.dev/guide/protocol/006-%E8%B4%B9%E7%94%A8%E6%B1%A0%E6%97%A0%E6%9D%A1%E4%BB%B6%E5%85%B3%E9%97%AD%E8%A7%84%E8%8C%83/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://63812707.go-bitfs.pages.dev/guide/protocol/006-%E8%B4%B9%E7%94%A8%E6%B1%A0%E6%97%A0%E6%9D%A1%E4%BB%B6%E5%85%B3%E9%97%AD%E8%A7%84%E8%8C%83/</guid><description>&lt;h1 id="006--v3-协商立即关闭规范"&gt;006 · v3 协商立即关闭规范&lt;/h1&gt;
&lt;p&gt;立即关闭由 MultisigPool v4 构造最终 sequence/locktime 的三输出无签名状态，Arbiter 输出存在且金额为 0。Buyer 返回无签名交易和 detached Buyer signature；Seller 验证后产生 detached Seller signature，并通过 &lt;code&gt;MergeArbitratedPoolBuyerSellerSignatures&lt;/code&gt; 返回完整最终交易。节点确认前不推进本地 accepted state。&lt;/p&gt;</description></item><item><title/><link>https://63812707.go-bitfs.pages.dev/guide/protocol/007-%E5%8D%96%E6%96%B9%E4%BB%B2%E8%A3%81%E6%8F%90%E4%BA%A4%E8%A7%84%E8%8C%83/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://63812707.go-bitfs.pages.dev/guide/protocol/007-%E5%8D%96%E6%96%B9%E4%BB%B2%E8%A3%81%E6%8F%90%E4%BA%A4%E8%A7%84%E8%8C%83/</guid><description>&lt;h1 id="007--v3-卖方仲裁提交规范"&gt;007 · v3 卖方仲裁提交规范&lt;/h1&gt;
&lt;p&gt;007 定义 Seller 依据买方最终付款授权请求 Arbiter detached signature 的约束。当前协议 major 为 3，费用池绑定 &lt;code&gt;bitfs.pool.v4&lt;/code&gt;，&lt;code&gt;ArbiterAmount = 0&lt;/code&gt;。&lt;/p&gt;</description></item><item><title/><link>https://63812707.go-bitfs.pages.dev/guide/protocol/007-%E5%8D%96%E6%96%B9%E4%BB%B2%E8%A3%81%E6%8F%90%E4%BA%A4%E9%9C%80%E6%B1%82/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://63812707.go-bitfs.pages.dev/guide/protocol/007-%E5%8D%96%E6%96%B9%E4%BB%B2%E8%A3%81%E6%8F%90%E4%BA%A4%E9%9C%80%E6%B1%82/</guid><description>&lt;h1 id="007--卖方仲裁提交需求"&gt;007 · 卖方仲裁提交需求&lt;/h1&gt;
&lt;h2 id="要解决什么"&gt;要解决什么&lt;/h2&gt;
&lt;p&gt;卖方持有买方已签出的 003 最终付款授权，但买方没有签出本次 005，或正常路径无法完成时，需要仲裁者补足 &lt;code&gt;Seller+Arbiter&lt;/code&gt; 的 2-of-3 签名。仲裁者不是买方或卖方的数据库副本，不能只收到一个哈希或 &lt;code&gt;SpendTxID&lt;/code&gt; 后再向任何一方查询材料。&lt;/p&gt;</description></item><item><title/><link>https://63812707.go-bitfs.pages.dev/guide/sdk/01-%E5%8D%8F%E8%AE%AE%E5%9F%BA%E7%A1%80%E4%B8%8Ecbor/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://63812707.go-bitfs.pages.dev/guide/sdk/01-%E5%8D%8F%E8%AE%AE%E5%9F%BA%E7%A1%80%E4%B8%8Ecbor/</guid><description>&lt;h1 id="01--协议基础与-cbor"&gt;01 · 协议基础与 CBOR&lt;/h1&gt;
&lt;p&gt;返回 &lt;a href="SDK-API%E6%A1%86%E6%9E%B6%E8%AE%BE%E8%AE%A1.md"&gt;SDK API 框架入口&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;当前代码已落地本页的核心边界：&lt;code&gt;bitfs&lt;/code&gt;、&lt;code&gt;pool&lt;/code&gt;、&lt;code&gt;buyer.Workflow&lt;/code&gt;、&lt;code&gt;seller.Workflow&lt;/code&gt;、&lt;code&gt;arbitration.Workflow&lt;/code&gt; 和 &lt;code&gt;wire&lt;/code&gt; 均可直接使用；本文中的伪代码用于说明职责，不替代 Go 包的实际签名。&lt;/p&gt;</description></item><item><title/><link>https://63812707.go-bitfs.pages.dev/guide/sdk/02-%E5%A4%96%E9%83%A8%E9%92%A9%E5%AD%90%E4%B8%8E%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://63812707.go-bitfs.pages.dev/guide/sdk/02-%E5%A4%96%E9%83%A8%E9%92%A9%E5%AD%90%E4%B8%8E%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B/</guid><description>&lt;h1 id="02--外部钩子与数据类型"&gt;02 · 外部钩子与数据类型&lt;/h1&gt;
&lt;p&gt;返回 &lt;a href="SDK-API%E6%A1%86%E6%9E%B6%E8%AE%BE%E8%AE%A1.md"&gt;SDK API 框架入口&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;调用方把钱包、持久化、内容源和节点能力注入 SDK。SDK 不要求某个数据库或 RPC 服务。&lt;/p&gt;
&lt;h2 id="签名时间与内容钩子"&gt;签名、时间与内容钩子&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Signer 使用调用方托管的私钥签出精确 bytes。&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// SDK 永不接收或保存私钥。&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Signer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;interface&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;PublicKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;([]&lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Sign&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;([]&lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// SignatureVerifier 验证某个公钥对精确 payload 的签名。&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 001、003、004 使用它；005 使用 MultisigPoolPort 的交易签名校验。&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;SignatureVerifier&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;interface&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pubkey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;signature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Clock 使到期校验可测试，且禁止工作流直接调用 time.Now。&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Clock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;interface&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;NowUnix&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;UnixSeconds&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// ContentSource 只由卖方实现。它按内容哈希返回 seed 或块的原始字节。&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 返回的内容仍会由 SDK 再计算哈希和长度。&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ContentSource&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;interface&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;LoadContent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Hash32&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;([]&lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// SeedSource 只由买方实现。请求 block 时提供已验证的 seed，SDK 会校验&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// seed_hash 以及 block hash 的成员关系。&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;SeedSource&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;interface&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;LoadSeed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;seedHash&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Hash32&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;([]&lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// ContentSink 是买方可选的落盘钩子。SDK 在验证 004 后才调用它。&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ContentSink&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;interface&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;SaveVerifiedContent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Hash32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="存储钩子"&gt;存储钩子&lt;/h2&gt;
&lt;p&gt;存储接口按凭证类别拆分。应用可用同一数据库实现它们，也可完全使用文件或内存。&lt;/p&gt;</description></item><item><title/><link>https://63812707.go-bitfs.pages.dev/guide/sdk/03-%E8%A7%92%E8%89%B2%E5%B7%A5%E4%BD%9C%E6%B5%81api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://63812707.go-bitfs.pages.dev/guide/sdk/03-%E8%A7%92%E8%89%B2%E5%B7%A5%E4%BD%9C%E6%B5%81api/</guid><description>&lt;h1 id="03--角色工作流-api"&gt;03 · 角色工作流 API&lt;/h1&gt;
&lt;p&gt;返回 &lt;a href="SDK-API%E6%A1%86%E6%9E%B6%E8%AE%BE%E8%AE%A1.md"&gt;SDK API 框架入口&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;当前实现入口分别是 &lt;code&gt;buyer.NewWorkflow(buyer.WorkflowConfig{...})&lt;/code&gt;、&lt;code&gt;seller.NewWorkflow(seller.WorkflowConfig{...})&lt;/code&gt; 和 &lt;code&gt;arbitration.NewWorkflow(arbitration.WorkflowConfig{...})&lt;/code&gt;。下文保留为角色级调用顺序说明；细节以包中的实际类型和方法为准。&lt;/p&gt;</description></item><item><title/><link>https://63812707.go-bitfs.pages.dev/guide/sdk/04-%E5%AE%9E%E6%96%BD%E8%B7%AF%E7%BA%BF/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://63812707.go-bitfs.pages.dev/guide/sdk/04-%E5%AE%9E%E6%96%BD%E8%B7%AF%E7%BA%BF/</guid><description>&lt;h1 id="04--实施路线"&gt;04 · 实施路线&lt;/h1&gt;
&lt;p&gt;返回 &lt;a href="SDK-API%E6%A1%86%E6%9E%B6%E8%AE%BE%E8%AE%A1.md"&gt;SDK API 框架入口&lt;/a&gt;。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;wire&lt;/code&gt;、&lt;code&gt;bitfs&lt;/code&gt; 的 001/003/004、&lt;code&gt;pool&lt;/code&gt; 的 002/005/006、&lt;code&gt;arbitration&lt;/code&gt; 的 007 已实现 deterministic CBOR、严格解码和证据校验。&lt;/li&gt;
&lt;li&gt;MultisigPool 是费用池交易、SIGHASH_ALL|FORKID、2-of-3 脚本、累计付款、最终关闭和退款到期校验的唯一实现；&lt;code&gt;pool.VerifiedNonFinalPoolNode&lt;/code&gt; 负责本地验收和后端响应绑定，具体 BSV RPC 由 &lt;code&gt;NonFinalPoolBackend&lt;/code&gt; 注入。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pool.MemoryStore&lt;/code&gt; 和 &lt;code&gt;bitfs.FileQuoteStore&lt;/code&gt; 已实现线程安全/可重启的参考存储；生产多进程环境应替换为事务数据库，并保留其原子升级、不可变和幂等语义。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;buyer.Workflow&lt;/code&gt;、&lt;code&gt;seller.Workflow&lt;/code&gt;、&lt;code&gt;arbitration.Workflow&lt;/code&gt; 已接入端到端集成测试，覆盖报价、开池、内容交付、付款推进和重复付款重试。&lt;/li&gt;
&lt;li&gt;当前发布面只包含 BitFS v3 的 &lt;code&gt;buyer.Workflow&lt;/code&gt;、&lt;code&gt;seller.Workflow&lt;/code&gt;、&lt;code&gt;arbitration.Workflow&lt;/code&gt; 与 &lt;code&gt;pool&lt;/code&gt; 角色适配器；旧 &lt;code&gt;settlement&lt;/code&gt;/runtime 双栈已删除，不存在 &lt;code&gt;legacy&lt;/code&gt; build tag 验收路径。&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title/><link>https://63812707.go-bitfs.pages.dev/guide/sdk/sdk-api%E6%A1%86%E6%9E%B6%E8%AE%BE%E8%AE%A1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://63812707.go-bitfs.pages.dev/guide/sdk/sdk-api%E6%A1%86%E6%9E%B6%E8%AE%BE%E8%AE%A1/</guid><description>&lt;h1 id="bitfs-sdk-api-框架设计"&gt;BitFS SDK API 框架设计&lt;/h1&gt;
&lt;p&gt;本文是 BitFS SDK 的公开 API 蓝图入口，不是 wire 规范，也不是可直接编译的 Go 代码。实际实现必须服从 001–007 协议规范；若本文与编号规范冲突，以编号规范为准。&lt;/p&gt;</description></item></channel></rss>