Question:央行如何发行数字货币?central bank
方案一:asymmetric encryption algorithm
数字货币是一份份文件,可以不断复制造成double spending attack,即双花攻击。
方案二:有一张list,记录每一张货币的主人,在每次交易前查询list验证货币支付人的身份,是高度中心化的存储方式。
由于中心化需要高成本的维护费用以及安全风险,演化出区块链等去中心化的货币交易模式,验证支付合法性的职责由央行转为大众个人承担。
数字货币发行过程的两个问题:
1,谁有权利发行货币,即货币来源。
2,怎样验证交易的合法性,即货币来源合法,防止双花攻击。
一,验证过程
在一次比特币交易过程中,支付人需要知道收款人的地址,以便顺利转账。转账后支付人用私钥对交易信息进行签名然后发布交易信息和公钥,而收款人和public收到支付人的公钥和发布的交易信息,用来验证交易合法性。以便将交易信息写到合法区块链中,最终该交易成立。
在每个区块链中保存的交易,第一个tx往往是铸币交易,Create coin tx。
tx之间有pointer连接,并且每次交易的output指向其来源input,需验证其来源。
如果恶意节点B伪造交易A->B,用B'私钥签名,发布tx和B'公钥,窃取账户?
在input(A币来源)中包含A公钥哈希,验证两个哈希值。
如何将交易信息写进区块链?
新建一个block,存放合法tx。账本中的内容要取得分布式公识。 distributed consensus
公识协议:proof of work
(记账资格)不可行方案:投票。
sybil attack女巫攻击:指利用社交网络中的烧熟节点控制多个虚假身份,从而利用这些身份控制影响网络的大量正常节点的攻击方式。
专门用计算机一直恶意产生账号,获取资格。
可行方案:proof of work
全网执行共识算法,即对哈希计算进行暴力求解-->率先计算出nonce的矿工获得记账权,发布新区块-->矿工对外广播新区块,其他节点验证区块及区块上的交易合法性,验证通过则添加至区块主链。
如果两区块同时加入链,维持一段时间,节点优先选择计算长链。
在验证交易合法性的过程中,仅仅查阅主链上的交易,因此不再交易上的orphan block不会被其他节点承认,一旦不承认就认为其不存在,自动被丢弃。
二,挖矿 mining-->block reward
铸币交易coinbase tx是产生新币的唯一途径,由代码自动生成。且代码规定最初的出块奖励为50BTC,每添加21万个区块,出块奖励会减半,例如肖臻老师讲课时的出块奖励是12.5BTC,而现在的出块奖励是6.25BTC,块数为633475,金额为$9649.44/BTC。
2018年5月15日,比特黄金Bitcoin Gold遭遇51%攻击。攻击者先将价值1000万的BTG转给交易所,tx被记录在区块链上,并秘密计算另一条链B。待A上的交易确认后,攻击者从交易所体现,因其算力大于全网51%,所以计算的新链最后会成为最长链,原先转给交易所的转账记录会成为orphan block上的tx,自动人为无效,将原先支付的比特黄金回滚。