区块链技术分享

风尘

文章目录

  1. 1. 区块链基本概念
  2. 2. 比特币运行原理与动作机制
    1. 2.1. 以物易物的村庄
    2. 2.2. 实物货币
    3. 2.3. 符号货币(纸币)
    4. 2.4. 中央系统虚拟货币
    5. 2.5. 分布式虚拟货币
      1. 2.5.1. 账簿公开
      2. 2.5.2. HASH算法
      3. 2.5.3. 加密算法
      4. 2.5.4. 身份与签名机制(公钥加密系统)
      5. 2.5.5. 区块链原理
      6. 2.5.6. 挖矿原理(PoW,工作证明)

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

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