深入理解比特币(四) 区块和网络

本文是 深入理解比特币系列 中的第四篇 区块和网络. 本篇文章主要包含以下内容: 网络中的节点 交易的广播与确认 区块链和挖矿 简易支付验证(SPV) 网络中的节点 比特币网络是一个由多个比特币节点共同组成的 P2P 网络. 在 P2P 网络中不存在中心化的服务端, 每个节点使用服务的同时也对网络中的其他节点提供服务. 比特币节点由以下几个功能模块组成: 路由, 区块链数据库, 挖矿, 钱包服务. 一个比特币节点根据目的不同, 可能包含这些功能模块中的一部分或者全部. 例如, 一些节点保存了完整的区块链数据, 这样的节点就可以被称为 全节点. 全节点能够独立地校验任何交易的有效性, 而不需外部服务的帮助. 而另一些节点只保存了区块链的一部分数据(区块头), 它们通过一种名为 简易支付验证(SPV)的方式来完成交易验证, 这样的节点被称为 SPV节点 或 轻节点. 当有新节点加入比特币网络后, 它必须和网络中的其他节点建立连接, 并根据需要从连接到的节点同步区块数据. 目前, 运行一个比特币全节点需要保存的区块链数据已经超过了 260G. 正是因为运行全节点所要保存的数据量太大了, 一般人很难在个人设备上维护一个全节点, 所以就有了轻节点(…

深入理解比特币(三) 交易

本文是深入理解比特币系列中的第三篇, 交易. 交易是比特币系统中的核心部分, 所谓交易是指资产从一个所有者转移到另一个所有者的过程.本篇文章主要包含以下内容: 熟悉比特币交易的数据结构 理解比特币钱包余额和 UTXO 模型 了解比特币编程语言 学习利用 P2SH(Pay-to-Script Hash) 构造复杂交易 数据结构 一笔比特币交易由如下几个组成部分: Version Inputs Outputs Locktime Version(版本号) 和大多数版本号的作用一样, 比特币交易的版本号是为了标识处理该笔交易所需要的支持的特性. 比特币系统也是一个持续迭代的软件, 有时我们需要为交易设置不同的版本号以便交易中的新特性能被更好地支持. 目前比特币系统中大多数交易的版本号为 2. 版本号位于序列化交易数据最开始的位置, 占 4 个字节. Inputs(输入) 和 Outputs(输出) 在比特币的设计里, 比特币钱包(私钥)所拥有的余额不是以一个单独数字的形式存在的. 比特币世界中的余额与现实世界中现金的模式类似, 在一次交易中: 每一个输入就像是我们此前从别人那里收到的钱 每一个输出就像是我们这次要交给其他人的钱 每笔交易可以包含多笔输入(一次使用之前收到多张现金)和多笔输出(一次交给其他人多张现金)…

深入理解比特币(二) 钱包和地址

本文是深入理解比特币系列中的第二篇, 钱包和地址. 钱包是比特币世界里最重要的概念之一, 这里要说的钱包并不是指具体的某种软件或硬件产品, 而是其更本质的定义: 私钥即钱包. 比特币之所以被被称作加密货币是因为它的实现是建立在椭圆曲线密码学的基础之上的. 在比特币的世界里, 资产以一种被称作 UTXO (unspent transaction outputs) 的数据形式存在. 比特币 UTXO 对网络里的所有用户都是可见的, 谁能够提供一个凭证(在密码学中这样的凭证一般被称为"见证" Witness)使 UTXO 中预先设定花费条件成立, 谁就拥有了这笔资产的所有权. 而私钥正是能提供这个凭证的关键所在. 掌握了某个私钥也就意味拥有了与该私钥对应的所有资产. 关于椭圆曲线密码学的知识可以参考我翻译的 椭圆曲线密码学: 入门 系列文章, 文章的原作者是来自爱尔兰亚马逊的软件工程师, 这几篇文章也是我读过的关于介绍椭圆曲线密码学最好的入门文章, 有兴趣的朋友可以前往阅读, 相信也会让你受益匪浅. 私钥,公钥和地址 在椭圆曲线密码学中, 私钥 e 是一个随机数, 而对应的公钥是私钥和椭圆曲线上的特定生成点 G 相乘得到的另一个点 P. 即: $$ P = eG…

深入理解比特币(一) 简史

第一次听说比特币还是在 2012 年, 那年我读大三, 距离中本聪发表《比特币: 对等网络电子现金系统》论文仅有 3 年多的时间. 那时的我不会想到, 在几年之后我自己会进入到加密货币这个行业, 从而使我有机会能够更加深入地思考比特币到底是什么. 本系列文章由以下四篇构成: 深入理解比特币(一) 简史 深入理解比特币(二) 钱包和地址 深入理解比特币(三) 交易 深入理解比特币(四) 区块和网络 这些内容里包含了我对比特币的理解与思考. 当然, 作为一个技术人, 更多的内容还是关于对比特币技术细节的解读. 希望读者在读完本系列文章后, 能透过技术对比特币甚至是整个加密货币行业有更多的感悟. 货币 要了解什么是比特币, 我们必须先思考什么是货币? 人类使用货币的历史产生于物物交换的时代. 在原始社会, 人们使用以物易物的方式交换自己所需要的物资, 比如一头羊换一把石斧. 以物易物模式最大的问题在于要达成交易必须满足双重偶然性, 即"我想要的东西刚好你有, 而你想要的东西刚好我有", 如此严苛的条件使交易极难达成. 经过长年的自然淘汰, 在绝大多数社会里, 作为货币使用的物品逐渐被金属所取代. 使用金属货币的好处是它的制造需要人工,…