zoukankan      html  css  js  c++  java
  • 比特币

    比特币核心要点

    1. 账簿公开机制
    2. 身份与签名机制(公钥加密系统)
    3. 矿工组织(挖矿群体)
    4. 建立初始账簿(创世块)
    5. 支付与交易

    比特币产生的动机

    • 以物易物,互相间的贸易就是老张拿一袋面粉换老李一只羊。
    • 实物货币,把黄金作为一般等价物,把其它物品和黄金的对应关系编成一张表格,例如一克黄金对应一只羊,一克黄金对应一袋面粉等等,拿着黄金去进行交易。
    • 符号货币,金矿并不多,开采和冶炼金子太费时费力,金子会不断会因为磨损、丢失或有人故意囤积而发生损耗。大家可以把黄金都统一交给德高望重的老村长(政府和银行),老村长在一张纸上写上黄金量,此纸就作为了符号货币,纸张可以换回黄金。
    • 中央系统虚拟货币(已出政策把支付宝,财付通的交易都需上传),把纸给银行,银行给你一个账号并存上钱并记录余额,记录账号之间的交易就形成了账本。
    • 分布式虚拟货币,(其实很难发生)账本是否可能被银行或政府篡改,账本是否会失窃或损坏?于是就出来了一套不依赖任何中央处理人的叫比特币的分布式虚拟货币系统。

    账簿公开机制 

    1. 账簿上不再记载余额,只记载每一笔交易。即记载每一笔交易的付款人、收款人和付款金额。只要账簿的初始状态确定,每一笔交易记录可靠并有时序,当前每个人持有多少钱是可以推算出来的。
    2. 账簿由私有改为公开,只要任何人需要,都可以获得当前完整的账簿,账簿上记录了从账簿创建开始到当前所有的交易记录。

    第一条还无所谓,但是第二条简直无法接受,因为账簿可是记录了所有的交易,这样大家的隐私不全暴露了吗?

    公钥加密系统 

    在这套机制下,任何人都不使用真实身份交易,而是使用一个唯一的代号交易。对于比特币来说,钱不是支付给个人的,而是支付给某一把私钥。这就是交易匿名性的根本原因,因为没有人知道,那些私钥背后的主人是谁。
    公钥是公开的,任何人都可以获取。私钥是保密的,只有拥有者才能使用。他人使用你的公钥加密信息,然后发送给你,你用私钥解密,取出信息。反过来,你也可以用私钥加密信息,别人用你的公钥解开,从而证明这个信息确实是你发出的,且未被篡改,这叫做数字签名。

    如果公钥加密的不是普通的信息,而是加密了一笔钱,发送给你,这会怎样?
    首先,你能解开加密包,取出里面的钱,因为私钥在你手里,因此支付可以成功。
    这就是比特币的原理:非对称加密保证了支付的可靠性。
    由于支付的钱必须通过私钥取出,所以你是谁并不重要,重要的是谁拥有私钥。只有拥有了私钥,才能取出支付给你的钱。(事实上,真实的交易流程稍有不同,私钥保证的不是取出支付给你的钱,而是保证只有你能把这些属于你的钱支付出去。)

    成立虚拟矿工组织

    • 成为矿工不影响正常使用货币
    • 矿工每天要花费一定时间从事比特币“挖矿”活动,但是不同于挖金矿,虚拟矿工不需要拿着工具去野外作业,在家里就可以完成工作
    • 矿工有一定可能性获得报酬,在挖矿活动中付出的努力越多,获得报酬的可能性越大
    • 矿工可以随时退出,也可以随时有新的矿工加进来

    交易的确认离不开矿工。为什么有人愿意做矿工呢?
    比特币协议规定,挖到新区块的矿工将获得奖励,一开始(2008年)是50个比特币,然后每4年减半,目前(2018年)是12.5个比特币。这也是比特币的供给增加机制,流通中新增的比特币都是这样诞生的。那么到了2140年,矿工将得不到任何奖励,比特币的数量也将停止增加。这时,矿工的收益就完全依靠交易手续费了。所谓交易手续费,就是矿工可以从每笔交易抽成,具体的金额由支付方自愿决定。你完全可以一毛不拔,一分钱也不给矿工,但是那样的话,你的交易就会没人处理,迟迟无法写入区块链,得到确认。矿工们总是优先处理手续费最高的交易。目前由于交易数量猛增,手续费已经水涨船高,一个区块2000多笔交易的手续费总额可以达到3~10个比特币。如果你的手续费给低了,很可能过了一个星期,交易还没确认。
    一个区块的奖励金12.5个比特币,再加上手续费,收益是相当可观的。按照目前的价格,可以达到100万~200万人民币。

    建立初始账簿(创世块)

    在第一个区块上记录了一些交易记录,特别的是,这些记录的付款人一栏全都是“系统”,而收款人分别是每个比特币钱包(私钥和公钥),代表初始时刻,系统默认分配了一定数量比特币,但是数量非常少,都只有几枚。大家可以自行决定要不要接受比特币。随着比特币的流动和矿工的活动,比特币会慢慢多起来。

    钱包地址

    比特币交易的第一件事,就是你必须拥有自己的公钥和私钥。你去网上那些比特币交易所开户,它们会让你首先生成一个比特币钱包(wallet)。这个钱包不是用来存放比特币,而是存放你的公钥(对外)和私钥。
    钱包的地址:根据协议公钥的长度是512位。这个长度不太方便传播,因此协议又规定,要为公钥生成一个160位的指纹。所谓指纹,就是一个比较短的、易于传播的哈希值。160位是二进制,写成十六进制,大约是26到35个字符,它是唯一的,即每个钱包的地址肯定都是不一样的。

    ps:

    你向别人收钱时,只要告诉对方你的钱包地址即可,对方向这个地址付款。由于你是这个地址的拥有者,所以你会收到这笔钱。
    由于你是否拥有某个钱包地址,是由私钥证明的,所以一定要保护好私钥。如果你的私钥被偷了,你的比特币也就等于没了,因为他人可以冒用你的身份了,把钱包里面的钱都转走。同样的,你向他人支付比特币,千万不能写错他人的钱包地址,否则你的比特币就支付到了另一个不同的人了。

    交易真实性

    举例来说,有人申报了一笔交易:地址 A 向地址 B 支付10个比特币。我怎么知道这个申报是真的,申报人就是地址 A 的主人?

    1. 比特币协议规定,申报交易的时候,除了交易金额,转出比特币的一方还必须提供以下数据。
      • 上一笔交易的 Hash(你从哪里得到这些比特币)
      • 本次交易双方的地址
      • 支付方的公钥
      • 支付方的私钥生成的数字签名
    2. 验证这笔交易是否属实,需要三步
      • 找到上一笔交易,确认支付方的比特币来源。
      • 算出支付方公钥的指纹,确认与支付方的地址一致,从而保证公钥属实。
      • 使用公钥去解开数字签名,保证私钥属实。

     ps:

    一笔交易就是一个地址的比特币,转移到另一个地址。由于比特币的交易记录全部都是公开的,哪个地址拥有多少比特币,都是可以查到的。因此,支付方是否拥有足够的比特币,完成这笔交易,这是可以轻易验证的(由矿工验证)。

    交易确认 

    • 所有的交易数据都会传送到矿工那里。矿工负责把这些交易写入区块链。
    • 根据比特币协议,一个区块的大小最大是 1MB,而一笔交易大概是500字节左右,因此一个区块最多可以包含2000多笔交易。矿工负责把这2000多笔交易打包在一起,组成一个区块,然后计算这个区块的 Hash。
    • 比特币不存放在钱包或其他别的地方,而是只存在于区块链上面。区块链记载了你参与的每一笔交易,你得到过多少比特币,你又支付了多少比特币,因此可以算出来你拥有多少资产。

    交易数据必须写入数据库,才算成立,对方才能真正收到钱。
    计算 Hash 的过程叫做采矿,这需要大量的计算。矿工之间也在竞争,谁先算出 Hash,谁就能第一个添加新区块进入区块链,从而享受这个区块的全部收益,而其他矿工将一无所获。收到钱。
    关于区块链分叉攻击,中本聪给出的解决方案是,建议收款人不要在公告挂出时立即确认交易完成,而是应该再看一段时间,等待各个挖矿小组再挂出6张确认账簿,并且之前的账簿没有被取消,才确认钱已到账,再进行实物交换。
    中本聪解释道,之前设定变态的Hash规则,正是为了防御这一点。根据前面所述,生成有效区块不是那么简单的,要花费大量的人力反复试不同的幸运数字,而且过程完全是碰运气。如果某区块包含你收到钱的确认,并且在后面又延续了6个,那么攻击者想要在落后6页的情况下从另一个分支赶超当前主分支是非常困难的,除非攻击者拥有非常多的人力,超过其他所有诚实矿工的人力之和。如果攻击者有如此多人力,与其花这么大力气搞这种攻击,还不如做良民挖矿来的收益大。这就从动机上杜绝了攻击的形成。

  • 相关阅读:
    一百零二、SAP中ALV事件之十五,让ALV表格自动求和
    一百零一、SAP中ALV事件之十四,让ALV表格自动排序
    一百、SAP中ALV事件之十三,给ALV的自定义按钮添加事件
    九十九、SAP中ALV事件之十二,给ALV的标题栏添加图片
    九十八、SAP中ALV事件之十一,查看图片
    九十七、SAP中ALV事件之十,通过REUSE_ALV_COMMENTARY_WRITE函数来显示ALV的标题
    九十六、SAP中ALV事件之九,显示功能按钮栏中显示ALV加强工具栏
    九十五、SAP中查看自定义包的所有模块,对象,函数主,事务等
    二十、JavaScript之对象
    十九、JavaScript之数组
  • 原文地址:https://www.cnblogs.com/wade-luffy/p/8301143.html
Copyright © 2011-2022 走看看