首页
/ Bitcoin Core 0.21.0 发布说明详解:Signet、Taproot 共识、描述符钱包与 Tor v3

Bitcoin Core 0.21.0 发布说明详解:Signet、Taproot 共识、描述符钱包与 Tor v3

2026-09-06 16:38:44作者:魏侃纯Zoe

本文以 Bitcoin Core 官方发布说明 doc/release-notes/release-notes-0.21.0.md 为主体,系统梳理 0.21.0 版本的升级方式与兼容性约束、P2P 网络层重大变更(未广播交易跟踪、Tor v3、Signet、wtxid 中继、Taproot 共识规则)、RPC 与配置项变更,以及实验性的描述符钱包(Descriptor Wallets)。结合仓库源码(如 src/txmempool.hsrc/signet.cppsrc/bitcoin-cli.cpp 等),可以帮你准确掌握该版本的每项行为变化、升级注意事项和落地验证方法。

一、升级方式与兼容性约束

0.21.0 是一个包含新功能、缺陷修复、性能改进和翻译更新的常规大版本发布。官方下载渠道为版本发布页(0.21.0 归档下载地址,见原文档中的 bitcoincore.org/bin 链接)。

1.1 升级步骤

从旧版本升级的标准流程:

  1. 关闭正在运行的旧版本节点,等待其完全退出(某些情况下可能需要几分钟);
  2. 按平台执行更新:
    • Windows:运行安装程序;
    • macOS:直接覆盖 /Applications/Bitcoin-Qt
    • Linux:覆盖 bitcoind/bitcoin-qt 可执行文件。

从已 EOL(停止支持)版本直接升级是可行的,但如果数据目录需要迁移,首次启动可能耗时较长;旧版本的钱包文件仍受支持。

1.2 支持的操作系统

  • 经过支持并充分测试的系统:使用 Linux 内核的操作系统、macOS 10.12+、Windows 7 及更新版本;
  • 其他类 Unix 系统可能可用,但测试频率较低,不建议在生产中使用不受支持的系统;
  • 从 0.20.0 起不再支持 macOS 10.12 以下版本;
  • 注意:该版本在激活 macOS "dark mode" 时界面外观不会随之切换(发布说明明确指出了这一已知限制)。

1.3 peers.dat 文件格式变更(向后不兼容)

节点已知 peers 持久化在 peers.dat 中。为容纳 Tor v3 及其他 BIP155 地址,0.21.0 以向后不兼容的方式修改了该文件格式

  • 若文件被 0.21.0 或更新版本写入,旧版本将无法读取;
  • 降级回旧版本时,旧版本会记录错误信息 "Incorrect keysize in addrman deserialization",随后按"文件缺失"处理——继续正常运行并新建一个空的 peers.dat

因此在混合版本网络中升级/降级节点时,需要预期到地址簿数据的这一行为。

二、P2P 与网络层重大变更

这是 0.21.0 变化最集中的部分,直接决定了节点的中继、隐私与抗攻击行为。

2.1 未广播交易集合(Unbroadcast Set):mempool 跟踪本地提交交易

0.21.0 起,mempool 会跟踪通过钱包或 RPC 提交的交易是否已成功广播。节点每 10–15 分钟尝试重新公告尚未广播成功的交易,直到某个 peer 通过 getdata 请求它,或该交易因其他原因从 mempool 中移除。通过 P2P 中继提交给节点的交易不纳入该跟踪范围。

从源码看,该集合在 src/txmempool.h 中以成员 m_unbroadcast_txids 实现,并提供 AddUnbroadcastTxRemoveUnbroadcastTxGetUnbroadcastTxsIsUnbroadcastTx 等访问接口(第 284、565–590 行附近);RPC 侧在 src/rpc/mempool.cpp 中将其暴露给 getmempoolentry/getrawmempoolunbroadcast 字段)与 getmempoolinfounbroadcastcount 字段)。

