共识原理:

两种共识算法:
拜占庭容错(BFT) Byzantine Fault Tolerance,非拜占庭容错(CFT) Crash Fault Tolerance
CFT认为机器可能宕机,网络可能异常,但是所有信息真实可信。BFT在CFT的基础上,认为出错的机器是可能说谎的。 CFT模型容错需要至少2f+1台机器,BFT模型容错需要至少3f+1台机器
BFT代表的算法:PBFT(基于两阶段提交的算法)POW(工作流证明算法)XFT( Cross Fault Tolerance)
CFT代表的算法:Paxos,Raft及其变种
基本原则:
FTP不可能原理、CAP原理、ACID原则
 
paxos算法:分布式中没有恶意节点的情况,在两阶段提交中,通过保持最大的提案号来确保提案通过,每次只要超过半数即可
PBFT (拜占庭容错算法):通过预准备(提交提案),准备(各个节点收到提案进行广播),提交(各节点收到一定的请求,则进行提交),此算法可以在N>=3F+1时保持正确
 
raft算法:类似于多主从结构,选举出leader再进行两阶段提交。其他节点作为follower遵守leader的决定。
Follower变身candidate 选举为Leader,由leader进行操作,同步到Follower
 
拜占庭将军问题:对现实网络问题的模型化。节点中有恶意的情况。
比特币网络中使用工作量证明来解决拜占庭问题
 
 
改进型的POW算法:
Ethash算法:抵抗矿池,推出的算法。使得挖矿与内存和带宽相关
总的来说是在POW基础上加上区块存储和缓存计算
1.根据区块头计算出一个种子,
2.使用种子产生16M的伪随机缓存,轻客户端存储缓存。
3.基于缓存使用特定算法生成1GB的的数据集DAG,使用缓存中的元素可以快速计算DAG指定位置的元素。数据集随时间线性增长。
4.挖矿成了矿工从DAG中随机选择元素进行散列,计算出符合条件的值。
5.验证者只需要存储16M缓存就行了,使用缓存得到DAG中指定位置的元素,然后验证这些元素是不是小于某个散列值
6.缓存和DAG每增加3万个区块更新一次。
 
POS算法:
基于用户的余额来调整用户出块的可能性
基于链的Pos:
算法周期性的选择一个验证者,给与验证者创建新快的权利,创建者保证使用最长的链。
BFT风格的Pos:
依据持有数量,分配给验证者相应的权利,决定哪个块是新快,验证者不会否定自己的钱,所以必然诚实。
 
pos产生的问题:
多条准主链,无法产生一条正确的链,因为验证者会尝试在所有备选链上添加区块。
解决:Slasher 事后对 在多条链上创建块的行为进行惩罚。
            Casper
 
货币
预付款(众筹6000万)个以太币,
没挖出一个区块,奖励矿工5个以太币(静态奖励),叔区块奖励4.375个(7/8),矿工每引用一个奖励0.15个以太币(1/32),至多两次
静态奖励为5个,动态奖励为交易费用,叔区块引用
 
交易
交易费用Gas:
维:
gas消耗:
默认消耗GasPrice:0.000000001Ether/Gas(1Gwei,/Gas=1G wei Gas)
两个gas limit: 用户愿意付出的最大Gas数量(用户设置),单个区块所包含的最大Gas总量(矿工设置),基于上一个区块波动1/1024
交易格式:
from:
to: 为空则是创建只能合约的交易。执行时,为智能合约的地址
value: 转移的以太币数量
data(input): 如果存在,则表明该交易是一个创建或者调用智能合约交易
Gas limit: 
GasPrice:  gas价格 维
nonce: 区别同一用户不同的交易
hash:整合交易的hash ,作为ID
r s  v: 发送者的私钥对交易的签名。
 
编码压缩:
RLP(recursive length prefix)
RLP没有定义转换规则,用户可以按照自己的规则转换
编解码 字符串和列表
以太坊使用大端序来对整数型编码(大端序和小端序)
 
API
JSON-RPC 
接口列表:
 
域名
域名使用集邮者拍卖(维客里拍卖)
 
 
 
 
 

posted on 2019-07-10 11:07  来碗板面  阅读(549)  评论(0编辑  收藏  举报

导航