从原理到操作一步通关 🧠⛏️
本文分两部分:① 用好懂的例子讲清 比特币如何运行;② 手把手搭一个本地测试网络(regtest),现场“挖矿、打包交易、转账确认”。纯学习用途,不构成任何投资建议。
- Bitcoin Core(官方钱包/全节点):bitcoin.org/zh_CN/download
- 区块链可视化(主网 / 测试网):mempool.space
- 中本聪创世区块(主网 #0):mempool.space/block/…ce26f
一、比特币到底怎么跑起来的?(超简版逻辑)
- P2P 网络:每个客户端都是节点,彼此直接连线,不依赖中心服务器。
- 区块链:每 1 个区块打包若干交易,并把“上一个区块的哈希”写进区块头,像链条一样连起来。
- 哈希:把任意数据用 SHA-256 算出一段固定长度的“指纹”。数据只要改一点点,哈希就完全不同(雪崩效应)。
- 挖矿 = 记账竞赛:谁先算出一个小于目标难度的区块头哈希,谁的区块就被全网接受;奖励发到区块里的
coinbase
交易。 - 难度调整:每 ~2016 个区块(约两周)自动校正,始终让全网平均每 ~10 分钟出块一次。
- 为什么安全:区块一环扣一环,改早期数据会导致后续所有区块哈希失效;全网遵循“最长链”规则。除非掌握接近全网的一半算力(所谓 51% 攻击),否则篡改几乎不可行。
- 交易与 UTXO:没有“账户余额”这个概念,只有还未花掉的“交易输出”(UTXO)。花费 UTXO 时,经常会把“找零”打回自己地址,手续费为“输入总额 − 输出总额”。
二、搭一个「本地比特币网络」来真挖矿(regtest)
我们在同一台电脑上跑 3 个独立节点(cong=中本聪 / wo=我 / ni=你),互为邻居,演示出块、转账、确认的全流程。
1)安装 Bitcoin Core
- 到官网下最新版:bitcoin.org/zh_CN/download
- 安装后先不要让它同步主网区块(600+ GB),我们只用本地测试网
regtest
。
2)为三个节点准备数据目录
假设安装目录是 C:\Program Files\Bitcoin
(路径按你的实际环境)。在同级目录新建三个文件夹:cong
、wo
、ni
。
3)为每个节点创建配置文件 bitcoin.conf
把下列内容分别保存到对应目录的 bitcoin.conf
中(注意端口与账号各不相同)。
① 中本聪(cong)
regtest=1
server=1
txindex=1
[regtest]
rpcuser=user1
rpcpassword=pass1
rpcallowip=127.0.0.1
rpcport=18443
port=18444
listen=1
bind=127.0.0.1
addnode=127.0.0.1:18445
addnode=127.0.0.1:18446
② 我(wo)
regtest=1
server=1
txindex=1
[regtest]
rpcuser=user2
rpcpassword=pass2
rpcallowip=127.0.0.1
rpcport=18453
port=18445
listen=1
bind=127.0.0.1
addnode=127.0.0.1:18444
addnode=127.0.0.1:18446
③ 你(ni)
regtest=1
server=1
txindex=1
[regtest]
rpcuser=user3
rpcpassword=pass3
rpcallowip=127.0.0.1
rpcport=18463
port=18446
listen=1
bind=127.0.0.1
addnode=127.0.0.1:18444
addnode=127.0.0.1:18445
4)分别启动三个节点
以管理员打开命令行,进入 Bitcoin 安装目录,依次运行:
bitcoin-qt.exe -regtest -datadir="cong"
bitcoin-qt.exe -regtest -datadir="wo"
bitcoin-qt.exe -regtest -datadir="ni"
界面左下角能看到连接数;互加的 addnode
会把三人连成一个小型 P2P 网。
5)“一键挖出”创世后的第一个区块(regtest 可快速挖)
- 在 cong 节点钱包里新建一个接收地址(假设叫 A)。
- 打开 窗口 → 控制台,执行:
generatetoaddress 1 "A"
这会立刻产出 1 个区块(包含 50 BTC 的 coinbase
奖励,但需等 100 个确认才可花)。此时其他两个节点会同步到区块高度。
6)补齐确认数,让奖励可花
仍在 cong 控制台执行(一次性补挖 99 个):
generatetoaddress 99 "A"
7)发送一笔转账:中本聪 → 你(9 BTC)
- 在 ni 节点生成地址(记为 B)。
- 在 cong 的「发送」里填入 B,金额 9,手续费可留默认。
- 发送后,这笔交易会进入各节点的 内存池(mempool),在你(ni)的钱包里会显示“未确认的 9 BTC”。
8)把这笔交易打进区块并确认
让任意节点出块即可(例如继续在 cong 挖 1 个):
generatetoaddress 1 "A"
该区块会包含一笔 coinbase(51 BTC:50 奖励 + 手续费)和一笔“中本聪→你”的转账;你(ni)的钱包余额随之变为 9 BTC(已确认)。
getblockchaininfo
看当前链高度与最新区块哈希getblock <blockhash>
查看区块头、难度(bits/difficulty)、交易列表getrawmempool
/getmempoolentry
观察内存池里的交易细节
三、把“难点”讲透:FAQ 与常见坑
1)为什么必须等 100 个区块才能花挖矿奖励?
为防止链上短分叉造成奖励回滚(reorg)。确认越多,被回滚的概率越低。
2)转 9 枚却经常看到“另有一笔转回自己”?
因为你在花的是一整张“UTXO”,比如面额 50;支付 9,找零 41 会回到你钱包的另一个地址上(系统自动生成)。
3)手续费从哪来?
手续费 = 输入总额 − 输出总额。矿工把“更愿意付高费”的交易先打进区块。
4)我想连“真实的公共测试网”,行不行?
可以。用 -testnet
(测试网 4),会连上全球测试节点并同步较小的链数据,适合做更接近真实网络的实验。可视化在 mempool.space 右上角切换 Testnet。
5)为什么我连不上节点或同步很慢?
- 某些代理/机场会拦截加密货币相关流量。
- 主网同步体量大(600+ GB),网络/硬盘性能都会影响速度。
- 务必从官网获取安装包,避免被“魔改钱包”污染隐私与资产。
四、到主网看看“真实世界”在发生什么
打开 mempool.space:
- 首页能看到内存池大小、手续费区间、最新出块、矿工奖励与难度走势。
- 点进任意区块:查看区块哈希(通常有很多前导 0)、bits(目标阈值)、merkle root(所有交易的哈希树根)、交易数量与总手续费。
- 切换到 Genesis Block(#0)看看“比特币最初的那束光”。
五、快捷命令备忘(复制即用)
启动三个节点
bitcoin-qt.exe -regtest -datadir="cong"
bitcoin-qt.exe -regtest -datadir="wo"
bitcoin-qt.exe -regtest -datadir="ni"
出块(把奖励打到地址 A)
generatetoaddress 1 "A"
generatetoaddress 99 "A" # 补满 100 确认
区块 & 交易查询
getblockchaininfo
getbestblockhash
getblock <blockhash>
getrawmempool
getmempoolentry <txid>
六、结尾想说的
有人把比特币视作技术革命,有人把它当作“老鼠药”。价值评判各执一词,但从工程视角看,它确实以一套公开的数学与博弈规则,让一个无需信任中心的价值网络长期稳定运行。理解它、在本地亲手跑一遍,你会更清楚自己在谈论什么。🙂
No responses yet