区块链技术分享

[TOC]

区块链基本概念

区块链的本质是一个分布式的公共账本,从技术角度来讲就是一个分布式的数据库。任何人都可对这个账本进行核查,但不存在单一的用户可以对它控制。最大特点是:去中心化、

区块链本身不是新技术,而是一种技术架构。区块链原本是比特币等加密货币存储数据的一种独特方式,是一种自引用的数据结构,用来存储大量交易信息,每条记录从后向前有序链接起来,具备公开透明、无法篡改、方便追溯的特点。

交易(transaction):一次对账本的操作,导致状态改变,如添加一条转账记录。

1
2
3
4
5
6
7
8
9
10
交易包含大致内容:

付款地址
付款人资金来源交易ID
交易金额
收款人地址
时间戳
交易是否已经处理
交易输入之和是否大于输出之和
...省略

以上内容检查都通过,交易将被标记为合法未确认交易,并在网络上广播。

区块(block):记录一段时间内所有交易状态的结果,是对当前账本状态的一次共识。

1
2
3
4
5
6
7
8
9
10
区块包含大致内容:

4字节的区块大小信息
80字节的区块头信息
交易个数计数器
所有交易具体内容
上一个区块头的SHA256值 (区块成为区块链的关键字段)
难度指标
Nonce串
...省略

链(chain):由区块按照时间顺序串联而成,是整个账本状态变化的日志记录。

比特币运行原理与动作机制

以物易物的村庄

物换物

实物货币

由于以物易物实在太不方便,所以出现了实物货币
实物货币

符号货币(纸币)

实物货币的弊端也出现了。因为村子附近金矿并不多,开采和冶炼金子太费时费力了。
纸币

老村长就承担了政府和银行的角色。

中央系统虚拟货币

老村长由于每天都要核对大量的旧纸币,写新的纸币,还要把各种账目仔细做好记录。一来二去,老村长操劳过度不幸驾鹤西去了。老村长儿子二狗子接笔负责。

二狗子发明虚拟货币,每个村民都不需要用实物支付,支付过程变成了二狗子那边维护的账本上数字的变更。

虚拟货币

分布式虚拟货币

中央系统虚拟货币存在问题:

  • 这个体系完全依赖于账本持有人的个人信用,如果这个人不守规矩,随意篡改账本,那么整个货币系统就会崩溃
  • 如果这个人家里失火或者账本失窃,同样也会为整个体系带来毁灭性的打击

村里能人中本聪,计了一套不依赖任何中央处理人的叫比特币的虚拟货币系统,可以解决上述问题。

最小单位:聪 (10-8 比特币)

账簿公开

对现有账簿进行如下改造:

  1. 账簿上不再记载每户村民的余额,而只记载每一笔交易。即记载每一笔交易的付款人、收款人和付款金额。只要账簿的初始状态确定,每一笔交易记录可靠并有时序,当前每个人持有多少钱是可以推算出来的。
  2. 账簿由私有改为公开,只要任何村民需要,都可以获得当前完整的账簿,账簿上记录了从账簿创建开始到当前所有的交易记录。

HASH算法

能将任意长度二进制明文串映射为较短(通常是固定长度)二进制串(Hash值),并且不同明文很难映射为相同的Hash值

Hash算法不是一种加密算法,但是常用于对口令的保存上,如后台可以保存密码的Hash值,防止数据库泄露,密码明文暴露。

1
2
3
4
5
特点:
正向快速
逆向困难 (有限时间内基本不可能逆推出明文)
输入敏感 (原始信息发生一点变化,新产生Hash值会发生很大变化)
冲突避免 (很难找到两段明文不同的内容,Hash值一致的情况)
  • 常见算法

MD4、MD5、SHA

目前MD5、SHA1已经被破解,一般推荐使用SHA2-256或其它更安全的算法应用于商业场景。

加密算法

算法类型 特点 优势 缺陷 代表算法
对称加密 加解官密钥相同 计算效率高 加密效率高 需提前共享密钥易泄露 DES 3DES
非对称加密 加解密密钥不相关 无需提前共享密钥 计算效率低存 RSA

身份与签名机制(公钥加密系统)

账户地址经过Hash160或SHA256及编码运算后生成的160位(20字节)的字符串。一般可见的地址都是对其进行Base58Check编码优化后的字符串。

