1」防范double spending
维护数据结构(blockchain)
例如:
2」bitcoin script:
每个交易的输入(b的输入)是一个脚本,输出(a的输出)也是一个脚本
验证时,验证输出脚本是否与输入脚本一致
例如
a给b转账:
(b的输入)是一个脚本,输出(a的输出)也是一个脚本,
验证输出脚本是否与输入脚本一致
3.1」block header:
—version:使用的协议
—hash of previous pointer:前一个区块的hash只算前一个的header
在取得记账权之前就需要填入previous block header已确定,插在链中的位置
—merkle root hash
—target: 挖矿的难度
—nonce:
3.2」block body:
—交易列表
4」全节点(full node)和轻节点(light node)
1」分布式的哈希表(distributed hash table)
2」impossibility result:
3」CAP Theorem:以下的三个性质最多只可以满足两个
cap为分布式系统的三个性质:
—C(consistency)
—A(availablity)
—P(partition tolerance)
4」PAXOS:最著名的协议
1」attack
sybil attack:(女巫攻击):当有了一个节点的时候,用一台超级计算机,不停的产生账户,当账户的数目超过网络的50%,则获得整个网络的控制权,可操作投票结果。
—所以无法使用投票来达成共识
forking attack:
—情况一:在区块链中间安插一个block,使得原链上的交易失效;但此时须使用最长链原则
—情况二:当两个节点同时算出一个nonce(则会同时产生两个block),产生两个等长的分叉。按照自己接受的区块继续向下扩展,直到又一条链超过另一条,但此时须使用最长链原则,抛弃短的(orphan block)
何谓接受区块:即沿着这个区块继续向下扩展
2」计算力投票:
pow: h(block hearder) <=target, 找到 nonce,满足前述条件
谁找到nonce,谁就可以有记账权(即谁的block就可连接到chain里面)。
其他节点可验证这个block
—此时使用:最长链原则
—可以防范sybil attack:账户数目增加,但算力(pow=hash rate)并没有增加)
3」出块奖励(block reward)
铸币交易(coinbase transaction):发行新的bitcoin的唯一方法
刚上线的时候每个铸币交易(即每一个发布的区块)可以产生50btc,
每210k个block之后,出块奖励减半(即产生25btc)
现在的出块奖励为12.5btc。
—争夺记账权的行为成为挖矿(mining),争夺计算权的节点被称为矿工(miner)
总结:bitcoin的共识协议即算力(hash rate)获得投票权,获得记账权
1」transaction-based ledger
bitcoin网络的全节点需要维护UTXO数据结构(unspend transaction output)
例子:
height:区块的编号
difficulty:每个2016个需要调整难度,保证每10
min出一个块
我们除了可以改变nonce,还可以改变merkle root hash 中的coinbase值,扩大搜索范围,使得最终获得记账权
——account-based ledger(以太坊)现实每个账户上有多少个币
2」伯努利(bernoulli trial):一个二值结果的随机试验
——性质:无记忆性(memoryless):前面的结果对后面的结果无影响。
progress free:在10min没有挖到block,则需要在等10min,与之前挖了多长时间没有关系——保证各个节点的公平性
geometric series
bitcoin is secured by minig
3」
4」selfish mining: