比特币是世界上第一个通过密码学,而非中央银行发行的电子加密货币。而区块链是比特币使用的一种特殊的数据库,是比特币存在的基础。任何人都可以架设服务器,加入区块链网络,成为一个节点。本文主要作为一篇普及贴,简单的来探讨一下技术原理。
区块链大火,让我等吃瓜群众猝不及防。虽然网上文章铺天盖地,比如:“一图看懂”系列,但仍然鸡同鸭讲,莫衷一是,并不知其所以然,顶多知道是个同步账本。
作为一篇学习总结,我希(尽)望(力)本文能作为一篇普及贴,也能让其他人看懂。所以这里不会深入探讨技术原理,大佬们请绕过。
比特币是世界上第一个通过密码学,而非中央银行发行的电子加密货币。因为其发行总量固定,无中央银行干预,让许多”民主人士“认为这是极为先进的民主思想技术革命。
然而去中心化的系统带来了一些新问题:
没有政府背书和资产担保,货币信任、交易真实性成了问题。每个人都有权了解这个世界在发生什么,信息一旦变化,所有数据库需要同步更新,平等对称。没有集中决策,为了信息对称,如何达成共识,变成了难题。
三大问题“交易信任”、“数据对称”、“共识达成”。
解决办法“非对称加密”、“P2P网络”、“共识机制”。
中本聪用以上三种方法,构架出了区块链技术结构,让比特币的发行流通构想得以实现。
比特币总量为2100万枚;平均10分钟诞生一个区块;被写入区块的交易按照手续费高低排优先级;区块的大小只有 1MB,一笔交易大概是500字节左右,因此一个区块最多只能包含2000多笔交易;挖到新区块的矿工将获得奖励,一开始(2008年)是50个比特币,然后每4年减半,目前(2018年)是12.5个比特币;一笔交易确认需要等待6个区块。
比特币网络每10分钟,最多只能处理2000多笔交易,换算一下,就是处理速度为3~7笔/秒。
也就是说,比特币区块链每秒最多只能处理7笔交易,要是交易数据再大点,可能连7笔都达不到。而支付宝一秒处理12万笔交易,这本应在1秒处理的12万笔交易,比特币需要10小时。
每4年奖励减半,那么到了2140年,矿工将得不到任何奖励,比特币的数量也将停止增加。这时,矿工的收益就完全依靠交易手续费了。
这些数据是怎么确定的,众说纷纭。比如:一个区块链的大小是1MB,中本聪在设计之初也并未预料到会发展到今天的规模,其本身是一个构想的实验。很多数据并未验证,甚至可以说是拍脑袋定的。
1. 让交易被信任——非对称加密
比特币的基础是加密学,如果不知道一笔钱从哪来,是谁的,谁敢拿它当货币呢?非对称加密从技术上解决了可信性问题,这也是这一类数字凭证被称为”加密货币”的原因。
所谓非对称加密,其实很简单——加密和解密需要一把公钥和一把私钥。
交易的第一件事就是你必须拥有自己的公钥和私钥(任何交易所开户或钱包类网站都会给)。
验证一笔交易是否有效,需要两步:
(1)FROM(谁发送的,包括两部分):
Previous tx:这笔钱的来源账单的id, 验证资金来源;scriptSig:这笔交易的签名,就是把交易用私钥做hash。
(2)TO(谁接受,包括两部分):
Value:要发多少;scriptPubKey:支付方的公钥,也就是比特币地址。
对于比特币,钱不是支付给个人的,而是支付给某一个地址,没有人知道,那些私钥和地址背后的主人是谁——匿名性。
区块链(blockchain)是比特币使用的一种特殊的数据库,是比特币存在的基础。任何人都可以架设服务器,加入区块链网络,成为一个节点。
区块链由一个个区块(block)组成,区块很像数据库的记录,每次写入数据,就是创建一个区块。每个区块包含两个部分:区块头和区块体。
区块头(Head):记录当前区块的元信息
生成时间;上一个区块的 Hash;区块体的Hash。
区块体(Body):实际交易数据
其中比较重要的概念是“Hash”,所谓 Hash 是对任意内容,计算出一个长度相同的特征值。而且保证,只要原始内容不同,对应的 Hash 一定是不同的,比特币区块用的SHA256加密算法。
每个区块的 Hash 都是不一样的,通过 Hash 标识区块。如果区块的内容变了,它的 Hash 一定会改变。
1. 如何把交易写入区块链——“挖矿”?
“挖矿”指的是:把网络上待确认的交易写入新区块,并获得比特币奖励的过程。
“矿工”是用GPU等硬件设备进行数据计算的一群人,正是这群人,把交易者的数据一笔一笔记入帐中。“挖矿”的机器叫“矿机”;成规模“挖矿”的场地叫“矿厂”。
“挖矿”道理其实很简单,想要挖到新区块必算出符合要求的哈希值。你可能会有一个疑问,计算一个哈希值为什么这么难?
原来正确的哈希值是有一定要求的:
图:515798号区块信息
区块头包含一个难度系数(difficulty),这个值决定了计算 Hash 的难度。举例来说:第515798个区块的难度系数是 1.56,而第100000个区块链难度可只有。
区块链协议规定,使用一个常量除以难度系数,可以得到目标值(target)。
显然,难度系数越大,目标值就越小。
Hash 的有效性跟目标值密切相关,只有小于目标值的Hash 才是有效的,这就是采矿如此之慢的根本原因。
区块头里面还有一个 Nonce 值,记录了 Hash 重算的次数。
第 515798 个区块的 Nonce 值是,即计算了 2.1 亿次,才得到了一个有效的 Hash,该区块才能加入区块链。
(5)难度系数的动态调节
实际上,新的区块有时候几分钟就可能被算出来,有的可能需要几小时。为了保证新区块在10分钟左右的时间内产生,并且考虑到硬件设备的升级,中本聪将Difficulty每2016个区块调整一次以保证新区块平均产生时间在10分钟。
在挖矿的过程中,如果同时生成了两个新区快,链接着同一个上级区块,便形成了分叉。
如果发生这种状况:认定率先达到6个新区块的一条链为有效链(比特币交易的六次确认),即需要1小时左右。
一个很直观的例子可以说明为何这种经济博弈模式:
超市付款需要排成一队,可能有人不守规矩要插队。超市管理员会检查队伍,认为最长的一条队伍是合法的,并让不合法的分叉队伍重新排队。只要大部分人不傻,就会自觉在最长的队伍上排队。
P2P网络保证每个人的信息同步,任何人都可以成为一个节点。每个节点都包含了整个区块链(目前100G),并且节点之间时刻不停的同步信息。
当你发生了一笔交易,你所在的节点就会把这笔交易告诉另一个节点,直到传遍整个网络。“矿工”搜集各种新发生的交易,将他们写入区块链。一旦写入成功,此“矿工”所在节点的区块链就成了最新版本,其他节点会来复制新增的区块,保证全网同步。
图:P2P节点分布全球,每个节点信息一致
4. 关于挖矿方法争论——共识机制
“挖矿”这种行为的本质是寻求达到某一共识,再把信息写入区块的劳动。这种共识决策其实不只比特币所使用的一种方法。
目前主流共识机制目前有:
一句话介绍:干的快,收的越多。
工作量证明协议。比特币所用共识机制。它要求发起者进行一定量的运算,也就意味着需要消耗计算机一定的时间。
算法简单,容易实现;节点间无需交换额外的信息即可达成共识;破坏系统需要投入极大的成本。
浪费能源;区块的确认时间难以缩短;新的区块链必须找到一种不同的散列算法,否则就会面临比特币的算力攻击;容易产生分叉,需要等待多个确认;永远没有最终性,需要检查点机制来弥补最终性。
一句话介绍:持有越多,获得越多。
权益证明:最早在 Peercoin 系统中被实现,类似现实生活中的股东机制,拥有股份越多的人越容易获取记账权。在POW中,如果用户花费2000美元购买硬件设备,当然会获得两倍算力来挖矿;同样,在POS机制中投入两倍的代币作为押金,就有两倍大的机会获得产生新区块的权利。
在一定程度上缩短了共识达成的时间;不再需要大量消耗能源挖矿。
还是需要挖矿,本质上没有解决商业应用的痛点。
一句话介绍: 选出代表,高效运算。
Dan Larimer发明的这种新共识算法,被称为股份授权证明机制(DPoS),应用于比特股和Steemit社区。
每个股东按其持股比例选定代表,每个股东将选票授予一名代表。获票数最多的前100位代表加1位随机代表,按既定时间表轮流产生区块,每名代表分配到一个时间段来生产区块,所有的代表将收到等同于一个平均水平的区块所含交易费的10%作为报酬。
该模式可以每30秒产生一个新区块,每次单人有序生产区块在正常的网络条件下区块链分叉的可能性极其小,即使发生也可以在几分钟内得到解决。
缺点:整个共识机制还是依赖于代币,很多商业应用是不需要代币存在的。
它的创始人Vitalik Buterin在《以太坊白皮书》前言部分挑明:因为比特币没有账户状态的概念,而且POW机制效能低,浪费大量时间和资源。而以太坊作为区块链平台,将区块链技术的发展带入到 2.0 时代。
以太坊要实现的是——一个内置了编程语言(Solidity)的区块链协议。那么理论上任何区块链应用都可以用这门语言进行定义,运行于以太坊的区块链协议之上(该协议的意义与互联网时代的 TCP/IP 协议相似)。这使得区块链应用开发者们高效快速地开发顶层应用,变为可能。
以太坊涉及的问题非常多,很难一言蔽之。这里只对其地位和意义做简要了解。如果感兴趣可以登陆其官网:https://www.ethereum.org/
ICO和其他电子加密货币
图:火币pro上市币种
目前交易所上市的电子加密货币已经不下1000种,那他们是什么?从哪来?什么是山寨币,分叉币,ICO?
是我们最初指除比特币以外的加密货币。
是由主链分叉出来的新币,比如:比特币BTC分叉的比特现金BCH。
所有成功的数字货币以及区块链项目无一不是社区项目。常见的ICO里,数字货币和区块链项目向早期爱好者出售项目代币,项目团队通过ICO获取技术开发和市场拓展资金,而项目爱好者通过ICO支持项目,同时也可在对应代币进入交易市场后选择交易退出。
可查的首个ICO来自于Mastercoin项目(现已更名为Omni),其在13年7月时在Bitcointalk(最大的比特币和数字货币社区论坛)上宣布通过比特币进行ICO众筹,并生成对应的Mastercoin代币并分发给到众筹参与者。
本质上来说这次ICO是一种以物换物的行为,即参与者用比特币换得Mastercoin项目里的代币。一开始ICO只是数字货币爱好者的一种社区行为,随着数字货币以及区块链的不断发展,开始被越来越多人接受并参与,绝大部分ICO都是通过比特币或其他数字货币进行的。
几个著名的ICO案例:
2013年7月,Mastercoin(现更名为Omni):可查的最早ICO项目,通过meta-protocol拓展比特币功能,募集5000 BTC。2013年12月,NXT(未来币):首个完整的PoS区块链,曾经神秘的开发者,持续发展的强大社区。ICO神话:募集21 BTC(是的你没看错,21BTC,约等于当时6000美元),市值峰值曾到达过1亿美元。2013年-2014年,Bitshares(比特股):曾经的“数字资产二代币三剑客”之一(另外两个为NXT和CounterParty),国内数字货币界口水之源,毁誉参半,其社区培养了国内大量早期ICO以及数字资产爱好者。2014年7月,Ethereum(以太坊):ICO时募集3万余个比特币曾创下纪录。将智能合约理念推进到极致的区块链项目,让全世界重新认识区块链公有链的项目。近两年最成功的ICO,也是至今为止除比特币以外市值最高的数字货币/区块链项目,近期由于TheDAO事件影响晴雨不定。2015年3月,Factom(公正通):双代币设计,首提存在性证明的区块链商业化以及由此导出的基金会与公司双机构设置。2016年3月,Lisk:以太坊挑战者,利用侧链的Dapp解决方案。2016年5月,TheDAO:等值1.5亿美元破世界纪录的ICO众筹,非典型ICO(其本身不是区块链)。向世界大声宣告智能合约时代到来后一个月即被黑客攻克,在历史上刻下了深深的双重惊叹号 (该项目目前已经失败)。2017年6月, EOS (Enterprise Operation System) :为商用分布式应用设计的一款区块链操作系统。 创始人是比特股创始人、DPOS发明者Dan Larimer,已经创造了一个新的ICO记录——5天内筹集了1.85亿美元,它是以以太坊为募集基础的代币。
细心的观众可能已经发现,这套民主思想的技术,似乎并没有那么公平。如果你有足够资本建立矿场,将会持有大量的比特币(尤其前期难度不高)。
资本逐渐慢慢聚拢到算力集中的少数矿场的手里,形成马太效应,去中心化效应减弱。比如:现在的比特大陆(一度接近51%的算力),郭宏才也是这样挖矿起家,现在挖矿已经不是小散户玩的起的游戏了。
比特币的区块大小为1M,如果比特币交易越来越多,很多交易就不会在发生后的第一个区块被打包和确认,可能要等好几个区块,甚至更久。比特币交易的拥堵导致了转账速度变慢,手续费也越来越高。
中本聪曾提出了在比特币容量不够用的时候应该怎样进行扩容。白皮书发布之后,他自己在社区留言的第一个问题,就指出了比特币未来的扩容隐患。
区块链技术性强,技术分支也越来越多,这里也只聊了九牛一毛。
从业务上看,应用却已经很多:网易星球、阿里的麻吉宝。然而目前给人的感觉都还是为了做区块链而区块链,需求的还没有真正出现。
目前德国、英国、日本等政府认可比特币的价值,和此前加密猫的诞生,推着币价一度走高。不过,区块链和比特币到底是钻石还是郁金香,等待验证还有很多。
作者:owenii ,公众号 Hao设计(ID:HaoDesign_)欢迎添加微信:owenii 一起探讨交流,「一个设计师的胡思乱想」。
本文由 @owenii 原创发布。未经许可,禁止转载
比特币社区求修改共识机制 吴忌寒 祝你好运。比特币用户和开发人员建议改变比特币共识机制。微农链的共识机制是什么。来自比特币的祝福 爱。比特币的原理及运作机制究竟是什么。加拿大央行报告 PoW 一种优于其它共识机制的。比特币挖矿有自毁机制 新鲜玩法该出现了。比特币又坐过山车 引入熔断机制或可消除 来自。区块链入门基础知识21 比特币交易和找零机制。比特币中级装B指南 聊聊共识机制
|
哪怕是协商共识问题,人们也愿意花费巨大的成本来解决。银行大概是最容易被提到的例子了。
公司将工资打入中国银行卡,而我的支付宝绑定的是工行卡,因此每隔一段时间我都要把钱转入到工行卡里。试想如果是直接转账,通常的做法是怎样的: 每个银行都有自己的账本,并且在银行间实现发送以及接收的接口。听起来很熟悉,没什么大不了的。但如果是很多家银行呢? 这些银行两两之间都要做接口。而且各账本独立维护,发生数据不一致怎么办? 每隔一段时间要互相对账,这样一来每个银行都要投入巨大的成本,整天忙着对账了。
现实中清算中心应运而生
在VISA和万事达等这样的信用卡组织出现之前,跨行结算复杂度高,成本高,速度极慢。信用卡组织出现后,形成中心清算的模式,所有银行和该中心建立清算接口,所有跨行之间的交易都汇总到该清算中心。清算组织的出现提升了跨行清算的速度,并降低了清算的成本
目前,国际上三大信用卡上市公司VISA、万事达、美国运通2015年营业收入合计达到543亿美元。区块链技术实现分布式记账的结算之后,能为整个银行业节省一大笔费用。
———摘自《区块链,从数字货币到信用社会》
实际上除了数字货币,银行大概是对区块链技术最热心,并首先尝试区块链应用的了。
如果是人们的意见有分歧,那么人们可能会尝试投入包括生命在内更加巨大的成本来达成共识,哪怕有一方是被迫的。这么严肃的问题就不在这里讨论了,而且有点偏题。
开胃菜结束,下来讲讲比特币中如何达成共识
拜占庭将军问题是比两军问题更加一般化的问题。相关资料百度百科就有,这里只简述一下:拜占庭有10个将军要攻击一个繁华强大的城邦,由于某种原因他们要分开行军和驻扎。这个城邦虽然没有拜占庭强大,但也足以打败少于半数的拜占庭联军。拜占庭的将军们必须有超过半数一起攻打,不然就会失败,因此他们需要商定是否在约定时间攻击。他们需要面临的问题是,信使可能没有到达,也可能某几个将军是叛徒,会发不同的决定给不同的将军,误导他们使得最终无法统一行动。
这其实是个分布式系统部分节点下线或发生错误的问题,涉及分布式算法,也是区块链共识机制可能依赖到的底层技术,感兴趣的童鞋请自行踩坑。这里我们只讲比特币是如何解决拜占庭问题的
谈起比特币的共识机制,工作量证明POW(proof of work)非常有名,但是我觉得解释比特币如何达到共识绕不开区块链,这解释了POW为何有效。
把比特币比作账本,区块链就是账本的组成方式。比特币由挖矿产生(稍后解释挖矿),比特币在一定时间段的交易信息被打包,形成一个数据块,这些数据块每个都和相邻的前后数据块绑定,就是区块链,好像被铁链串成一条的很多积木块。而区块链之间的绑定是依赖于数学的,每个区块都包含上个区块的哈希(单向散列函数值),因此要改变区块链中的任意一个块意味着要重新生成这个块的所有后续块,不然依次重新校验哈希立刻就发现篡改。因此区块链是对修改有防御性的数据结构,加上比特币账本是所有节点都持有的,这样每个节点都不用担心篡改伪造历史记录,或某恶意节点提供了一个篡改后的版本。
POW中的工作量就是指挖矿了,挖矿就是把网络上传来的交易信息组织起来,随机添加一些无意义的数据生成哈希值,生产的哈希值的前n个字节必须为零也就是哈希值要小于某个阀值才算合法。因为无法预测和控制生成哈希值,平均需要进行几十亿次哈希运算才能获得被所有节点承认的哈希,比特币整个网络的运算能力大概平均每10分钟算出一个,也就是产出一个块。而每个节点验证哈希合法却是轻而易举。计算哈希的工作被类比为挖贵金属矿,做计算的节点叫矿工,生成合法哈希然后产生新的区块将被奖励比特币。这种生成非常困难但是验证轻而易举的非对称运算协议就是所谓的POX了,除了POW,还有POS,DPOS,POA等等其它协议。
比特币节点只会承认包含了满足阀值的哈希值的新区块,这就是所谓工作量证明。虽然产生新区块相对困难,但还是有可能有两个矿工在网络延时内产生了两个新块,在新块基础上还有可能各自追加新块,造成分叉,比特币遵循取最长链原则。如果在当前块的基础上又生成一个新块叫一个确认,比特币上的交易要6个确认后才被承认。由于每个确认也就是产生块的时间是遵循泊松分布的概率数字,同时出现两条6个确认持续竞争的的分支链几乎为零,因为那意味着两个分支每次确认的时间都几乎一致。
历史上曾出现过5个确认的分支,是由于包括大矿池的部分节点未及时升级软件造成的。从出块速度来看,有过20分钟出60个块,连续两次15秒就出块且块中未包含交易,也有很长时间未能出块的,这些都是小概率事件。比特币的共识机制也正是依赖于这种不确定性。
比特币每个节点都包含完整的账本,即所有的交易记录,且用区块链存储,单个节点想要伪造记录并追上当前交易进度意味着这个节点的算力是整个比特币网络的好几倍,因此篡改和伪造历史记录几乎不可能。而每个节点都拥有完整的数据,也就可以随时对账本进行对账清算。交易发生后被节点广播到网络上,矿工们不停地对交易信息进行哈希计算,直到产生合法哈希,然后将生成的新块广播到网络上。各节点只接收包含合法哈希的新块,并立即验证交易数据,对账和清算是即时完成的。如果出现了竞争分支,长链胜出,6个确认后交易才被承认。
从每个比特币节点,以及矿工节点(也就是活跃节点)的角度来看,需要的运算和信息传递规则都很清晰简单,且最终达到了所有节点共识
能够破坏比特币的就是全网承认新块的时候,由于校验简单,而产生新块依赖于运算力,这样有力量进行攻击的节点还不如选择维护比特币系统,挖矿获得收益。恶意节点只能同网络中的矿工的集体竞争算力,博弈结果是维护比特币系统才是最佳选择。
读到这里你心中一定疑惑,6个确认才承认意味着平均要等1小时,要是买瓶水也等1小时就恕不奉陪了。即时性是比特币的缺陷之一,不适合买个棒冰这种交易,或者要借助于bitpay这类服务。
比特币的区块大小是有限制的,加上出块速度有限制,每秒支持的交易量有严重限制。
比特币挖矿耗能太过严重,统计总耗能已经超过了一个大都市的总和。由于算力这种资源可由现实中资源兑换(专门做哈希运算的矿机),逐渐出现了专职矿工,后来运营十几台几十台机器的矿工也不能保证收益,又出现了矿工联合的矿池。据说现在大部分算力都在中国了。这很讽刺,一个去中心的系统,却在系统外的现实中因资源集中形成了中心,一旦有了中心,政府影响和控制就是分分钟的事情了。从小就听两个大胡子讲那个很糟的故事,有生之年还想共产主义能实现吗?
另外由于比特币所有节点都持有完整账本,运行到现在已经几个G了。空间浪费,验证成本升高也是个问题。
客户端升级也面临很多新问题
回到开头的清算中心场景,在区块链的世界里,各银行都有总账,且新交易被加入到总账时立刻被对账,极大地降低了银行的清算成本。对于清算中心来说,科技进步导致失业啊。
比特币所校验的账本信息包括所有比特币都是系统产生的,而系统外进入的信息如何保证有效呢?不然就陷入 garbage in, garbage out 的陷阱了。
供应链系统并不要求匿名,该选择什么样的共识机制(协议)呢?
各节点都有总账,如何保护各节点隐私呢?
如果要开发区块链系统,该如何开始,有哪些前置条件和风险,成本有多高呢?
没有多米诺骨牌,只有一个坡接着一个坡,走在正确的方向已是万幸了。