比特币
比特币是2009年中本聪提出的基于开源软件技术构建的。
核心特征
分布式数据库
采用分布式数据库存放交易记录。去中心化是其最重要的特点。也是它与其他法币最主要的区别。理论上每个客户端都保留一份完整的数据库,因此系统永远不能被破坏。当然最初规模小的时候,可能只有很少数量的副本,因此就可能存在造假风险,但是随着规模扩大,尤其是现在,排除技术出现颠覆式发展(量子计算机),世界上1/2计算力进行表决实现集体造假,已无可能。
发行
发行采用独特的算法机制,进行发行,也就是挖矿机制。挖矿实际上就是计算数学题,计算什么呢?通过加密算法保证每条交易记录形成的账簿的安全可靠。一开始这样的计算很容易,因为交易量很少,所以为了鼓励计算,就会提高挖矿的收益率,但是随着数量增加,计算量越来越大,投入挖矿的计算力越多,收获就会逐渐变少。
通缩
发行机制导致越挖币越少,也就是发行量越来越少,从比特币角度看是通涨,但是相对于商品物价指数,比特币相对来说是通缩机制,或者说购买力也来越强。
区块链
区块
数字货币的两个命门:货币真实性,交易不可重复性。
block,是交易记录集合(1个block可能包括几百条交易记录),这样是为了减少计算量。
不同的客户端拥有不同的block,如何实现不同客户端之间数据的同步,而又保证不出错,中本聪设计每一笔交易都要经过上笔交易验证,还要与其他节点记录进行比对实现同步。
区块链
区块与区块之间形成头尾咬合的链条关系,就是区块链。
区块链是由包含交易信息的区块从后向前有序链接起来的数据结构。
具体来讲,就是从创世区块开始之后的每个区块都依次指向上个区块,如何指向?每个区块都有一个父区块哈希值字段,记录上个区块的信息。这样逐级指向,从后向前,最终形成从创世区块到最近交易区块的一个链条。
拿“栈”的概念比喻一下,创世区块在栈底,之后的区块覆盖其上,越新的区块就越靠近栈顶,这种设计导致瘦节点的出现,就是相当多的节点只需要保留较新的区块链就可以了,而无需全部数据。

区块链的信任算法:非对称加密
看起来很复杂,其实就是生活的技术化。
张三要给王五转账,采用的平台是支付宝。
张三有个账户,这个必须公开,否则别人没办法转钱,这个账户就是公钥。张三自己还有一个转账密码,这个谁都不能说,就是私钥。同样王五也是如此。
转账过程是,王五把账户(公钥)给张三,张三登陆自己账户(公钥),输入自己密码(私钥)进行转账,成功后,通知王五,王五赶紧登陆账户(公钥),输入密码(私钥)查看钱已到账,再看转账人是张三(对方公钥),交易完成。
区块链的一致性
哈希hash
百度百科:
Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
简单说,哈希的特性:字符转换(将较长的字符串转换为固定长度的字符串);代表性(后者完全可以代表前者);不可逆(从后者不可或者说很难推导出前者)

注意上表的第三行“Merkle树的根值”正是一个哈希值。这个字段有什么作用呢?还记得之前提到的一个区块包括许多交易记录(几百个)。区块之间连接通过父区块记录字段来识别,区块内的交易记录正是通过这个字段来标识的。这是一棵树,每片叶子都是一笔记录,树干叶子以及叶子之间的关系就是通过哈希之后识别存放的,同样这样的叶子也存在先后关系,并且是不可逆的。最终树根的哈希值代表这个区块的哈希值。
补充内容:

默克树的基本原理就是将叶子节点两两配对做哈希运算(如果叶子节点为奇数,那么将最后一个叶子复制)生成父节点,不断迭代这一过程最终生成唯一的根节点merkle root。如果要验证一个叶子节点是否存在于默克树中,只需要传入一个该节点到根节点路径merkle path,而SPV比特币节点只需保存root节点即可。例如,依上图如果想验证k交易是否在于该区块,我们只需要传递路径HL, HIJ, HMNOP和 HABCDEFGH。
网友评论