并非所有的节点都有能力储存完整的区块链。许多比特币客户端被设计成运行在空间和功率受限的设备上,如智能电话、平板电脑、嵌入式系统等。对于这样的设备,通过简化的支付验证(SPV)的方式可以使它们在不必存储...
精通比特币(47):比特币网络中的节点类型及角色
尽管比特币P2P网络中的各个节点相互对等,但是根据所提供的功能不同,各节点可能具有不同的角色。每个比特币节点都是路由、区块链数据库、挖矿、钱包服务的功能集合。 比特币网络节点,具有所有四...
精通比特币(75):创币交易
创币交易 区块中的第一笔交易是笔特殊交易,称为创币交易或者coinbase交易。这个交易是由挖矿节点构造并用来奖励矿工们所做的贡献的。 与常规交易不同,创币交易没有输入,不消耗UTXO。它只包含一个被...
精通比特币(39):P2SH(Pay-to-Script-Hash)
P2SH在2012年被作为一种新型、强大、且能大大简化复杂交易脚本的交易类型而引入。 P2SH是为了解决这复杂脚本的使用而被引入的,它旨在使复杂脚本的运用能与直接向比特币地址支付一样简单。 在P2SH...
精通比特币(78):如何计算难度目标?
在区块中看到难度目标,其被标为"难度位"或简称"nBits",定义在src/chain.h的CBlockIndex类中。 在区块277,316中,它的值为 0x1903a30c。 这个标...
精通比特币(35):签名哈希类型(SIGHASH)及使用
数字签名被应用于消息,在比特币中,就是交易本身。签名意味着签字人对特定交易数据的承诺( commitment)。 在一个交易中一个签名可以只承诺(commit)一个数据子集。  ...
精通比特币(37):区块链浏览器显示比特币地址的“余额”的原理
比特币地址和余额,在交易结构中不存在。 我们看到交易本身并不包含比特币地址,而是通过锁定和解锁比特币离散值的脚本进行操作。 这个系统中的任何地方都不存在余额。 为了构建“总接收”数量,区...
精通比特币(31):比特币交易脚本和脚本语言
比特币交易脚本语言,称为脚本,是一种类似Forth的逆波兰表达式的基于堆栈的执行语言。 当一笔比特币交易被验证时,每一个输入值中的解锁脚本与其对应的锁定脚本同时 (互不干扰地)执行,以确...
精通比特币(65):区块中的Merkle树
区块链中的每个区块都包含了产生于该区块的所有交易,且以Merkle树表示。 Merkle树是一种哈希二叉树,它是一种用作快速归纳和校验大规模数据完整性的数据结构。这种二叉树包含加密哈希值...
精通比特币(33):比特币中使用的数字签名简介
维基百科对 “数字签名 ”的定义: 数字签名是用于证明数字消息或文档的真实性的数学方案。 有效的数字签名给了一个容易接受的理由去相信:1)该消息是由已知的发送者(身份认证性)创建的; 2)发送方不能否...