这套机制下,任何人都不使用真实身份交易,而是使用一个唯一的代号交易。比特币地址是一个由数字和字母组成的字符串,由公钥生成的比特币地址以数字1开始,可以看作是收款账户。

每个帐户其实就是一对公私匙,有私匙的人就是帐户的主人。如果 A 要给 B 转一笔钱,A 就把钱的数量加上 B 的公匙,用自己的钥匙签名。而 B 看到这个签名,就可以了解,的确是 A 转给了他如数的 BTC 。


1J7mdg5rbQyUHENYdx39WVWK7fsLpEoXZy


  • 输入与输出

整个区块链不记录输入,只记录输出,输入实际上是对上一次输出的引用。所有输出总和就是该账户

  • 找零

账户交易

A向B支付8BTC,需要使用包含20BTC的未消费支出,设置支出为8BTC。比特币会把消费时所用的地址余额设置为0,当支付金额小于可用余额时,必须设置找零地址。该地址可以是原有账户地址,也可以是一个新地址。

因为比特币每一笔交易在全球公链上永久可见,因此任何人都可以在上面跟踪查询,容易暴露隐私,可以把找零地址设置为一个新地址,使其追踪增加难度。

区块链原理

  • 创世块

区块链的第一个区块被称为创世块。现在比特币把创世区块号定为0

创世块50BTC交易被发送到如下地址:
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa 该交易被称为创世交易。

比特币把区块和交易存储在两个数据库中,当客户端发现区块数据库为空时,就会用代码直接生成一个创世块,但没有把创世交易存储到客户端的交易数据库中,当收到创世交易的输出交易时,因为在交易数据库中找不到记录,而会拒绝此次交易。

创世区块信息如下:
创世区块内容

  • 区块长链与短链

每个区块必须包含前一个区块链的Hash值,所以使得从创世块当现在块开始形成了一条块链,每个区块必须按照时间顺序跟在前一个区块之后。诚实的矿工只会在最长链的基础上生成后续区块。所以想要改变一个已经在区块链上存在很长时间的区块,从计算上来说是不可行的。这些特性使得双花比特币非常困难。

区块链示意图

当两个区块生成时间仅相差几秒时,可能产生区块链的一个分叉。当出现此种现象时,矿工节点会根据区块时间,在先收到的区块基础上继续挖矿,哪个区块先出现哪个区块就会被包括进总链,因为这条链更长。短区块链中的交易将被重新加入到交易池,并被包括到另一个区块中。短区块链中的区块收益不会出现在长区块链中,因而这些区块收益将会丢失。

挖矿原理(PoW,工作证明)

  • 挖矿收益来源

交易费:最低0.0001BTC
系统本身产出,目前每10分钟左右产出一个不到1M的区块(记录10分钟内验证过的交易),最初系统每个区块的成功提交者奖励50个BTC,每隔21万个区块自动减半,即4年时间,最终比特币总量稳定在2100万个。因此比特币是一种通缩的货币。

系统每隔两周(即2016个区块)会根据上一周挖矿时间来调整挖矿难度,调节生成区块的时间稳定在10分钟左右。

  • 计算原理:

SHA256(SHA256(block_header+nonce))< difficulty

将比特币的80个字节长度的区块头数据进行两次SHA256运算,运算结果就是一个256位(32字节)长度的字符串。通过比较与当前难度值的大小判断当前区块是否合法。合法则挖矿成功,反之Nonce+1重复上述动作。

Nonce理论上是随机数,但实际情况下,因为Hash值不可逆只有穷举法才能最容易计算出目标值,所以每次计算Nonce从0开始穷举。

  • 难度值规则

挖矿计算目标值target是一个十六进制以连续0开头,且连续0越多,越符合命中规则。

Hash值:00000000000000001e8d6829a8a21adc5d38d0a473b144b6765798e61f98bd1d

1
2
比如:
当前target值为连续200开头的十六进制数字;一个不透明的口袋里有俩形状一模一样的乒乓球,一个红色(1),一个蓝色(0);每次抓阄抓到蓝色则标记位0,红色标记位1,那么如果矿工想要“挖矿”成功,意味着:至少连续20次抓阄均抓到篮球。

本文中村庄故事引用自一个故事告诉你比特币的原理及运作机制,部分内容来源于网络。