深色模式
比特币入门
概述
比特币不是一枚存在手机里的“数字硬币”,而是一套由全网节点共同维护的公开账本。钱包保存的是私钥,链上记录的是交易结果,矿工负责把待确认交易打包进区块,节点负责验证这些区块是否符合规则。
理解比特币,可以先抓住四个对象:私钥证明所有权,交易表达资产转移,区块承载一批交易,工作量证明决定谁能写入下一页账本。后面的 Token、稳定币和 Web3 项目,大多也是在这些基础能力上继续组合出来的。
加密货币图谱
Web3 项目通常指使用区块链、智能合约、加密钱包和代币机制构建的项目。它不一定都要自己造链,也不一定都像比特币一样挖矿。
常见资产可以粗略分成三类:
| 类型 | 例子 | 技术位置 |
|---|---|---|
| 原生币 | BTC、ETH、SOL | 区块链本身的原生资产 |
| 链上 Token | ERC-20、SPL Token | 部署在已有链上的合约资产 |
| 稳定币 | USDT、USDC、DAI | 通常是锚定美元等资产的 Token |
BTC 属于第一类。它是比特币网络的原生资产,用于价值转移、手续费支付和矿工激励。很多项目口中的“发币”,多数不是再造一个比特币,而是在以太坊、Solana、BSC、Tron 等已有链上部署一个 Token 合约。
公开账本
比特币的余额不是某台服务器数据库里的账户余额,也不是钱包本地文件里的数字。更准确的说法是:全网账本里记录了哪些交易输出还没有被花掉,持有对应私钥的人可以花这些输出。
传统账户系统常写成:
text
张三余额 -0.3
李四余额 +0.3比特币采用的是 UTXO 模型,意思是未花费交易输出。它更像现金找零:之前收到的一笔钱要么没花,要么作为下一笔交易的输入被整体花掉,然后产生新的输出。
text
输入:之前收到的 1 BTC
输出:给李四 0.3 BTC
输出:找零给自己 0.699 BTC
差额:手续费 0.001 BTC地址余额就是这个地址当前所有未花费输出的总和。历史转账记录很多,不代表每次查询都要从创世区块重新算一遍;钱包服务、区块浏览器会额外建立索引。普通全节点主要维护全网当前 UTXO 集合,并不默认按任意地址建立余额索引。
地址来源
比特币地址不是注册来的,也不是服务器分配的。钱包在本地生成私钥,再由私钥推导出公钥,最后把公钥经过哈希和编码得到地址。
私钥可以理解为最高权限凭证。谁掌握私钥,谁就能用它对交易签名,从而花掉对应地址下可花费的 UTXO。公钥和地址可以公开,但私钥和助记词必须保密。
这套关系依赖椭圆曲线密码学。私钥推导公钥很容易,公钥反推私钥在现实计算能力下不可行。地址可以离线生成,网络甚至不需要提前知道这个地址存在;只有当有人向它转账时,它才会出现在链上记录里。
交易模型
一笔比特币交易本质上是在说:花掉哪些旧输出,生成哪些新输出,并由私钥签名证明这件事是合法的。
节点收到交易后,会做一组检查:
- 输入引用的
UTXO是否存在。 - 这些
UTXO是否还没有被花过。 - 签名是否能用对应公钥验证通过。
- 输出总额是否不超过输入总额。
- 交易格式和脚本规则是否符合协议。
防止“双花”的关键就在这里。同一个 UTXO 一旦被主链中的交易花掉,后续再试图花它的交易就会被节点拒绝。
区块与挖矿
交易先进入节点的内存池,矿工从内存池里挑选交易,组成候选区块。候选区块要引用上一个区块的哈希,所以区块会一页接一页连成链。
一个区块可以拆成区块头和交易列表两部分。挖矿真正反复哈希的是区块头;交易列表先通过 Merkle Tree 汇总成 Merkle Root,再写入区块头。
挖矿不是在“挖出一个藏起来的币”,而是在竞争记账权。矿工不断调整随机数 nonce,让区块头的哈希小于当前难度目标。这个过程很难试出来,却很容易验证。
比特币会周期性调整挖矿难度,使平均出块时间接近 10 分钟。链变长本身不会让每次挖矿都要重算全部历史,矿工只是在当前候选区块上做哈希尝试。
手续费
比特币交易里通常没有单独写一行“手续费给矿工”。手续费来自输入和输出的差额:
text
手续费 = 输入总额 - 输出总额谁把这笔交易打包进主链区块,手续费就归谁。它不是永远付给“最新区块”的矿工,而是付给最终包含这笔交易的那个区块的矿工。
矿工通过区块里的 coinbase 交易领取收入:
text
矿工收入 = 区块补贴 + 本区块所有交易手续费区块一旦写完,它包含的交易列表和手续费总额就固定了。后续新交易会进入后面的新区块,不会再给旧区块追加手续费。刚挖出的区块仍可能因为链重组变成孤块,所以 coinbase 收入需要等待一定确认数后才能花。
发行规则
比特币总量约 2100 万枚,来自一个简单的减半数列。协议规定每 210000 个区块,区块补贴减半一次。
text
210000 × (50 + 25 + 12.5 + 6.25 + ...)
= 210000 × 100
= 21000000 BTC这里的“约 4 年一次减半”不是按日历触发,而是按区块高度触发。因为比特币平均约 10 分钟一个区块:
text
210000 × 10 分钟 ≈ 1458 天 ≈ 4 年减半高度大致如下:
| 区块高度 | 区块补贴 |
|---|---|
0 | 50 BTC |
210000 | 25 BTC |
420000 | 12.5 BTC |
630000 | 6.25 BTC |
840000 | 3.125 BTC |
1050000 | 1.5625 BTC |
本文写作时为 2026 年 7 月,区块补贴处在 3.125 BTC 这一档。由于比特币最小单位是聪,补贴不能无限细分,最终实际发行量会略少于 2100 万枚。
钱包信任
钱包通常是软件,也可以是硬件设备。它的核心职责不是“存币”,而是管理私钥、生成地址、构造交易、签名交易和查询链上状态。
需要信任钱包的地方主要有三处:
- 私钥和助记词是否用安全随机数生成。
- 私钥是否会被偷偷上传或泄露。
- 签名时展示的收款地址、金额和手续费是否真实。
小额使用可以选择知名、开源、长期维护的钱包,并从官网下载安装。大额资产更适合硬件钱包,因为硬件钱包把私钥留在设备内部,电脑或手机只负责构造交易,最终签名在设备上完成。
助记词不要截图,不要存网盘,不要发给任何“客服”,也不要输入到来路不明的网页。链上没有传统银行的挂失流程,私钥泄露和助记词丢失都很难补救。
自研钱包
个人学习可以开发钱包,但要分清功能边界。生成地址并不复杂,安全地管理私钥、处理找零、估算手续费、同步 UTXO、构造有效签名交易,才是容易出问题的部分。
更稳妥的开发路径是:
- 先做观察钱包,只保存地址或
xpub,不保存私钥。 - 再做离线签名流程,联网机器构造未签名交易,离线机器签名。
- 最后再考虑完整热钱包,并只放小额资金。
底层密码学不建议自己从零实现。secp256k1 签名、BIP32 派生、BIP39 助记词、地址编码和 PSBT 格式都有成熟库和规范。开发和测试应优先使用 regtest、signet 或测试网,避免直接拿主网资金试错。
增长压力
区块链历史会越来越长,但增长压力主要体现在存储、首次同步和索引成本上,不是每次挖矿都要重新计算整条链。
老节点日常只需要验证新来的区块和交易。新节点第一次加入网络时,需要下载并验证历史区块,建立当前 UTXO 数据库。时间越久,这个初始同步成本越高。
比特币用几种方式控制这个问题:
- 区块大小和区块权重有限制,单个区块验证成本有上限。
- 剪枝节点可以验证完整历史后,只保留较新的区块数据和当前
UTXO集。 - 轻钱包可以依赖全节点或服务端查询,不自己保存完整链。
- 闪电网络等二层方案把高频小额支付放到链下,主链负责最终结算。
因此,区块链增长确实是长期成本,但不是“链越长,挖下一个区块越难”的关系。
链上 Token
链上 Token 通常不是一条新链,而是部署在已有链上的智能合约资产。以以太坊 ERC-20 为例,Token 合约内部维护一张余额表:
solidity
mapping(address => uint256) balances;转账时,用户用私钥签名一笔交易,调用 Token 合约的 transfer 函数。合约检查余额够不够,然后更新发送方和接收方的余额。
一个简化版转账逻辑如下:
solidity
function transfer(address to, uint256 amount) public {
require(balances[msg.sender] >= amount);
balances[msg.sender] -= amount;
balances[to] += amount;
emit Transfer(msg.sender, to, amount);
}Token 和 BTC 的差别很明显:
| 对象 | BTC | 链上 Token |
|---|---|---|
| 所属位置 | 比特币原生资产 | 某条链上的智能合约资产 |
| 记账模型 | UTXO | 合约状态,常见为余额表 |
| 手续费 | 用 BTC 支付 | 用底层链原生币支付 |
| 发行规则 | 协议固定 | 合约自定义 |
| 权限风险 | 无发行方冻结权限 | 取决于合约是否有管理员权限 |
因此,“发币”的技术门槛可能很低,真正需要看的反而是合约权限、增发规则、流动性、用途和发行分配。
稳定币
稳定币通常也是链上 Token,只是目标价格锚定美元等法币资产。它和 BTC 一样使用地址、私钥签名、链上转账和公开账本,但价值来源和治理结构不同。
常见稳定币机制包括:
- 法币储备型:发行方收取美元或等价资产,在链上铸造对应稳定币。
- 加密资产超额抵押型:用户抵押加密资产,借出稳定币,抵押率不足时会被清算。
- 算法稳定币:依赖供给调节维持价格,风险通常更高。
法币储备型稳定币往往更中心化。合约或发行系统可能具有铸造、销毁、冻结、黑名单等权限。BTC 没有一个公司可以直接冻结某个地址里的原生币,而部分稳定币确实可以被发行方冻结。
手续费也取决于稳定币所在的链:
| 稳定币版本 | 手续费资产 |
|---|---|
USDT-ERC20 | ETH |
USDT-TRC20 | TRX |
USDC-Solana | SOL |
稳定币解决的是“链上持有和转移稳定计价资产”的问题;BTC 解决的是“不依赖中心发行方的稀缺原生资产和开放结算网络”问题。两者共享一部分区块链技术,但信任假设不同。
