zoukankan      html  css  js  c++  java
  • 比特币的交易过程

    一、区块链

    区块链是比特币实现的一个基础技术,所以先讲讲区块链的概念~

    简单的来说,区块链是一种“去中心”的分布式数据库。

    传统的数据库像如下图一样,数据都存放在一个地方:

    区块链是每个用户都存一份数据(大家的数据是保持一致的):

    二、比特币的交易过程

    比特币就是通过区块链技术形成的一个应用~

    而它需要区块链存储的是用户与用户间的交易过程。

    1. 主动发出比特币的用户用自己的私钥加密交易讯息,然后发布给到全网

        交易讯息形如:“账号abc给账号efg转100个比特币”

    2. “矿工”接收一条条交易讯息,收满后开始挖矿

        2.1  “矿工”们收到很多交易讯息,一般会挑选交易额比较大的讯息组成一个“交易列表”进行挖矿

                因为一旦”挖矿“成功,每一条交易都会按交易比特币的多少来支付给”矿工“一定的”手续费“;

                又因为每一个区块一般大小限制在1M,这也限制了”矿工“自己挑选的”交易列表“的大小

                因此,”矿工“只能需要整理出一份能赚取最多手续费的”交易清单“

        2.2  挖矿的具体操作:

                对”上一个区块的Hash“+"交易清单"+”随机数“进行sha256签名

                因为交易记录要同步到全球需要一些时间,挖矿的速度不可以太快,因此比特币有一个”难度系数“

                

                它要求”矿工“不停去变换”随机数“知道生成的hash值小于一个预设的值,才算挖矿成功

                像下面这个第538499个区块,hash值需要前面19位都是0才算是符合条件

             

    3.挖矿成功后,向所有比特币用户广播这个生成好的区块,用户们通过验证后就会把这个区块往自己本地存储的区块链上添加

     4.结束

       正常来说,上面的步骤走完已经顺利地完成了一次比特币的交易。

    三、疑问

    1.比特币怎么做到用户存储的区块链的一致性呢?

    它的做法就是提高能够写入区块的“门槛”(就是不是所有人都有资格修改这条链),理想状态就是一段时间内只允许一个人写入

    从上面的步骤不难看出,要获取往区块链写入信息的资格,必须先“挖矿”成功,而“挖矿”的难度是非常大的,全球大概每10分钟才有一个人挖矿成功。

    2.万一短时间内,有两个人甚至多个人挖矿成功,并写入了新区块,怎么办?

    遇到这种情况,所有用户存储的区块链会在这个“节点”上创建“分支”,然后看下一个矿工在成功在哪个分支上成功“挖矿”,那一条分支就会成为“主链”

  • 相关阅读:
    phpcms列表页调用 点击量
    详解响应式布局设计
    PHPCMS V9 全站通用日期时间标签
    phpcms v9模板制作常用代码集合(转)
    Oracle 学习之 Select 1
    Oracle 学习之exists
    Hive学习之数据去重
    Hive学习之Union和子查询
    Clojure学习之defmulti
    Clojure学习之比线性箭头操作
  • 原文地址:https://www.cnblogs.com/amiezhang/p/9536976.html
Copyright © 2011-2022 走看看