课程01
Bitcoin、BTC和钱包:三个不同的概念
Bitcoin是由许多计算机组成的网络,参与者按照共同规则记录转账,不需要一个中央账户管理员。参与者彼此直接传递交易。公开的交易记录分成一个个区块,再依次连接起来,这就是区块链。BTC是网络的原生货币单位:1个比特币等于1亿聪(satoshi),因此付款不必使用一整个比特币。
钱包是一种软件或设备,管理接收付款和授权花费所需的信息。比特币本身以未花费输出的形式记在网络的交易历史中,不是存放在手机里的文件。私钥是用于授权花费的秘密信息;地址则提供可以分享给付款人的收款信息,地址不是私钥。
自己保管密钥称为自托管,意味着你也要负责保护和恢复这些密钥。使用托管账户时,服务商代你管理密钥。两种方式各有不同风险。比特币的发行量受规则限制,并不代表价格稳定,也不保证购买力或投资回报。
课程02
一笔付款怎样从钱包进入区块
比特币付款并不是修改一份统一的账户余额。交易会花费此前尚未使用的交易输出,简称UTXO,再创建新的输出。钱包把能够花费的输出相加,显示为余额。一旦选中某个输出用来付款,就要把它整体花费;剩余金额通常会作为找零,转入发送者控制的新输出。
例如,一个价值10,000聪的输入,可以支付6,000聪,并创建3,800聪的找零输出。剩下的200聪就是交易手续费。这个例子用于解释金额如何分配,不是今天的手续费报价。手续费通常取决于交易大小和区块空间的需求,而不是转账金额的固定百分比。
钱包创建交易,并提供花费这些输入所需的授权,然后把交易广播到网络。节点检查后,可以将它保留在本地的内存池(mempool)中,也就是该节点收集的待确认交易。矿工可以把交易选入区块。当一个节点按自己执行的规则接受该区块,并把它接入当前采用的链时,交易获得第一次确认。后续每增加一个区块,确认数再加一。
课程03
SHA-256与数字签名:各自解决不同问题
SHA-256是一种密码学哈希函数。它把输入的字节,例如一段文字对应的字节,转换成一个256位结果,称为哈希值或摘要,通常写成64个十六进制字符。同样的输入一定得到同样的结果;即使只改一个比特,结果通常也会大幅变化,无法通过实用的捷径提前预测。
哈希不是加密。不存在一把解密密钥,能把SHA-256摘要还原成原文。哈希可以用来关联数据、检查数据是否发生变化,但不会隐藏比特币公开的交易记录,也不会自动让使用者匿名。你可以在下方实验中修改示例文字,亲自比较结果。
数字签名解决的是另一个问题:按照交易的花费条件提供授权,同时不公开私钥。其他参与者可以用相应公钥和被签名的数据检查签名。比特币使用ECDSA签名,并在Taproot中使用BIP340规定的Schnorr签名;两者都使用secp256k1椭圆曲线。哈希和签名会配合使用,但不能互相替代。
课程04
挖矿:寻找不超过目标值的哈希
矿工先准备一个候选区块,其中包含交易。第一笔交易称为coinbase,可以分配规则允许的新发行区块补贴和交易手续费。接着构造80字节的区块头,其中包括对前一区块的引用、关联交易标识符列表的默克尔根(Merkle root),以及时间戳、目标值编码和nonce等字段。
挖矿就是反复对区块头连续执行两次SHA-256。有效的工作量证明要求:把结果当作整数时,它必须小于或等于共识规则规定的目标值。目标值越小,每次尝试成功的机会就越低。这是一轮轮试错,不是在解一个有特殊用途的隐藏方程;上一次失败,也不会让下一次更容易成功。
nonce是区块头中的32位字段,矿工改变它,就能尝试不同的区块头,也可以修改其他允许变更的数据。例如,改变coinbase中的extra nonce,会改变这笔交易的标识符,进而改变默克尔根和区块头。找到符合目标的哈希后,整个区块仍须通过其他全部验证规则。矿池协调参与者的工作,按各自规则分配收益,但不保证一定获得奖励或盈利。
课程05
全节点如何核查区块和交易确认
全节点是一种独立检查比特币共识规则的软件。收到区块后,它不仅检查工作量证明,还要检查交易是否满足花费条件、输入是否引用可花费的输出,以及coinbase是否领取了超过允许补贴和手续费总额的金额。区块不符合规则,即使耗费了大量算力,也会被拒绝。
有时会同时出现两个有效区块,竞争链上的同一位置。对于符合自身规则的有效历史,节点采用累计工作量证明最多的那条链。这常被称作“最长链”,但真正比较的是累计工作量,不只是区块数量,更不是支持某一版本历史的计算机台数。
一次确认表示交易已经被纳入这条链的某个区块,之后每增加一个区块,确认数就再增加一次。累计工作量越多,替换这段历史通常越难,但链重组仍有可能发生。一笔付款应等待多少次确认,要结合金额和收款人的风险承受程度。协议以平均约十分钟产生一个区块为目标,并不保证下一个区块会在十分钟内到来。
课程06
谁开发比特币,谁决定规则?
比特币不是一家由首席执行官下令修改系统的公司。不同参与者负责不同工作:开发者提出想法、编写和测试软件,并审查代码;矿工选择候选区块进行挖矿;节点运营者决定运行什么软件、执行什么规则;用户选择钱包和服务,并决定接受哪些付款。
比特币改进提案(BIP)记录一种建议或标准。发布提案不代表激活:一份建议、一个软件版本,以及实际执行的规则,是不同阶段。变更可能需要技术审查、具体实现和参与者之间的协调。人们也可能不同意某项变更,选择不采用。
还要区分共识规则和节点本地策略。共识规则决定节点会不会把一个区块判为有效;本地策略影响它愿意转发或保留哪些未确认交易。本地策略的变化,不会自动改变比特币区块允许包含什么。知名教育者、贡献者和公司可以影响讨论,但没有谁能代表所有比特币用户。
课程07
实际用途:付款、捐赠和社区项目
愿意使用比特币的人,可以通过它转移价值。符合网络规则的交易,不需要由一个中央运营者逐笔批准。付款可以直接记在区块链上,也可以使用Lightning等其他系统;不同系统各有运行条件。能够接入比特币网络,与能够方便地兑换或使用本地货币,并不是同一件事。
已有一些具体例子:商家可以使用开源工具BTCPay Server接受比特币,配置后也可以支持Lightning;OpenSats接受比特币捐赠,用来支持开源工作;Bitcoin Beach介绍了萨尔瓦多的一个社区支付与教育项目。这些例子说明可能的用途,不代表比特币已经普遍被接受,也不表示某项服务适合所有读者。
使用支付服务前,应检查谁控制密钥、有哪些费用、收款人怎样取得资金,以及服务商不可用时怎么办。价格波动、本地货币兑换、隐私和适用规则也很重要。把比特币转到另一个国家,不代表收款人就能自动提取当地现金。应先理解系统,再决定是否使用。
课程08
为什么比特币需要支付通道和其他网络
比特币基础层把交易写入容量有限的区块。争用区块空间的需求增加,可能推高手续费和等待时间。因此,要支持更多日常付款,不只是往每个区块里塞入更多交易。其他设计可以把部分活动放到主链以外处理,只在特定结算或执行步骤中使用主链。
Lightning通过支付通道更新余额,不必把每次更新都记入比特币区块。Liquid和Rootstock等侧链有自己的区块,以及代表比特币的资产机制。Fedimint把托管职责分配给多名共同管理者。Ark类系统和基于BitVM的设计,则探索处于不同开发阶段的其他机制。都叫“第二层”,不代表这些系统提供相同的保障。
比较时可以问五个问题:谁掌握密钥?用户实际持有什么资产?交易按该系统的规则在哪里完成结算?需要多少可用流动性?服务方出问题时,用户如何取回资金?界面更快显示成功,不一定意味着比特币主链已经确认。下一节介绍若干有代表性的方案及其限制,并非所有比特币相关项目的完整清单。