理论

定义

  • 狭义上指将数据区块以时间顺序存储作为数据结构,以密码学方式保证不可篡改和伪造的分布式帐本
  • 广义上指以块链式数据结构存储数据,以分布式节点共识算法更新和新增数据,以密码学方式保证数据访问以及传输的安全性,以自动化脚本构建的智能合约,编程和操作数据的分布式基础架构和计算范式
  • 区块链是一种数据存储形式,具有高安全性以及去中心化,可以在交易中省去第三方,节省成本
  • chain of block是一种将数据作为区块通过哈希链接成链的结构,区块链是通过密码学,p2p等技术维护这个数据结构安全性,完整性等的综合技术体系

特点

去中心化是区块链最本质的特征

安全保证

采用最长链原则,挖矿的难度,全网矿工共同挖矿,预设协议要求hash值具有特殊性保证了想要修改历史数据是很困难的。

区块链的信任机制

  •  比特币系统的信任机制:在比特币蔓延全球之后,没有个体或者机构可以占据所有矿工算力的百分之五十一,但是算力太集中也会很大程度拥有比特币的话语权,会降低区块链的去中心化程度
  • 以太坊的信任机制:记账的概率比重需要支付以太坊的虚拟货币作为保证金,从而增大恶意记账的代价,以此背书来作为信任机制,但是依赖于核心技术的运维团队等,也会降低区块链的去中心化程度
  • 联盟链的信任机制:参与者进入管控,参与者身份明确,参与者在现实生活中可被信任,交易记录可审计,回溯,交易代价可补救,恶意交易造成的损失巨大,区块链本身数据难篡改,易验证,故而可信

分类

公有链

部署在全网,任何一台联网计算机都可以作为一个节点参与,不利于监管

私有链

拥有者是一个主体或者个人,部署,安全,公平,以及管理等都由这个主题或者私人制定

联盟链

是部分人参与治理的区块链,参与者的身份需要经过验证,在保证安全性的同时,保证了合规经营,可监管等特性,适合金融,司法等政府部门希望纳入监管,保证安全的领域

 

结构

区块链是将区块以时间顺序存储的数据结构

区块

  1. 区块主要由区块身和区块头构成
  2. 区块的哈希值又区块头计算得到

区块头

  • 区块版本号:表明协议的版本情况
  • 父区块签名:除了创世块,每一个区块都包含上一个区块的签名,以此来证明两个区块是存在链接的
  • MerkleRoot hash:将交易信息构建成一个merkle树(以交易数据块作为叶子节点,通过计算叶子节点的哈希值后组合成为父节点数据,父节点数据计算出来哈希值后又作为父节点的父节点的数据,以此类推,可以计算出根节点的哈希值),merkle树的根hash值就是Merkle Root hash,由于hash值的敏感性,所以这个值可以看作区块包含的交易信息的指纹
  • 随机数:是区块信息中可以更改并且不改变信息意义的数据,只能由数字构成,修改nonce的意义是为了使得数据形成的签名是符合该区块链的预设协议的
  • 时间戳:创建预备节点的时间,一般精确到秒
  • 目标hash:与挖矿难度挂钩,目标hash越低,挖矿难度越高,修改随机数后获得的hash值低于目标hash的新区快才可能是合法区块

区块身

  • 交易计数器
  • 交易详细信息

 

名词解释

挖矿

  •  在元数据以及交易信息不变的情况下,通过修改nonce,使得一整个字符串的hash值是符合预设协议规定的格式,比如以六个0开头等
  • 随着挖矿难度的增加,修改nonce不一定可以得到合法区块,还可以调整出块奖励交易中的coinbase部分,这部分也被称作extra nonce

 

最长合法链原则

每一个矿工都有权限往现有链条上新增区块,但是节点只认最长合法链,其他的分支会被抛弃

 

分叉

  • 分叉分为软分叉和硬分叉
  • 软分叉:协议出现更新后,旧协议产生的区块新协议认为不合法,新协议产生的区块旧协议认为合法,那么旧协议会一直尝试产生区块,但是上链后不被更新后的节点认可,如果更新后的节点算力占了多数,那么旧协议节点就会一直尝试产生区块,但是区块上不了链,后又从新协议节点产生的最长合法链维护,但是仍然上不了链。
  • 硬分叉:协议更新后,旧协议认为新协议不合法,那么新协议一旦产生了新区块,新协议维护的链就不被旧协议节点认可,旧协议就会一直维护自己的链,此时会产生永久性的分叉,直到协议更新

 

状态树

  • 以太坊中的状态数是一颗MPT树,通过将地址逐位遍历的方式构建的树,比如两个地址的前面十位相同,那么两个地址的前面十位便是同一路径,当两个地址的十一位不同后,便出现了分支
  • 每个节点保存一个地址位,比如第十层的节点都保存地址的第十位,节点中存储的内容包括账户信息,比如余额或者是合约账户保存合约内容以及合约执行状态等
  • 有时候一条路径到底都只表示一个账户的地址,没有出现分叉,就会浪费很多个节点,只保存一个地址位,却要浪费一个节点,所以为了节省空间,会将一条没有分叉的路径合成一个节点,节点中存储了多个地址位作为key。

交易树

将交易作为叶子节点构建的Merkle树,可以有效防止交易内容被纂改

收据树

在以太坊中,交易不止是转账,还有合约执行等复杂的数据,所以为了方便查询,每次交易会产生一个收据,可以合成收据树,收据树中的节点是和交易树中的节点一一对应的。 

Bloom Filter

在以太坊中,为了方便查找采用的一种无关区块过滤方式。将一个集合中的单个数据通过运算H后产生一个128以内的数字,在区块头中放置一个128位的数字,每个数据运算过后得到n,就将第n位置1,这样在查询的时候可以先通过H方法计算某个数据得到m,查看区块头中的Bloom字段中的m位是否为1,如果是0,那么这个区块中肯定不包含目标数据,但是如果是1,那就可能包含,因为有可能是产生碰撞,但是接下来再继续查询,也可以过滤掉大量无用的区块,节省查询时间。

 

疑问

 1.区块链数据的难篡改的特性保证了数据存储的安全,怎么从账户的信息方面保证数据的访问安全?

 答:账户的账号以及密码管理和登录等与其他系统类似,没有特别的创新。

2.基于账户的区块链系统的具体含义

 答:比特币系统中,是地址拥有未消费的比特币,生成地址的密钥拥有消费这部分比特币的能力。而基于账户的系统指的是,系统中存在一棵存储账户信息的树,系统的其他信息存在的目的大多是服务这个账户树上的账户。

3.基于UTXO时,UTXO存储在哪,是每次需要知晓余额的时候去区块遍历么

 答:猜测是UTXO普通存储,只不过使用的时候可以去区块中查找相应交易,验证UTXO是否符合。

 4.比特币中时间戳是指区块哈希值还是指事实上的时间戳,在大话区块链中,比特币中的时间戳为了保证交易顺序防止双重支付,对时间戳看得很重,似乎是将区块之间的链接哈希看作了时间戳交给矿工验证,所以比特币的交易信息中有没有时间戳,矿工验证交易是看区块哈希还是看时间戳。

 

参考

https://baike.baidu.com/item/%E5%8C%BA%E5%9D%97%E9%93%BE/13465666?fr=aladdin

https://www.miyoushe.com/ys/article/31771874

https://www.jb51.net/blockchain/801891.html

https://baijiahao.baidu.com/s?id=1671528398516092015&wfr=spider&for=pc