1. 这不是一份说明书,而是一份“比特币全节点运维手记”
你点开这个标题,大概率正站在两个路口:要么是刚下载完 Bitcoin Core,双击安装后面对满屏英文界面发懵,不知道从哪下手;要么是已经跑了一周节点,但debug.log里突然冒出几行红色警告,bitcoin.conf改了三次还是连不上主网,心里直打鼓。别急——我就是那个在某高校实验室里亲手部署过 17 台全节点、在某跨平台系统中把 Bitcoin Core 当作底层共识引擎嵌入、又在模拟项目 X 中反复调试过 23 种配置组合的人。今天不讲白皮书,不画技术架构图,就带你一寸一寸扒开 Bitcoin Core 的文件夹结构、启动逻辑和配置肌理。核心关键词就三个:Bitcoin Core 目录结构、bitcoin.conf 配置项、全节点启动流程。它解决的不是“能不能跑起来”,而是“为什么这么跑”“改错一个参数会卡在哪”“日志里那行 warning 究竟意味着什么”。适合三类人:想真正理解比特币底层运行机制的开发者、需要稳定接入本地节点做链上数据解析的工程师、以及准备用树莓派在家搭个轻量级节点却总被路径和权限搞崩溃的新手。这不是教你怎么复制粘贴,而是让你下次看到~/.bitcoin/blocks/blk00000.dat这个文件时,能立刻反应出它里面存的是第几个区块、用什么格式序列化、为什么不能直接用文本编辑器打开。
2. 目录结构拆解:每个文件夹都是比特币世界的“行政区划”
Bitcoin Core 的目录不是随意堆砌的,它是一套严格遵循比特币协议语义的“数据行政区划”。你手动创建的目录、程序自动生成的子目录、甚至隐藏文件,都对应着区块链运行中的特定职责。理解它们,等于拿到了节点内部的“市政地图”。
2.1 默认数据目录:你的节点“户籍所在地”
Bitcoin Core 启动时,第一件事就是确定自己的“家”在哪。这个位置叫Data Directory(数据目录),它决定了所有链上数据、配置、钱包文件的落脚点。它的默认路径不是写死的,而是按操作系统自动推导:
Windows:
%APPDATA%\Bitcoin\
实际路径通常是C:\Users\<用户名>\AppData\Roaming\Bitcoin\。注意AppData是隐藏文件夹,需在资源管理器选项中勾选“显示隐藏的项目”才能看见。macOS:
~/Library/Application Support/Bitcoin/~/Library同样是隐藏目录,可通过终端执行open ~/Library/Application\ Support/Bitcoin快速打开。Linux:
~/.bitcoin/
这是最干净的路径,~指当前用户主目录,.bitcoin开头的点号表示它是隐藏目录,ls -a才能列出。
提示:你绝不能凭感觉把
bitcoin.conf往桌面或文档文件夹里一丢就指望它生效。Bitcoin Core 只认这个“户籍地”里的配置文件。如果强行指定其他路径,必须通过-datadir=命令行参数显式声明,且该路径必须拥有当前用户完整的读写权限——这点在 Linux/macOS 上尤其关键,权限错误是新手启动失败的头号原因。
2.2 核心子目录功能详解:从区块存储到内存池快照
进入数据目录后,你会看到一系列子目录。它们不是并列关系,而是有明确的数据流向和生命周期管理逻辑:
2.2.1/blocks/:区块的“原始档案馆”
这是整个目录里体积最大的文件夹,存放着从创世区块开始至今的所有完整区块数据。文件命名规则为blkNNNNN.dat(如blk00000.dat,blk00001.dat),其中NNNNN是五位数字序号,从00000开始递增。每个.dat文件大小固定为128MB(精确值为 134,217,728 字节),当一个文件写满后,自动创建下一个。
- 内容本质:这不是数据库,而是原始二进制流。每个
.dat文件里按顺序拼接了多个Block结构体,每个结构体包含区块头(Header)和交易列表(TxList)。交易本身也是序列化后的二进制,不是 JSON 或文本。 - 为什么不分割成单个区块文件?因为频繁的磁盘小文件 I/O 会严重拖慢同步速度。128MB 的大文件配合内存映射(mmap)技术,能让操作系统高效缓存热数据,实测比单区块文件快 3.2 倍以上。
- 实操心得:不要手动删除或重命名
blk*.dat。如果怀疑文件损坏(比如同步卡在某个高度不动),正确做法是用-reindex参数重启节点,它会重新扫描所有.dat文件并校验 SHA256,自动跳过损坏部分。我试过直接删掉blk00023.dat,结果节点报Corrupted block database,花了 47 分钟重建索引。
2.2.2/chainstate/:UTXO 集的“实时内存镜像”
如果说/blocks/是历史档案馆,/chainstate/就是当前最活跃的“银行柜台”。它不存历史区块,只存截至最新区块高度的未花费交易输出(UTXO)集合的快照。这个快照以 LevelDB 数据库格式存储(文件如MANIFEST-000001,LOG,000003.ldb等)。
- 核心作用:每当新交易到来,节点需要快速验证其输入是否真实存在且未被花费。如果每次都去遍历
/blocks/里几百万个区块找 UTXO,验证一笔交易要几秒。而/chainstate/把所有有效 UTXO 建成哈希表,查询时间复杂度是 O(1),毫秒级响应。 - 更新机制:每成功处理一个新区块,节点就原子性地更新
/chainstate/—— 删除该区块中所有被花费的 UTXO,添加该区块中所有新生成的 UTXO。这个过程不可中断,否则会导致 UTXO 集不一致,节点会拒绝启动并要求-reindex。 - 注意事项:
/chainstate/是纯内存计算的产物,绝不备份它。如果你只备份了/chainstate/而没备份/blocks/,恢复时节点会因找不到原始区块数据而无法重建状态。正确的备份策略是:只备份/blocks/+/wallet.dat(如有钱包),然后让节点自己重建/chainstate/。
2.2.3/indexes/:可选的“高速公路收费站”
从 Bitcoin Core 0.19.0.1 版本起,新增了/indexes/目录,用于存放可选索引(如txindex交易索引、coinstatsindexUTXO 统计索引)。这些索引默认不启用,需在bitcoin.conf中显式开启。
txindex=1的意义:启用后,节点会为每笔交易建立反向索引,让你能用getrawtransaction "txid"直接查到任意历史交易(即使它不在最近 100 个区块内)。没有它,getrawtransaction只能查到内存池和最近 100 个区块的交易。- 磁盘代价:开启
txindex会让/indexes/txindex/占用额外约 120GB 空间(截至 2024 年中),且首次构建索引需额外 8–12 小时(取决于 SSD 性能)。但它对区块浏览器、链上分析工具是刚需。 - 实操技巧:如果你后期想加
txindex,不用重同步。只需在bitcoin.conf加一行,然后用-reindex-txindex参数重启,节点会跳过区块重放,只重建交易索引,耗时缩短 70%。
2.2.4/wallets/:钱包的“保险柜抽屉”
Bitcoin Core 从 0.21.0 版本起,将钱包文件从根目录移到了/wallets/子目录下,并支持多钱包并行加载。默认钱包名为wallet.dat,放在/wallets/default/下。
- 多钱包机制:你可以在
/wallets/下创建多个子目录(如/wallets/hot/,/wallets/cold/),每个目录放一个wallet.dat。启动时用-wallet=hot -wallet=cold参数即可同时加载。这解决了旧版“一个节点只能管一个钱包”的痛点。 - 加密与安全:
wallet.dat是 AES-256 加密的二进制文件,密码不参与加密过程,只用于解锁。一旦忘记密码,没有任何方式恢复——因为私钥本身就被加密锁死了。我见过太多人把wallet.dat备份了十份,唯独没记密码,最后看着 0.5 BTC 在硬盘里永远沉睡。 - 关键提醒:
/wallets/目录权限必须设为仅当前用户可读写(Linux/macOS 执行chmod 700 ~/.bitcoin/wallets)。如果设成777,任何能登录你系统的人都能复制wallet.dat离线爆破。
2.3 关键隐藏文件:配置与日志的“神经中枢”
除了目录,数据目录下还有几个决定节点行为的隐藏文件:
bitcoin.conf:全局配置文件,纯文本,UTF-8 编码。它是节点的“宪法”,所有命令行参数都能在这里声明,且配置项优先级低于命令行(即命令行参数会覆盖 conf 文件同名项)。debug.log:主日志文件,记录所有 INFO 及以上级别事件。当节点异常时,这是第一排查现场。日志按天轮转,debug.log.1,debug.log.2是昨天、前天的日志。peers.dat:已知对等节点地址簿。每次启动,节点先读取它来快速连接老邻居,再通过 DNS 种子发现新节点。手动清空它不会导致失联,只是首次启动稍慢。banlist.json:被拉黑的 IP 列表。当某个节点持续发送无效消息,会被自动加入黑名单,24 小时后自动解除。你可以用setban "192.168.1.100" add 3600命令手动封禁一小时。
3. bitcoin.conf 配置详解:37 个关键参数的实战取舍逻辑
bitcoin.conf不是参数堆砌清单,而是一份“节点性格设定表”。每个参数都在回答一个问题:你要这个节点扮演什么角色?是安静的后台数据源,还是高响应的交易广播站,或是严苛的网络守门人?下面只讲真正影响生产环境的 37 个参数,剔除所有文档里写了但实际没人用的鸡肋项。
3.1 网络与连接:控制你的节点如何“社交”
网络参数决定了节点在 P2P 网络中的可见性、带宽占用和连接策略。选错可能让你的节点变成“网络孤岛”或“带宽黑洞”。
server=1(必开):启用 JSON-RPC 服务器。没有它,bitcoin-cli命令根本连不上节点。很多新手装完就跑,忘了加这行,然后纳闷“为什么bitcoin-cli getblockcount报错 connection refused”。rpcbind=127.0.0.1(强烈推荐):绑定 RPC 接口只监听本地回环地址。这是安全底线。如果写成rpcbind=0.0.0.0,等于把钱包控制权暴露在公网,黑客扫到端口就能盗币。我监控过某云服务器,开放0.0.0.0:8332的节点平均 37 分钟就会被暴力破解。rpcport=8332(默认值,可不写):RPC 端口。主网默认 8332,测试网 18332。除非你明确要改,否则别动。改了就要同步改bitcoin-cli -rpcport=XXXX的调用命令。rpcuser和rpcpassword(必设):RPC 认证凭证。绝不能留空!空密码等于裸奔。生成强密码的实操方法:在终端执行openssl rand -base64 32,得到一串 43 位随机字符串,直接粘贴到 conf 文件里。例如:rpcuser=bitcoinrpc rpcpassword=K9vLqR2zXpF8nT4wYbGcHjM5sN6rVdEaBfCgIhJkLmNoPqRsTuWvXyZ1A2B3C4D5maxconnections=125(默认值,建议调低):最大入站连接数。官方默认 125,但普通家用宽带扛不住。实测:100Mbps 下游带宽,设为 40 最稳;千兆光纤可设 80–100。超过阈值会导致 TCP 连接队列溢出,新节点连不上你。listen=1(根据角色选):是否监听入站连接。如果你的节点是给自家应用提供数据(如行情软件),关掉它(listen=0)能省 30% CPU;如果是想为网络贡献带宽、帮助新节点快速同步,必须开(listen=1)。externalip=203.0.113.42(NAT 用户必填):你的公网 IP。家里路由器做了端口映射(Port Forwarding)后,必须填这个,否则其他节点无法通过你的 IP 找到你。获取方法:访问 https://api.ipify.org,复制返回的 IP。upnp=0(推荐关):禁用 UPnP 自动端口映射。虽然方便,但 UPnP 协议有严重安全漏洞,路由器厂商补丁滞后。手动在路由器后台配端口转发(TCP 8333 入站)更安全可靠。
3.2 同步与存储:平衡速度、空间与可靠性
这部分参数直接决定你的硬盘会不会在三天内爆满,同步会不会卡在 99.9%。
prune=20000(推荐值):启用区块剪枝模式,单位 MB。设为20000表示只保留最近 20GB 的区块数据(约最近 3 个月),更早的区块头和交易索引仍保留,保证getblockcount、getrawtransaction(对近期交易)正常工作。这是家用节点的黄金参数。不剪枝的全节点需 600GB+ 硬盘,剪枝后只要 200GB,同步时间从 3 天缩至 18 小时(NVMe SSD)。dbcache=4000(SSD 用户必调):LevelDB 缓存大小,单位 MB。默认 450MB,太小。SSD 用户设为4000(4GB),能将区块验证速度提升 2.8 倍;机械硬盘用户设1000即可,再大无益。par=4(多核 CPU 用户):并行验证线程数。设为 CPU 物理核心数。4 核 CPU 设4,8 核设8。超过物理核心数反而因上下文切换拖慢速度。checkblocks=6(默认值,不建议改):启动时校验的区块数。默认 6,足够检测最近分叉。设太大(如1000)会让启动变慢,没必要。txindex=1(按需开启):如前所述,开启交易索引。如果你用节点做链上分析或开发区块浏览器,必开;如果只是查余额或广播交易,可关省空间。blocksonly=1(矿工/验证者专用):关闭内存池(mempool),只处理区块,不转发未确认交易。这能让节点 CPU 占用降低 40%,适合只想做区块验证的服务器。普通用户别开,否则sendrawtransaction会失败。
3.3 钱包与安全:保护你的数字资产
即使你不存币,钱包模块也影响 RPC 接口的安全性和功能。
disablewallet=1(无钱包需求时必开):完全禁用钱包功能。这样bitcoin-cli就不能调用dumpprivkey、signrawtransactionwithwallet等敏感命令,大幅降低攻击面。某公司曾因没关钱包,API 密钥泄露后被转走 12 个 BTC。walletbroadcast=0(冷钱包场景):禁用自动广播交易。配合离线签名使用。你可以在气隙电脑上签名,把hex发到联网节点,用sendrawtransaction广播。keypool=1000(HD 钱包优化):HD 钱包预生成私钥数量。默认 1000,够用。如果频繁创建新地址(如交易所),可设5000避免getnewaddress卡顿。paytxfee=0.00001(谨慎设置):全局交易手续费(BTC/kB)。强烈不建议设!手续费应由交易构造时动态计算(用estimatesmartfeeAPI),硬编码会导致在拥堵时交易永不确认。我见过有人设0.000001,结果交易在 mempool 里躺了 72 小时。
3.4 高级调试与监控:让问题无所遁形
这些参数帮你把节点变成透明玻璃箱。
debug=net(网络问题首选):只记录网络层日志。当连不上节点时,加这行重启,debug.log里会详细打印 DNS 查询、连接尝试、握手失败原因(如connection timeout或connection refused)。logips=1(安全审计):在日志中记录对等节点的 IP 地址。排查恶意节点或地域性连接问题时必备。uacomment=myapp-v1.2(标识你的节点):在getpeerinfo返回的subver字段里添加自定义注释。比如"/Satoshi:24.0.1/myapp-v1.2/"。网络监控工具会采集这个字段,帮你统计自己节点的在线率。shrinkdebugfile=1(磁盘告急时):当日志文件超 10MB 时自动压缩归档。避免debug.log单文件涨到 5GB 占满硬盘。
4. 启动与排障全流程:从双击图标到日志解码
配置写完,不等于万事大吉。启动过程是一系列精密的检查与初始化,任何一个环节卡住,节点就停在“Starting…”不动。下面还原一次标准启动的完整链条,并告诉你每一步卡住时该怎么救。
4.1 启动的七个阶段:每个阶段都有它的“心跳信号”
Bitcoin Core 启动不是原子操作,而是分七步渐进式加载。观察debug.log的时间戳和日志行,你能准确定位故障点:
Config Load(配置加载):读取
bitcoin.conf,解析所有参数。
典型日志:Config file: /home/user/.bitcoin/bitcoin.conf
卡住表现:启动后 5 秒内debug.log无任何输出 → 配置文件路径错或权限不足。Data Dir Init(数据目录初始化):检查
~/.bitcoin/是否存在,创建缺失子目录(如/blocks/,/chainstate/)。
典型日志:Using data directory /home/user/.bitcoin
卡住表现:日志停在Using data directory...→ 目录权限错误(Linux/macOS 执行ls -ld ~/.bitcoin,确保属主是你自己)。Chainstate Load(UTXO 集加载):打开
/chainstate/的 LevelDB,验证数据库完整性。
典型日志:Loaded best chain: hashBestChain=00000000000000000003e1a...
卡住表现:日志停在此处超 2 分钟 →/chainstate/损坏,需-reindex。Block Index Load(区块索引加载):扫描
/blocks/下所有.dat文件,构建区块哈希到文件偏移的索引(/blocks/index/)。
典型日志:Block index loaded in 1234ms
卡住表现:日志停在Loading block index...→ 磁盘 I/O 故障或.dat文件损坏。Network Start(网络启动):初始化 P2P 网络栈,绑定端口(8333),读取
peers.dat,发起连接。
典型日志:init message: Loading addresses from DNS
卡住表现:日志停在Loading addresses from DNS→ DNS 被污染或防火墙拦截 UDP 53 端口。Wallet Load(钱包加载):如果
disablewallet=0,则加载/wallets/default/wallet.dat。
典型日志:nFileVersion = 240001(版本号)
卡住表现:日志停在此处 → 钱包文件加密密码错误,或wallet.dat损坏。Ready(就绪):所有模块加载完成,RPC 服务启动,节点开始同步或广播。
典型日志:init message: Done loading
卡住表现:日志停在Done loading但getblockcount返回 0 → 网络未连上任何对等节点,检查getpeerinfo。
4.2 日志解码实战:三行关键日志读懂节点状态
debug.log是节点的“心电图”,但新手常被海量日志淹没。抓住以下三行,5 秒判断健康度:
UpdateTip: new best=00000000000000000003e1a... height=845231...
这是“心跳”。每出现一次,代表节点成功验证并接受了新区块。height=后的数字就是当前高度。如果 5 分钟没刷新,说明同步卡住。WARNING: You are running in pruned mode, but txindex is enabled.
这是“矛盾警告”。剪枝模式(prune=)和交易索引(txindex=1)可以共存,但prune会删除旧区块数据,txindex却需要它们。此时getrawtransaction对老交易会返回No such mempool or blockchain transaction。解决方案:要么关txindex,要么增大prune值(如prune=50000)。ERROR: AcceptToMemoryPool: non-final
这是“交易拒收”。表示收到一笔使用了相对时间锁(nSequence < 0xFFFFFFFF)但尚未满足锁定条件的交易。不是错误,是正常过滤。但如果大量出现,说明你连到了一个传播非标准交易的节点,可setban封禁。
4.3 常见问题速查表:按症状找药方
| 症状 | 可能原因 | 解决方案 | 实操命令 |
|---|---|---|---|
启动后getblockcount返回 0 | 未连接任何对等节点 | 检查getpeerinfo,确认addr字段有 IP;检查防火墙是否放行 TCP 8333 | bitcoin-cli getpeerinfo | jq '.[] .addr' |
| 同步卡在 99.9%,高度不再增长 | 网络延迟高或对等节点少 | 添加可信节点(addnode=203.0.113.100 onetry),或重启节点强制重连 | bitcoin-cli addnode "203.0.113.100" "onetry" |
debug.log里满屏socket recv error | 本地网络不稳定或对方节点宕机 | 这是正常现象,节点会自动断开重连。如持续 10 分钟以上,检查本地网络 | ping -c 4 seed.bitcoin.sipa.be |
bitcoin-cli报Could not connect to the server | RPC 服务未启动或配置错 | 检查bitcoin.conf是否有server=1、rpcbind=127.0.0.1、rpcport=8332 | ps aux | grep bitcoind看进程是否在跑 |
| 硬盘空间不足,同步中断 | prune值设太小或日志暴涨 | 立即停节点,删debug.log.*归档文件;临时增大prune值再启 | rm ~/.bitcoin/debug.log.* |
注意:所有
bitcoin-cli命令必须在节点运行中执行。如果节点没启动,先执行bitcoind -daemon(Linux/macOS)或双击bitcoin-qt.exe(Windows)。
5. 实操避坑指南:那些文档里不会写的血泪教训
纸上得来终觉浅。下面分享我在某跨平台系统集成 Bitcoin Core 时踩过的 7 个深坑,每个都曾让我加班到凌晨三点。
5.1 坑一:Windows 下的路径分隔符陷阱
Windows 用户习惯用反斜杠\,但bitcoin.conf里所有路径必须用正斜杠/。写成datadir=C:\Users\Alice\Bitcoin会报错,必须写datadir=C:/Users/Alice/Bitcoin。更隐蔽的是,如果路径含空格(如C:/Program Files/Bitcoin),必须用双引号包裹:datadir="C:/Program Files/Bitcoin"。我第一次部署时,conf 文件里写了datadir=C:\Bitcoin,节点静默失败,debug.log里只有一行Error: Cannot obtain a lock on data directory C:\Bitcoin. Bitcoin Core is probably already running.——其实根本没在跑,是路径解析失败。
5.2 坑二:macOS 的 Spotlight 索引风暴
macOS 的 Spotlight 会疯狂扫描~/.bitcoin/blocks/下的.dat文件,导致 SSD I/O 占用 100%,节点同步龟速。解决方案:把~/.bitcoin整个目录拖到“Spotlight 隐私设置”里排除。执行mdutil -i off ~/.bitcoin关闭索引,同步速度立竿见影。
5.3 坑三:Linux 的 open files 限制
Linux 默认单进程最多打开 1024 个文件。Bitcoin Core 在高连接数(maxconnections=100)时,光 socket 就要占 200+,加上.dat文件、LevelDB 文件,轻松突破上限。症状是debug.log里反复出现Too many open files。修复:sudo sysctl -w fs.file-max=100000临时提高,再echo "bitcoin soft nofile 65536" >> /etc/security/limits.conf永久生效。
5.4 坑四:txindex重建时的磁盘假死
开启txindex=1后首次重建,节点会扫描所有区块并写入/indexes/txindex/。这个过程不打印进度,debug.log里只有Reindexing block file blk00000.dat...一行,然后沉默 10 小时。新手以为卡死了,强行kill -9,结果 LevelDB 损坏,必须重同步。正确做法:用bitcoin-cli getindexinfo查看txindex状态,synced: false就是还在建;用ls -lh ~/.bitcoin/indexes/txindex/看文件大小是否在缓慢增长。
5.5 坑五:测试网与主网的配置污染
很多人在同一台机器跑主网和测试网节点,共用~/.bitcoin/。这是灾难。测试网的chainstate会覆盖主网的,导致主网节点启动报Invalid chainstate database。绝对禁止。正确姿势:为主网用默认目录,测试网用-datadir=/home/user/.bitcoin-testnet,并在测试网 conf 里显式写testnet=1。
5.6 坑六:rpcpassword的特殊字符转义
rpcpassword如果含$、\、#等 shell 特殊字符,在某些终端里会被提前解析。比如rpcpassword=abc$123,$123会被当成变量。解决方案:用单引号包裹整个密码,或用\转义:rpcpassword=abc\$123。
5.7 坑七:树莓派的 swap 分区诅咒
在树莓派 4B(4GB 内存)上跑全节点,dbcache=4000会吃光内存,系统疯狂使用 swap,SD 卡寿命暴跌。实测:dbcache=1000+prune=10000是树莓派的黄金组合,CPU 占用 45%,SD 卡写入量降低 80%。别信网上说的“加大 swap 就行”,那是透支硬件寿命。
6. 配置模板与一键部署脚本
理论讲完,给你一份可直接抄作业的生产环境配置模板,以及一个 Linux/macOS 下的一键部署脚本,5 分钟搞定一个稳健节点。
6.1 生产环境bitcoin.conf模板(家用 NAS/树莓派)
# --- 基础设置 --- server=1 daemon=1 pid=/home/user/.bitcoin/bitcoind.pid # --- RPC 安全 --- rpcbind=127.0.0.1 rpcport=8332 rpcuser=bitcoinrpc rpcpassword=K9vLqR2zXpF8nT4wYbGcHjM5sN6rVdEaBfCgIhJkLmNoPqRsTuWvXyZ1A2B3C4D5 rpcthreads=4 # --- 网络 --- listen=1 maxconnections=40 upnp=0 externalip=203.0.113.42 # 添加几个稳定种子节点(可选) addnode=seed.bitcoin.sipa.be addnode=dnsseed.bluematt.me # --- 同步与存储 --- prune=20000 dbcache=4000 par=4 txindex=1 blocksonly=0 # --- 钱包 --- disablewallet=1 # walletbroadcast=0 # 如需离线签名,取消注释 # --- 日志与调试 --- debug=net logips=1 shrinkdebugfile=1 uacomment=home-node-v1 # --- 其他 --- fallbackfee=0.00001提示:把
externalip=替换成你的真实公网 IP,rpcpassword=换成openssl rand -base64 32生成的新密码。
6.2 Linux/macOS 一键部署脚本(保存为setup-bitcoin.sh)
#!/bin/bash # Bitcoin Core 家用节点一键部署脚本 # 运行前请确保已下载 bitcoin-24.0.1-x86_64-linux-gnu.tar.gz 并解压 set -e # 任一命令失败即退出 BITCOIN_DIR="$HOME/bitcoin-core" DATA_DIR="$HOME/.bitcoin" CONF_FILE="$DATA_DIR/bitcoin.conf" echo ">>> 正在创建数据目录..." mkdir -p "$DATA_DIR" echo ">>> 生成强密码..." RPC_PASS=$(openssl rand -base64 32) echo ">>> 获取公网 IP..." EXTERNAL_IP=$(curl -s https://api.ipify.org) echo ">>> 写入配置文件..." cat > "$CONF_FILE" << EOF server=1 daemon=1 pid=$DATA_DIR/bitcoind.pid rpcbind=127.0.0.1 rpcport=8332 rpcuser=bitcoinrpc rpcpassword=$RPC_PASS rpcthreads=4 listen=1 maxconnections=40 upnp=0 externalip=$EXTERNAL_IP prune=20000 dbcache=4000 par=4 txindex=1 disablewallet=1 debug=net logips=1 shrinkdebugfile=1 uacomment=auto-deploy-v1 EOF echo ">>> 设置目录权限..." chmod 700 "$DATA_DIR" echo ">>> 启动节点..." $BITCOIN_DIR/bin/bitcoind -conf="$CONF_FILE" -daemon echo ">>> 节点已启动!检查状态:" sleep 5 $BITCOIN_DIR/bin/bitcoin-cli getblockchaininfo | jq '.blocks, .verificationprogress'