区块链(肖臻笔记)

区块链的技术与应用

比特币

密码学基础

比特币的数据结构

共识协议和系统实现

挖矿算法和难度调整

比特币的脚本

软分叉和硬分叉

匿名和隐私保护

以太坊

概述:基于账户的分布式账本

数据结构:状态树、交易树、收据树

ghost协议

挖矿:memory-hard mining puzzle

挖矿难度调整

权益证明

Gasper the Friendly Finality Gadget(FFG)

-智能合约

总结与展望

比特币密码学原理

cyypto-currency

cyyptographic hash function

collision resistance 抗碰撞性

理论上并没有证明出来,靠的是实践 collsion free(不建议使用) brute-force(暴力破解) hash碰撞 应用于h(m)篡改内容后找不出h(m·)与之相等 h()是对应用信息求hash值

MD5(可以制造hash碰撞了)

x-h(x) 反向不可退 要足够大,比较均匀

digital commitment (hiding)

digital equivalent of a sealed envelope 预测结果不能公开 (封存在纸上)将h(x)放出来 可以拼接随机数一起取hash

puzzle friendly

是无法预测的hash值是哪个 nonce h(block header)<=target proff of work

difficult to solve,but easy to vertify

SHA-256

secure Hash Algorithm

(public key,private key) 非对称加密 签名用的是私钥,验证签名用的是公钥 加密用的是公钥,解密用的是私钥

公钥相当于银行账号,私钥相当于密码

asymmetric encryption algorithm

encryption key

a good source of randiomness 生成好的随机元

hash指针

tamper-evident log 防篡改日志 保留最后一个hash值,就可以知道篡改了 保留最近的区块

merkle tree

merkle proff 轻节点

sorted Merkle tree

实现

Bernoulli trial:a random experiment with binary outcome

Bernoulli process:a sequence of independent Bernoulli trials memoryless

poisson process 泊松 服从指数分布

BitCoin NetWork

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

BTC-比特脚本

分叉

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 金融衍生品 不至于找不到人 账户保持稳定

ETH-状态树

单纯的hash树不行,查询比较高效,但是更新繁琐

单纯的Merkle tree 查询低效率

sorted Merkle tree

Patricial tree(trie)

MPT Merkle Patricia Tree 根节点(防篡改) Merkle proff(账户有多少钱,证明有没有账户 )

交易树和收据树

bloom filter false positive(误报没哟漏报)

Ghost

难度调整

-300w 收益由5调到3 调整难度,保证相对公平 保证货币量的稳定

权益证明 proof of stake

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

用来编写控制逻辑-互不信任建立共识才写在只能合约里

DAO:Decentralized Autonomous Organization

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)无间断服务 效率低 分布式是为了提高效率

美链 Beauty Chain

攻击 乘除变为很大的数,溢出变为很小的数 减去很小的数,每个人给很多的数 凭空多了很多代币 solidity SafeMath库检测 solidity不存在精度损失 都是整数

应用

猜你喜欢

转载自blog.csdn.net/tangshuai96/article/details/108657723