• 比特币的原理+问题


    这篇主要记录自己对比特币的理解,内容都来自网络。

    1. 原理

    1.1 账本(分布式)

    比特币的存储靠的是账本,全球人手一份,即所谓的分布式账本。账本说白了就是区块链(block chain),就是每一个比特币从产生到流通的过程中产生的每一笔交易,都记录在上面,形成一个长长的链条。账本的每一页 = 1个区块block,整个账本就是1个首尾相连的chain。

    1.2 交易过程

    用户A要转10个btc(bit coin)给B,这里涉及几个步骤:

    1. 身份确认:这里用到了非对称加密。A用自己的私钥加密,B就能确定就是A发起的交易;A再用B的公钥二次加密,保证只有B能看到内容。
    2. 交易确认:A把交易内容广播给所有矿工(下面会讲矿工的作用),矿工开始计算:1)遍历账本,确保A的账户里有这笔钱。2)以算力+运气来抽奖,一旦抽中,就有资格把这笔交易加入账本中。这时就可以向全世界广播,说这10分钟的奖被我抽中了,你们都别折腾了。大家一看,他的计算结果正确,果然被他抽中了,也都认可。于是纷纷把这笔交易加到账本里,这样保证了:1)A确实有10个btc。2)这笔交易被写在了全世界的每个账本里,永不可被撤消。

    1.3 中奖(挖矿)的过程

    很多地方都叫挖矿,不过叫中奖可能更准确一点。为什么呢?先说一下为什么有矿工?

    你把交易广播出去,别人为什么要帮你确认交易呢?当然要有利益驱动。中本聪的设定是,每笔交易奖励矿工50btc,每4年奖励减半,从50到25、再到12.5。直到2140年达到2100万个总量上限后,没有奖励,矿工只依靠对每笔交易收取手续费赚取利润。

    所以,一开始矿工特别多,越到后面越难、算力不足的矿工入不敷出,就会自然退出。

    挖矿的具体过程是:

    1. 矿工把上一个交易记录+这次收到的交易+1个随机数字,合在一起,用hash算法sha-256计算对应的hash值。
    2. 如果hash值满足某个苛刻的条件(比如前10位都是0、或者前15位都是1之类的,注意这个难度可以轻松的调整),那么这个矿工就可以认为自己挖到(中奖)了,并且向全世界公布结果。
    3. 其他矿工一看,这10分钟的奖已经被人中了,赶紧抢下个10分钟的。
    4. 由于hash算法不可逆,并且微小的变化就能导致结果的巨大扰动。所以要找到满足条件的记录,只能靠1位1位的变化那个随机数字,然后计算hash值是否满足。理论上算力越大越容易中奖,但还要靠些运气,因此是算力+运气。
    5. 并且系统会自动调整难度,保证以目前全球的算力,大约每10分钟,才能算出1个幸运数字。这样保证了btc的产生速度。

    2. 优点和潜在的问题

    比特币的优点很多,但要大规模应用,还是会有一些问题的。

    2.1 优点:去中心化、极低的交易费用、安全匿名等

    优点特别多,不然也不会这么火。

    • 分布式、去中心化:这决定了比特币不需要央行、国家信用、或者黄金储备作为信用基础。
    • 所有交易可追溯:从根本上解决了欺诈、金融诈骗等问题
    • 极低的交易费用:再也没有异地付款的手续费、汇率结算的风险等问题
    • 安全匿名:每个交易都可以使用1个新的地址,所以很难追踪具体的交易者、官方也无法冻结指定的账户

    2.2 潜在的问题

    问题当然也是有的:

    • 计算和存储量:2009-2011年,3年时间,账本大约增长到350M,保存了13万个block。如果全面应用,账本会迅速增长到GB、TB、PB的级别。这样量级的文件,传输几乎不现实。文件不完整,计算也困难。如果只有少数几家数据中心有能力存储,谈何分布式、P2P
    • 安全性:其实也不是完全匿名的。因为账本本身是公开的,很容易查到每个账户的交易信息,并画出货币流向图。突破某个结点、再向上、下游追击,就能全部扯出来。当然,对于政府监管部门而言,也不希望安全性太高
    • 投机性:目前的btc波动非常大,很多早期买btc或挖矿获得财富自由的案例。这使得btc更像赌玉石一样的投机商品,而不是交易货币。

    对于第1个问题, 我能想到的方案是:
    每当账本到达1个量级(比如1GB)、或者某个时点(比如每10年),就做一次归档。对那1时刻的账本做1次snapshot,以后的计算,都以这个snapshot为初始值。由于挖矿的巨大计算量,篡改的成本是惊人的。所以没有必要所有节点都保存包括创世block在内的所有记录,归档的记录分布在某几个数据中心就好,这样就能保证分布式账本的全球性。

    对于其他2个问题,还没有深入的思考,欢迎补充。

    3. 参考

    1. 《bitcoin常见问题》
    2. 《一个故事告诉你比特币的原理及运作机制》 - 张洋
    3. 《Bitcoin 的基本原理》 - 云风
    4. 《bitcoin的技术原理》 - 张志强
    5. 《bitcoin的技术和金融缺陷》 - 张志强
    6. 《比特币白皮书:一种点对点的电子现金系统》 - 中本聪
    7. 《Bitcoin: A Peer-to-Peer Electronic Cash System》 - 中本聪
  • 相关阅读:
    Python使用Thrift
    python 使用 thrift 教程
    go语言每个工程是不是都要单独设置GOPATH?
    go mod开发模式设置
    在 Ubuntu 开启 GO 程序编译之旅
    基于gin web框架搭建RESTful API服务
    Go编程基础(介绍和安装)
    Spring+SpringMVC+MyBatis深入学习及搭建(二)——MyBatis原始Dao开发和mapper代理开发
    Spring+SpringMVC+MyBatis深入学习及搭建(一)——MyBatis的基础知识
    JavaScript插件:快速选择日期----jedate日历插件
  • 原文地址:https://www.cnblogs.com/AlexanderYao/p/5568701.html
Copyright © 2020-2023  润新知