特点:公开、透明,解决交易中信任问题,通过技术推动社会交易成本的降低。
采用新的清算方式, 使用流水账记录。
1. 区块链的六层结构
- 数据层
数据区块, 链式结构, 时间戳, 非对称加密, 哈希函数, Merkle树。- 网络层
P2P网络, 传播机制, 验证机制- 共识层
PoW, PoS, DPoS- 激励层
发行机制, 分配机制- 合约层
脚本代码, 算法机制, 智能合约- 应用层
可编程货币, 可编程金融, 可编程社会
从1 ----》6 由底而上
各层之间相互配合, 实现一个去中心化的信用机制。
2. 区块链技术概念
- 通俗说: 分布式记账; 形成 公开,透明,不可篡改、不可伪造的数据库.
- 区块链技术的本质是一种互联网协议。
- 只有当所有网络节点(或大部分节点)进行区块确认后, 该笔交易才算真正结束。
区块链技术在没有中央控制点的分布式对等网络下,使用分布式集体运作的方法,构建了一个P2P的自组织网络。通过复杂的校验机制,区块链数据库能够保持完整性、连续性和一致性,即使部分参与人作假也无法改变区块链的完整性,更无法篡改区块链中的数据。
- 核心技术1:区块+链 = 时间戳.
- 核心技术2:分布式结构——开源的、去中心化的协议.
* 5.1 分布式记账、分布式传播、分布式存储这三大技术: 实现该系统的"不可被控".- 核心技术3:非对称加密算法
- 核心技术4:脚本. 增加区块链技术的可拓展性, 会使系统有机会去处理一些无法预见到的交易模式,保证了这一技术在未来的应用中不会过时,增加了技术的实用性。
3. 共识机制
POW : 工作量证明 (第一种)
- 比特币的共识机制(POW): 工作量证明机制. (以太坊前三个阶段也采用该机制);
- 工作证明: 设立一个奖励,要想得到就得付出代价,付出代价的方式是解题(比特币是SHA-256,以太坊是SHA-3),谁先解出来,奖励就归谁,一旦计算出来后,要告诉大家,大家会帮你验证,大家都承认后你就可以拿到这个奖励,然后基于这道题目继续算下一个题目,如此反复;
- 因为每一个区块链都是基于前一个区块链产生的,如果_有攻击者要修改之前的记录,从那之后每一个区块链都要重新付出劳动_,POW机制通过控制区块的平均生成时间,降低攻击者试图赶上随后区块的概率;
- 大家帮忙验证_其实是一个集体投票的结果,大多数人决定了_最长_那条链,因为那条链中包含_最多_的工作量证明,并且_投票是基于计算力(CPU),有计算力才有投票权;
- POW机制解决了拜占庭将军问题 : 即在 互相不信任 的情况下,只要 好人的数量大于坏人,就保证系统的正确运转(符合大多数的意愿),让系统具备一定的 容错性,这也就是大家所说的:区块链具备去信任的能力;
POS : Proof of Stake,权益证明 (第二种)
- 权益证明 : 主要思想是_节点记账权的获得难度_ 与 节点持有的权益成反比, 相对于PoW,一定程度 减少 了数学运算带来的资源消耗,性能也得到了相应的提升,但 _依然是基于哈希运算竞争_获取记账权的方式;
4. 区块链基础 (散列法hashing)
- 在区块链中,散列是作为区块、交易和地址的标识符。
- 一个散列函数(hash function),即取任何的输入,就可以产出一个特定大小的输出。
- 散列算法 与 压缩算法的区别:
* 简单地解释下这两者之间的区别,N兆视频数据, 散列法_总是会产生_相同数量_的灯泡,而_压缩_一部N兆(MB)视频的结果,仍然会产生数以_百万计灯泡的一个输出。一个压缩过的视频,可被_解压缩_然后_获得原始_的视频。而当一个视频被散列到仅仅只有256个灯泡时,从这个_散列_来_重新构建原始视频_的_可能性就很小_了.
- 一个安全的加密散列函数,它的一个关键特征就是,它是单向的。这意味着,从数学和计算机学角度上来看讲,从输出来反推输入,这几乎是不可能的。术语为: 逆原像阻力.
- 安全的散列函数,即使_输入_仅相差_一个bit_,也会产生_显著不同_的_输出_。
* 如: passwd1 与 passwd2 分别计算散列, 确保产生的输出显著不同; 否则, 如果图案相似, 那对方就可以推断出输入也是类似的.
- 加密散列函数也应该是抗碰撞的。 一个碰撞过程,意指当一个散列函数为超过1个输入进行运算,而产出相同输出的结果。如果用散列法运算数据1(可能是一份电子表格),而用散列法运算数据2(可能是一张图片),这两者产生了相同的输出,那么这个碰撞冲突就发生了。
- 散列还享有安全与隐私的优势。
* 例如: 一首歌是以数字格式被记录的,并且这首歌的散列是被记录在区块链之上的,那任何他人都无法声称是他们是第一个创造了这首歌,并生成了这个散列,他们也不会知道歌曲本身:某人不能写歌,也没法篡改这个散列。同样地,除非歌曲或其他数字化财产或数据被表明了,展示在区块链上的仅仅是散列本身而已。 所有权记录也可以存储在区块链上,举个简单的例子,车辆登记处可以将汽车数据散列(照片,VIN, 车牌)存储在区块链上,只有车辆所有者,保险公司以及政府会知道这个车辆的实际细节。
function withdrawBalance() {
amountToWithdraw = userBalances[msg.sender];
if(amountToWithdraw > 0){
if(!(msg.sender.call.value(amountToWithdraw)())) { throw; }
userBalances[msg.sender] = 0;
}
}
本文来自, 多篇博客的阅读集合...