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

    今年比特币大热,行情从9月的5000美元左右一路飙升到目前超过16000美元。如果对汇率不敏感的话,换算成人民币,就是一个比特币市值接近11万。特别是过去的一周,价格几乎以每天1000美元的增幅增长,此中疯狂让造富榜排名第二的中国一线楼市也自愧不如。

    比特币(BTC)价格走势

    在你也被此疯狂感染,卖房入市之前,有必要知道什么是比特币,它是如何运作的。多数人的了解停留在“比特币是一种虚拟货币”。略微查过资料的可能还知道:比特币的概念是2008年由一个化名“中本聪”的人提出来的;2009年第一个比特币被“挖”了出来;比特币的总量有限,最多产生2100万个,因此不会因为政府开动印钞机而发生贬值。然而,这些知识尚不足以回答比特币作为一种电子货币面临的两个核心问题:

    (1) 如何辨别真伪?

    (2) 如何防止“重复支付”,即一张钞票被付给多个人?这个问题尤为重要。因为比特币就是一团数据,拷贝无数份都是可以的。

    本文将尝试为你解答以上两个问题。本文定位为一篇科普文章,因此将尽量不在文中包含公式和复杂的算法描述。首先,先弄清楚什么是比特币。

    1. 比特币本质是一个复式记账簿

    比特币的本质是一个记账簿,记录着全部比特币交易。

    所谓“复试记账”是指每笔交易都在两个或两个以上账户上体现,这些账户分别作为输入方和输出方,金额在输入和输出两方保持相等,这样便可清晰反映资金运动的情况。下图是比特币交易的一个例子,其中输入是4个账户,而输出为3个账户。咦?不是说输入和输出两方金额要相等吗?为啥总输入是0.55BTC,而输出只有0.50BTC,还有0.05BTC去哪了?这0.05BTC是作为交易费被转到“矿工”的账户上,这笔转账是一个特殊的交易,即创币交易的一部分。“矿工”、“创币交易”,我先埋个钩子,将在后面详细介绍。

    复试记账簿式交易

    由于比特币的本质是一个记账簿,因此为了正确理解比特币,首先要忘记银行借记卡账户的概念:并没有一个地方,记录着你拥有的比特币数量。你拥有多少比特币是通过遍历全部交易计算出来的。例如,向你的所有账户一共转入了5个比特币(8万刀,hohoho),而你的所有账户一共转出了3个比特币,那么你现在一共拥有5-3=2个比特币。

    比特币另外一个有别于过往常识的概念是:

    交易的基本单位是尚未再次支付的交易输出(UTXO:Unspent Transaction Output),而不是某个数量的比特币。

    比如,在某次交易中,另一个用户给你转了3个比特币,便产生了一个UTXO。在下次交易中,你准备用这些比特币买一辆车(价格:2个比特币),那么这个UTXO必须作为新交易的输入全部被花掉(spend),其中2个比特币转给卖家(成为他拥有的UTXO),等于或小于1个比特币转给你自己(找零,也是UTXO),当然还有一小部分作为交易费:

    3BTC(输入)= 2BTC(输出 to 卖家)+ 0.99BTC(找零,输出 to 自己)+ 0.01BTC(交易费)

    当然,另一个可能的情况是你拥有一大堆金额很小的UTXO,一起凑够2个比特币,付给卖家:

    0.01BTC(输入)+ 0.01BTC(输入)+ ...(此处省略几百字)+ 0.02BTC(输入) = 2BTC(输出 to 卖家)+ 0.01BTC(交易费)

    那比特币账户应该向谁申请呢?

    2. 比特币账户就是一个地址,不用申请,自己造一个就好

    比特币账户是一个地址,具体而言就是类似“1J7mdg5rbQyUHENYdx39WVWK7fsLpEoXZy”的一串字符。神奇的地方在于,

    比特币地址不用向任何权力机构申请,可以自己产生,想要多少个都可以!实际上,从保护隐私的角度考虑,鼓励用户在每次交易中使用不同的地址,这样就根本无法查到资金流向何处了。

    现在知道为啥暗网、勒索病毒热衷使用比特币交易了吧。

    每个比特币地址由一个私钥生成,产生多少个比特币地址,就需要多少个这样的私钥。更准确的说,是由私钥计算出对应的公钥,然后由公钥计算出对应的特币地址(如下图所示)。所选择的计算方法,即椭圆曲线相乘和哈希函数,具有单向特性,也就是说由私钥计算出公钥很容易,反之由公钥推导出私钥则非常非常困难。这一特性后面还会讲到,目前只要记住这一点即可:比特币地址告诉全世界都不要紧,而私钥一定要保存好莫让别人知道,因为凭借且仅凭私钥便可使用你的比特币(这就是为啥私钥被称为“私”钥)!想更深入了解“公钥”、“私钥”是啥东东的同学戳这里非对称加密

    由私钥生成比特币地址

    泄露自己的私钥丢了钱是一回事,忘记私钥有钱花不了是另一回事。这么多天书般的地址和私钥如何记得住呢?答案是不用记,一般是通过一个称为“比特币钱包”的软件来管理你的所有私钥和地址(主要是私钥,因为地址可以从私钥再次生成)。

    如果想知道你有多少比特币,需要翻看前面说的比特币记账簿,把输出账户是你的比特币地址之一的所有UTXO金额累加起来。OK,那什么地方可以找到这本记账簿呢?

    3. 记账簿的海量副本以区块链的形式存储在海量的P2P节点上

    这本账簿有海量副本,存储于海量的计算机节点上。

    说是“副本”,其实并没有什么“主本”,因为所有节点保存的账簿重要性相同。海量副本可以保证账簿不会丢失损坏,因为随时可以从其他不受影响的节点恢复;同时,也可以防止狼人通过伪造账簿来搞破坏,只要好人的数量更多。实际上,后面还会看到,这份账簿伪造起来可不容易。

    账簿的数字存储格式就是区块链。区块是一种数据结构,相当于账簿的“一页”,存储着一段时间(平均10分钟左右)内所有比特币交易的全部信息。

    区块结构如下表所示。

    区块结构

    区块链就是连接所有区块形成的链表数据结构。连接的方式是按照区块生成的先后将它们排列起来。刚好在某一个区块前面生成的区块称为这个区块的“父区块”。区块通常以区块头信息的数字指纹,即哈希值来标识。既然是指纹,那么对于每个区块都是唯一的。每个区块头中包含着父区块的哈希值,如下表所示。第一个产生的区块称为“创世区块”,它的哈希值是000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f。由于它没有爸爸,因此它的“父区块哈希值”为0000000000000000000000000000000000000000000000000000000000000000

    区块头结构

    区块头结构中的Merkle根即Merkle树的根节点,这是一种哈希二叉树,用作快速归纳和校验大规模数据完整性。比特币采用Merkle树作为一个区块中全部交易的摘要,一个区块记录的交易数量可能很多(目前的典型值是2000左右)。区块Merkle树是自底向上构建的,如下图所示。假设一个区块中包含四个交易:Tx(A)、Tx(B)、Tx(C)和Tx(D)。树最底层的叶子节点是分别对各交易的数据取哈希值,得到H(A)、H(B)、H(C)和H(D)。然后,将它们两两配对、拼接后再次取哈希值,得到H(AB)和H(CD)。最后,对H(AB)和H(CD)拼接而成的字符串计算哈希,就得到了H(ABCD),即Merkle根。那如果交易数不是偶数而是奇数怎么办?答:这时,就将最后一个交易(按时间排序)复制一份凑成偶数个交易用以生成Merkle树。

    区块的Merkle树

    Merkle树用于校验一项交易是否包含在某个区块,优点是只需要下载少量数据,而不是区块的所有交易信息。例如,下图是16个交易的Merkle树,对于某个叶子H(K),只需要H(L)、H(IJ)、H(MNOP)和H(ABCDEFGH)的值便可算出H(ABCDEFGHIJKLMNOP)的值,{H(L), H(IJ), H(MNOP), H(ABCDEFGH)}便称为H(k)的Merkle路径。因此要验证交易TxK是否包含在一个区块中,先计算出Tx(K)的哈希值H(K),然后从比特币网络查询它的Merkle路径来计算H(ABCDEFGHIJKLMNOP),如果与保存在本地的H(ABCDEFGHIJKLMNOP)值相等,那么此交易便包含在该区块中。如果一个区块包含了2048笔交易,整个区块的近似大小是512KB,而按照上述方法只需要下载352字节的数据便可完成验证。你可能会问,为啥不直接计算出交易Tx(K)的哈希,然后下载H(K)来进行比较呢?比特币的设计者认为网络不可靠,下载的数据可能是虚假的,只有保存在本地的Merkle根才可信,因此要求网络提供整个Merkle路径,如果能成功算出的Merkle根和本地保存的值相同,除了证明交易包含在区块中,也证明了网络提供的Merkle路径是可靠的,因为从哈希值推出原始数据在运算量上是不可行的。下一节会解释其中的原理。

    稍复杂一点的Merkle树

    同时,Merkle根还可视为区块交易部分信息的数字指纹,一旦交易信息有任何篡改,Merkle根都会发生变化,进而使区块的哈希值发生变化。更妙的是,一个区块的哈希值被包含在它的儿子区块头中,如果发生了改变,儿子区块的哈希值也会发生变化,这又会波及到孙子区块,曾孙区块...直到所有后代。

    存储完整账簿的节点称为全节点。

    全节点独立更新存储在本地的区块链备份。当一个新区块产生,新区块的信息便会通过P2P的比特币网络传播到所有节点,其中的全节点便会对新区块进行验证,确认有效后便会将新区块加入到本地的区块链。由于存有完整、更新的账簿,全节点还可以对交易的真实性和有效性进行验证。完整账簿需要占用数百G的空间,并且消耗大量内存,因此有些节点只会存储区块链的部分信息,譬如区块头。当这些节点需要对交易进行验证时,需要借助全节点提供的数据。

    交易不断发生,因此将需要更多页账簿(区块)来记录它们。产生新区块的过程称为挖矿,因为在此过程中产生了新的比特币,如同挖到了金矿!

    4. 通过挖矿产生新的区块和比特币

    当发生比特币交易时,这笔交易只有加入到区块链,即记到账簿里才会被承认。上面说过账簿在每一个全节点上都有一份拷贝,那就意味着交易信息需要加入到所有这些区块链拷贝。实现过程是其中一个节点首先生成一个新区块,即一页账簿,将它接收到的尚入账的交易都记录进去,然后再将新区块信息同步给比特币网络的其他节点。那么,是哪一个节点生成的新区块呢?

    事实上,所有节点都想当这个NUMBER ONE。因为,

    第一个生成新区块的节点有一项特权,可以在新生成的区块中插入一条特殊交易记录:凭空向一个地址转入一定数额的比特币。

    “凭空”的意思是不需要输入UTXO,这些比特币是凭空产生的,是作为产生新区块的奖励。这个特殊交易称为“创币交易”,因为这一过程也是发行新比特币的过程,这就是为什么产生新区块被称为“挖矿”。

    那么奖励的数额有多大呢?创建新区块的奖励数额是不定的:第一个区块奖励的是50个比特币,随后每产生210000个区块这一数字就递减50%,直到变为0。目前区块链的长度已接近50W,因此每次奖励12.5个比特币。通过以下公式便可算出,比特币的上限是2100W个。

    比特币数量上限

    除了创块奖励外,创块的收益还包括所有交易的交易费。例如,高度499376的区块,它的交易费为4.39BTC,按现在的市值是7.6W刀。幸运的家伙,晚饭吃鸡!

    那么,

    如何才能创建一个新区块呢?通过解决一个问题:即找到一个nonce值,使得新区块头的哈希值小于某个指定的值,即区块头结构中的“难度目标”。

    哈希函数又称为散列函数,无论它的输入数据有多长,它的输出总是固定数量的比特,例如32bit。之所以称“散列”,是因为输入数据哪怕是变化1个bit,也会使输出变得面目全非。例如,将李商隐的《锦瑟》:“锦瑟无端五十弦,一弦一柱思华年。庄生晓梦迷蝴蝶,望帝春心托杜鹃。沧海月明珠有泪,蓝田日暖玉生烟。此情可待成追忆,只是当时已惘然。”作为哈希函数SHA256的输入,输出的哈希值为:8342aed815e0fc39647a344d4d58ff33710e8d0b09a574ccb68c050141806eff。将诗中的“五”改成“六”,哈希值就变为e85cf59020e87006a1d3ff2849d72803e9b958a5e928696905aeb11b27408271,一眼望去,几乎所有字符都发生了变化。哈希函数的散列本质使它具有单向性,即知道x和函数Hash()的话,很容易算出y=Hash(x);然而,如果知道哈希函数和y,却很难猜出输入x。这就像调配颜料一样:如果我们知道各种颜色的比例,那么很容易调出所需的颜色;反过来,如果只知道目标颜色,却几乎无法猜出是哪些颜料、通过什么比例混合而成的。从y推出x的唯一办法就是穷举所有可能的x,看哪一个与y的值相同。生成新区块要解决的问题也是如此,区块头其他信息都是已知的,只有挨个尝试从1到最大可能值的所有整数,才能找到可能满足要求的nonce值。

    要求小于的这个数为啥称为“难度目标”呢?因为这个数越小,求解的难度就越大,需要经过更多次哈希值的计算。简单打个比方,想象人们不断扔一对色子以得到小于一个特定点数的游戏。第一局,目标是12。只要你不扔出两个6,你就会赢,so easy!然后下一局目标为11。玩家只能扔10或更小的点数才能赢,不过也很简单。假如几局之后目标降低为了5。现在有一半机率以上扔出来的色子加起来点数会超过5,因此无效。随着目标越来越小,要想赢的话,扔色子的次数会指数级的上升。最终当目标为2时(最小可能点数),只有一个人平均扔36次或2%扔的次数中,他才能赢。由此可知,

    挖出一个区块的平均工作量(尝试次数)与难度目标成反比,难度目标越小,工作量就越大。找到小于难度目标的nonce值有一定随机性,换句话说,凭运气。但从概率上来看,每次计算成功的概率是一定的,于是算得越快的节点第一个找到的概率就越大。

    因此,矿工们便想方设法提升自己的计算能力(算力),比别人算的更快以加大自己成为NUMBER ONE的几率,于是引发了一场算力的军备竞赛。在2009年,比特币刚出现时,普通PC便可用于挖矿,而后开始使用服务器,再后来CPU效率不够就用GPU,再再后来用专业矿机和FPGA制作的专用芯片,这些芯片除了计算哈希没有其他功能。目前,全球比特币网络的总算力已高达1.5×10**19次哈希每秒。对比一下就知道是什么概念了:我用的mac,算力约为3.6×10**5次每秒。

    为了将新区块的产生速度限定在一个恒定值,即平均每10分钟一个,难度目标每2016个区块调整一次,规则是:如果过去的2016个区块的平均生成间隔大于10分钟,难度目标值就增大(难度减小),否则就减小(难度增大)。

    因此,总算力增加,挖到金矿的难度也在不断增加,只有不断投入更多的机器。这也是为啥越往后,比特币的收益恐怕连矿工的电费都不够付了。

    小结一下,挖矿的过程实际是一个挖矿节点产生新的账簿页(区块)将新交易记录下来的过程,步骤如下:

    1. 挖矿节点持续监听比特币网络,将所有网络上广播的所有交易信息都记录下来,根据它们的优先级插入到一个新区块的数据结构中。优先级由交易发生的时间早晚和交易费决定,越早发生、交易费越多的交易,优先级也越高,也就会被优先加入新生成的区块,即被确认;

    2. 用交易数据填满一个区块后,挖矿节点立即开始疯狂计算来寻找使新区块头的哈希值小于目标难度的nonce值;

    3. 成功找到满足条件的nonce,挖矿节点便将完整的新区块信息通过比特币网络向其他所有节点广播,便立即着手创建下一个新区块;

    4. 其他也在试图创建同一个区块(挖同一块矿)的节点,接收到新区块信息,便会对新区块进行验证,验证通过后,便将它加入到自己的区块链备份中,同时放弃正在挖的矿,也立即着手创建下一个区块。

    不知道你发现没,这里存在一个问题:如果两个节点几乎同时发现了满足条件的nonce值,那究竟以谁创建的为准呢?答案是两个都暂时接受,然后投票决定用谁的,这就是所谓的“区块链分叉”。区块链就是交易账簿,不能容忍歧义,按理链条是不会有分叉的,是一条从创世区块到最新产生区块的单一链条。

    如果发生了竞争,即当两个新区块在两个不同节点几乎同时产生时,一条备链便会生成,相应的,万世一系的那条称为主链。多个链条生长的规则是:当有主备两条(理论上,两条以上也是可能的)区块链时,各节点挖到的新区块将续接在总工作量最大的链条上;如果各链条的总工作量相同,那么就接在主链,即各节点的区块链备份最早产生的分支上。各节点延续区块链的过程同时也是对多条分支进行投票。

    如下图所示,假设节点A和节点B几乎同时分别挖到了区块A(N)和B(N),紧接着各自将新区块信息通过比特币网络发给所有节点。距离A节点较近的节点首先受到区块A(N)的信息,因此便将A(N)追加到本地的区块链上。随后它们又收到了区块B(N)的信息,因为B(N)的父区块(通过区块头中的父节点哈希值搜索到)是较早的区块,这时一条备链便产生。类似的,距离节点B较近的节点会将B(N)加入主链,而A(N)将形成备链。请注意,这里的“远近”不一定是指地理位置,而是数据从一个节点到另一个节点需要经过几次转发,每次转发称为一“跳”。这样,所有节点就被分成了两个蓝绿两个阵营。从不同阵营角度观察到的主链和备链是不同的。蓝绿阵营各自基于A(N)和B(N)区块迅速投入产生下一个新区块的工作。假设蓝营的C节点抢先生成了新区块B(N+1),并广播给了所有节点,蓝营节点自然进一步延长它们的主链,而绿营节点发现新区块应该链接到备链,同时备链的总工作量已经超过了主链(因为多了一个区块),于是绿营节点会选择B(N+1)所在链条为主链,蓝绿阵营的主链再次统一了。这是,你可能会问:如果蓝绿阵营如果又是几乎同时产生了A(N+1)和B(N+1)会怎么样呢?答:那么主链和备链都会延长,两个阵营进入下一轮的角逐,直到分出胜负。从历史情况来看,每周都会发生一次分叉,而通常经过一个区块,不同主链便会再次统一。

    区块链分叉

    比特币设计的巧妙之处是利用“一人之私,众人之公”的社会心理实现了公共账簿的去中心化维护,并简洁优雅地实现了新币发行。然而,毕竟涉及到利益,也就无法回避人的贪婪,此过程中如果有人试图作弊或者搞破坏怎么办呢?下一节就来分析比特币的安全性。

    5. 比特币的安全性

    首先申明,由于本文定位科普,不研究详细的协议和实现细节,因此很难真正分析出比特币面临的全部威胁。只能努力为读者揭示比特币原理天生具备的安全机制,即回答开篇提出的两个问题:如何辨别真伪和如何防止“重复使用”。

    (1)如何辨别真伪

    比特币与真实货币表达财富的方式不同,后者直接描述财富本身,100美元、1亿日元、1个金币,而比特币通过财富的转移,即交易来描述。对于真实货币,财富大小通过某人拥有的货币面值便可度量,而比特币则需要综合这个人参与的所有交易才能得知他拥有的财富数量。因此,真实货币的防伪机制只要验证拥有的这部分货币是真实的,而比特币要验证相关交易是有效的,包括所有交易输入是有效的,而这些交易输入又是另一个交易的输出,连带这个交易也需要证实有效,以此类推,直到追溯到若干个创币交易。而所有交易都记录在记账簿中,因此,

    公共记账簿是比特币防伪机制真正要保护的对象。

    公共记账簿保存在海量比特币节点中,并且由这些节点独立维护。当需要验证一个交易的有效性时,节点会查找自己的账簿备份(注:为了简化问题,假设所有节点都是全节点),因此如果想篡改公共记账簿,得设法篡改所有节点的账簿备份。先不论黑入所有节点是否可能,那么篡改一份公共账簿是否可能呢?

    首先来尝试篡改一页账簿,即一个区块。如前面所述,无论是篡改区块头,还是交易部分(交易部分被篡改,便会与区块头中的Merkle根不一致;如果进一步更新Merkle根,区块头数据就会发生变化),都会使得区块头的哈希值发生变化,破坏“区块头的哈希值小于难度目标”这一约束,此区块会被视为无效。为了掩饰它就必须更新nonce值,相当于进行一次挖矿。更糟的是,它的子区块头中包含了该区块的哈希值,为了让数据一致,便需要进一步更新子区块;进一步波及到孙子区块...以此类推,此区块往后所有区块都需要连带更新。呜呜~~~,电费告警!!!

    篡改一个区块

    我们知道,成功创建区块,将获得创币奖励,这是应得的,因为你为此付出了机器和电费成本。你可能还记得,创币奖励是通过在区块中包含一个创币交易发出的,而交易信息是创币节点自己产生的,相当于拿着一张空白支票自己填数字。那能不能把创币奖励设成一个天文数字,一步就完成一个亿的小目标呢?不行,因为新区块要发给其他节点确认,这些节点会按照规则验证区块的有效性,而创币奖励的大小是有规则约束的。

    能不能篡改交易数据,将甲转给乙的比特币改成转给我呢?还是不能。因为交易信息是经过甲签名的,任何篡改都会导致交易数据失效。

    综上所述,想伪造比特币是不可能的。

    (2)如何防止“重复使用”

    真实货币有物质实体,根据物质守恒定理,一张钞票不可能分身出另一张一模一样的,同时进到你和我的钱包。然而,比特币只是一团数据,有没有可能通过拷贝数据来“复制”比特币呢?换个更专业点的问法,有没有可能将交易数据复制两份(类似重播攻击)让出钱方出一倍的钱?不能!交易的输入是若干UTXO(未支付输出),例如,交易1中的Tx1、Tx2和Tx3。发生交易1后,Tx1-3就不再是“未支付”状态,而成为“已支付”了。如果复制交易1形成交易2,比特币节点会检查交易2的输入是否存在并且为“未支付”状态。显然,交易2无法通过检查,因此所有节点会拒绝将交易2计入账簿(区块链),交易2不会生效。

    复制交易数据

    但是确实存在一种场景通过重复使用实施欺诈。设想你是一位前卫的珠宝店老板,接受比特币支付。小明用3BTC购买了价值三十万人民币的珠宝。小明支付后,产生了交易1。交易1产生后就开始等待某个节点产生新区块记录它。与此同时,小明的黑客朋友伪造了另一个交易2,与交易1中的输入相同,却将3BTC转账到小明的另一个比特币地址。由于黑客朋友掌握了全球算力的51%以上,因此抢先生成了新区块,将交易2计入,而将交易1排除掉。这样便让交易1失效了。如果你沉浸在做一笔大买卖的喜悦忘记留意比特币转账确认就让小明带着珠宝离开,你就失去了一大批珠宝而什么都没得到。这一欺骗过程是利用了前面说的“区块链分叉”原理,称为“51%攻击”。为了应对它,需要牢记:

    比特币交易只有收到多个(六个以上最佳)确认后,才能保证生效。比特币节点将包含此交易的区块成功加入区块链后才会发出确认。如果六个以上节点发来确认,交易的有效性便可无疑了。这好比检查比特币的水印。

    “51%攻击”若想成功,霸道的算力是关键。算力不济,只存在理论上成功的可能性。换个角度想想,如果有可观的算力,直接投入挖矿收益更稳定和有保障些。这说明了一个道理:当遵守规则的收益高于违反时,人们会选择遵守规则。

    6. 真正的安全风险

    比特币协议本身十分严密,几乎没有钻空子的可能。它的有效性不是靠信用(例如,法币依靠的是国家信用),而是算力来保证,这是无法造假的。

    然而,安全风险仍然存在,大都与私钥的保存有关。前面介绍过,只要且必须要有私钥才能使用比特币。比特币通常是通过称为“比特币钱包”的软件来管理。私钥保存不当,将导致比特币的重大损失。主要包括以下情形:

    (1)忘记私钥的保护密码:以密码保护私钥可以避免私钥泄露后被盗用。凡事有两面,如果忘记密码,没有任何方法能帮忙找回。

    (2)存储私钥的存储介质损坏或者丢失,甚至误删了钱包。最近看到一则有趣的故事,就是一个美国小哥把装有750个比特币的硬盘当垃圾扔了,这些比特币目前价值约1千多万美元;现在要找回来很难,因为那块硬盘上压着20吨垃圾...

    (3)私钥被黑客窃取:特别是网站钱包,私钥等数据是存储在服务器上的,如果遭到黑客入侵,用户的比特币将有很大可能被窃。网站服务的提供者是否可信也值得怀疑。毕竟比特币是无法溯源的,如果被窃,没有钞票编号可供追踪。因此,尽可能选用全节点客户端,它独立保存全部区块链信息,不依赖任何服务器和软件便可完成结算。一个全节点客户端的例子是bitcoin core。

    针对以上风险,安全性最好的措施是所谓的“纸钱包”。通过bitaddress.org可以生成一个纸钱包,如下图所示。它实际上就是包含一个私钥和对应的比特币地址的一个图片。将图片打印几份,锁在保险箱中,然后将你的比特币转给对应的地址,便可彻底杜绝被黑客窃取或硬盘损坏的风险。

    纸钱包

    我为什么要研究比特币

    最后说说我为什么要研究比特币。

    不,我不准备投身比特币投资,也不建议你这么去做。我学习它一方面是因为它的设计简洁优雅,是密码学和对等网络(p2p)技术的最佳实践,在学习过程中收获良多。另一方面,比特币是科技与社会的一次伟大结合。经济决定现代社会的方方面面,而比特币为改变未来经济运作机制提供了可能,从而可能进一步改变人类社会。将影响人类社会的东东,还不值得学习一下么?

    经过学习,我发现比特币确实具备成为优秀货币的潜力。甚至还不止于此,比特币的忠实拥趸将它视为建立一个理想国的基础。在这个理想国,人民的财富不会被贪婪的银行家或者统治者通过滥发纸币掠夺。

    也有人提出,比特币的数量是固定的,如果以之作为货币会造成通货紧缩,将造成经济衰退。这一论点尚有争议。通货紧缩是不假,可一定会造成经济衰退吗,异或会让经济运行更稳健。毕竟黄金就是紧缩货币,金本位并未阻止英国工业革命的发生。废除金本位后,人类货币就进入信用货币时代,虽然摆脱黄金约束,使得政府有更多手段和空间刺激经济高速发展,然而硬币的另一面是信用货币造成经济的大幅动荡。好比使用信用卡虽然可以让你提前满足需要,但过度依赖会造成入不敷出,因为借的总是要还的,借得越多,还得越痛苦,搞不好还有个人破产永不得翻身的风险。

    经济的最终目的是满足人的需要,是增加人的幸福感。信用货币造成的经济繁荣,实质是对未来市场需求的透支。企业为啥敢高负债,因为股市敢不断借钱给它;股市为啥这么放心,因为它相信新市场会不断被开拓,需求规模会不断扩大;企业拿到钱,进入更多市场领域,就需要更多钱去开发...由此,以GDP表达的经济繁荣便出现了。伴随的是,商品、产品渗透到人们生活的方方面面。将自己的生活分享给全世界的陌生人,真的比与家人、邻居分享能带来更大幸福感吗?作为消费者,我们是需要,还是被需要了。比特币的设计者无疑是一个理想主义者。在一个物欲横流的世界,选择自我约束的,一定是理想主义者。

    AGAIN,我不是建议大家去买比特币。写此文的一周内,比特币从16000美元涨到了最高18000美元,又跌回了16000。为我同志者加入我们,然而加入我们的却不一定都是同志。

  • 相关阅读:
    VS2010 自动跳过代码现象
    Reverse Linked List II 【纠结逆序!!!】
    Intersection of Two Linked Lists
    Linked List Cycle II
    Remove Nth Node From End of List 【另一个技巧,指针的指针】
    Swap Nodes in Pairs
    Merge Two Sorted Lists
    Remove Duplicates from Sorted List
    Linked List Cycle
    Dungeon Game
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13313162.html
Copyright © 2011-2022 走看看