再学区块链及其应用

课程链接:区块链技术与应用

04-比特币协议

区块链结构

BitCoin Script把A的输入和A的输出连在一起,运行一下。

区块链结构

Block header Block Body
version transaction list
hash of previous block header
Merkel root hash
target
nonce

整个块头的hash要小于目标阈值。H(header)≤target

系统中包括全节点和轻节点

full node = fully validating node

light node = light with node(只保存区块头的信息,系统中大多数是轻节点)

轻节点没有参与区块链的构造和维护,它只是利用了区块链的一些信息,做一些查询。

分布式共识

分布式共识一个简单的例子是一个分布式hash表(distributed hash table)

xiao->12345

关于分布式共识的不可能结论

FLP:在一个异步的系统里,网络传输时延没有上限,即使只有一个成员是有问题的,也没有办法达成共识。

CAP:任何一个分布式系统,一致性,可用性和分区容错性只能满足两个,不可能三个都满足

比特币中的共识协议

membership

联盟链(例如hyperledger fabric)可从成员进入来限制

女巫攻击(sybil attack):产生账户非常多(没用的本地账户),来投票

比特币采用工作量证明,寻找nonce值来

UTXO:未花费的交易输出(unspent transaction output)

total inputs = total outputs

transaction-based ledger-基于交易的账本

第二个激励机制:交易费(transaction fee)

account-based ledger-基于账户的账本

将来还要挖多少时间已经挖了多少时间是没有关系的

10-BTC分叉


分为硬分叉和软分叉

硬分叉,比如调大区块,旧节点不能认同大区块,只能认同原区块,新节点可以认同大区块和原区块,如果旧节点不升级软件,那么可以一直挖下去,造成出现两条链的情况。

软分叉,比如调小区块,或者重新赋予区块内某一没用过的值,旧节点可以认同,但新节点无法认同,于是旧节点挖出来的区块会一直被废弃,于是被迫升级软件。

15-以太坊账户


BTC系统没有显式的维护账户的概念,导致BTC系统转出一笔钱,必须全部转出,并且转回给自己账户的另一个地址。

基于账户的模型(account-based ledger)

双花攻击和重放攻击

基于UTXO的余额-双花攻击-发钱的人不诚实,想再花一遍

基于账户的余额-重放攻击-收钱的人不诚实,想再收一遍

以太坊为了避免重放攻击加了一个转账次数nonce,每转账一次Nonce+1

以太坊中有两类账户:

外部(普通)账户:balance nonce

合约账户:code storage

为什么不延用比特币的账户模型呢

用智能合约时的合同纠纷

交易驱动的状态机