区块链、以太坊专题链接直达
区块链入门
精通以太坊-1~3章-思维导图
精通以太坊-4~6章-思维导图
精通以太坊-7~9章-思维导图
精通以太坊-10~14章-思维导图
区块链
主要学习对象是《白话区块链》,“以太坊官网”
由于刚开始接触,很多都是自己片面的理解,有待完善
更新:06-01
增加"区块链->技术栈"分支
增加"区块链->阶段架构"分支
更新:06-11
增加《白话区块链》阅读笔记
附:文本结构
区块链
比特币
中本聪发明的数字货币
白皮书
《比特币:一种点对点的电子现金系统》
1、抛出问题
如何不通过所谓权威的第三方机构(如银行),来建立一个可信的交易网络呢?
2、交易
描述了一种通过密码学技术进行交易验证的方式,其实是计算机密码学的其中一个应用,密码学可以说是比特币系统的骨骼,贯穿了各个环节
3、时间戳服务器
通过时间戳运算链接各个区块,也就是区块链概念的来源,同时也说明了比特币数据的存储方式
4、工作量证明
介绍了一种点对点网络中如何对各自的数据进行一致性确认的算法,工作量就是CPU算力消耗
5、网络
介绍了交易确认的过程,不依靠中心服务器,如何在一个个节点中确认一笔笔交易过程呢?
6、激励
消耗算力奖励比特币,还有交易手续费
7、回收硬盘空间
全量数据是很庞大的,只有全功能节点才需要保持全量数据,白皮书提出一种思路(删除过老的交易数据,但不破坏区块哈希头)
8、简化的支付确认
一些功能不需要大量数据,比如在比特币支付功能,只需要保留体积相对较小的区块哈希头即可
9、价值的组合与分割
介绍了如何组合和分割比特币,以实现不同面值的交易
10、隐私
暴露的只有一个ID(地址),谁也不知道这个ID代表的是谁
11、计算
从概率统计学计算了被攻击成功的概率
用到的非对称加密算法
ECC
椭圆曲线算法
地址生成路径
随机数发生器生成一个私钥
ECC生成公钥
对公钥进行两次哈希(SHA256+RIPEMD160)
比特币地址
比特币的核心思想
技术特点
分布式存储
匿名性
自动网络共识
价值传递
可编程合约
不可篡改
技术栈
区块链账本
区块
区块头
哈希头(区块的ID)
梅克尔根(与区块中众多的交易事务关联)
区块体
链
每个区块包含:前一个区块头哈希(即上一个区块ID),由此相连
共识算法
筛选出最具代表性的节点
指标
PoW
Proof of Work
工作量证明
PoS
Proof of Stake
权益证明
DPoS
Delegate Proof of Stake
委托权益证明
PBFT
Practical Byzantine Fault Tolerance
实用拜占庭容错算法
使各个节点的账本保持一致
网络路由
节点发现协议
发现邻居、介绍邻居、重启可寻找上次连接成功的邻居
通过临近节点同步数据,保持最新
也可提供给临近节点数据
密码算法
哈希头
区块ID
起链的指针作用
防止数据篡改
梅克尔根
约束整个区块的事务,防篡改
创建账户地址
账户地址含有公钥信息,只有账户拥有者才能解密
签名交易事务
私钥签名
脚本系统
可以实现各种业务功能
订单
众筹账户
物流信息
供应链信息
阶段架构
1.0
比特币、莱特币
竞争
打包
广播
奖励(发币)
纯数字货币
比特币+简单堆栈指令
2.0
以太坊代表的
相比于1.0时代,最大特点是支持智能合约,智能合约运行在EVM上
支持自定义智能合约的系统
具有图灵完备性
以太坊+合约编程语言
3.0
超级账本:Hyperledger
分布式账本框架
用户数据库
智能合约引擎
图形界面
不发币,但可以通过智能合约开发发行数字货币
函数库:go语言库
......
应用领域更广
面向企业
需要入会费
会员分级
组织内权限分层
超级账本和以太坊的区别
超级账本
函数库丰富,支持go语言库
直接在所有节点部署
智能合约可以非常复杂
基于Docker
可以与外部系统交互
计时终止
以太坊
少量库函数
当成交易发布
智能合约不能复杂,编译成字节码发布,需要全网同步
基于EVM
不可以与外部系统交互
按gas记步终止运行
分类
按网络类型
公有链
私有链
联盟链
按部署环境
主链
测试链
按对接类型
单链
侧链
互联链
挖矿
生成新的区块hash头的过程
新区块hash头的生成
上一个区块的hash头
当下的一批交易生成的hash值
由默克树算法得到
每个交易都为叶子结点
按顺序排列
俩俩归并
直到归并为一个根结点
最终只需记录这个根结点即可
时间戳随机数
挖矿就是寻找此随机数的过程
Hash头需要达到目标难度值的要求
抢夺区块打包权
验证交易事务
奖励发行新币
广播新区块
存在的问题
分叉
软分叉
老版本能接纳新版本的分叉
硬分叉
新老版本互相不认可,产生了全新的分叉(另一个区块链应用)
临时性分叉
多个矿工同时打包了区块
需要经过更多出块后,以最长的链为准
由此产生了分割攻击
将一批节点与主网分割出来,在局域网中出更多的块后,再加入到主网中,可能主网会因此被篡改成攻击者的版本
解决
以最长链为准
因此建议一笔交易至少经过六个区块后才能确认是否成功
51%攻击
占据打包权
修改自己的交易记录
阻止区块确认部分或全部交易
阻止其他矿工开采到区块
改进
需要新的更好的共识算法
Spv轻钱包
方便了使用
但把主要检查工作交给了其他完整节点
私钥丢失
无解
比特币系统有价值数十亿甚至更多的无主币
保管
备份
助记词
转账给其他私钥,将鸡蛋放在更多的篮子里
重放攻击:交易延展性
攻击者可用来阻止交易进入区块
智能合约漏洞
TheDAO事件
一个智能合约的应用
众筹项目
该项目中的以太币被攻击者一一转移出去
以此产生了硬分叉:ETH
老版本叫:ETC
新版本支持者认为攻击者违法
老版本支持者认为区块链的数据不应被篡改(攻击发生了就发生了)
Parity多重签名漏洞
攻击者越权调用合约函数,将合约中的资产转入自己的账户
网络拥堵
十分钟出一个块,不超过1Mb
但是在内存中排队的远不止1Mb
因此很多事务是要排队很久的
而费用越高越优先的规则,让普通用户难以承受
容量爆炸
不断增长的区块数据
短短三年,以太坊就有200GB数据,在不远的将来,普通硬盘就负担不起全量数据了
后果
全节点会越来越少
验证缓慢
解决思路
剔除老交易数据
使用去中心化的自治存储系统