密码学基础
比特币的数据结构
共识协议和系统实现
挖矿算法和难度调整
比特币的脚本
软分叉和硬分叉
匿名和隐私保护
概述:基于账户的分布式账本
数据结构:状态树、交易树、收据树
ghost协议
挖矿:memory-hard mining puzzle
挖矿难度调整
权益证明
Gasper the Friendly Finality Gadget(FFG)
-智能合约
总结与展望
cyypto-currency
cyyptographic hash function
理论上并没有证明出来,靠的是实践 collsion free(不建议使用) brute-force(暴力破解) hash碰撞 应用于h(m)篡改内容后找不出h(m·)与之相等 h()是对应用信息求hash值
MD5(可以制造hash碰撞了)
x-h(x) 反向不可退 要足够大,比较均匀
digital equivalent of a sealed envelope 预测结果不能公开 (封存在纸上)将h(x)放出来 可以拼接随机数一起取hash
是无法预测的hash值是哪个 nonce h(block header)<=target proff of work
difficult to solve,but easy to vertify
secure Hash Algorithm
(public key,private key) 非对称加密 签名用的是私钥,验证签名用的是公钥 加密用的是公钥,解密用的是私钥
公钥相当于银行账号,私钥相当于密码
asymmetric encryption algorithm
encryption key
a good source of randiomness 生成好的随机元
tamper-evident log 防篡改日志 保留最后一个hash值,就可以知道篡改了 保留最近的区块
merkle proff 轻节点
sorted Merkle tree
Bernoulli trial:a random experiment with binary outcome
Bernoulli process:a sequence of independent Bernoulli trials memoryless
poisson process 泊松 服从指数分布
application layer :BItCoin Block coin
network layer: p2p Overlay Network
设计算则:简单,鲁棒,没有高效性
H(block header)<=target SHA-256 2的256次方
difficult=(difficulty_1_target)/target
target=target*actual time/expected time
state fork
forking attack
deliberate fork
protical fork 协议不同造成分叉
hard fork block size limit
soft fork
新节点 不认老节点,导致老节点白挖
coinbase extra nonce 4byte
2 ( 32 ) 2^(32) 2(32)
2 ( 96 ) 2^ (96) 2(96)
p2sh
soft fork hard fork
超过半数的节点更新了软件,不会导致永久分叉 只有全部更新,才不会导致分叉
hide your identity from whom?
提高匿名性
application layer coin mixing
network layer
零知识证明:一方向另一方证明一个陈述是正确的,而无需透露除该陈述是正确的外的任何信息
hash指针怎样通过网络传播
hash指针只有hash并不是有指针 levelDB
不要用截断私钥的方法,用多重签名(保护安全性)
为什么比特币系统能够绕过分布式共识中的那些不可能结论
并没有达成一定的共识
比特币的稀缺性
量子计算
Ethereum:decentralized contract 去中心化合约
replay attack 重放攻击 nonce 加一个计数器防止
financial derivative 金融衍生品 不至于找不到人 账户保持稳定
单纯的hash树不行,查询比较高效,但是更新繁琐
单纯的Merkle tree 查询低效率
sorted Merkle tree
Patricial tree(trie)
MPT Merkle Patricia Tree 根节点(防篡改) Merkle proff(账户有多少钱,证明有没有账户 )
bloom filter false positive(误报没哟漏报)
-300w 收益由5调到3 调整难度,保证相对公平 保证货币量的稳定
virtual mining 虚拟挖矿
权益证明---------比实体高在不会造成直接的影响,得先买币 工作量证明 直接买矿机攻击 altCoin Infanticide
类似于股份制 大量买进会及时引起注意 投入的币会被锁定一段时间,不会造成难易的冲击
nothing at stake 押注多条分支链
Casper the Friendly Finality Gadget(FFG)需与一定量工作性相结合 Validator(投入保证金)
错误处理
具有原子性
汽油费-可剩退回 中途没有汽油费直接消耗掉汽油费,并回滚 防止攻击
assert:条件不满足:用于内部
require:输入或者外部
嵌套调用:
直接调用,连锁式回滚
先执行-再挖矿 挖不到-补偿(得不到补偿,还需要验证)
交易成功 Recceipt数据结构 有收据
不支持多线程 --------以太坊确定性状态机 多线程多个核对内存访问顺序不同执行结果可能不同 产生随机数就是多线程
拍卖合约-钱锁住如何取出来-没办法 code is law 智能合约锁仓 irrevocable trust 不可撤销的信托 应对方法 测试测试再测试 预留后门(超级管理员)-达不成共识-与去中心化的理念违背
重新设计拍卖合约-withdraw solidity代码 pay2Beneficiary 重入攻击 收到ETH未调用函数,会立即执行fallback()函数 不停的调用 没有钱,没有汽油费了 先清零再转账 不用call.value调用转账使用send
用来编写控制逻辑-互不信任建立共识才写在只能合约里
The DAO
DAC: Corporation
splitDAO childDAO 拆分 代币投票 先转账再清零 方向错误
硬分叉
1.智能合约-自动合约
智能合约-不可篡改性 Irrevocability is a double sward
2.私钥泄露-转换账户 阻止智能合约的调用,禁止账户交易,软分叉,用黑客漏洞发动攻击
3.Nothing is irrevocability
4.Is solidity the right programming language?
函数式语言-比较慢 formal verification 形式化
5.开源 Many eyeball fallacy
6.去中心化 去中心化的改法也是通过去中心化的规则修改 分叉也是去中心化的体现 可以分叉选择原有的体制
decentralized 不等于 distributed state machine 保持一致性 重复性操作(容错 mission critical application)无间断服务 效率低 分布式是为了提高效率
攻击 乘除变为很大的数,溢出变为很小的数 减去很小的数,每个人给很多的数 凭空多了很多代币 solidity SafeMath库检测 solidity不存在精度损失 都是整数