数字货币要防范的一个重要问题,就是double spending attack
1、谁来发行货币?
在比特币系统中由挖矿决定
2、怎么防范double spending attack?这个币有没有被花过,被谁花过?
区块链是一个数据结构,由所有用户共同维护。
哈希指针指向区块头还有交易来源。
转账交易:A——>B,需要有A的签名和B的地址,B的公钥是公开的。B(所有节点)要知道A的公钥,A 的公钥代表A的身份,签名是私钥签名,公钥验证。
3、实际系统中每个区块包括很多交易,即Merkle tree。
4、账本内容要取得分布式的共识(distributed consensus)
impossibility result:FLP~,在一个异步的系统里(网络传输时延没有上限),即使只有一个成员有问题,也不可能取得共识。
CAP Theorem:Consistensy,Availability,Partition tolerance(最多只能满足两个)
分布式系统一个很著名的协议:Paxos,这个协议可以保证Consistensy,但是某些情况下这个协议有可能没有办法一直达成共识,这种可能性比较小但客观存在。
5、比特币中的共识协议
按照计算力投票,只有找到这个nonce,挖到矿的人才有发言权。
假设有一个获得记账权的结点,合法的节点(交易都是合法的)。
区块链的分叉:有两个节点同时获得记账权。几乎同时挖到矿,出现两个等长的分叉。缺省情况下,每个节点接受它最早收到的那一个,根据不同节点在网络中的位置不同。
获得交易权的结点有铸币权利,可以发布一定数量的比特币。
coinbase transaction是发行比特币的唯一方法。
一开始的21w个区块,每个区块可以发布50BTC,之后,每个区块只能发布25BTC,再过21w个区块,就变成了产生12.5个比特币。