zoukankan      html  css  js  c++  java
  • 比特币的共识协议

    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,自动人为无效,将原先支付的比特黄金回滚。

     图片引用自B站用户

  • 相关阅读:
    3种Java从文件路径中获取文件名的方法
    win10系统下点击关机却自动重启的问题解决思路
    Eclipse窗口总是在最前的解决办法
    tomcat端口被占用
    js页面跳转整理(转载未整理)
    java.lang.IllegalArgumentException 不合法的参数异常
    MySQL如何查询两个日期之间的记录
    web -- 前端访问后台跨区问题解决
    Maven -- 发布jar包至远程仓库
    5 -- Hibernate的基本用法 --4 3 JDBC连接属性
  • 原文地址:https://www.cnblogs.com/faded828x/p/13059047.html
Copyright © 2011-2022 走看看