这一机制的意义在于:此前钱包交易的中继保证依赖钱包自身周期性 rebroadcast,节点会把"某地址有未确认钱包交易"这类信息泄露给其连接的全部 peer;0.21.0 把初始广播的确认职责移交给 mempool 层,钱包 rebroadcast 频率随之从约 15 分钟一次降低到 12–36 小时一次,显著降低钱包活动可关联性(对应发布说明中 Wallet 章节与 changelog 的 Privacy 分类,如 #18038、#18861、#19109)。

2.2 peer 交易公告上限:100000 → 5000

单个 peer 已公告且节点考虑请求的交易集合上限从 100000 降至 5000,达到上限后后续公告被忽略。若需要向节点投递(非常)大批量交易,可对该 peer 授予 relay 网络权限作为例外,例如对 localhost:

-whitelist=relay@127.0.0.1

2.3 Tor v3 隐藏服务与 BIP155 地址中继

  • 本版本完整实现 BIP155:支持 Tor v3 隐藏服务,并向其他 peer 中继(rumor)BIP155 地址格式;Tor v2 仍完全受支持,但 Tor 网络正在推进 v2 弃用;
  • 通过 -listenonion 自动创建的 onion 服务改为 Tor v3。旧的 v2 密钥(如有)保留在数据目录的 onion_private_key 文件中,Bitcoin Core 不再读取它,可在确认无用后删除。v3 服务密钥保存在新文件 onion_v3_private_key
  • 若想强制沿用已弃用的 v2 服务(不推荐),可将 v2 密钥覆盖到 v3 文件,例如 cp -f onion_private_key onion_v3_private_key

配套文档见 doc/tor.md

2.4 锚点连接(anchors.dat):抗重启导致的地址集替换

节点关闭时把两个 outbound block-relay-only peer(即"锚点")的网络地址写入 anchors.dat;下次启动时读取该文件并尝试重连同样两个 peer。目的是防止攻击者利用节点重启造成 peer 集合完全更换,作为日食攻击(eclipse attack)手段之一(#17428)。

2.5 BIP157 块过滤器服务端支持

启用以下两个配置后,节点会向网络中的 peer 提供 BIP157 压缩过滤器(compact filters):

-blockfilterindex=1 -peerblockfilters=1

注意 -blockfilterindex(构建本地索引)与 -peerblockfilters(对 peer 提供过滤器服务)是两个独立开关,需同时开启才能实现"对外的 BIP157 服务"。

2.6 Signet:BIP325 签名测试网

0.21.0 在 mainnet、testnet、regtest 之外新增 signet 网络。Signet 是中心化控制的测试网络,比旧 testnet 更可控、更可预测:

  • 官方维护一个公共 signet,用 -signet 选择;
  • 也可以创建个人 signet:-signetchallenge 指定挖矿挑战(hex),-signetseednode 指定种子节点;
  • Taproot 规则在 signet 上已经激活,是实验 Taproot 的推荐环境。

源码层面,signet 共识校验(从 coinbase witness 提交段提取 signet_solution、计算修改后 Merkle 根并验证签名)实现在 src/signet.cpp-signetchallenge/-signetseednode 的解析与参数校验在 src/chainparams.cpp(第 101–111 行附近)完成,其中明确要求 challenge 只能是单个 hex 值。

2.7 wtxid 中继(BIP339)

节点间协商后,交易使用 wtxid 而非 txid 进行公告(#18044)。这是为 Taproot 铺路的 P2P 层变更:UTXO 花费者无需在公告阶段就构造完整签名交易。

2.8 Taproot 共识规则(BIP341/BIP342)

本版本实现 Taproot 共识规则(Schnorr 签名、Taproot 输出、Tapscript),但不在 mainnet 上激活;共识实现事实可参考 changelog 中的 #19953(Implement BIP 340-342 validation)与 #18267(Signet)。实验建议在 signet 上进行,因为其规则已在 signet 激活。

三、RPC 变更

3.1 字段新增与行为变化

RPC 变化
getpeerinfo 新增 network 字段(peer 连接所用网络类型:"ipv4"、"ipv6" 或 "onion");新增 last_blocklast_transaction 字段(来自该 peer 的最后一个块/最后一条有效交易的 UNIX 时间戳);新增 connection_type 字段(六种连接类型之一,详见该 RPC 帮助文本)
getnetworkinfo 新增 connections_inconnections_out 字段(入站/出站连接数),与原有总数字段 connections 并存
getmempoolinfo 新增 unbroadcastcount 字段:等待初始广播被 peer 确认的交易数
getmempoolentrygetrawmempool verbose=truegetmempoolancestorsgetmempooldescendants 新增 unbroadcast 布尔字段
所有暴露交易版本号的 RPC 版本号按无符号 32 位整数输出(与共识逻辑一致);> 2 仍属非标准交易。注意 joinpsbt 选择最高版本号合并 PSBT,此变化同样影响它
testmempoolaccept 若交易能通过验证,额外返回 vsize 与含 base 费的 fees 对象

3.2 弃用字段(本版本仍可显式开启,下个大版本移除)

  • getpeerinfobanscore 字段:默认不再返回,用 -deprecatedrpc=banscore 恢复;
  • getpeerinfoaddnode 字段:默认不再返回,用 -deprecatedrpc=getpeerinfo_addnode 恢复;官方建议改用 connection_type(addnode 为 true 时其值为 manual);
  • getpeerinfowhitelisted 字段:默认不再返回,用 -deprecatedrpc=getpeerinfo_whitelisted 恢复;官方建议改用 permissions 字段判断权限。

3.3 PSBT / 资金相关

  • walletcreatefundedpsbt:手动选定输入不足以覆盖输出+手续费时,RPC 报错 Insufficient funds;新增 add_inputs 选项允许自动补充输入(#16377);
  • fundrawtransaction:支持 add_inputs 选项,设为 false 时禁止自动添加输入,资金不足则直接失败。

3.4 新增 RPC:getindexinfo

getindexinfo 返回节点当前运行的索引(如 txindex、blockfilterindex)及其同步状态与高度;接受可选参数 index_name 仅查询指定索引。实现位于 src/rpc/node.cppgetindexinfo() 函数(第 358 行附近),归类于 util 命令组,帮助文本中给出 getindexinfo txindex 等示例。

四、配置项变更

4.1 更新/新增/移除的配置

  • ZeroMQ 多监听:同一 ZMQ 通知(如 -zmqpubhashtx=address)现在可以指定多次,把同一通知发布到多个 ZMQ socket;
  • -banscore 已移除:修改"断开并惩罚不良 peer"默认阈值的该选项随 0.20.1 与本版本对 misbehaving peer 处理机制的调整一并删除,细节见 0.20.1 发布说明中 "Changes regarding misbehaving peers"(#19464);
  • -debug=db 已移除:该日志分类在 0.20 弃用(由 -debug=walletdb 取代,以区别于 coindb),现正式删除(#19202);
  • download 权限从 noban 中分离:出于兼容 noban 隐含 download,但未来可能改变;详见 -whitebind-whitelist 的帮助文本(#19191);
  • netmask 校验收紧:0 位之后还有 1 位的掩码(如 255.0.255.255,1 位不连续)不再被接受——按 RFC 4632 属非法。影响 -rpcallowip-whitelist 配置与 setban RPC(#19628);
  • -blocksonly 完全禁用手续费估算(#18766);
  • 新增 startupnotify:指定 Bitcoin Core 完成启动序列后执行的命令(#15367),常用于服务编排/健康检查。

钱包与 GUI 相关配置变化见下文钱包与 GUI 章节。

4.2 命令行工具变更(Tools and Utilities)

  • bitcoin-cli -netinfo:网络 peer 连接仪表盘,数据来自 getpeerinfogetnetworkinfo,以人类可读格式呈现;可选 0–4 的整数参数逐级增加详情(当前实现还支持 outonly 参数只看出站 peer,以及 help 子命令,见 src/bitcoin-cli.cpp 第 162、677–755 行附近)。帮助文本建议配合 Linux 的 watch(1) 使用,例如 watch --interval 1 bitcoin-cli -netinfo 4
  • bitcoin-cli -generate:等价于 generatenewaddress + generatetoaddress 的客户端出块命令,用于命令行测试(regtest 场景),是旧 generate RPC 的客户端版本(#19133);
  • bitcoin-cli -getinfo:多钱包模式下(未用 -rpcwallet 指定钱包时)会显示每个已加载钱包的名称与余额;其 connections 字段从单一整数扩展为含 inouttotal 三个数值的 JSON 对象(#19405)。

五、钱包变更(重点)

5.1 常规行为变化

  • getaddressinfo 弃用收尾:0.20 预告的两处弃用在本版本兑现——label 字段移除;labels 不再返回含 name/purpose 键值对的 JSON 对象,自 0.20 起它返回标签名称的 JSON 数组(#19200);
  • 钱包 rebroadcast 频率从约 15 分钟一次降为 12–36 小时一次,配合 mempool unbroadcast set 保持同等初始广播保证(见 2.1 节,#18038);
  • sendtoaddresssendmany 支持可选 verbose=True,额外返回所发交易的手续费原因(#19501);
  • keypool 为空时,钱包也可以创建无找零交易(此前会失败,#17219);
  • -salvagewallet 启动选项移除:相应功能迁移为 bitcoin-wallet 工具的 salvage 子命令(#18918);
  • -zapwallettxes 移除:该选项最初用于拯救受 malleability 攻击影响的钱包,后来被用于对未广播 RBF 的交易做手续费 bump,现已被 abandon transaction 功能取代(#19671);
  • 未加载钱包却调用钱包 RPC 时的错误码从 -32601(method not found)改为 -18(wallet not found)(#20101);
  • 钱包现在默认启用 APS(avoid partial spends),前提是 APS 与不用 APS 的手续费差异不超出阈值;阈值由新增配置 -maxapsfee 调整:默认 0(即两者手续费相同才启用 APS),设为 -1 则禁用 APS(除非同时设置了 -avoidpartialspends)(#14582)。该选项在 src/wallet/init.cpp 第 61 行注册,读取逻辑在 src/wallet/wallet.cpp 第 3020 行附近。

5.2 不再自动创建默认钱包

0.21.0 起,Bitcoin Core 启动时不再自动创建新钱包。行为变为:

  • 加载命令行或 bitcoin.conf/settings.json-wallet 选项指定的既有钱包;
  • 默认额外加载顶层无名("")钱包;
  • 若指定的钱包不存在,只记录警告,而不会像旧版本那样创建带新密钥/新地址的钱包。

创建新钱包的正式途径:GUI(创建入口更醒目)、bitcoin-cli createwalletbitcoin-wallet create,或 createwallet RPC(#15454、#20186)。

5.3 实验性:描述符钱包(Descriptor Wallets)

官方明确声明:描述符钱包仍是实验性功能,并非所有预期功能可用,可能存在缺陷,且当前行为未来可能变化。

概念与动机:0.21 引入一种新钱包类型——描述符钱包。它用输出描述符存储 scriptPubKey 信息,与 Legacy 钱包"用密钥隐式生成 scriptPubKey/地址"的结构相对。因为从"基于密钥"转向"基于脚本",Legacy 钱包中许多令人困惑的行为在描述符钱包中不可能发生;它对"属于钱包(mine)"的定义更简单直观,watch-only 与导入语义也完全不同。

该引入不影响既有钱包:现有钱包行为不变;新建的 Legacy 钱包(仍是默认类型)行为与旧版本一致。两类钱包的差异主要体现在导入/导出与 watchonly 功能上。

创建描述符钱包

描述符钱包不是默认类型:

  • GUI 的 Create Wallet 对话框新增复选框,勾选即创建描述符钱包;
  • createwallet RPC 新增 descriptors 参数,设为 true 创建描述符钱包,否则创建 Legacy 钱包。

IsMine 语义

IsMine 决定某脚本(及其输出)是否属于钱包。Legacy 钱包的定义是"钱包能否签发一笔花费该输出的输入";由于一把密钥可参与多种脚本,该定义会导致大量意料之外的脚本被视为钱包所有——典型如:把 P2PKH 地址变形为 P2WPKH 地址后,Legacy 钱包即使用户从未请求过该新类型地址,也仍会把发给它的输出判为"mine"。

描述符钱包中,描述符显式指定钱包拥有的脚本集合;由于描述符是确定性且可枚举的,用户能确切知道钱包会监视哪些脚本,IsMine 实现也简单得多;描述符钱包只监视从钱包显式请求过的地址。对绝大多数用户,此变化基本无感。

导入与导出

Legacy 钱包可导入原始脚本与密钥,这些导入对象与自生成密钥分开处理,使 IsMine 逻辑必须区分 spendable 与 watchonly,复杂度高。

描述符钱包只接受完整描述符的导入,导入后与钱包自生成的描述符同等对待,IsMine 无需再区分 spendable/watchonly。为此新增了 importdescriptors RPC(语法类似 importmulti)。由于两类钱包的存储/导入机制不同,既有导入 RPC 在描述符钱包上被禁用,且本版本尚未提供描述符钱包的导出 RPC。

描述符钱包中禁用的 RPC

  • importprivkey
  • importpubkey
  • importaddress
  • importwallet
  • dumpprivkey
  • dumpwallet
  • importmulti
  • addmultisigaddress
  • sethdseed

watch-only 语义:从"钱包内混合"到"整钱包 watchonly"

Legacy 钱包中私钥与仅监视脚本共存,监视部分不计入正常余额,许多 RPC 需要显式 include_watchonly 才能使用(容易被遗漏)。描述符钱包改为按钱包粒度判定 watchonly:取决于创建时是否禁用私钥,钱包整体要么是 watchonly、要么不是。

发布说明特别指出两个注意事项:

  1. 若一个"启用私钥"的描述符钱包包含缺少的多私钥描述符(例如只有一个私钥的 multi(...)),该钱包将无法签名并广播交易,只能走 PSBT 流程;GUI 的 Send、sendtoaddress 等入口仍然存在但不可用;
  2. 若钱包中同时存在单密钥描述符(如 wpkh(...))与上述多密钥描述符,会出现"部分交易可发、部分不可发"的混乱局面(取决于 coin selection 选了哪些输入)。官方不把这视为受支持的用法:多签应放在独立钱包中(目前也尚无带私钥的描述符导出功能)。

BIP 44/49/84 推导路径

改用描述符后,Bitcoin Core 的默认推导路径遵循 BIP 44/49/84 规范;不同推导路径的描述符可正常导入。

SQLite 数据库后端

描述符钱包的钱包文件使用 SQLite,而非 Legacy 钱包的 Berkeley DB。这会打破任何直接操作钱包文件的外部工具兼容性——但发布说明指出,迁移到描述符本身已经在破坏兼容。源码层面,钱包数据库创建入口在 src/wallet/interfaces.cppMakeWalletDatabase,第 632 行附近),描述符 SPKMan 的导出/签名代码在 src/wallet/export.cpp 等处(DescriptorScriptPubKeyMan)。

5.4 钱包 RPC 变更

  • upgradewallet RPC 取代 -upgradewallet 命令行选项(#15761);
  • settxfee 在费用高于 -maxtxfee 时直接失败(钱包本就拒绝高于 -maxtxfee 的交易)(#18467);
  • fee_rate 参数sendtoaddresssendmanyfundrawtransactionwalletcreatefundedpsbt 及新实验性 send RPC 引入以 sat/vB(聪/虚拟字节) 计价的费用率参数 fee_ratefundrawtransaction/walletcreatefundedpsbt 中旧的 feeRate 选项(BTC/kvB)暂保留但预计很快弃用;相关 RPC 的错误信息从 BTC/kB 更新为 sat/vB,帮助文档中 BTC/kB 更正为 BTC/kvB(#20305、#11413);
  • bumpfeefee_rate 单位从 BTC/kvB 改为 sat/vB——官方明确这是破坏性 API 变更,但相对无害:两种单位相差 100000 倍,若误按 BTC/kvB 传入,费率会因"过低"而报错;最坏情况是交易以 1 sat/vB 发出,但由于显式费率时默认启用 RBF(BIP125),事后可 bump(#20305);
  • estimate_mode 参数在 bumpfeefundrawtransactionsendmanysendtoaddresssendwalletcreatefundedpsbt 中变为大小写不敏感bumpfee 的 options 中 confTarget 更名为 conf_target(#11413);
  • fundrawtransactionwalletcreatefundedpsbt 使用 lockUnspents 时,现在会同时锁定手动选择的币(此前只锁自动选中的)。注意锁定的币不会被自动 coin selection 使用,但可手动选择(#18244);
  • 新增 send RPC:语法类似 walletcreatefundedpsbt,支持 coin selection 与自定义费率的实验性"终极 send RPC",后续版本可能变更(#16378)。

六、GUI 变更

  • 在 GUI 中创建或加载的钱包将自动写入启动加载列表,下次启动自动加载,无需手动重新加载。列表存于 <datadir>/settings.json,与命令行/bitcoin.conf 中的 -wallet= 设置叠加生效;在 GUI 中卸载的钱包会从该列表移除,下次启动不再自动加载(#19754);
  • GUI Peers 窗口不再显示 "Ban Score" 字段(与 0.20.1 及本版本对 misbehaving peer 处理的变化一致,#19512)。

七、底层(Low-level)变更

  • sendtoaddress 的以下错误码从 -4 改为 -6,以与 sendmany 保持一致:
    • Insufficient funds
    • Fee estimation failed
    • Transaction has too long of a mempool chain
  • sendrawtransaction 超过 maxfeerate 时的错误码从 -26 改为 -25,错误串从 "absurdly-high-fee" 改为 "Fee exceeds maximum configured by user (e.g. -maxtxfee, maxfeerate).";testmempoolacceptreject-reason 相应从 absurdly-high-fee 改为 max-fee-exceeded。钱包与 rawtransaction RPC 之间关于超出最大费率的错误信息统一为同一措辞(#19339)。

八、测试相关变更

  • BIP 325 默认 signet 可在测试框架中启用:通过 -chain=signet-signet-signetchallenge-signetseednode 用于启用自定义 signet;
  • 新增 generateblock RPC:允许 regtest 模式的测试者生成由自定义交易集合构成的块(#17693)。

九、变更日志概览(0.21.0 change log 分类摘录)

完整逐条清单见 doc/release-notes/release-notes-0.21.0.md 的 "0.21.0 change log" 章节,共覆盖 Consensus、Policy、Mining、Privacy、Block and transaction handling、P2P protocol and network code、Wallet、RPC and other APIs、GUI、Build system、Tests and QA、Miscellaneous、Documentation 等分类、数百个 PR。按主题归纳的关键条目:

  • 共识:#18267 BIP-325 Signet、#19953 BIP 340–342(Schnorr/Taproot/Tapscript)验证实现;
  • 隐私:#18038 mempool 跟踪本地提交交易、#18861 不响应"待公告"交易的 GETDATA、#19109 仅允许 getdata 最近公告的 inv;
  • P2P/网络:#19988 交易请求逻辑重构(5000 上限)、#19954 BIP155 完整实现与 TORv3 升级、#20284 保证旧版本不解析新格式 peers.dat、#17428 重启保留 block-relay 连接、#19891/#19697 GETADDR 缓存防拓扑泄露、#19670 保护 localhost 与 block-relay-only peer 免于逐出;
  • 钱包:#16528 原生描述符钱包(DescriptorScriptPubKeyMan)、#19077 SQLite 作为替代钱包数据库并用于新描述符钱包、#15454/#20186 移除默认钱包自动创建、#14582 APS 默认启用(-maxapsfee)、#19754 启动时重新加载之前加载过的钱包、#16378 实验性 send RPC;
  • RPC/CLI:#19550 索引列举 RPC(getindexinfo)、#19643 -netinfo 仪表盘、#19133 bitcoin-cli -generate、#19405 getnetworkinfo/-getinfo 连接方向拆分、#20305 fee_rate sat/vB 参数;
  • 构建系统:C++17(fuzz 构建)、Multiprocess 构建支持、llvm-cov、MSan、Windows 7 最低版本强制、secp256k1 子树更新(含 BIP340 支持与 endomorphism)等;
  • 测试与 QA:#18011 以 nanobench 替换基准测试框架、大量 fuzzing 用例扩充、signet witness commitment 解析测试(#20004)等。

十、升级检查清单

结合上文,从 0.20.x 升级到 0.21.0 时建议逐项确认:

  1. 回滚预案:了解 peers.dat 新格式导致的降级行为(旧版本丢弃地址簿并报错);
  2. 脚本/RPC 兼容性:检查是否依赖 getpeerinfobanscore/addnode/whitelisted 字段(默认已移除)、sendrawtransaction-26 错误码(现为 -25)、bumpfeeconfTarget/BTC/kvB 费率单位(现为 conf_target/sat/vB)、-getinfoconnections 字段结构(现为 JSON 对象);
  3. 配置清理:删除 -banscore-salvagewallet-zapwallettxes-debug=db 等已移除项;核对 -rpcallowip/-whitelist/setban 中的网段是否含非连续掩码;
  4. Tor 运维:确认 onion_v3_private_key 生成正常,按需处理旧 onion_private_key
  5. 钱包运维:不再依赖"首次启动自动建钱包"行为,改用 createwallet/bitcoin-wallet create;若使用描述符钱包,接受其实验性状态、SQLite 文件格式与被禁用的导入/导出 RPC 集合。
登录后查看全文
热门项目推荐
相关项目推荐