简单描述:区块链中的n个节点共同来维护一个账本数据(实际上每个人都会有一个账本),通过一定的规则不断地选出账务打包者(会给予他一定的奖励),其他节点进行验证的过程。
特点:去中心化、不可篡改,分布式存储(每个运行的节点都拥有一份完整的数据副本)、匿名性(通过比特币地址)、价值传递、自动网络共识、
区块链的技术组合:
区块链账本、共识机制、网络路由、脚本系统、密码算法
区块数据在逻辑上分成了区块头和区块体,每个区块头中通过梅克尔根[插图]关联了区块中众多的交易事务,而每个区块之间通过区块头哈希值(区块头哈希值就是一个区块的身份证号)串联起来
不可篡改性:区块链系统中,一个节点产生的数据或者更改的数据要发送到网络中的其他节点接受验证,而其他节点是不会验证通过一个被篡改的数据的,因为跟自己的本地区块链账本数据匹配不起来,这也是区块链数据不可篡改的一个很重要的技术设计。
共识机制:
区块链中的每一个节点都是同等的位置,怎么让每个区块与其他区块的数据一致,是共识算法需要解决的问题。
密码算法:(1)利用区块哈希来串联区块。因为区块哈希是唯一确定的,所以一旦某个区块的数据修改一点点,它的哈希值就会变化,就串联不到下一个节点了,因此区块链是不可修改的。
(2)区块中包含的每一笔事务数据也会被计算出一个哈希值,称为“事务哈希”,每一个事务哈希都可以唯一地表示一个事务。对一个区块中所有的事务进行哈希计算后,可以得出一组事务哈希,再通过对这些事务哈希进行加工处理,最终会得出一棵哈希树的数据结构。哈希树的顶部就是树根,称为“梅克尔根”。通过这个梅克尔根就可以将整个区块中的事务约束起来,只要区块中的事务有任何改变,梅克尔根就会发生变化,利用这一点,可以确保区块数据的完整性。
脚本系统:
脚本系统使得在区块链中可以实现各种各样的业务功能。本来大家只是通过区块链来记财务账的,通过脚本系统,大家可以使用区块链来记录各种各样的数据,比如订单、众筹账户、物流信息、供应链信息等,这些数据一旦可以记录到区块链上,那么区块链的优点就能够被充分地发挥出来
比特币是区块链的一种数字货币运用
挖矿:简单地说,挖矿就是重复计算区块头的哈希值(使用算法:SHA256),不断修改该参数(时间戳,梅克尔根、随机数),直到与难度目标值匹配的一个过程。(小于规定的难度值,随着算力的增加,难度值也会增加,保持10分钟算出一个值,这也是每10分钟产生一个区块的来源)
挖矿具有哪些功能:
(1)抢夺区块打包权
(2)验证交易事务
(3)奖励发行新币
(4)广播新区块
比特币系统也通过这种挖矿奖励的方式发行新的比特币,就像央行发行新钞一样。
挖矿主要是看算力,算力强的,总会算出来,时间问题。
1.以太坊:一种基于区块链的分布式计算平台。核心是智能合约。以太坊真正强大之处在于支持了用户自定义的合约编程,因此以太坊不但是一种数字加密货币,也是一个开发平台,支持全面的合约程序开发,最主要的就是支持了图灵完备的开发语言,编写的合约程序编译后是运行在以太坊虚拟机之上的
2.智能合约:
在区块链上若Alice向Bob转账,过程是Alice先用Bob的公钥来加密,然后将合约发到区块链的每个节点,只有Bob才可以用自己的私钥解密公钥,从而达到一个合约认证的过程。
3.区块链基础设施,交易结算
哈希计算:
函数的输入可以是任意长的字符串,输出的字符串长度固定,只能是单向输入。
布隆过滤器:利用多重hash,将值映射到bit表中,一个key可以通过多次hash映射到多个bit,通过判断bit的值从而判断是否存在。但是布隆过滤器是一个概率判断的过程,hash得到的位处若value是1,不能直接判断它就存在,因为也有可能是其他的key的hash映射,所以是一个概率事件。
区块链中的哈希算法:
(1)区块哈希
所谓区块哈希就是对区块头进行哈希计算,得出某个区块的哈希值,用这个哈希值可以唯一确定某一个区块。
(2)梅克尔树(哈希树)
当在区块链中做事务交易的时候,每个节点都要维护自己的账本数据,怎么样去发现账本有没有问题,就是通过梅克尔树。我们以第一个示意图来说明,假设A通过B来同步区块数据,同步完成后,发现计算出的梅克尔根与B不一致,也就是有数据发生了损坏,此时先比较Hash12和Hash34哪个不一致,假如是Hash12不一致,则再比较Hash1和Hash2哪个不一致,如果是Hash2不一致,则只要重新下载交易事务2就行了。重新下载后,再计算出Hash12并与Hash34共同计算出新的梅克尔根比较,如果一致,则说明数据完整。我们发现,通过梅克尔树,可以很快找到出问题的数据块,而且本来一大块的区块数据可以被切分成小块处理。
(3)公开密钥算法
用于加密的数学算法的特点:用输入算输出很容易,但是由输出算输入几乎是不可能的,或者说是需要很长的时间
RSA算法–最流行的非对称加密算法:
加密原理:基于数学难题–大质数分解
RSA流程:
(1)选择两个很大的质数p、q
(2)计算这两个质数的乘积,得到n = pq
(3)计算n的欧拉函数φ = (p - 1) (q - 1)
(4)选择一个整数e(1
(5)将n和e封装成公钥,将n和d封装成私钥
椭圆曲线算法
密码算法的应用场景:
(1)账户地址的生成
每个节点都有一对公钥和私钥,公钥可以作为自己的账户地址对外公开
(2)价值转移保卫
在区块链上发交易,必须做到以下两点
①必须证明发送源正确,并非是篡改的----可以使用自己的私钥进行数字签名
②确保只有接受者才可以解密–可以利用对方的公钥进行加密
区块链系统本质就是一个分布式应用软件。分布式系统的首要问题就是如何解决一致性的问题,也就是如何在多个独立的节点之间达成共识
区块链中决定谁具有记账权:
(1)根据算力,算力强的具有记账权
(2)根据所占有资源