课程链接:区块链技术与应用
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
为什么不延用比特币的账户模型呢
用智能合约时的合同纠纷
交易驱动的状态机