比特币和拜占庭将军问题
A. 拜占庭将军很忙—《区块链思维》第21块
无论在链圈,还是在币圈混,经常听到一个名词“拜占庭将军问题”。
到底拜占庭是啥,拜占庭将军怎么啦,到处都被提及,这位将军好忙啊!
先说拜占庭这个地方。很久很久以前的欧洲,建立在比中世纪还古老的时期,历史上就是东罗马帝国,跨越了千年的历史期盼。
扯远了,回到正题,什么是拜占庭将军问题。
拜占庭这个地方异常坚固,同时被十个独立邻邦环伺,分别有一位将军,单独攻城必败,只有一半以上的将军同时攻打才能破城。
十位将军为了协调一致,在那个古老的时代,累死传令兵,要么飞鸽传书(那时的欧洲比中国落后,好像没有这个高速通信手段)。十位将军相互通信一次就需要90次传信,每位将军都有各自的攻城计划,要想达成统一就需要往复传递不知道多少次。
我们可以假设一个场景,一个桌子上坐着十位将军,每个人各自说着自己的想法,同时听其他九位的说法,但是信息的传递不是实时的,有快有慢,有早有晚。想明白了吗?也就是说,这十位将军如果想达成一致,理论上有可能,实际上他们的有生之年都实现不了,难怪拜占庭帝国经历了千年也没有被这十位将军攻破。
中本聪这个神人,利用互联网信息传递的及时性特点,引入时间戳可以明确知道“谁先说、谁后说”的特性,创造性地加入挖矿机制(就是用计算机算随机数满足一定难度才算成功)比拼各位将军的智商来决定谁做本次进攻的统帅,使用非对称加密保证信息传输的安全性等等手段融合到比特币中,用实例说明自己破解了这个历史难题“拜占庭将军问题”。从而向世人证明解决60亿人口的互信问题是有去中心化解决方案地。
币圈和链圈的朋友很焦虑的另一个关键问题就是:这个圈子概念太TM多。除了这个“拜占庭将军问题”,还有一个“拜占庭容错”,这是什么鬼?这两个是一样的吗?这两个是故意有一个被写错了吗?还是说我的智商税没交够?其实,你都说对了。
“拜占庭将军问题”假设所有十个将军都是好的,都想攻破拜占庭,只是达成共识很难,比特币提供了好人达成共识的方案。
“拜占庭容错”是说十个将军可以很好地达成共识。但是,如果其中出了坏人,怎么解决?
如果十个将军中出现了坏人(叫叛徒也行),进攻计划是否会永远无法达成共识呢?
“拜占庭容错”告诉大家,是可以达成地,并且,还能找出这些“叛徒”是谁。只是,10个将军中叛徒的数量不能超过3个,超出了就无法“容错”,也找不出这些叛徒是谁。对应的公式就是:3n+1。其中3n+1是将军总数(区块链的账本/矿机总数),n是能够“容错”的“叛徒”(恶意记错账)总数。
对于十个将军来说,最多容忍三个叛徒,多了就彻底没戏啦。为了比特币的容错能力越来越强,就需要更多的节点,这样才能容忍并找出更多的叛徒。懂了吧。
小结一下:拜占庭将军问题是假设都是好人前提下如何达成共识,拜占庭容错就是全网最多能够容忍多少叛徒并且能找出他们。
请交智商税到如下地址:
国税BTC到Kcash:
地税ETH及各种原生Token到 Imtoken:
不交税的,祝你做“韭菜”一切顺利 :D
B. 比特币谁发明的
比特币(BitCoin)的概念最初由中本聪在2009年提出,根据中本聪的思路设计发布的开源软件以及建构其上的P2P网络。比特币是一种P2P形式的数字货币。点对点的传输意味着一个去中心化的支付系统。
与大多数货币不同,比特币不依靠特定货币机构发行,它依据特定算法,通过大量的计算产生,比特币经济使用整个P2P网络中众多节点构成的分布式数据库来确认并记录所有的交易行为,并使用密码学的设计来确保货币流通各个环节安全性。P2P的去中心化特性与算法本身可以确保无法通过大量制造比特币来人为操控币值。基于密码学的设计可以使比特币只能被真实的拥有者转移或支付。这同样确保了货币所有权与流通交易的匿名性。比特币与其他虚拟货币最大的不同,是其总数量非常有限,具有极强的稀缺性。该货币系统曾在4年内只有不超过1050万个,之后的总数量将被永久限制在2100万个。
比特币可以用来兑现,可以兑换成大多数国家的货币。使用者可以用比特币购买一些虚拟物品,比如网络 游戏 当中的衣服、帽子、装备等,只要有人接受,也可以使用比特币购买现实生活当中的物品。[1][2]
西维吉尼亚州民主党参议员乔·曼钦(Joe Manchin)2014年2月26日向美国联邦政府多个监管部门发出公开信,希望有关机构能够就比特币鼓励非法活动和扰乱金融秩序的现状予以重视,并要求能尽快采取行动,以全面封杀该电子货币。[3]
2017年1月24日中午12:00起,中国三大比特币平台正式开始收取交易费。[4]
中文名
比特币
外文名
Bitcoin
种类
电子货币
流通平台
网络
概念创始人
中本聪
发展历程 听语音
2008年爆发全球金融危机,当时有人用“中本聪”的化名发表了一篇论文,描述了比特币的模式。
共2张
比特币
和法定货币相比,比特币没有一个集中的发行方,而是由网络节点的计算生成,谁都有可能参与制造比特币,而且可以全世界流通,可以在任意一台接入互联网的电脑上买卖,不管身处何方,任何人都可以挖掘、购买、出售或收取比特币,并且在交易过程中外人无法辨认用户身份信息。[2]2009年,不受央行和任何金融机构控制的比特币诞生。[2]比特币是一种“电子货币”,由计算机生成的一串串复杂代码组成,新比特币通过预设的程序制造,随着比特币总量的增加,新币制造的速度减慢,直到2014年达到2100万个的总量上限,被挖出的比特币总量已经超过1200万个。[2]
每当比特币进入主流媒体的视野时,主流媒体总会请一些主流经济学家分析一下比特币。早先,这些分析总是集中在比特币是不是骗局。而现如今的分析总是集中在比特币能否成为未来的主流货币。而这其中争论的焦点又往往集中在比特币的通缩特性上。[5]
不少比特币玩家是被比特币的不能随意增发所吸引的。和比特币玩家的态度截然相反,经济学家们对比特币2100万固定总量的态度两极分化。[6]
凯恩斯学派的经济学家们认为政府应该积极调控货币总量,用货币政策的松紧来为经济适时的加油或者刹车。因此,他们认为比特币固定总量货币牺牲了可调控性,而且更糟糕的是将不可避免地导致通货紧缩,进而伤害整体经济。奥地利学派经济学家们的观点却截然相反,他们认为政府对货币的干预越少越好,货币总量的固定导致的通缩并没什么大不了的,甚至是 社会 进步的标志。
比特币网络通过“挖矿”来生成新的比特币。所谓“挖矿”实质上是用计算机解决一项复杂的数学问题,来保证比特币网络分布式记账系统的一致性。比特币网络会自动调整数学问题的难度,让整个网络约每10分钟得到一个合格答案。随后比特币网络会新生成一定量的比特币作为赏金,奖励获得答案的人。
2009年比特币诞生的时候,每笔赏金是50个比特币。诞生10分钟后,第一批50个比特币生成了,而此时的货币总量就是50。随后比特币就以约每10分钟50个的速度增长。当总量达到1050万时(2100万的50%),赏金减半为25个。当总量达到1575万(新产出525万,即1050的50%)时,赏金再减半为12.5个。[7]
首先,根据其设计原理,比特币的总量会持续增长,直至100多年后达到2100万的那一天。但比特币货币总量后期增长的速度会非常缓慢。事实上,87.5%的比特币都将在头12年内被“挖”出来。所以从货币总量上看,比特币并不会达到固定量,其货币总量实质上是会不断膨胀的,尽管速度越来越慢。因此看起来比特币似乎是通胀货币才对。
然而判断处于通货紧缩还是膨胀,并不依据货币总量是减少还是增多,而是看整体物价水平是下跌还是上涨。整体物价上升即为通货膨胀,反之则为通货紧缩。长期看来,比特币的发行机制决定了它的货币总量增长速度将远低于 社会 财富的增长速度。
凯恩斯学派的经济学家们认为,物价持续下跌会让人们倾向于推迟消费,因为同样一块钱明天就能买到更多的东西。消费意愿的降低又进一步导致了需求萎缩、商品滞销,使物价变得更低,步入“通缩螺旋”的恶性循环。同样,通缩货币哪怕不存入银行本身也能升值(购买力越来越强),人们的投资意愿也会升高, 社会 生产也会陷入低迷。[5]因此比特币是一种具备通缩倾向的货币。比特币经济体中,以比特币定价的商品价格将会持续下跌。[1]
比特币是一种网络虚拟货币,数量有限,但是可以用来套现:可以兑换成大多数国家的货币。你可以使用比特币购买一些虚拟的物品,比如网络 游戏 当中的衣服、帽子、装备等,只要有人接受,你也可以使用比特币购买现实生活当中的物品。[1][1]
2014年9月9日,美国电商巨头eBay宣布,该公司旗下支付处理子公司Braintree将开始接受比特币支付。该公司已与比特币交易平台Coinbase达成合作,开始接受这种相对较新的支付手段。
虽然eBay市场交易平台和PayPal业务还不接受比特币支付,但旅行房屋租赁社区Airbnb和租车服务Uber等Braintree客户将可开始接受这种虚拟货币。Braintree的主要业务是面向企业提供支付处理软件,该公司在去年被eBay以大约8亿美元的价格收购。
2017年1月22日晚间,火币网、比特币中国与OKCoin币行相继在各自官网发布公告称,为进一步抑制投机,防止价格剧烈波动,各平台将于2017年1月24日中午12:00起开始收取交易服务费,服务费按成交金额的0.2%固定费率收取,且主动成交和被动成交费率一致。[4]5月5日,OKCoin币行网的最新数据显示,比特币的价格刚刚再度刷新 历史 ,截止发稿前最高触及9222点高位。[8]
创始人物 听语音
2008年11月1日,一个自称中本聪(Satoshi Nakamoto)的人在一个隐秘的密码学评论组上贴出了一篇研讨陈述,陈述了他对电子货币的新设想——比特币就此面世,比特币的首笔交易完成。比特币用揭露散布总账摆脱了第三方机构的制约,中本聪称之为“区域链”。用户乐于奉献出CPU的运算能力,运转一个特别的软件来做一名“挖矿工”,这会构成一个网络共同来保持“区域链”。这个过程中,他们也会生成新货币。买卖也在这个网络上延伸,运转这个软件的电脑真相破解不可逆暗码难题,这些难题包含好几个买卖数据。第一个处理难题的“矿工”会得到50比特币奖赏,相关买卖区域加入链条。跟着“矿工”数量的添加,每个迷题的艰难程度也随之进步,这使每个买卖区的比特币生产率保持约在10分钟一枚。
京都大学数学教授望月新一
2009年,中本聪设计出了一种数字货币,即比特币,风风火火的比特币市场起了又落,而其创始人“中本聪”的身份一直都是个谜,关于“比特币之父”的传闻牵涉到从美国国家安全局到金融专家,也给比特币罩上了神秘光环。
据外媒报道称,计算机科学家TedNelson周日在网络上发布视频称,他已经确定出,比特币的创始人是京都大学数学教授望月新一(ShinichiMochizuki)。比特币的创始人一直以来使用的都是中本聪(SatoshiNakamoto)的假名,互联网领域也对其真实身份展开了大量推测。纳尔逊发布视频称,他已确定望月新一就是比特币的真正创始人。[9]
望月新一2013年因为证明ABC猜想而名声大噪。他高中时就读于菲利普埃克塞特学院,后者是美国最具声望的高中之一,仅仅两年后就毕业。望月新一16岁进入美国普林斯顿大学,22岁时以博士身份离校,33岁就成为正教授,这么年轻就获得正教授职称在学术界极为罕见。这个数学界的巨星可能已经攻破了该领域最为重要的难题之一。
中本聪本人在互联网上留下的个人资料很少,尤其是近几年几乎完全销声匿迹,因此其身世也变成了一个迷。2014年3月7日,当比特币创始人多利安·P·中本聪被找到的新闻传出后,迅速成为互联网上最吸引人的消息。
与外界揣测其可能是个虚构的名字不同,“中本聪”是个真实的名字,他是一名64岁的日裔美国人,他喜欢收集火车模型,曾供职大企业和美国军方,从事机密工作。在过去的40年中,中本聪从不在生活中用他的真名。根据美国洛杉矶地方法院1973年的档案,在他23岁从加州州立理工大学毕业时,将自己的名字改为了多利安·普伦蒂斯·中本聪(DorianPrenticeSatoshiNakamoto)。从那时起,他不再使用“聪”这个名字,而用多利安·中本S(DorianS.Nakamoto)作为签名。[9]
产生原理 听语音
从比特币的本质说起,比特币的本质其实就是一堆复杂算法所生成的特解。特解是指方程组所能得到无限个(其实比特币是有限个)解中的一组。而每一个特解都能解开方程并且是唯一的。[10]以人民币来比喻的话,比特币就是人民币的序列号,你知道了某张钞票上的序列号,你就拥有了这张钞票。而挖矿的过程就是通过庞大的计算量不断的去寻求这个方程组的特解,这个方程组被设计成了只有 2100 万个特解,所以比特币的上限就是 2100 万。[10]
疯狂涨势
要挖掘比特币可以下载专用的比特币运算工具,然后注册各种合作网站,把注册来的用户名和密码填入计算程序中,再点击运算就正式开始。[11]完成Bitcoin客户端安装后,可以直接获得一个Bitcoin地址,当别人付钱的时候,只需要自己把地址贴给别人,就能通过同样的客户端进行付款。在安装好比特币客户端后,它将会分配一个私有密钥和一个公开密钥。需要备份你包含私有密钥的钱包数据,才能保证财产不丢失。如果不幸完全格式化硬盘,个人的比特币将会完全丢失。
货币特征 听语音
去中心化:比特币是第一种分布式的虚拟货币,整个网络由用户构成,没有中央银行。去中心化是比特币安全与自由的保证 。
全世界流通:比特币可以在任意一台接入互联网的电脑上管理。不管身处何方,任何人都可以挖掘、购买、出售或收取比特币。
专属所有权:操控比特币需要私钥,它可以被隔离保存在任何存储介质。除了用户自己之外无人可以获取。
低交易费用:可以免费汇出比特币,但最终对每笔交易将收取约1比特分的交易费以确保交易更快执行。
无隐藏成本:作为由A到B的支付手段,比特币没有繁琐的额度与手续限制。知道对方比特币地址就可以进行支付。
跨平台挖掘:用户可以在众多平台上发掘不同硬件的计算能力。
优点
完全去处中心化,没有发行机构,也就不可能操纵发行数量。其发行与流通,是通过开源的p2p算法实现。
匿名、免税、免监管。
健壮性。比特币完全依赖p2p网络,无发行中心,所以外部无法关闭它。比特币价格可能波动、崩盘,多国政府可能宣布它非法,但比特币和比特币庞大的p2p网络不会消失。
无国界、跨境。跨国汇款,会经过层层外汇管制机构,而且交易记录会被多方记录在案。但如果用比特币交易,直接输入数字地址,点一下鼠标,等待p2p网络确认交易后,大量资金就过去了。不经过任何管控机构,也不会留下任何跨境交易记录。
山寨者难于生存。由于比特币算法是完全开源的,谁都可以下载到源码,修改些参数,重新编译下,就能创造一种新的p2p货币。但这些山寨货币很脆弱,极易遭到51%攻击。任何个人或组织,只要控制一种p2p货币网络51%的运算能力,就可以随意操纵交易、币值,这会对p2p货币构成毁灭性打击。很多山寨币,就是死在了这一环节上。而比特币网络已经足够健壮,想要控制比特币网络51%的运算力,所需要的cpu/gpu数量将是一个天文数字。
缺点
交易平台的脆弱性。比特币网络很健壮,但比特币交易平台很脆弱。交易平台通常是一个网站,而网站会遭到黑客攻击,或者遭到主管部门的关闭。
交易确认时间长。比特币钱包初次安装时,会消耗大量时间下载 历史 交易数据块。而比特币交易时,为了确认数据准确性,会消耗一些时间,与p2p网络进行交互,得到全网确认后,交易才算完成。
价格波动极大。由于大量炒家介入,导致比特币兑换现金的价格如过山车一般起伏。使得比特币更适合投机,而不是匿名交易。
大众对原理不理解,以及传统金融从业人员的抵制。活跃网民了解p2p网络的原理,知道比特币无法人为操纵和控制。但大众并不理解,很多人甚至无法分清比特币和Q币的区别。“没有发行者”是比特币的优点,但在传统金融从业人员看来,“没有发行者”的货币毫无价值。[12]
货币交易 听语音
购买方法
用户可以买到比特币,同时还可以使用计算机依照算法进行大量的运算来“开采”比特币。在用户“开采”比特币时,需要用电脑搜寻64位的数字就行,然后通过反复解谜密与其他淘金者相互竞争,为比特币网络提供所需的数字,如果用户的电脑成功地创造出一组数字,那么就将会获得25个比特币。
由于比特币系统采用了分散化编程,所以在每10分钟内只能获得25个比特币,而到2140年,流通的比特币上限将会达到2100万。换句话说,比特币系统是能够实现自给自足的,通过编码来抵御通胀,并防止他人对这些代码进行破坏。
交易方式
比特币是类似电子邮件的电子现金,交易双方需要类似电子邮箱的“比特币钱包”和类似电邮地址的“比特币地址”。和收发电子邮件一样,汇款方通过电脑或智能手机,按收款方地址将比特币直接付给对方。下列表格,列出了免费下载比特币钱包和地址的部分网站。
比特币地址是大约33位长的、由字母和数字构成的一串字符,总是由1或者3开头,例如""。比特币软件可以自动生成地址,生成地址时也不需要联网交换信息,可以离线进行[2]。可用的比特币地址超过2个。形象地说,全世界约有2粒沙, 如果每一粒沙中有一个地球,那么比特币地址总数远远超过所有这些“地球”上的所有的沙子的数量。
比特币地址和私钥是成对出现的,他们的关系就像银行卡号和密码。比特币地址就像银行卡号一样用来记录你在该地址上存有多少比特币。你可以随意的生成比特币地址来存放比特币。每个比特币地址在生成时,都会有一个相对应的该地址的私钥被生成出来。这个私钥可以证明你对该地址上的比特币具有所有权。我们可以简单的把比特币地址理解成为银行卡号,该地址的私钥理解成为所对应银行卡号的密码。只有你在知道银行密码的情况下才能使用银行卡号上的钱。所以,在使用比特币钱包时请保存好你的地址和私钥。
比特币的交易数据被打包到一个“数据块”或“区块”(block)中后,交易就算初步确认了。当区块链接到前一个区块之后,交易会得到进一步的确认。在连续得到6个区块确认之后,这笔交易基本上就不可逆转地得到确认了。比特币对等网络将所有的交易 历史 都储存在“区块链”(blockchain)中。区块链在持续延长,而且新区块一旦加入到区块链中,就不会再被移走。区块链实际上是一群分散的用户端节点,并由所有参与者组成的分布式数据库,是对所有比特币交易 历史 的记录 。 中本聪预计,当数据量增大之后,用户端希望这些数据并不全部储存自己的节点中。为了实现这一目标,他采用引入散列函数机制。这样用户端将能够自动剔除掉那些自己永远用不到的部分,比方说极为早期的一些比特币交易记录。
消费方式
许多面向 科技 玩家的网站,已经开始接受比特币交易。包括Mtgox,BTCChina之类的网站,以及淘宝某些商店,甚至能接受比特币兑换美元、欧元等服务。毫无疑问,比特币已经成为真正的流通货币,而非腾讯Q币那样的虚拟货币。国外已经有专门的比特币第三方支付公司,类似国内的支付宝,可以提供API接口服务。
可以用钱来买比特币,也可以当采矿者,“开采”它们用电脑搜寻64位的数字就行。通过用电脑反复解密,与其他的淘金者竞争,为比特币网络提供所需的数字。如果电脑能够成功地创造出一组数字,就会获得25个比特币。比特币是分散化的,需要在每个单位计算时间内创造固定数量比特币是每10分钟内可获得25个比特币。到2140年,流通的比特币上限将达到2100万。换句话说,比特币体制是可以自给自足的,译成编码可抵御通胀,防止他人搞破坏。
支付案例
在被投资者疯狂追逐的同时,比特币已经在现实中被个别商家接受。北京一家餐馆开启了比特币支付。这家位于朝阳大悦城的餐馆称,该店从2013年11月底开始接受比特币支付。消费者在用餐结束时,把一定数量的比特币转账到该店账户,即可完成支付,整个过程类似于银行转账。该餐馆曾以0.13个比特币结算了一笔650元的餐费。[13]
2014年1月,Overstock开始接受比特币,成为首家接受比特币的大型网络零售商。[14]
比特币是由中本聪创造的,(几乎可以肯定)是一个化名,迄今为止,还没有人能够确切地将比特币与一个真实的人或一群人联系起来。中本聪于2011年从互联网上消失,几乎没有留下他们可能是谁的线索。多年来,许多人都公开宣称自己是Satoshi,但都没有以无可争议的事实支持这一说法。
在一个早期的比特币论坛上,Satoshi说他们在2007年开始研究比特币,比第一个区块被开采早了两年。2009年1月3日,比特币区块链的第一个区块——创世纪区块被开采。中本聪是创世纪区块的开采者,收到了第一批投入流通的50枚比特币。然而,第一个方块的奖励是无法支付的,因为在代码中创世纪方块的表达方式有点奇怪。BitMEX研究发表了一份对比特币早期开采的分析,并得出结论认为“有人”开采了70万枚比特币。尽管许多人认为这是Satoshi,但官方仍未证实。
人们只能想象,如果他们的身份被曝光,中本聪会获得什么样的名声,更不用说他们将收集的巨额财富了(尽管佐藤似乎没有花掉他们应该开采的任何硬币)。随着时间的推移,已经有很多人声称自己是Satoshi,而其他人则被强加了这种说法。
虚假索赔
声称自己是Satoshi的最著名的例子之一是克雷格·赖特,澳大利亚学者。早在2015年,莱特就多次试图向公众展示他是比特币发明者的无可争议的证据,但直到今天他都没有成功。事实上,他的“证据”被证明是伪造的。
为什么Satoshi必须匿名
中本聪,世界上第一个分散货币的创造者,可以说应该保持匿名,因为他们创造的本质。在创建了一个没有失败中心点的协议之后,中本聪可能已经意识到,保持匿名可能会消除比特币可能存在的最后一个失败中心点:创建它的人。去除可能与比特币的出现相关联的单一身份,就去除了任何可能影响比特币社区的政治、规则或决策的单一面孔。
不管Satoshi是谁,他们无疑是我们这个时代的天才。比特币协议在所有合适的地方提供了经济激励,为拜占庭将军的问题提供了一个特殊的解决方案。中本聪运用密码学、数学、博弈论和经济学的概念,创造了一种设计精美的——也是世界上第一种——数字稀缺资产——比特币。
比特币的发明者是一位日本人,名叫中本聪,在2009年1月3日,世界上第一批比特币诞生, 数字货币也正式诞生,数字货币直到2013年年底价格才飞速上涨,从前期的10美元左右一下涨高到九百多美元,在2016年,比特币热度才真正起来,价格一路飙升,被称为“数字黄金”。 比特币为什么这么值钱呢?
1、挖矿难度大,比特币挖矿需要进行特定的运算,运算时间成本很高,前期的物质投入也非常大。
2、比特币带有货币属性以及被市场信任,比特币的加密算法难以破解,保证了其唯一性。
3、比特币交易市场透明度高,市场价格都是公开透明的,在虚拟数字货中流通和交易方便快捷。
4、有一些国家的认可,国家对比特币,数字货币出台的一些政策无疑都会刺激比特币价格上涨。
物以稀为贵,比特币比较稀有,目前比较币的开采难度很高,供求关系的影响,市场上供不应求的局面等等,这些无疑对价格上涨产生了很大作用。对于在交易平台购买比特币赚取差价的朋友需要谨慎。
比特币是一种P2P形式的数字货币。点对点的传输意味着一个去中心化的支付系统。在2009年由日本人中本聪提出比特币这一概念,比特币从始发到现在价格已经高的难以想象,比特币为什么那么值钱了?
下面来简单的说说。
比特币挖矿机通过运行一种特殊的程序,运行结束后就可以获得类似任务奖励的比特币。现在比特币的产量是很低的,每天大约产出3600个新币,数量有限;比特币挖矿价格高,自从比特币火热后,专业挖矿机从价格低的一万元左右,现在价格贵的超过三十万,前期设备投入就需要很大财力;挖矿时间长,比特币挖矿就是经过特定的复杂运算,消耗额时间非常长;比特币挖矿机消耗大,除了有自身的损耗以外,还会消耗大量用电,特币全球挖矿机日耗电量可达1.88亿千瓦时,相当于中国日发电量的百分之一。比特币数量目前还在不断增加,有机构评估,在2019年比特币挖矿耗电量将会超过美国的耗电量。
比特币的价格一直都是媒体比较关系的,这里提醒大家,比特币价格涨的快,下落也会很快,风险高,想要购买比特币赚钱的朋友一定要谨慎加入。
沉寂多日的比特币借“勒索”病毒卷土重来,并开启似曾相识的暴走模式。这种被称作“数字黄金”的虚拟货币,8年间暴涨300万倍,连中国大妈都进场了。有人认为这是一个击鼓传花式的 游戏 ,有人坚信比特币会成为稀缺资产,更有人说它会是在 历史 长河中闪光的一个节点,而多数人不求甚解,只是惊叹于又一轮的财富大爆发。
爱必投认为究竟是谁创造了比特币?关于比特币的发明者一直没有定论,普遍的说法是日本人“中本聪”(Satoshi Nakamoto)。2009年1月3日,世界上第一批比特币被“挖”出,这种由一个代号为“中本聪”的人设计的数字货币正式诞生,而自那一刻起已有15个人先后被怀疑是“中本聪”。2014年美国权威媒体揭露,本名为“中本聪”的日裔美国物理学家,就是传说的“比特币之父”,但这位老教授坚决否认。图为罕见现身的中本聪被媒体围攻,不断遮挡镜头,并否认与比特币存在任何联系。
2016年5月,澳大利亚工程师、企业家克雷格·怀特(Craig Wright)公开表明他就是比特币的创造者——中本聪。但仅过了几天,怀特本人就“投降”了,发表道歉信称“拿不出关键证据”证明自己。尽管中本聪被提名为2016年诺贝尔经济学奖候选人,但他的真实面纱还未被完全揭开。图片:BBC (来自:腾讯图片)
而跟比特币扯上关系后,克雷格·怀特就被警方盯住了。图为澳大利亚联邦警方与税务人员搜查了怀特的住所与办公地点,后者的比特币相关业务存在税务方面问题。据媒体报道,神秘人物“中本聪”手握100多万个比特币,按照目前每个15000元人民币来算,他的身价超过150亿人民币。而按照最初的严格设计,比特币的总量被限制在2100万枚,目前已有1400万枚左右被开采出来。图片:路透社
中本聪,不知他真身
C. 比特币机制研究
现今世界的电子支付系统已经十分发达,我们平时的各种消费基本上在支付宝和微信上都可以轻松解决。但是无论是支付宝、微信,其实本质上都依赖于一个中心化的金融系统,即使在大多数情况这个系统运行得很好,但是由于信任模型的存在,还是会存在着仲裁纠纷,有仲裁纠纷就意味着不存在 不可撤销的交易 ,这样对于 不可撤销的服务 来说,一定比例的欺诈是不可避免的。在比特币出来之前,不存在一个 不引入中心化的可信任方 就能解决在通信通道上支付的方案。
比特币的强大之处就在于:它是一个基于密码学原理而不是依赖于中心化机构的电子支付系统,它能够允许任何有交易意愿的双方能直接交易而不需要一个可信任的第三方。交易在数学计算上的不可撤销将保护 提供不可撤销服务 的商家不被欺诈,而用来保护买家的 程序化合约机制 也比较容易实现。
假设网络中有A, B ,C三个人。
A付给B 1比特币 ,B付给C 2比特币 ,C付给A 3比特币 。
如下图所示:
为了刺激比特币系统中的用户进行记账,记账是有奖励的。奖励来源主要有两方面:
比特币中每一笔交易都会有手续费,手续费会给记账者
记账会有打包区块的奖励,中本聪在08年设计的方案是: 每10分钟打一个包,每打一个包奖励50个比特币,每4年单次打包的奖励数减半,即4年后每打一个包奖励25个比特币,再过四年后就奖励12.5个比特币... 这样我们其实可以算出比特币的总量:
要说明打包的记录以谁为准的问题,我们需要引入一个知名的 拜占庭将军问题 (Byzantine failures)。拜占庭将军问题是由莱斯利·兰伯特提出的点对点通信中的基本问题。含义是在存在消息丢失的不可靠信道上试图通过消息传递的方式达到一致性是不可能的。
假设有9个互相远离的将军包围了拜占庭帝国,除非有5个及以上的将军一起攻打,拜占庭帝国才能被打下来。而这9个将军之间是互不信任的,他们并不知道这其中是否有叛徒,那么如何通过远距离协商来让他们赢取战斗呢?
口头协议有3个默认规则:
1.每个信息都能够被准确接收
2.接收者知道是谁发送给他的
3.谁没有发送消息大家都知道
4.接受者不知道转发信息的转发者是谁
将军们遵循口头规则的话,那就是下面的场景:将军1对其他8个将军发送了信息,然后将军2~9将消息进行转达(广播),每个将军都是消息的接受者和转发者,这样一轮下来,总共就会有9×8=72次发送。这样将军就可以根据自己手中的信息,选择多数人的投票结果行动即可,这个时候即便有间谍,因为少数服从多数的原则,只要大部分将军同意攻打拜占庭,自己就去行动。
这个方案有很多缺点:
1.首先是发送量大,9个将军之间要发送72次,随着节点数的增加,工作量呈现几何增长。
2.再者是无法找出谁是叛徒,因为是口头协议,接受者不知道转发信息的转发者是谁,每个将军手里的数据仅仅只是一个数量的对比:
这里我们假设有3个叛徒,在一种最极端的情况下即叛徒转发信息时总是篡改为“不进攻”,那么我们最坏的结果就如上图所示。将军1根据手里的信息可以推出要进攻的结论,却无法获知将军里面谁是叛徒。
这样我们就有了方案二:书面协议。
书面协议即将军在接受到信息后可以进行签字,并且大家都能够识别出这个签字是否是本人,换种说法就是如果有人篡改签字大家可以知道。书面协议相对比口头协议就是增加了一个认证机制,所有的消息都有记录。一旦发现有人所给出的信息不一致,就是追查间谍。
有了书面协议,那么将军1手里的信息就是这样的:
可以很明显得看出,在最坏的一种情况——叛徒总是转发“不进攻”的消息之下,将军7、8、9是团队里的叛徒。
这个方案解决了口头协议里历史信息不可追溯的问题,但是在发送量方面并没有做到任何改进。
在我们的示例中,比特币系统里的每个用户发起了一笔交易,都会通过自己的私钥进行签名,用数学公式表示就是:
所以之前的区块就变成了这样:
这样每一笔交易都由交易发起者通过私钥进行数字签名,由于私钥是不公开的,所以交易信息也就无法被伪造了。
如书面协议末尾所说的那样,书面协议未能解决信息交流过多的问题。当比特币系统中存在上千万节点的时候,如果要互相广播验证,请求响应的次数那将是一个非常庞大的数字,显然势必会造成网络拥堵、节点处理变慢。为了解决这个问题,中本聪干脆让整个10分钟出一个区块,这个区块由谁来打包发出呢?这里就采用了工作量证明机制(PoW)。工作量证明,说白了就是解一个数学题,谁先解出来数学题,谁就能有打包区块的权力。换在拜占庭将军的例子中就是,谁先做出数学题,谁就成为将军们里面的总司令,其他将军听从他发号的命令。
首先,矿工会将区块头所占用的128字节的字符串进行两次sha256求值,即:
这样求得一个值Hash,将其与目标值相比对,如果符合条件,则视为工作量证明成功。
工作量证明成功的条件写在了区块链头部的 难度数 字段,它要求了最后进行两次sha256运算的Hash值必须小于定下的目标值;如果不是的话,那就改变区块头的 随机数 (nonce),通过一次次地重复计算检验,直到符合条件为止。
此外, 比特币有自己的一套难度控制系统,使得比特币系统要在全网不同的算力条件下,都保持10分钟生成一个区块的速率。这也就意味着:难度值必须根据全网算力的变化进行调整。难度调整的策略是由最新2016个区块的花费时长与期望时长(期望时长为20160分钟即两周,是按每10分钟一个区块的产生速率计算出的总时长)比较得出的,根据实际时长与期望时长的比值,进行相应调整(或变难或变易)。也就是说,如果区块产生的速率比10分钟快则增加难度,比10分钟慢则降低难度。
PoW其实在比特币中是做了以下的三件事情。
这样可以防止一台高性能机器同时跑上万个节点,因为每完成一个工作都要有足够的算力。
有经济奖励就会加速整个系统的去中心化,也鼓励大家不要去作恶,要积极地按照协议本来的执行方式去执行。(所以说,无币区块链其实是不可行的,无币区块链一定导致中心化。)
也就是说,每个节点都不能以自身硬件条件去控制出快速度。现在的比特币上平均10分钟出一个块,性能再好的机器也无法打破这个规则,这就能够保证 区块链是可以收敛到共同的主链上的 ,也就是我们所说的共识。
综上,共识只是PoW三个作用中的一点,事实上PoW设计的作用有点至少有这么三种。
默克尔树的概念其实很简单,如图所示
这样,我们区块的结构就大致完整了,这里分成了区块头和区块体两部分。
区块链的每个节点,都保存着区块链从创世到现在的每一区块,即每一笔交易都被保存在节点上,现在已经有几百个GB了。
每当比特币系统中有一笔新的交易生成,就会将新交易广播到所有的节点。每个节点都把新交易收集起来,并生成对应的默克尔根,拼接完区块头后,就开始调整区块头里的随机数值,然后就开始算数学题
将算出的result和网络中的目标值进行比对,如果是结果是小于的话,就全网广播答案。其他矿工收到了这个信息后,就会立马放下手里的运算,开始下一个区块的计算。
举个例子,当前A节点在挖38936个区块,A挖矿节点一旦完成计算,立刻将这个区块发给它的所有相邻节点。这些节点在接收并验证这个新区块后,也会继续传播此区块。当这个新区块在网络中扩散时,每个节点都会将它作为第38936个区块(前一个区块为38935)加到自身节点的区块链副本中。当挖矿节点收到并验证了这个新区块后,它们会放弃之前对构建这个相同高度区块的计算,并立即开始计算区块链中下一个区块的工作。
整个流程就像下一张图所展示的这样:
简单来说,双花问题是一笔钱重复花了两次。具体来讲,双花问题可分为两种情况:
1.同一笔钱被多次使用;
2.一笔钱只被使用过一次,但是通过黑客攻击或造假等方式,将这笔钱复制了一份,再次使用。
在我们生活的数字系统中,由于数据的可复制性,使得系统可能存在同一笔数字资产因不当操作被重复使用的情况,为了解决双花问题,日常生活中是依赖于第三方的信任机构的。这类机构对数据进行中心化管理,并通过实时修改账户余额的方法来防止双重支付的出现。而作为去中心化的点对点价值传输系统,比特币通过UTXO、时间戳等技术的整合来解决双花问题。
UTXO的英文全称是 unspent transaction outputs ,意为 未使用的交易输出 。UTXO是一种有别于传统记账方式的新的记账模型。
银行里传统的记账方式是基于账户的,主要是记录某个用户的账户余额。而UTXO的交易方式,是基于交易本身的,甚至没有账户的概念。在UTXO的记账机制里,除了货币发行外,所有的资金来源都必须来自于前面某一个或几个交易。任何一笔的交易总量必须等于交易输出总量。UTXO的记账机制使得比特币网络中的每一笔转账,都能够追溯到它前面一笔交易。
比特币的挖矿节点获得新区块的挖矿奖励,比如 12.5 个比特币,这时,它的钱包地址得到的就是一个 UTXO,即这个新区块的币基交易(也称创币交易)的输出。币基交易是一个特殊的交易,它没有输入,只有输出。
当甲要把一笔比特币转给乙时,这个过程是把甲的钱包地址中之前的一个 UTXO,用私钥进行签名,发送到乙的地址。这个过程是一个新的交易,而乙得到的是一个新的 UTXO。
这就是为什么有人说在这个世界上根本没有比特币,只有 UTXO,你的地址中的比特币是指没花掉的交易输出。
以Alice向Bob进行转账的过程举例的话:
UTXO 与我们熟悉的账户概念的差别很大。我们日常接触最多的是账户,比如,我在银行开设一个账户,账户里的余额就是我的钱。
但在比特币网络中没有账户的概念,你可以有多个钱包地址,每个钱包地址中都有着多个 UTXO,你的钱是所有这些地址中的 UTXO 加起来的总和。
中本聪发明比特币的目标是创建一个点对点的电子现金,UTXO 的设计正可以看成是借鉴了现金的思路:我们可能在这个口袋里装点现金,在那个柜子角落里放点现金,在这种情况下不存在一个账户,你放在各处的现金加起来就是你所有的钱。
采用 UTXO 设计还有一个技术上的理由,这种特别的数据结构可以让双重花费更容易验证。对比一下:
D. 五分钟了解共识机制
五分钟了解共识机制
什么是共识机制?
“共识机制是区块链的灵魂。”这是业内经常能听到的一句话,共识机制在区块链中的地位可想而知。那么到底什么是共识机制呢?我们不妨从拜占庭将军问题说起。
拜占庭位于如今的土耳其的伊斯坦布尔,是东罗马帝国的首都。由于当时拜占庭罗马帝国国土辽阔,为了防御目的,每个军队都分隔很远,将军与将军之间只能靠信差传消息。在战争的时候,拜占庭军队内所有将军和副官必须达成一致的共识,决定是否有赢的机会才去攻打敌人的阵营。但是,在军队内有可能存有叛徒和敌军的间谍,左右将军们的决定又扰乱整体军队的秩序。在进行共识时,结果并不代表大多数人的意见。这时候,在已知有成员谋反的情况下,其余忠诚的将军在不受叛徒的影响下如何达成一致的协议,拜占庭问题就此形成。
拜占庭将军问题是一个协议问题,拜占庭帝国军队的将军们必须全体一致的决定是否攻击某一支敌军。问题是这些将军在地理上是分隔开来的,并且将军中存在叛徒。叛徒可以任意行动以达到以下目标:欺骗某些将军采取进攻行动;促成一个不是所有将军都同意的决定,如当将军们不希望进攻时促成进攻行动;或者迷惑某些将军,使他们无法做出决定。如果叛徒达到了这些目的之一,则任何攻击行动的结果都是注定要失败的,只有完全达成一致的努力才能获得胜利。
而这个问题该如何解决?中本聪的理念给出了一个比较好的答案:不能让所有人都有资格发信息,而是给发信息设置了一个条件:“工作量”,将军们同时做一道计算题,谁先算完,谁才能获得给其他小国发信息的资格。而其他小国在收到信息后,必须采用加密技术进行签字盖戳,以确认身份。然后再继续做题,做对题的再继续发消息……对这种先后顺序达成共识的算法,就是共识机制。
共识机制的作用
区块链作为一种按时间顺序存储数据的数据结构,可支持不同的共识机制。在区块链上,每个人都会有一份记录链上所有交易的账本,链上产生一笔新的交易时,每个人接收到这个信息的时间是不一样的,有些想要干坏事的人就有可能在这时发布一些错误的信息,这时就需要一个人把所有人接收到的信息进行验证,最后公布最正确的信息。
共识机制是区块链技术的重要组件。它就像一本法典,维系着区块链世界的正常运转,使得区块链技术自带改善世界的光芒,也是让区块链得以被全世界逐步接受和认可的最大幕后功臣,它让互联网、陌生人之间,在没有第三方作为信用背书的情况下发生的一切交易变成可能,它赋予了机械的代码以人性和温度。
共识机制的类别
目前的共识机制主要有POW、POS、DPOS、PBFT、dBFT、Pool验证池。
POW,就是人们熟悉的比特币挖矿,通过计算出一个满足规则的随机数,即获得本次记账权,发出本轮需要记录的数据,全网其它节点验证后一起存储。可实现完全去中心化,节点自由进出。干的越多,收的越多。
POS,权益证明,POW的一种升级共识机制,根据每个节点所占代币的比例和时间,以此等比例的挖矿难度,从而加快找随机数的速度。持有越多,获得越多
DPOS,股份授权证明机制,类似于董事会投票,持币者投出一定数量的节点,代理他们进行验证和记账。
PBFT ,Practical Byzantine Fault Tolerance,实用拜占庭容错算法,是一种状态机副本复制算法,即服务作为状态机进行建模,状态机在分布式系统的不同节点进行副本复制,每个状态机的副本都保存了服务的状态,同时也实现了服务的操作。
dBFT,delegated BFT 授权拜占庭容错算法,由权益来选出记账人,然后记账人之间通过拜占庭容错算法来达成共识。
Pool验证池,基于传统的分布式一致性技术建立,并辅之以数据验证机制,是目前区块链中广泛使用的一种共识机制。Pool验证池不需要依赖代币就可以工作,在成熟的分布式一致性算法(Pasox、Raft)基础之上,可以实现秒级共识验证,更适合有多方参与的多中心商业模式。
现有共识机制存在问题
目前现有的共识机制都不算完美,在一些实际应用场景弊端很多。
A、计算能力浪费
在工作量证明机制POW中,猜数字最快的通常是电脑计算能力强的。超强的计算能级仅用来猜数字,实在是浪费。
B、权益向顶层集中
在权益证明机制POS中,token的余额越多的人获得公示信息的概率越高,公示人会得到一定的token作为奖励,如此持有token多的人会越来越多,少的人越来越少。
C、作恶成本低下
在靠算力与权益的的多少来获得公示信息的权利的模式当中,当算力和权益向少数人集中之后,这些少数人如果想要做一些违反规则的事情是轻而易举的;在PBFT中,由所有人投票,如果一个没有任何token余额的人想要捣乱,那他几乎是完全没有利益损失。
D、对于真正的去中心化构成威胁
在工作量证明机制中,计算能力越强,获得记录权利的概率就越高。如果有人把很多人集中在一起来猜数字,把好多电脑的算力加在一起来用,那这些抱团的人就会更容易获得公示信息的权利,发展到最后可能公示权就直接掌握在这些人手里。
在权益证明机制POS中,权益越大的人获得记录权利的概率越高,而记录的人就会有奖励token ,这样一来这些人就会越来越富有,贫富差距就会越来越大。持有token少的人几乎都没有话语权了。权利掌握在少数人手中,这有违区块链去中心化理念。
E. 比特币因为什么可以被称为主流币
拜占庭将军问题
在讨论比特币为什么会被称为主流币之前先看一个有趣的问题,这个问题的名字叫做拜占庭将军问题。
这个问题是由莱斯利·兰伯特提出的点对点通信的基本问题。
为什么会被称为拜占庭将军问题呢?有两大历史渊源。
一、拜占庭位于如今土耳其的伊斯坦布尔,是东罗马帝国的首都,由于罗马帝国当时土地辽阔,每个军队都相隔较远,信息传递全靠信差。而在战争时拜占庭的所有将军必须达成是否攻击的共识,这样才能赢得战争。但是因为有叛徒和间谍的存在就会扰乱秩序,使得难以形成正确的共识。拜占庭将军问题就这样形成了。
二、Leslie Lamport(2013 年的图灵讲得主)用来为描述分布式系统一致性问题(Distributed Consensus)在论文中抽象出来一个著名的例子。
Leslie Lamport在20页的文章中举了一个具体的例子来描述什么是拜占庭将军问题,拜占庭排出了10支部队去围攻一个城池,10支部队由10个将军带领,分布在城池的四周靠通信兵传递信息,由于敌人实力强悍,必须要6队或以上的人马同时发起进攻才能赢得战争。如何保证至少6支军队可以同时发起进攻。
从字面上看起来似乎不是一个很难的问题,其实际解决起来却没那么容易,在中本聪提出比特币网络概念之前这个问题一直就没有得到较好的解决。
为什么这么难解决呢?
因为信息传递是分散的,并且其中还可能存在间谍叛徒捣乱。
先不考虑有叛徒和间谍的情况,光10个将军想要统一一个发动进攻的时间都很难,举例:每一个将军都有着自己的进攻想法,想要统一一个进攻时间就要将自己的想法让通信兵传达给剩余的9位将军,并询问是否同意在这个时间发起进攻,又由于路途远近的不同,收到的提议的时间都不同,这样就很容易形成一个混乱的局面。
如果再加上叛徒和间谍就更可怕了,叛徒和间谍可以向不同的将军发出不同的提案,或者同意多个将军的进攻提案。
这样来看这个问题是不是就极其复杂了。
其实拜占庭将军问题,就是要解决分散的人们在没有一个中心化指挥时,如何达成共识的问题。
那中本聪如何成功解决拜占庭将军问题的呢?
POW工作量证明
中本聪提出用工作量证明的方法解决这个问题。
POW工作量证明通过增加信息发送的成本,降低节点发送信息的速率,保证在一个时间只有很少的节点进行信息的传递,并且信息的传递附上签名的办法很好的解决了拜占庭将军问题。
那工作量证明是什么呢?其实际就是一个散列函数,当你输入一个任意值X进入这个函数进行运算,会对应得到H(X)的结果,但当你稍微变动一下X,H(X)就会发生巨大的变化 , 也就是说理论上你无法在得知H(X)的情况下反推出X的结果,想要算出X唯一的办法就是穷举运算,也就是我们常说的一个一个带进去试 。 由于这个运算量很大,而运算的过程就是工作的过程。
哈希函数
前面说到的散列函数实际上就是哈希函数,只是翻译不同哈希是Hash的音译。
其实在比特币网络的整体架构中,哈希函数到处都有体现,整个网络的运行就是围绕中哈希函数展开的。
比特币在记账时,使用哈希函数对记录的数据进行哈希,数据哈希可以带来一下好处,首先信息变短并且原始信息被隐藏,其次有了标识和验证信息的办法。
下面用一个大概流程进行展示。
区块链在记账时先把正常的信息进行Hash,会得到一个Hash值。
1.Hash(序号0、记账时间、交易记录) = 123456ABC
账页的信息和Hash值组合就构成了一个完整的区块。
在记下一页账时,将上一个区块的Hash值和当前的账页信息一同Hash。
2.Hash(上一个Hash值、序号1、记账时间、交易记录) = 654321CBA
这样第二个区块不仅包含自己区块的信息还间接包含了前一个区块的信息。
矿工在挖矿时,实际上就是在计算Hash函数。之后会专门写一篇文章来讲解挖矿的过程。
在确定数字货币所有权方面,其实也是经过两次Hash从私钥得到了地址,这个地址平常我们打币使用的地址。谁拥有私钥谁就可以进行交易,私钥就是你唯一的资产凭证,所以一定要保管好自己的私钥。
为什么比特币可以被称为主流币呢?不是因为它涨幅有多么惊人,市值有多高,而是因为它的出现解决了许多问题,给人们提供了一种全新的点对点电子分布式网络架构。
F. 拜占庭容错和PBFT共识算法
实用的拜占庭容错算法
BFT 是区块链共识算法中,需要解决的一个核心问题。比特币的POW,eos的dpos,以及共识算法pos,这些公链算法,解决的是共识节点众多情况下的bft问题。
拜占庭将军问题。也称为拜占庭容错。
用来描述分布式系统一致性问题。
背景如下:
拜占庭帝国想要进攻一个强大的敌人,为此派出了10支军队去包围这个敌人。这个敌人虽不比拜占庭帝国,但也足以抵御5支常规拜占庭军队的同时袭击。这10支军队在分开的包围状态下同时攻击。他们任一支军队单独进攻都毫无胜算,除非有至少6支军队(一半以上)同时袭击才能攻下敌国。他们分散在敌国的四周,依靠通信兵骑马相互通信来协商进攻意向及进攻时间。困扰这些将军的问题是,他们不确定他们中是否有叛徒,叛徒可能擅自变更进攻意向或者进攻时间。在这种状态下,拜占庭将军们才能保证有多于6支军队在同一时间一起发起进攻,从而赢取战斗?
单从上面的说明可能无法理解这个问题的复杂性,我们来简单分析一下:
先看在没有叛徒情况下,假如一个将军A提一个进攻提议(如:明日下午1点进攻,你愿意加入吗?)由通信兵通信分别告诉其他的将军,如果幸运中的幸运,他收到了其他6位将军以上的同意,发起进攻。如果不幸,其他的将军也在此时发出不同的进攻提议(如:明日下午2点、3点进攻,你愿意加入吗?),由于时间上的差异,不同的将军收到(并认可)的进攻提议可能是不一样的,这是可能出现A提议有3个支持者,B提议有4个支持者,C提议有2个支持者等等。
再加一点复杂性,在有叛徒情况下,一个叛徒会向不同的将军发出不同的进攻提议(通知A明日下午1点进攻, 通知B明日下午2点进攻等等),一个叛徒也会可能同意多个进攻提议(即同意下午1点进攻又同意下午2点进攻)。
叛徒发送前后不一致的进攻提议,被称为“拜占庭错误”,而能够处理拜占庭错误的这种容错性称为「Byzantine fault tolerance」,简称为BFT。
使用密码学算法保证节点之间的消息传送是不可篡改的, 通过下面的算法我们可以保证A将军收到B将军发来的消息确实是B将军本人的真实请求 。
我们采用的是哈希函数(散列算法)SHA256 -- 从数据(byte)值中创建独一无二的hash值,并压缩成摘要,将数据格式固定下来。通过这个摘要与个人私钥生成Digital Signature 和个人公钥Public-key certificate,接收方验证签名和摘要,如果是通过验证,即证明摘要内容没有经过篡改。
pbft容忍无效或者恶意节点数量 e 。为了保证整个系统可以正常运作,需要有2f+1个正常节点,系统的总结点数为 :3f+1。即pbft算法容忍小于1/3的恶意或者无效节点。 原因见节点作恶的极端情况
pbft是一种状态机副本复制算法,所有副本在一个view轮换过程中操作,哪些是主节点(进攻的提议者的大将军们,轮流当)通过view中其他节点(其他将军)赋予的编号和节点数集合来确定,即:主节点p=v mod |R| 。 v:view编号,|R|节点个数,p:主节点编号。 关于状态机复制算法、view change的意义(主要是防止主节点作恶),主节点详见论文。
基于拜占庭将军问题,PBFT算法一致性的确保主要分为这三个阶段:预准备(pre-prepare)、准备(prepare)和确认(commit)。流程如下图所示:
[图片上传失败...(image-e3329d-1562488133052)]
首先解释一下上面各个符号表达的意思:
下面结合上图,详细说一下PBFT的步骤:
根据上述流程,在 N ≥ 3F + 1 的情况下一致性是可能解决, N为总计算机数,F为有问题的计算机总数 。
下面所有的校验流程略去对消息内容、签名和身份的验证,即已经保证了节点之间消息传播是不可篡改的
上述算法中,比较重要的一个点是view change,为了能恢复之前的请求,每一个副本节点收到消息之后或者发送消息的时候都会记录消息到本地的log记录中。当执行请求后,副本节点需要把之前该请求的记录消息清除掉。最简单的做法是在reply消息后,在执行一次当前状态的共识同步,但是为了节省资源,一般在多条请求K后执行一次状态同步。这个状态同步就是checkpoint消息。
为了节省内存,系统需要一种将日志中的 无异议消息记录 删除的机制。为了保证系统的安全性,副本节点在删除自己的消息日志前,需要确保至少 f+1 个正常副本节点执行了消息对应的请求,并且可以在视图变更时向其他副本节点证明。另外,如果一些副本节点错过部分消息,但是这些消息已经被所有正常副本节点删除了,这就需要通过 传输部分或者全部服务状态实现该副本节点的同步 。因此,副本节点同样需要证明状态的正确性。
在每一个操作执行后都生成这样的证明是非常消耗资源的。因此,证明过程只有在请求序号可以被某个常数(比如100)整除的时候才会周期性地进行。我们将这些请求执行后得到的状态称作 检查点(checkpoint) ,并且将具有证明的检查点称作 稳定检查点(stable checkpoint) 。
上述情况是理想情况,实际上当副本节点i向其他节点发出checkpoint消息之后,其他节点还没有完成K条请求的相互共识,所以不会立即对i的请求作出响应。其他节点会按照自己的处理步骤和顺序,向前行进和共识。但是此时i发出的checkpoint没有形成stable,为了防止i太快,超过自己太多,于是被便会设置一个高水位H=h+L,其中L就是我们指定允许的高度差,等于checkpoint周期处理数K的整数倍,可以设置为L=2K。当副本节点i处理请求超过高水位H时,副本节点即使接受到请求也会视为非法请求。等待stable checkpoint发生变化,再继续向前推进处理。
如果主节点作恶,它可能会给不同的请求编上相同的序号,或者不去分配序号,或者让相邻请求的序号不连续。备份节点(备份主节点)应当有职责来主动检查这些序号的合法性。如果主节点掉线或者作恶不广播客户端的请求,客户端设置超时机制,超时的话,向所有副本节点广播请求消息。副本节点检测出主节点或者下线,发起view change流程。
我们在上面讲到,当网络中有F台有问题的计算机时,至少需要3F+1台计算机才能保证一致性问题的解决,我们在这里讨论一下原因。
我们可以考虑:由于有F个节点为故障或被攻击的节点,故我们只能从N-F个节点中进行判断。但是由于异步传输,故当收到N-F个消息后,并不能确定后面是否有新的消息。(有可能是目前收到的N-F个节点的消息中存在被攻击的节点发来的消息,而好的节点的消息由于异步传输还没有被收到。)
我们考虑最坏的情况,即剩下F个都是好的节点,收到的中有F个被攻击的节点,故我们需要使得收到的中好节点的数量 (N-F)-F 大于被攻击节点的数量 F ,于是有 N-2F>F ,即 N>3F ,所以N的最小整数为 N=3F+1 。
pbft是需要参与认证的节点进行的。所以一个完整的共识算法包括DPOS+PBFT。其速度是可以达到1500tps左右的。
参考文献:
https://mathpretty.com/9602.html
https://blog.csdn.net/jfkidear/article/details/81275974
Practical Byzantine Fault Tolerance
Miguel Castro and Barbara Liskov Laboratory for Computer Science, Massachusetts Institute of Technology, 545 Technology Square, Cambridge, MA 02139 castro,liskov @lcs .mit.e
https://www.jianshu.com/p/fb5edf031afd 部分论文翻译
G. 拜占庭问题与共识算法
“拜占庭将军问题”(Byzantine Generals Problem)是一个经典难题,这个难题是这样描述的:拜占庭是东罗马帝国的首都,它的军队分成多个师,每个师都由一个将军统领。这些将军通过信使进行交流,来达成一个共同作战方案,有些将军可能是叛徒,想故意破坏这个过程,这会造成那些忠诚的将军也无法达成一个统一的作战计划。这个难题在于如何让那些忠诚的将军在这样的情况下达成统一作战方案,而避免那些叛徒对作战方案的误导。
在点对点、分布式的区块链中,常常用拜占庭问题来比喻节点如何达成共识的问题。将军即对应着一个个节点,达成统一作战方案即达成共识,正确的打包与验证区块数据,防止恶意节点(叛徒将军)破坏区块链的运行。
顾名思义,就是能够解决拜占庭问题,使各个节点达成共识,解决共识问题的各种机制也被称为共识算法。在各种各样的共识算法中,又一直存在一个「不可能三角」的难题,这三角是指“安全性”、“去中心化”和“速度”,也就是说难以同时保证速度、安全性和去中心化程度,三者之间往往会顾此失彼。
现在各种共识算法算起来有好几十种,计算机界也一直处于研究阶段,并没有说哪种算法已经完美。
下面盘点一下讲解pBET和POW两种算法,以及它们的“安全性”、“去中心化”和“速度”如何。
实用拜占庭容错是一种较早的共识算法。pBFT的一个原则,就是少数服从多数。节点通过在相互传递有关决策的消息,谁的决策赞同的人数多,就采用谁的。所以在这个系统中,安全性随着诚实节点的数量而增加。诚实节点同意正确的决策,拒绝恶意节点的错误决策,只要恶意节点的数量少于总数的1/3,就能保证达成共识。
达成共识可以简化为四步:
pBFT 使用投票机制以循环方式选举领导节点。
领导者发起决策并将其广播给辅助节点。
所有节点,包括领导节点和辅助节点,都发送响应。
当 ⅔ + 1 个节点发送相同的响应时,该响应被认为是有效的。
如果领导者有恶意行为,它可以被大多数节点删除。
按少数服从多数的原则。那按理来说,只要恶意节点的数量少于1/2就够了啊,那么为什么PBFT算法的容错数量要满足恶意节点的数量少于总数的1/3呢?
因为 PBFT 算法的除了需要支持容错故障节点之外,还需要支持容错作恶节点。假设集群节点数为 N,有问题的节点为 f。有问题的节点中,可以既是故障节点,也可以是作恶节点,或者只是故障节点或者只是作恶节点。那么会产生以下两种极端情况:
(1)这f 个有问题节点既是故障节点,又是作恶节点,那么根据少数服从多数的原则,集群里正常节点只需要比f个节点再多一个节点,即 f+1 个节点,正确节点的数量就会比故障节点数量多,那么集群就能达成共识,即总节点数为f+(f+1)=n,也就是说这种情况支持的最大容错节点数量是 (n-1)/2。
(2)故障节点和作恶节点都是不同的节点。那么就会有 f 个作恶节点和 f 个故障节点,当发现节点是作恶节点后,会被集群排除在外,剩下 f 个故障节点,那么根据少数服从多数的原则,集群里正常节点只需要比f个节点再多一个节点,即 f+1 个节点,确节点的数量就会比故障节点数量多,那么集群就能达成共识。所以,所有类型的节点数量加起来就是 f+1 个正常节点,f个故障节点和f个作恶节点,即 3f+1=n。
结合上述两种情况,因此PBFT算法支持的最大容错节点数量是(n-1)/3,即少于1/3。
pBFT的优缺点
pBFT 系统不需要高计算资源或大量能源来运行。pBFT 在节点少的时候可以快速达成共识,因为所有节点都在不断地相互通信。一旦节点就决策达成一致,交易就完成了。
然而,pBFT的缺点也很明显:频繁的通信使它只能在节点数量有限的网络中正常工作。随着每个新节点加入网络,通信开销呈指数增长,响应所需的时间也随之增加。
pBFT 网络也容易受到女巫(Sybil)攻击,女巫就是恶意黑客制造的不同节点,黑客可以控制多个节点,使其超过1/3,那系统将无法达成正确的共识。
从不可能三角的角度来看,由此可见pBFT在节点少的时候速度快,但安全性差,去中心化低;节点多了又会导致速度很慢。
中本聪设计了POW共识机制来解决上面pBFT这个经典共识的可扩展性问题。
上面说到,pBFT通过不断广播然后计算节点的消息数,时间花费过长。POW是怎么做的:我不要计算节点数是否超过2/3,我直接选一个节点,按它的决策,其他节点全部同步它的决策。这样就省去在全节点通信然后计算节点数的费时操作。
那么,对于哪个节点来打包区块,那就很重要,万一是恶意节点呢?必须对打包的节点进行要求,哪个节点有权力进行打包呢?那就是解决复杂的数学问题,俗称挖kuang。节点必须花费大量算力和电费来争取某次打包区块的权力。这样的成本就限制了黑客的女巫攻击。
如果打包区块的权力真的被黑客抢到了,那可能会有什么问题?
(1)窃取冰糖橙
黑客能够窃取属于另一个用户,不受她控制的地址里的冰糖橙吗?答案是否定的。即使这一轮是由黑客打包区块链上的下一个区块,她也不可能窃取别人的比特币。这么做的话,黑客需要发起一笔有效的交易来转移比特币到自己的地址。这就要求黑客伪造比特币拥有者的签名,然而如果数字签名机制是安全的,她是无法办到的。只要背后的密码学基础是牢靠的,她就无法轻易窃取比特币。
(2)拒绝服务攻击
让我们来考虑另一种攻击。假设黑客不喜欢叫鲍勃的某个用户,黑客可以决定她不把鲍勃发起的任何交易放进她所提议的区块里。换言之,她拒绝提供服务给鲍勃。尽管这是黑客可以开展的有效的攻击,但幸好这不过是个小问题。如果鲍勃的交易没有被放进黑客所打包的下一个区块,鲍勃只要等到下一个诚实节点发起区块的时候,他的交易记录就会被放进这个区块里。所以这其实也不算是一个有效的攻击。
也就是说,黑客花费重大成本取得的打包,但并不能起到有效的攻击。由于对恶意节点进行惩罚、对诚实节点进行奖励这样的机制下,共识就达成了。
尽管有所改进,POW也引入了其他问题。工作量证明需要所有节点解决复杂的数学问题,这会消耗大量的能源,就是大家所熟知的挖kuang耗费电力。并且解决复杂的数学问题的时间也要求不短,10分钟左右。
从不可能三角的角度来看,POW去中心化高,安全性高,但速度还是慢,但至少已经不会像pBFT那样由于节点多导致花费时间呈指数增长。
共识算法各式各样,冰糖橙的POW并不是真正去解决分布式共识问题,它不能完美的套用到其他场景。但它在货币系统的这个特定场景下解决了冰糖橙的共识问题。POW在冰糖橙里运行得非常好。
H. 比特币的价值到底在哪方面
还是稀缺性吧
I. 区块链技术的六大核心算法
区块链技术的六大核心算法
区块链核心算法一:拜占庭协定
拜占庭的故事大概是这么说的:拜占庭帝国拥有巨大的财富,周围10个邻邦垂诞已久,但拜占庭高墙耸立,固若金汤,没有一个单独的邻邦能够成功入侵。任何单个邻邦入侵的都会失败,同时也有可能自身被其他9个邻邦入侵。拜占庭帝国防御能力如此之强,至少要有十个邻邦中的一半以上同时进攻,才有可能攻破。然而,如果其中的一个或者几个邻邦本身答应好一起进攻,但实际过程出现背叛,那么入侵者可能都会被歼灭。于是每一方都小心行事,不敢轻易相信邻国。这就是拜占庭将军问题。
在这个分布式网络里:每个将军都有一份实时与其他将军同步的消息账本。账本里有每个将军的签名都是可以验证身份的。如果有哪些消息不一致,可以知道消息不一致的是哪些将军。尽管有消息不一致的,只要超过半数同意进攻,少数服从多数,共识达成。
由此,在一个分布式的系统中,尽管有坏人,坏人可以做任意事情(不受protocol限制),比如不响应、发送错误信息、对不同节点发送不同决定、不同错误节点联合起来干坏事等等。但是,只要大多数人是好人,就完全有可能去中心化地实现共识
区块链核心算法二:非对称加密技术
在上述拜占庭协定中,如果10个将军中的几个同时发起消息,势必会造成系统的混乱,造成各说各的攻击时间方案,行动难以一致。谁都可以发起进攻的信息,但由谁来发出呢?其实这只要加入一个成本就可以了,即:一段时间内只有一个节点可以传播信息。当某个节点发出统一进攻的消息后,各个节点收到发起者的消息必须签名盖章,确认各自的身份。
在如今看来,非对称加密技术完全可以解决这个签名问题。非对称加密算法的加密和解密使用不同的两个密钥.这两个密钥就是我们经常听到的”公钥”和”私钥”。公钥和私钥一般成对出现, 如果消息使用公钥加密,那么需要该公钥对应的私钥才能解密; 同样,如果消息使用私钥加密,那么需要该私钥对应的公钥才能解密。
区块链核心算法三:容错问题
我们假设在此网络中,消息可能会丢失、损坏、延迟、重复发送,并且接受的顺序与发送的顺序不一致。此外,节点的行为可以是任意的:可以随时加入、退出网络,可以丢弃消息、伪造消息、停止工作等,还可能发生各种人为或非人为的故障。我们的算法对由共识节点组成的共识系统,提供的容错能力,这种容错能力同时包含安全性和可用性,并适用于任何网络环境。
区块链核心算法四:Paxos 算法(一致性算法)
Paxos算法解决的问题是一个分布式系统如何就某个值(决议)达成一致。一个典型的场景是,在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点都执行相同的操作序列,那么他们最后能得到一个一致的状态。为保证每个节点执行相同的命令序列,需要在每一条指令上执行一个“一致性算法”以保证每个节点看到的指令一致。一个通用的一致性算法可以应用在许多场景中,是分布式计算中的重要问题。节点通信存在两种模型:共享内存和消息传递。Paxos算法就是一种基于消息传递模型的一致性算法。
区块链核心算法五:共识机制
区块链共识算法主要是工作量证明和权益证明。拿比特币来说,其实从技术角度来看可以把PoW看做重复使用的Hashcash,生成工作量证明在概率上来说是一个随机的过程。开采新的机密货币,生成区块时,必须得到所有参与者的同意,那矿工必须得到区块中所有数据的PoW工作证明。与此同时矿工还要时时观察调整这项工作的难度,因为对网络要求是平均每10分钟生成一个区块。
区块链核心算法六:分布式存储
分布式存储是一种数据存储技术,通过网络使用每台机器上的磁盘空间,并将这些分散的存储资源构成一个虚拟的存储设备,数据分散的存储在网络中的各个角落。所以,分布式存储技术并不是每台电脑都存放完整的数据,而是把数据切割后存放在不同的电脑里。就像存放100个鸡蛋,不是放在同一个篮子里,而是分开放在不同的地方,加起来的总和是100个。