first commit

This commit is contained in:
张乾
2024-10-16 09:22:22 +08:00
parent 206fad82a2
commit bf199f7d5e
538 changed files with 97223 additions and 2 deletions

View File

@ -0,0 +1,61 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
00 开篇词 帮你从0到1深入学习区块链技术
你好,我是陈浩,目前是区块链初创公司维优( ViewFin )的 CTO。
我是一名程序员,也喜欢编写程序。在做区块链之前,我曾有多年的支付和结算系统的开发经验,那会儿我的工作重点是传统网络服务行业的高并发架构,而现在则是专注于公有区块链架构方向的研究。
区块链大概算是我的主场自从进入到这个圈子我主持研发了中国的公有链——Metaverse(元界),也主导实现过自己的数字资产交易所。
在我最早接触区块链的年代,那时侯呢,中文资料还非常稀少,所以研究起来特别地费时费力。
但是,在如今的区块链大火的背景下,相关的中文资料丰富了很多,所以你如果在网络上搜寻阅读区块链的入门资料,也能看个八九不离十。那为什么还要有今天的这篇文章,我又为什么会想写作这个专栏呢?
我的考虑点主要有以下几个。
区块链的网络资料虽然丰富,但同时也意味着繁杂错乱,内容不够系统。
多数资料可能已经过时。目前币圈链圈经常自我调侃“圈内一天,人间一年”,可见这个行业变化之快。
区块链行业急速发展,经常会出现观点相互冲突,结论莫衷一是。初学者在入门学习已是一头雾水的情况下,更是苦恼不堪。
区块链在技术上的复杂性没有人工智能高,却与其他学科有极大的交叉,容易带来跨学科理解上的误区,读者经常容易管中窥豹。
因此,作为圈子里的人,我想借极客时间这个平台,提供一个可以让更多人系统性了解和学习区块链知识的专栏。
一方面,我希望国内的技术中坚力量能够通过这个专栏了解区块链,并学为己用,在各自的领域内大显身手;另一方面,我也希望你在学习区块链时能有个好的开始,少走弯路。
说说专栏吧,我的专栏将立足于区块链技术,但并不局限于某个特定的领域,而是延深到区块链的各个方面,让你形成一个比较完整的区块链知识体系。
希望可以为你从零开始,构建起一个比较完整的区块链知识体系。除了基础部分,我还会深入讲解目前区块链的一些核心技术,以及数字货币交易所的原理。另外,我也会谈一谈区块链在当下互联网中的实践与应用。最后,我还会手把手地带你构建出自己的迷你区块链。
本专栏共五部分。
1. 浅说区块链基础。作为专栏的第一篇专题为你准备基础的知识作为铺垫帮助你从0开始搭建区块链基础为后续技术知识的摄入做好铺垫。
2. 深入区块链技术。作为上一个专题的技术延伸重点介绍技术层面的区块链涵盖了P2P网络、共识算法与分布式一致性算法、加密与UTXO、智能合约以及一些区块链项目详解。
3. 数字货币与数字资产专题。本专栏作为区块链金融的延伸重点介绍了区块链第一大应用——数字货币、第二大应用——ICO并且介绍了数字货币交易所。
4. 区块链与当下互联网。这部分内容会深入一些,结合我自己的思考,会谈到区块链与云计算,数字货币钱包服务,以及区块链技术的未来发展趋势。
5. 如何从业区块链。这部分内容会从从业者的角度,结合我自己的思考,谈谈区块链创业,聊聊区块链从业者的一些经验,并手把手教你构建出自己的迷你区块链。
对于技术学习者,专栏会先适度讲解基本原理,争取略过某一章节也不影响后续内容。
但是从技术学习上来看单靠专栏讲解是不够的。所以我也特别推荐读者进行源码实践目前比特币已有C++等各主流语言的实现版本,你可以首先跑一个钱包直观感受一下,创建一个账户尝试发送交易,再来读我的文章,一定会理解地更为深入。
区块链技术入门后,你通常会遇到一个比较陡峭的学习曲线,这并不是技术深度造成的,而是区块链代币掺杂到技术中造成的,所以,我建议你配合阅读白皮书、开发者文档,并在这个过程中自己实践,三者并行地进行学习。
区块链的发展日新月异,而且受时间和个人水平所限,分享知识难免有所纰漏,但我会把我理解和分析的过程都呈现给你,相信你可以根据我的内容进行延伸研究。
最后,希望我能帮你系统和体系理解区块链。同时,也希望在这个大家对区块链技术的认知没有达成共识的“乱世”里,你能具备独立思考区块链的能力,并运用到自己的业务、场景里,甚至借此找到属于自己区块链机遇。

View File

@ -0,0 +1,53 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
尾声篇 授人以鱼,不如授人以渔
“深入浅出区块链”这个专栏是在我的从业经验和个人思考的基础上形成的。
在我开始从业区块链的时候,当时比特币的价格还在三四千人民币左右。区块链也还是小众的技术,相关的中文资料并不多。
我只能去硬啃英文资料,并去尝试编译以及调试比特币的代码,才逐渐掌握了一些区块链的技术概念。
当时,很多区块链的概念还停留在比特币上,虽然比特币所采用的技术都是现成的,但是它的代币设计思路却是以前没有的。
对我来说,这种设计不仅仅是编程技术的吸引,它由于交叉了分布式系统和经济学的知识而格外具有魅力。
我对区块链的兴趣从此一发不可收拾我决定离职加入区块链创业公司也就是现在的维优元界2016年下半年我开始开发一个属于自己的公有区块链项目。
这期间除了深入研究了区块链的基础技术我还学习和研究了数字货币、区块链的Token设计当然了顺便也了解到了一些炒币的知识。
2017年的深圳在架构师峰会上我第一次向国内技术圈子介绍公链以及数字资产的概念引起了一些人的的兴趣。当时正值圈内ICO火爆“造富效应”还不为大众所熟知。
等到9月份时七部委的ICO禁令反倒让比特币和区块链进入了公众的视野。虽然政策上遇冷但是区块链也开始集聚一些人气领域内几乎成为了“百家讲坛”。
那时,虽然关于区块链的中文资料开始多了起来,但是大多还是停留在概念阶段,诸如区块链的应用场景、区块链的宏伟蓝图等等。
于是,只要懂比特币和区块链的人都成了香饽饽,各种区块链概念和名词满天飞,我也收到了不少演讲和培训邀请,奈何时间和精力有限,大多数都被我婉拒了。
这是好事也是坏事,好事是“百家争鸣”极大地推动了区块链的理论创新,坏事是各种观点也给入门学习者带来了困惑,各种言论相互矛盾的都有,四处分散的中文资料无法让入门者获取已经成为定论的基础知识。
与极客时间的合作也是一种缘分2018年初极客时间团队邀请我专门来写一个区块链的专栏这是我第一次写长期专栏。
一开始我以为要写深度内容,等几篇写完后,编辑看完稿件,说我的内容起点太高,普通读者根本没法入门,就这样反反复复修改了许多次之后,我开始找到了感觉。
写作一个专栏就好比交作业一样,让我感觉回到了学生时代。每周定期三篇作业,对于我一个拖延症患者来说,简直是噩梦。
不过好在是与大家一起介绍和分享区块链知识,写作的东西都是我喜欢和感兴趣的,这样两厢抵消下也可以接受。
最困难的其实是如何安排撰写专栏内容的时间,因为平时也有任务在身,中间还常常需要出差,我犹记得,数字身份那一篇文稿是我从纽约到东京的飞机上完成的,还有几篇的部分内容都是在飞机上写作的。
就这样,我投入了几乎全部的业余时间进行专栏的写作。经常八九点下班回来,还要继续码字到凌晨一两点。
最后的两篇,我更是费了更多精力,因为要快速搭建一个迷你区块链的话,我需要先构思好框架再验证设计,然后去进行代码实践。短期的工作量暴增,仅最后的一篇我就花费了整个周末的时间才完成。
写作区块链的文章并不是一件简单的事情,我需要先进行分析、验证,再总结归纳,中间常常要停下来查阅不少参考资料,来进行充分地论证,这些都很费时间。不过,这些对我而言也是十分有益的一件事,这其实也是对自身知识的一个整体梳理的过程。
俗话说,“授人以鱼,不如授人以渔”,你可以从专栏文章按图索骥,自己挖掘出更深度的区块链内容,这就是我的初衷。
最后,感谢编辑辛苦审稿校对,感谢极客时间,感谢所有为这个专栏提供过技术支持的同事与同仁们。同时,我也要感谢一直以来收听并支持专栏的你,感谢一路的相伴与成长。

View File

@ -0,0 +1,27 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
新书首发《区块链第一课:深入浅出技术与应用》
你好,我是陈浩。我的书《区块链第一课:深入浅出技术与应用》正式出版了。
最近我在“极客时间”一周年的留言里看到有一些读者说看完专栏的2/3后就顺利进入了区块链行业还有读者提到这个专栏让他对区块链的认知更近了一步深入了解了区块链的原理并弥补了之前一个人摸索的不足。在感谢大家的认可的同时也更坚定了我对出书的信心。
这本书是我们专栏《深入浅出区块链》纸质的加强版,它在结构上继续沿用专栏“基础—— 进阶—— 专题—— 当下—— 从业”的逻辑顺序。我们把精力更多地用在了内容的精校方面,力求为大家提供纯正的区块链技术。
《区块链第一课》的成书是目前极客时间出品的图书里耗时最长的,我们在三审三校的基础上又增加了两次深度修订,争取让读者在拿到这本书的时候能够看得懂,学得明白,用得着。
大家都知道,今年区块链经历了从全面爆发到快速遇冷的阶段,这筛去了很多急功近利的情绪,经历大浪淘沙之后的区块链,会在未来金融、商业和安全领域继续应用,并会被更多的技术人看到。
现在《区块链第一课》已经在极客商城提前开售作为已经订阅专栏的老朋友除了首发优惠之外我还给你申请了优惠码。在极客商城待付款订单中点击“使用优惠”输入优惠码“qukuailian”结算时可再减5元。
感谢你的支持,我们继续一路同行。

View File

@ -0,0 +1,101 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第01讲 到底什么才是区块链?
很高兴在我的区块链专栏里和你相识,作为专栏的第一篇文章,我先来和你聊聊“区块链是什么”,以及它的发展过程。
自中本聪第一次发布了比特币至今已经有9个年头了那么算起来区块链也应该有9年的历史了吧其实不是“区块链”这个概念恰恰是这些年才有的如果非要追溯可能在2014年左右才真正有了“区块链”的概念。
区块链和区块链行业
我早期写文章喜欢给区块链下定义,但是读者反响并不如意,所以今天我想“反其道而行之”,先讲一个笼统模糊的对象,再像一层层剥洋葱一样,慢慢地给你讲解区块链的来龙去脉。
首先,什么是区块链行业呢?区块链是一个崭新的行业,与社交、电影、游戏一样,具有自己独特的内涵和发展过程。
这个行业是通过比特币形成的。我们可以把比特币比作一棵树,这棵树在生长过程中不可避免地会开枝散叶,慢慢长大,而这个生长过程其实就是代码 Fork进行再修改发布运行的过程。
比特币之后有了莱特币,莱特币之后又有了点点币,点点币之后又有了上百种币,后来的这些币仅仅在原有的比特币核心代码上做了技术上或非技术上的修改,从而形成了独有的币种。所以我们在早些时候,也将比特币之外的所有币种统称为“山寨币”。
当然如果只有一棵树也就不会称作一个“行业”了。一些大神比如以太坊的创始人V神Vitalik再比如比特股、Steem和EOS的创始人丹 Dan )等觉得比特币这棵树不够自己发挥的,于是在继承了比特币的“火之意志”之后,相继在比特币旁栽下了属于自己的“树”。
渐渐地,树变树林,几乎是以指数级增长的过程,树林又变成了森林,错综复杂,最终形成了一个崭新的行业,这个行业我们称作“区块链行业”。
我在一开始说区块链具有自己的独特内涵,那么到底是什么内涵让这么多人“趋之若鹜”呢?
第一个是具有理想主义情怀的极客所提出的“去中心化”;
第二个是以赚钱为主要目标的投资者和生意人。
前者为后者提供了极佳的赚钱土壤,后者为前者注入了赖以生存的资金。听起来好像“沆瀣一气”,其实并没有,这也是区块链行业通常所说的链圈和币圈。
前者组成了“链圈”,后者组成了“币圈”,以前这两个圈子“井水不犯河水”,现在却有融合的趋势,为什么?
首先是行业的需要,实在是太火热了没空吵;
其次是,说到底区块链的第一大应用还是数字货币,本身就无法分割。
那么,“链圈”加“币圈”也可以是我们所说的区块链行业。
我再深入介绍一点,刚刚提到了“去中心化”,它更像是表达极客信仰的一面“旗帜”,我个人更喜欢称之为“导火索”。
它把金融领域聪明的投资者与厉害的技术人才拧在一起,点燃了无数起“回归互联网平等、自由、开放”的大讨论,任何人都可以从中构思挖掘自己熟悉领域的“区块链应用”,整个过程在技术上看就是上文提到的“开枝散叶”,这个过程你也可以看成是区块链的发展过程。
至此,你可能已经对区块链行业有了一个模糊的认知。那么,到底什么是区块链呢?
区块链究竟是什么
简单来说,区块链首先是一个分布式网络。如果你不懂“分布式”也没关系。
我举个例子,假设你和朋友异地开黑打《王者荣耀》,这时候“异地开黑”就可以看成是一个小型的分布式网络。
朋友语音喊你开团战上高地,那么其实这就是达成一次共识的过程,你参与了团战,就是你同意共识的过程。
区块链也是一样,它并没有超出我们的认知框架。让所有的独立节点想要达成共识去做同一件事情,是区块链在技术上首先要解决的问题,这就是我们常说的共识过程,也是“去中心化”这个概念的直接来源。
那么假如有了这样一个分布式网络,我们可以选择不同领域做产品,就像传统技术上有了迅雷、电驴等等产品一样。
区块链与之最大的不同是整个系统本身具有自己的Token。Token在国内有的翻译成“通证”有的翻译成“代币”其实最简单的理解就是“虚拟资产凭证”它可以是我们的股权也可以是票据也可以是游戏积分凡是需要资产记账的地方都可以用Token来做。
还是回头看上面那个例子。如果你参与了团战你的朋友就要支付你1元请问这个系统怎么做注意我这里说的不是银行卡转账我就是指在游戏里面你所在的这个分布式网络中在你参加团战之后对方通过这个分布式网络直接支付1元给你。
很多人就会说:“直接做到 App 里面呗”可是你要知道我并没有说支付“1元人民币”啊也有可能是1游戏积分这个游戏积分未必是王者荣耀发行的你有没有想过这个积分是你的朋友发行的
你肯定会说,那我要这个积分有什么用呢?好,假设你的朋友是个超级富豪,他说你陪我玩游戏,但我不想支付你法币,我用我自己发的游戏积分给你,你看我老爸在国外开游戏积分交易所的,我的游戏积分在上面交易,你每次帮我开团,我就给你积分,你拿去自己交易换成其他资产,美元啊什么都可以。
想象一下你的土豪朋友每次语音说“谢谢你帮我开团成功”你就拿到1游戏积分而这1游戏积分和腾讯没半毛钱关系却又让这个语音与这1游戏积分同步生效区块链其实就是在解决类似的事情。这里的积分可以理解为具有流动性的虚拟资产但流动性又没有虚拟货币好它不属于虚拟货币。
说了这么多,现在总结一下区块链是什么:
区块链是一个分布式网络;
区块链可以帮助多个节点达成共识去记录和Token相关的事情
区块链可以帮助所有人无门槛地构建属于自己的小经济系统。
至于再深入的区块链内容,后续文章听我慢慢道来。
总结
今天我和你聊了下区块链及其行业的发展过程,形象化地描述了区块链是什么。
相信你对区块链行业已经有了一个基本的了解但文章篇幅有限希望你能够进一步发掘区块链相关的历史甚至有趣的故事比如说1万比特币购买披萨事件、真假中本聪事件、以太坊The DAO事件分别对应到区块链哪些发展阶段呢 感谢你的收听,我们下期再见。
-
推荐阅读材料:
基础知识《精通比特币》
行业知识《区块链:从数字货币到信用社会》
技术进阶《区块链原理设计与应用》
除了《精通比特币》可以从网络获得其他都是实体书籍。除此之外GitHub本身就是一个丰富的资料库比特币和以太坊的开发者文档也可以作为技术进阶。

View File

@ -0,0 +1,143 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第02讲 区块链到底是怎么运行的?
上一次,我们聊到了区块链的概念及整个行业的发展过程,今天我想稍微深入一下,尽可能通俗地介绍一下:区块链到底是如何运行的?
这一篇文章我将以比特币区块链为例来进行讲解,理由有两个:
由于区块链发展到目前阶段,各个技术方向都有长足的发展,那么为了方便你理解,我在这里介绍最简单、最容易理解的比特币区块链;
由于大部分区块链都是以比特币区块链为基础进行扩充的,所以首先了解比特币区块链有助于其他项目区块链的后续学习。
中心化记账的问题
首先,我们借鉴了一个区块链描述中的经典情景来模拟中心化记账。
假设有一个有百户居民的村子其中有一位德高望重的村长村长有一个儿子。村民们都把钱存到村长家村长负责记账。比如张三用1000买了李四家的牛村长就把张三名下的存款减去1000李四家加上1000。听起来是不是很像银行的操作
对,我们就是先从中心化的银行记账开始聊起。村民都相信村长,才愿意把钱存到村长家,他们相信村长不会作恶。
可惜好景不长,老村长由于操劳过度,驾鹤西去了。新上任的村长儿子铁蛋很是聪明,但也有个毛病,就是粗心大意。他不但经常算错账,一次还被人偷改了账单。
不过,幸好村民自己都有记账,但是由于铁蛋每次错账后都要和别人核对半天,导致村民对新村长的记账能力十分不满。
时间就这么过着,然而最可怕的事情还是发生了,铁蛋的老婆竟然私下篡改账本,给铁蛋七大姑八大姨的余额全部偷偷加了好多,终于有一天事情暴露,村民们气冲冲地跑到铁蛋家里讨说法,于是一片混乱。
这时候有个叫中本聪的人站了出来,他说他设计了一套系统,可以不依赖任何人记账,于是,众人开始将目光集中到他的身上。
1. 公开记账
中本聪说他的系统稍微麻烦一点,需要干三件事儿。
每家每户都派发一只信鸽。这就是 P2P网络是一个点对点的分布式网络如果不好理解你先不用理会我会在后面讲到。
每家每户都发一个特殊的印章和一个扫描器。这个扫描器有两个功效,一是识别他人的交易是否真实有效,二是识别这个交易是不是自己账号的,同时识别并解锁未花费的余额。这就是非对称加密。
每家每户可以参与记账不过不再记余额而是记交易本身的内容。这就是区块链中的交易这个“交易”对应的英文单词是“Transaction”这是个专有名词专指一笔账不同于金融交易的Trade。
这三条总体来说其实是干一件事情,就是:
每家每户都记账账簿上不再记载每户村民的余额而只记载每一笔Transaction即记载每一笔交易的付款人、收款人和付款金额。
那么问题就来了:如果每户都记账,肯定每户的账都不统一啊,你记你的,我记我的,最后不全乱了么?
这个时候需要大家统一账本,保证大家的账本都是一致的。因为记录的交易是全村所有人有序产生的,所以这就需要有一个广播机制。这个广播机制,我先卖个关子,后面再讲。
中本聪说其实很简单我们现在先把全村所有人的资产都加起来。还真巧了刚好100万。
中本聪接着说:“只要账簿的初始状态确定,并且每一笔交易可靠并按照物理时间自然记录,并且只加不改不删,这样,当前每户持有多少资产是可以推算出来的。”
中本聪说我现在把我的印章给你们看这个印章很特殊盖的章有两块标记第一块是一个可以识别的标记比如我往纸上一敲可识别的标记是1MsTg2。
这就是你们的代号,由于我们账本是公开的,使用真实姓名会很危险,所以你们记账的交易单上收款人、付款人都填这个码,不用写姓名。你的扫描器和你的印章生成的代号是关联的,有且仅有持有对应扫描器的人才能花费金额,这一步即为“解开交易”。
刚刚说印章有两块,这第二块内容配合这个扫描器才能看,肉眼看则都是乱码,扫描器一扫就知道第二块内容是否有效,这一步也就是“交易验证”。
并且所有交易大家都能接收,都能看到,但却解不开印章乱码部分的内容,仅仅收款方才能解开,因为你的扫描器和你印章生成的代号是关联的,有且仅有持有对应扫描器的人才能解开交易。
以上就是区块链中“公开记账”的过程。“公开记账”就是全网所有人都可以随时查看一套账本,然后按照规则透明公开地进行记账。
2. 创建创世区块
创世区块是我们生成全村公开账本的第一笔交易的第一个信封,好比一篇文章总得有个开头一样。
于是乎中本聪说我先生成第一个Transaction这个交易单的付款人为空收款人是村长付款金额是100万因为是创世区块产出多少个是可以随意规定的由于我们上面统计了全村的账目情况所以我就写了100万待会儿付款给村长以后我们可以按照原来的账本给大家发送对应的金额过去。
好了我们有了第一笔交易第一个信封也已经做好了。现在让村长把信封传给张三张三复印一份然后传给李四李四继续传下去一传十十传百直到传给全村人这个步骤也就是“同步区块”也就是全网都拿到这个信封以及信封里面的Transaction。
3. 交易
由于上一节我们的创世区块把100万交给了村长那么我们假设张三在村长那里的存款余额是10万这时候村长要根据原来的旧账本把这10万发送给张三然后把旧账本上的账划掉。下面我们讨论一下如何构造这笔交易。
中本聪开始教村长写交易单把100万分成两部分第一部分10万收款人是张三第二部分是90万收款人是自己这样一个Transaction就做成啦。
前面我们说了,不能直接写名字,要写代号,这个代号也就是你的钱包地址,我们需要把收款人写名字的地方,让收款人拿出自己印章,把代号读出来,然后告诉村长即可。
100万  10万张三-
     90万自己
村长写好 Transaction 以后还需要拿出自己的印章在Transaction上盖章这个盖章的过程也就相当于区块链中的签名。这个章全村人都可以拿扫描器扫一下验证是否有效即验证付款人的章是否有效。
100万  10万张三的印章1s25vR-
     90万村长的印章13gYip
就这样村长一共写了10份Transaction分别代表了发送给不同人的交易张三一笔10万李四一笔1万等等。
4. 打包 Transaction (挖矿)
现在我们有了Transaction但是还需要东西把Transaction装起来我们用一个特殊的信封把Transaction装起来这个信封就是区块链中的“区块”这个封装过程就是“打包交易”。
为什么要封装起来呢?是为了让打包交易的人能够在信封上署名,表示这次打包是由某某某打包的,其次全村的交易可能非常多,需要装配标号,方便大家查询。
我们看到上述的Transaction虽然已经生成但是有个问题就是没有规定谁有权利把Transaction封装到信封里。
我们在开篇的故事中看到了中心化操作肯定是不行的,假设在全村人中,这时候如何筛选出这些打包的人呢?
中本聪这时候说了由于我们村的人口增长100万未来可能不够我们暂定150万那多余的50万我们就当奖励给这些装信封的人了当然不能一次性给谁装一次信封就领3个币。
这时候大家伙儿来劲了呀,只要装信封就能够领钱了,我们在这里把符合条件的人称作“矿工”。
但是中本聪又说了要获得这个装信封的权利是有条件的。我给大家出一个难题谁先解出这个难题的答案谁就有权利把Transaction装到一个信封中并且要在此信封上盖上自己的章。
这个难题是这样的,它有两大特性,第一是容易验证,第二是计算过程非常复杂。
例如有种棋牌类游戏叫作“24点”玩法就是给出任意4个整数通过整数运算得到24比如现在给出2、9、1、5四个数答案是5-2*9-1= 24。当然本处仅是举例“24点”游戏的答案空间非常小是远远不够生成信封的。
答案非常好验证,但是计算过程是一个尝试的过程,需要耗费大量的精力。而在真实的比特币中,采用的是寻找符合条件的目标哈希,这也就是比特币矿工所做的事情。
好了这时候大家开始计算给出的难题刚好李四第一个计算出来那么这次装信封的操作就由李四完成李四把10份Transaction装到信封中也就是打包Transaction并且要在信封背面写上一个信封的摘要信息。
比如上一个信封中的第一个交易是什么、信封封面长什么样,最后要在信封上盖上章,也就是“签名”,矿工签名的目的是为了领币,也就是 Coinbase 交易。
以上过程在区块链领域称作“打包 Transaction”也就是大名鼎鼎的“挖矿”。
5. 广播交易
来说说上文提到的广播交易广播是为了让全村人知道当前时刻你产生了一笔Transaction或者是你装好了一个信封。
广播的内容分两种一种是广播Transaction一种是广播信封。第一种广播是意味着还有未被打包的Transaction而第二种广播信封则意味着这个Transaction已经被某个矿工确认。
收到了广播的通知后,大家先验证信封上难题的答案是否正确,这样便可以验证出信封是否被伪造,接着验里面的每笔交易,最后还要验证信封背面的内容,即上一个信封的摘要是否正确。因为上一个信封大家都已经确认,所以这样可以极大地规避作弊的可能。如果觉得没问题,就可以存入本地数据库中了。
至此,全村人的记账问题就差不多解决啦。
总结
今天我用非常浅显的例子与你聊了比特币区块链其中包括区块链中公开记账、创建创世区块、交易、打包Transaction、广播交易的几个步骤。
因为篇幅所限,在表述上可能会有不精确的部分,但是大体意思是相通的,相信读完文本,你已经对区块链的原理有了一个大致的了解。
你也可以针对每个模块进行扩展比方更换矿工的计算方法可以推导出PoS共识机制不知道你还能想到哪些扩展呢欢迎留言探讨。
感谢你的收听,我们下次再见。
本文叙述模式参考链接:-
http://www.8btc.com/bitcoin-story?_t=1520884553

View File

@ -0,0 +1,121 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第03讲 浅说区块链共识机制
我在第2讲“区块链到底是怎么运行的”一文中提到了“打包Transaction”和“广播交易”这两个概念因为概述的原因当时只带着你走了一遍过程。其实以上谈到的两个内容正是区块链最核心的技术内容之一共识机制。
区块链发展至今,已经形成了各种不同类型的共识机制,在今天的文章中,我们就展开聊一聊区块链共识机制到底是什么,以及区块链的共识过程到底是怎样的。
分布式系统的经典问题: 拜占庭将军问题
拜占庭将军问题其实是虚构出来的一个故事,是为了方便通俗地介绍分布式系统所面临的难题。这里我仅作一个简短的说明,你可以在中文社区找到更丰富的通俗解释材料。
为了避免重复,我们换一种表述形式,还是以上一次的村子为例,假设随着村子和人口的发展,大村子演变成了十一个小村子并分散在各地,各地的通信只能靠信鸽进行。
大家约定了每年都会举办一个相亲大会至于谁能举办每年轮流从两个备选村子A村和B村中选择一个然后大家投票票数多者可以赢得举办权。
由于地图很大,任何一个村子的投票都无法靠一只信鸽传输到每个村子,必须靠一个中继村子代为传输,这也就意味着有中继村子可以读到其他村子的投票信息。
那么,如何防止下面两个问题的出现呢?
投票者的“精分”这里所谓的“精分”是指某个村子的投票行为不一致发送给第一个村子的投票消息为“投票给A”而发送给第二个村子的投票消息却为“投票给B”。
中继村子作弊,即篡改上一村的投票消息。
上面讨论的问题我们可以认为是简化的 “拜占庭将军问题”(完整的拜占庭将军问题还有将军-副官模型,如果感兴趣的话,你可以自行阅读)。
我们回头再看区块链。区块链本质上也是分布式系统的一种,其共识机制也是为了上述问题而提出的解决方案。
什么是区块链共识机制?
共识机制是区块链是核心的组成要素之一,它决定了区块链的业务吞吐量、交易速度、不可篡改性、准入门槛等等,是最为关键的技术要素之一。
要理解区块链共识机制,首先就需要理解区块链共识机制到底解决了什么问题。
共识机制主要解决了两个问题:
谁有权利;
作弊问题。
上一次我们构造了一个中心化记账的场景,在这个场景下,记账问题其实可以简化为大家信任中心记账者即可。
然而在分布式记账的场景下,问题更为复杂。首先,大家面临的最大问题是谁有权利记账,其次是如何避免记账者作弊。毕竟,谁都有权利记账,也就意味着谁都有可能作弊。
以上两部分共同构成了区块链共识机制。
另外补充一点在比特币社区“共识”consensus这个词已经跳出了技术的范畴。通常人们在表述一个比特币上的问题时共识的内涵还包括比特币的使用者、开发者、矿工来达成社区共识的部分所以“共识”这个词在区块链领域还有些“民主”的味道不单单是技术领域的“共识”。
最经典的入门型共识机制PoW工作量证明
PoW Proof of Work工作量证明可以解决上述的两个问题
在上一篇文章中其实我们已经悄悄讲解了一点PoW共识机制你还记得上文提到的“24点”那个游戏吗“24点”其实是尽可能随机地选取系统中任意的节点来规避作弊者这个方案的实践其实就是PoW共识机制。
产生记账者的随机性其实来自于谁最先计算出24点的答案这个问题可以简化成谁拥有的计算资源更多谁就拥有整个系统的最大概率的记账权。一旦这个概率超过一半以上那么这个系统就有一定的中心化风险。
如何理解上面一段话呢?
举个例子李四家发明了一种算盘可以快速计算24点答案比起其他人掰手指头李四家总是有很大的概率拿下记账权换句话说也就是李四和全村其他所有人竞争相当于算盘对全村其他人手指头的竞争。
如果算盘足够强大,就能有一半的概率获得记账权,那么李四个人的诚实性,就成为了系统的唯一破绽。
比如李四在第一次记账时篡改部分交易,第二次还是他记账,还继续篡改交易,那么两次修改如果自洽的话,是可以形成假账的,这就是所谓的中心化风险。
所以在PoW这种机制中计算资源又称算力是决定记账权的唯一因素。与之对应的便是计算难度。
计算难度又称作挖矿难度计算难度是区块链为了控制产生答案的速度比如平均10分钟就有一个答案产生平均2分钟一个答案产生。
在上述场景中,因为李四有了算盘,强大的计算资源突然加入以后,肯定会让整个系统的产生答案的速度变快很多,作为系统本身会自适应,将难度提升,降低答案产生的速度。
上面介绍了这么多其实是想引出另外一个问题PoW到底是如何避免作弊者的呢答案就是计算资源算力
设想,如果一个作弊者想篡改信封里面的交易,首先得获得记账权,也就是装信封的权利。
而影响记账权的唯一因素只有计算资源(算力)的大小,如果想篡改交易,只能投入大量的计算资源与整个系统中其他所有人进行对抗,这是十分困难的,尤其在整个系统有一定基础计算资源(算力)的情况下。
PoW中一个有趣的设计是激励机制在PoW共识机制下我们假设所有参与者都是理性的理性的意思就是单纯逐利不考虑家庭、爱好等其他因素。有了理性的前提PoW共识机制会给每个诚实的记账者予以奖励这个设计可以抗击作弊收益的问题。
怎么进行抗击的呢?整个过程是这样的,理性的人如果作弊、篡改账本肯定需要投入成本,也就是计算资源,收益是篡改账本获得的收益减去投入成本,这个收益往往小于诚实计算所获得的收益。所以,作弊者在作弊过程中投入的计算资源过大,反而得不偿失。
PoW工作量证明的补充解决双花攻击
上面给出了一个结论我们说作弊的收益往往小于诚实计算的收益。这一点其实对应到区块链领域有个著名的问题双花攻击double-spending
双花攻击是指一个代币被花费了两次,这在任意的区块链系统中是不被允许的。如果避免了双花问题,基本就能避免上述作弊中收益过大的问题,因为攻击者首先要窃取到你的私钥,同时又能控制了你的计算资源(算力)。
为了方便分析我们回到上一篇中广播交易的那一节。那一节中我介绍了广播的内容分为两种第一种是Transaction第二种是区块也就是信封。
第一种又被称为未确认的Transaction第二种信封中所有的交易被称作已确认的Transaction。
所有记账节点都会遵循以下两条规则:
规则一:一个代币如果已经被花费,那么会被标记成已花费,如果再次接收到这个代币被花费的请求,那么记账节点会拒绝打包这笔交易;
规则二如果同时接收到两个信封这两个信封中装的两笔交易出现了一个代币被花费了两次的情况这种情况也就是我们所说的分叉Fork那么选择挖矿难度比较大的那个信封。
规则一避免了未确认的交易出现双花,规则二基本避免已经确认的交易中(信封中)的双花问题。
假设作弊者的计算资源算力占整个系统的30%那么连续两次获得记账权的概率是9%看起来作弊的可能性还是挺高的如果是连续6次获得记账权呢概率直降到万分之七。
在比特币中这个6也就是6次确认表示连续6个块过去了如果我的交易没有被双花的话那么它被篡改的可能性将越来越小最后变得几乎不可能被篡改。这也是区块链不可被篡改说法的由来。
试想如果任何作弊者花了大量的成本获取了系统30%的计算资源(算力),最后只有万分之七的概率获得篡改的可能性,比起作弊,还不如诚实记账的收益高。
总结
好了今天带你了解了区块链的共识机制也顺便浅谈了拜占庭将军问题介绍了区块链的入门共识机制PoW它其实也是目前区块链领域使用最广泛应用最成熟的共识机制。
最后还涉及了一部分PoW工作量证明的补充解决双花攻击。由于篇幅所限我们将在技术篇详细讲解PoW、PoS、DPoS等共识机制。
那么亲爱的读者你觉得PoW共识机制和其他分布式一致性算法有什么不同吗欢迎给我留言一起讨论。
感谢你的收听,我们下期再见。

View File

@ -0,0 +1,99 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第04讲 区块链的应用类型
我在前面的三篇文章中分别介绍了区块链是什么、区块链的运行原理、并且简述了区块链的共识机制,在这一篇文章中,我将为你讲解一下区块链的应用价值。
由于区块链本身发展处于早期阶段,成熟的应用并不是很多,我的主要目的是拓宽你的思路,抛砖引玉,希望你能够从中获得应用灵感,为区块链挖掘出更多有市场的应用,但需要提醒你的是,本文提到的内容不构成任何投资建议。
数字货币应用方向
数字货币是区块链的第一大应用类型市场上目前可统计的数字货币币种有1500种以上2017年其迅速增长的市值让人措手不及。
那么说,到底如何理解数字货币这个概念呢?其实你可以简单理解为一种无主权、社区自治的货币形式,关于这部分的详细介绍我们留到下一篇。
在“区块链到底是怎么运行的”一文中,我们构建了一个中心化记账的模型,这个模型可以对应到如今央行-商业银行的模式上;而数字货币的运行则通常是靠社区自治的,所谓社区自治,是指用户、维护者、开发者三种角色共同决定数字货币的发展,也就对应了上一篇文章中,我们所讲到的“共识”。
我们先来看看数字货币,通常具有下面几个特点。
总量透明公开。数字货币的发行是在项目创建之初,是白皮书事先就规定好了的,白皮书通常是一个区块链项目公开发布的一种阐述性文档,其中简述了项目的宗旨和愿景以及设计蓝图。在白皮书中,这个项目总共发行多少数字货币,投资者、用户、矿工能够获得多少也都是事先分配好的。数字货币的总量也分为两种,一种是总量设上限的,另外一种是不设上限的。
数字货币缓慢释放。数字货币在分配好不同角色的额度之后,往往不是一下子就能发行完毕的,通常在矿工的那部分是需要靠“挖”才能出来的,这也就是前面我们所说的挖矿,挖矿为数字货币的缓慢释放提供了一种方法。
代码执行规则。由于我们在白皮书中规定好了总量和数字货币释放的机制,白皮书的内容会成为整个社区的基础共识,所以在项目的主网上线之后,数字货币的释放不再是人为控制,而是在代码层面体现,代码将负责控制数字货币的释放,这里去除了人为操作的因素。
基本上,所有公有区块链项目都会具备以上特性,可见数字货币和区块链的关系十分紧密。另外,在区块链领域,一个项目的开始运营,就伴随着一个新的数字货币的产生,这个数字货币会成为这个项目的基础代币,也有可能会派生出其他货币。
与区块链的其他应用类型不同的是,数字货币这种资产天然具有较好的流动性,所以在所有权上更为敏感。
比方说,如果“你的信用卡被盗了”和“你的微博账号被盗了”,正常人都会紧张第一种情况。所以说,区块链在数字货币上的应用,其“去中心化”“不可篡改”的特性相较于其他,就显得更具有划时代的意义。
数字资产方向
我们在上一节聊了数字货币,这其实可以推而广之对应到数字资产。
怎么理解呢?如果区块链可以做数字货币,那么同理,它也可以应用到其他任何资产,尤其是虚拟资产。
虚拟资产一般包括有金融资产、游戏代币、数字版权、域名、用户流量等。由于虚拟资产不需要与实体资产进行挂钩,所以在对应到区块链上更为方便。它具体的应用形式在供应链金融、票据市场都有所体现。
我们还是继续举例子。区块链圈子内有个非常有名的加拿大白胡子大叔,他基本上是逢会必现。
他要做的应用简而言之叫做“良心区块链”,不是指区块链项目的良心,是指他希望用区块链技术让所有人可以进行自我管理,自我管理的方式是对“良心”进行评价和奖励。人的良心都可以区块链化,还有什么不能尝试呢?
他的项目是这样的比如今天我给自己设定了一个跑10公里的目标如果我完成了那么我会在系统上获得代币如果没有完成则有相应的惩罚机制。大叔的项目还与联合国17条可持续发展目标进行了关联他的目的也很单纯就是希望通过自己的行为让世界更好一点。
你看,在区块链上,连“良心”都可以数字化,还有什么不能数字化呢?
我们再举个例子。前些年比较火热的一个少年团体叫TF-Boys里面有三位成员很多粉丝其实是与偶像割裂的并没有一种模式叫做让粉丝与偶像共同增值。
比如我们可以让TF-Boys每位成员都可以发行属于自己的区块链积分并与粉丝一起共同持有。在未来根据偶像成长和走红的程度偶像可以与粉丝一起分享收益。
所以说除了数字货币数字资产也是区块链的一个应用方向。数字资产的应用形式与资产证券化ABS十分类似感兴趣的读者可以自行研究一番。
比较成熟的应用类型
那么区块链目前有哪些比较成熟的应用呢?其实我们有时候想得太远了,反而忽略了脚下。首先来说,任何的区块链创始项目如果要活下去,就要先解决钱的问题,也就是融资问题。
我们在前面说到,任何的区块链项目基本都会产生一个基础代币,那么什么样的融资模式能让投资者和项目方都满意呢?
其实这个融资模式本身就是一个很成熟的应用。——答案是去年被七部委明令禁止的ICO(Initial Coin Offering)。
我们在这里简单从技术的角度介绍一下ICOICO的中文名是首次代币发行又称为区块链众筹这是一种新型的融资模式投资者可以用手中的比特币或其他代币投到一些区块链创始项目。
一个区块链项目发起之后如果选择发起ICO相比传统融资渠道项目方会在很短的时间内融到资且白皮书中规定好的代币将一次性地投放到投资者手里并在短时间内上线数字资产交易平台。
数字资产交易平台也具有高流动性,这种高流动性为早期投资者提供了退出条件,这样投资者的投资周期大大缩短,并且可以快速抽身。
例如马先生持有1个比特币现在参加了某名为ABC的区块链项目ICOICO兑换比例是110000也就是说马先生投资1个比特币给项目方将会拿到1万个ABC代币。
如果ABC代币会在一个月内上线交易平台假设ABC的价格波动超过50%那么马先生的1万的ABC代币可以交易成1.5个比特币马先生纯赚0.5个比特币并且他可以抽身这个项目再次参加新一轮的ICO。
ICO技术虽然为所有区块链项目提供了周期短、效率高的融资模式但在同时ICO也成了传销和内幕交易的重灾区。
以上举例说明了区块链在虚拟资产下的应用模式,而另外一个高产虚拟资产的领域——游戏领域,也是区块链同化的对象。
不过目前还没有特别成熟的案例比较有名的是2017年走红的以太坊“养猫”游戏但我并不认为这意味着区块链真正踏入了游戏圈这仅仅只是它的小试牛刀。
试想,你在游戏里的道具,如果可以在其他任何游戏进行使用,感觉是不是很棒。虽然目前还没有现象级的游戏被区块链同化的例子,不过你也可以发散思维,构想一些新的区块链游戏模式。
当然除了虚拟资产,实体资产也可以用区块链进行应用,但是目前遇到的难题基本都是实体资产如何与链上区块链的数据进行一一映射。
这涉及了数据公证等等环节,实施起来比中心化应用困难很多,比较典型的例子是区块链与供应链结合,解决信息流、资金流、物流,“三流”合一的问题。
除了实体资产和虚拟资产,区块链最简单直接的应用还有公证公示领域,不过这里仅仅用到了区块链“不可篡改”的特性。
总结
通过本篇文章,我向你介绍了区块链的一些应用方向。包括了区块链在数字货币以及数字资产上的运用。
在这篇文章中,我并没有大夸特夸区块链,相反,我认为区块链的应用范围目前多被局限在金融领域。所以,我想告诉亲爱的你,理性看待区块链的应用可以让我们更好地去应用区块链。那么还有哪些行业,可以使用区块链进行数字化呢?
感谢你的收听,我们下次再见。

View File

@ -0,0 +1,125 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第05讲 如何理解数字货币?它与区块链又是什么样的关系?
从历史进程来看,货币的形态主要经历了几次变化。从早期社会如兽皮、牲畜、陶器的物物交换,到各种贝壳类的货币,再到后面的铜币,乃至后来人们选择了黄金和白银作为流通货币。
随着消费需求不断增加,人们发现可以通过发行纸币来替代贵金属,于是,我们就一起进入了信用货币的阶段。后来,技术的发展促进了电子货币的产生。现如今区块链技术的大热,它的第一个应用就是数字货币。
数字货币的概念
数字货币通常是国内的叫法,在国外,它一般称作“加密货币”。数字货币听起来比加密货币更抽象一点,“数字”旨在表现它不同于传统货币的行为,即它可以通过“数字”表现更多自定义的行为。
那么,如何用一句话来解释什么是“数字货币”(加密货币)呢?我们可以这样形容:数字货币通常是基于区块链技术、在全球范围内公开发行的、并且没有任何国家政府背书的虚拟货币,这种虚拟货币具有“去信任”、“点对点”、“公开记账”、“不可篡改”等特征。
既然聊到了虚拟货币,我们正好可以把电子货币、虚拟货币、数字货币(加密货币)的概念捋一捋。
1.电子货币
近年来,现金使用的频度降低,很多人首选使用电子支付。电子货币和数字货币一样都是无形的,但是电子货币其实就是将法币电子化,例如第三方支付平台,银行卡电子现金,银行大小额支付系统等等。它只是以电子的方式记录了原来法币的账目,从本质上来说,它们仍然需要在多个中心化系统中进行稽核、对账,“电子”本身并没有成为金融的一部分。
2.虚拟货币
在2017年区块链投机狂热的时候“虚拟货币”这个词基本是用来指区块链项目的基础代币这样的叫法大多源自于圈外投机者。其实不然虚拟货币所指代的概念远比电子货币以及数字货币都要更加广泛。
虚拟货币通常是由非金融机构发行的非实体货币,大致分为三类。
第一类比如游戏代币,通常不与实体经济发生联系。例如在《王者荣耀》这款游戏中,如果你想要得到新的道具,就必须有足够的游戏代币(钻石和点券),这种虚拟货币还有个特征就是封闭性,即只能在这款游戏中使用。
第二类是积分类,它可以与实体经济发生联系,比如常旅客积分,超市礼品卡,这种虚拟货币也有个特征叫做单向性,即只能流入,而不能流出。
第三类自然就是我们主要讲的数字货币(加密货币)了,比特币便是其中典型。
综合来看,与法币的“有形”对应,虚拟货币更多地体现在它的“虚拟无形”上,随着互联网的发展,虚拟货币本身也在逐渐发展,从而诞生了更多新的模式与机遇。
3.数字货币
数字货币一般是指公有区块链平台底下的基础代币,该代币被记录在由密码学保证的一套公开账本上,与传统货币不同的是,由于去中心化以及可编程等特性,此种货币具有可自定义行为的属性。
在比特币中,我们可以定义多重签名交易来实现真正意义上的“由多人共同掌管的机构型账户”。
比如,在元界上,用户可以自定义交易的行为,例如在转账时可以指定代币的一个锁定期,并且指定解锁条件;而在比特股中,这种行为更被强化为具有衍生品特性的货币,这在传统货币领域是不可想象的。
与数字货币对应的,还有数字资产这个概念,不过这是另外一个话题了,后续我会有详细的讲解。
传统货币与数字货币
正因为数字货币的诸多新特性,所以金融机构和互联网公司纷纷加入研究行列,越来越多的人想要研究数字货币,这里,我想带你对比数字货币和传统货币的不同特性,以便你可以更直观地了解数字货币和传统货币的不同。
匿名性vs实名制
传统货币在支付过程中,除了现金,其他任何方式基本都或多或少地保留了交易者的信息,无论你是个人还是机构,运营商都可以使用这些交易数据来跟踪你的活动。
而在数字货币领域,这件事就无足轻重了,目前大部分数字货币具有假匿名性,即化名性,所以并不会被查到你自己的私人资料。
同时由于区块链上未提供KYCKnow Your Customer功能也就是充分了解你的客户对账户持有人的强化审查所以让监管者很难追踪到交易者的信息也让数字货币成为了黑市交易的温床。
这样的缺点主要是因为不少公链代币设计中没有加入身份的概念,不过这在我这样的技术人的角度来看,只是算是一个需求,而不是数字货币本身存在的缺陷。
点对点vs中心化
数字货币的发行主体通常是项目发起方,并且会在白皮书中定义好数字货币的发行过程;在主网上线以后,所有的代币会根据一开始设计好的发行过程缓慢释放到市场,这个过程其实就是大家喜闻乐见的“挖矿”过程。
所以在主网上线以后,即使作为项目发起方,也几乎很难有权利再次修改发行机制,所有人只能以提案的形式递交到社区进行讨论,讨论的最终结果决定了能否被再次修改。
这个过程其实与民主选举的过程很相似,而在信用货币领域,发行主体通常是央行,央行可以通过货币的政策进行宏观调控,从某种意义上来说,央行模式是中心化的极致体现,而数字货币则属于点对点机制的体现。
自理型安全性 vs 托管型安全性
由于数字货币的交易过程需要网络中每个节点的认可,且每一笔交易都被记录在区块链上,所以历史交易记录永远不用担心丢失或者被篡改。
只要数字货币基础的加密算法不被攻破,并且保护好私钥,你的资产便是真正意义上、只属于你自己的资产。
传统货币的交易过程最终是落到银行的,所以银行系统的安全性决定了传统货币在使用过程中的安全阈值,这也表示你的资产是托管在银行的。
广区域流通vs国家内部流通
传统货币是有主权的,通常只在主权国家范围内流通;数字货币目前却没有这样的限制,只要你能连上互联网,你就可以随时随地发送交易到任意地域。
总结来看,数字货币目前也有很大风险,如今还没有比较完整规范的法律法规来约束数字货币的使用者,所以使用数字货币会有较高的法律与投资的风险。
而且普通人已经接受了信用货币这种设定,目前对数字货币的接受度在各国并不一样,例如在中国大陆接受度低,在日本接受度高。
数字货币的发行过程
数字货币在2016年开始加速2017年借助ICO呈井喷式发展数字货币市场形成了一个大泡沫这与2000年初的互联网泡沫十分相似但是泡沫并不可怕它只是一个热门新生事物的必然过程。
我们需要在这个泡沫中找到规律,那么首先就要了解数字货币的发行过程。我们可以以比特币为例子来聊聊它的发行过程。
比特币的发行过程是通过挖矿维持的,是依靠矿工挖矿产生比特币。相当于矿工自己就是一个小型的印钞机。
矿工每挖出一个区块也就是在第二篇文章中提到的“打包一个信封”会产生一个Coinbase交易这个Coinbase交易相当于凭空产生了币矿工可以从Coinbase获得比特币作为维护系统的奖励。
Coinbase的产出是每4年衰减一半的第一个4年是挖出每个块50个比特币第二个4年的周期就是挖出每块产出25个目前比特币处于第三个4年Coinbase产出12.5个比特币的阶段。
以上逻辑是比特币白皮书和比特币代码规定好的,所有比特币的参与者可以进行验证。并且根据以上逻辑,我们可以画出如下的发行曲线。
(图引用自网络)
我们可以看到,比特币的发行过程每隔四年发生一次改变,发行速率逐渐降低,随着时间推移趋于平缓。
同理,我们在其他数字货币项目就可以看到类似曲线,不过它们未必与比特币的发行曲线一样,有可能是离散式的,有可能是线性的,这取决于白皮书中规定的发行过程。
例如熵币ETP的发行过程也是一个衰减过程不过ETP的衰减系数是0.95所以相对比特币可以说更光滑了它随着时间收敛到挖矿总量3000万那么这个曲线看起来是这样的。
所以数字货币的发行过程可以认为是一个区块链项目的核心利益分配的过程,也是一个社区激励的过程,如何把有限的代币派发给愿意为项目付出的社区人,是考量一个区块链项目运营成熟度的重要指标。
总结
今天,我简单介绍了数字货币,相信你对于数字货币已经有了一个初步的了解,数字货币作为区块链的第一个应用,已经广泛地被人们所熟知,并且大有燎原之势。
除了社区型的非盈利性开源数字货币项目,央行也在推动基于区块链交易平台,同时,由央行发行的法定数字货币也已经在这种平台上开始试运行。
可见数字货币的发展已经是未来的趋势,顺应着这种趋势,作为技术人的我们可以从中看到更大、更复杂的挑战。
这里给你留一个思考题,你可以在数字货币中看见怎样的挑战呢,你可以在下面留言,我们一起交流,感谢你的收听,我们下次再见。

View File

@ -0,0 +1,233 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第06讲 理解区块链之前,先上手体验一把数字货币
初次接触到区块链的你,肯定是一头雾水:“区块链是什么,这玩意到底怎么回事”。
其实对于区块链的原理,你大可不必着急,咱们可以直接上手体验一下目前区块链的第一大应用:数字货币。
本篇的内容面向所有区块链的小白,我会教你如何使用数字货币,来帮你从另外一个维度理解区块链技术。
本篇内容包括但不限于:数字货币钱包介绍、下载安装、转账、数字货币交易所充币、提币等等。
首次接触数字货币
区块链其实是从生产者的角度讨论一个抽象出来的概念。如果把区块链比作车辆设计图纸,那么数字货币就是正在跑的汽车。所以理解区块链的最直观的方式其实是从数字货币入手,而不是直接一上来就来理解原理。
数字货币作为区块链的第一大应用,拥有巨大的市场,你可以从“ coinmarketcap.com ”上了解几乎所有数字货币的概况。
如果想了解数字货币行情,可以打开 feixiaohao.com 进行查看,也可以手机下载“ MyToken ”或“ 币看”。
这两个 App 的使用方法与股票行情软件非常相似,上面几乎可以查询到所有已经“上市”的数字货币的实时价格与成交量信息。
什么是数字货币钱包
数字货币钱包是最贴近用户的区块链程序,数字货币钱包会可以帮你管理数字货币私钥,发送交易,可以显示你的交易历史记录。从用户功能的角度,数字货币钱包比较接近我们日常使用的钱包,它帮助你管理纸币、硬币、信用卡借记卡。
数字货币钱包作为数字货币的载体,从技术角度来看,数字货币钱包分为三种类型。
全节点钱包。全节点钱包是指官方发行的一种数字货币钱包版本,这个版本包含了完整的功能需求,挖矿、发送交易、查询交易记录、管理私钥。
SPV轻钱包Simplified Payment Verification。轻钱包为了用户体验牺牲了全节点的部分功能属于全节点钱包的简化版如挖矿功能、查询交易功能就没有。
中心化资产托管钱包。这种钱包其实是第三方服务商帮助你打理你的数字货币找一个中介托管你的数字货币比较典型的有blockchain.info。
以上的第1种和第2种会在各个数字货币的官网出现属于真正意义上的数字货币钱包1相比2而言安全性要更高所以我在这里推荐你先从全节点钱包开始尝试毕竟全节点钱包基本囊括了该币种的所有功能实现。
而第3种钱包与银行移动App或支付宝相比在业务逻辑上区别不大。比如你会把钱托管到支付宝上一样你也可以将你的数字货币放进第三类钱包中。
这种钱包往往都是多币种的深受投资用户的喜欢而且从方便性和用户体验来说基本完爆1和2例如以太坊系钱包imToken多币种钱包Jaxx以及各个数字货币交易平台。
无论是什么类型的钱包建议你在获取钱包程序的时候一律要从官网下载即使是移动端App也强烈推荐从官网的入口进入。
玩转数字货币钱包
上一节中,我们简单介绍了数字货币钱包的类型,本节内容将以全节点钱包作为例子,教你玩转数字钱包。我们这里会以某个币种的全节点钱包作为例子,穿插一些比特币 Electrum 轻钱包的例子,为你介绍数字货币钱包的上手方法。
由于我的电脑中安装了不同的数字货币钱包,它们的使用方法都是相似的。我截取的图片可能涉及了某些具体的币种,但这并不是我推荐安装建议,你可以忽略。另外在具体的操作过程中有大量图片展示,收听音频的你可以点击文稿查看。
1.获取钱包程序
全节点钱包程序是一种需要用户安装到桌面的软件,它需要互联网连接,不挖矿的话,资源消耗与其他中心化软件差不多。
与其他所有桌面客户端一样首先用户需要获取安装包安装包可以从官网下载我们先到对应币种官网下载一个Windows版本的客户端钱包。
一直双击安装下一步等待安装完成,安装好以后桌面出现快捷方式,咱们双击打开,通常会出现钱包的主页面。
某币种钱包主界面)
那我们来看看比特币比如比特币的Electrum钱包长这样。
(比特币钱包主界面)
你可以搜索“Electrum”进入官网下载。
(在官网下载比特币钱包)
对于钱包程序来说,最重要信息的就是当前区块高度了,区块高度表示了当前你所在区块的序号,序号体现了你是否更新到了最新区块,而最新区块则决定了你能否查询到自己的交易。即规定了你所有交易账单的起始位置。
我们以Electrum钱包为例点击圆圈中的控件出现对话框红框数字就代表了你本地钱包的块高。
(比特币钱包块高)
由于Electrum的使用教程比较丰富我们就不赘述了。
2.钱包文件与钱包账户
当你第一次安装好钱包以后,使用钱包的第一件事情就是创建账户(或者钱包文件)。
一般全节点钱包都支持多账户,尽管有些钱包有账户的概念,有些没有,在逻辑上也可以使用钱包文件替代账户这个概念。
例如Electrum轻钱包采用的是钱包文件某些全节点钱包采用的是账户。咱们用某个币种的钱包为例子点击创建账户以后填好用户名密码会得到如下信息
(某币种钱包助记词)
敲黑板划重点:红字部分又称助记词。这种助记词是为了主私钥服务的,主私钥其实是一串非常长的字母和数字组合,无论是人脑记或者笔记都是非常不容易识别的,容易弄错,助记词的有序组成与主私钥是一一对应的。
如果记录保存好了助记词(红字部分),即使钱包丢失或者被破坏也没有关系,用户可以在其他钱包中导入助记词,依然可以操作资产。
所以说在区块链的世界,主私钥和助记词是操作资产的唯一途径,如果丢失,那么资产就丢失,不存在忘记助记词还能找回资产这回事。
我们来看看比特币的助记词,我们点击左上角【文件】-【新建/恢复】一直下一步直到出现12个单词暂时不必理会每一步中的选项不同选项代表不同格式的钱包文件这12个单词也是助记词只要保存好了助记词你的比特币可以在任意标准版比特币钱包导入。
(比特币钱包助记词)
3.钱包地址
我们常听到别人说钱包地址也就是对应到我们现在银卡的卡号。在币圈地址其实也分很多种我们今天只介绍最简单直观的——支付地址Payment Address也就是我们现在要说的钱包地址。现在咱们来看看自己的地址是什么。
在比特币中地址是以1开头的一串字母和数字的组合字母区分大小写。
(比特币钱包地址)
(某币种钱包地址)
4.获取代币
好了,现在我们已经有地址了,可是地址上没有代币,钱包就是一个摆设。现在我们想办法搞点代币过来。
我们先搞点代币进来,一般有两种方式,挖矿和上数字货币交易所购买。挖矿的技术门槛虽然不高,但是过程繁杂,手续繁琐,不推荐入门尝试。
好了,现在我们就只剩下购买这一条路了。
请注意目前不存在人民币对数字货币的场内交易平台所以想用人民币购买数字货币的各位只能选择场外交易比较有名的平台有coincola.com由于涉及投资我们就不深入讲了。
你如果具有投资热情可以继续挖掘“coinmarketcap”中绿框内的选项
假设咱们已经拥有了比特币-BTC。
这是我刚刚在bitfinex上购买的0.15个比特币,其他交易平台原理大体相同,基本上比较大的交易平台都有交易手册,你可以自行翻看教程。
咱们接下来选择ETP/BTC 交易对通过BTC购买一些ETP然后找到提币选择ETP提币。
(提币地址)
这时候问题就来了,提币需要填写一个地址,这个地址就是咱们上文提到的钱包地址,你只需要把自己的钱包地址填入此处即可,填好其他项,发起提币请求即可。
5.区块链交易
接下来咱们只需要等待币到帐即可到账的过程就是产生一笔区块链交易的过程一般交易所都会提供TXID就是交易哈希供用户查询TXID代表了这个区块链上某一个唯一的交易也就是类似于咱们去银行转账后提供的流水单号。
我们可以根据TXID可以上区块浏览器专门用于查询交易的工具链接上查询该币交易比如某一笔比特币交易
https://blockchain.info/tx/6e64c2098b84b04a0d9f61a60d5bc8f5f80f37e19f3ad9c39bfe419db422b33c
网址 https://blockchain.info 后面这一长串就是TXID下图是这一笔比特币交易的详细信息。
(比特币交易详细信息)
6.发送代币给别人
如果要把代币发送给别人,那么需要别人提供什么呢?对,就是钱包地址,这和银行转账需要别人提供银行卡号的道理一样。
(某币种钱包转账) 如上图咱们填写好表单以后点击“确认转移”即可钱包程序将为你生成一笔区块链交易并广播出去大约等待1分钟就会被打包进区块这个交易在任意的区块链浏览器上可以查询得到咱们可以使用另外一个区块浏览器进行查询
https://explorer.mvs.org/#!/tx/b3eb07276dbff703ecf9e4180a2bd8e58db346e55439ef831efcbbd958726a0c
这个区块链浏览器与上面一个区块浏览器不是同一个但是都可以查询相同的交易因为他们同属同一个主网mainnet,相对应的是测试网testnet
各大交易所的充值功能,其实就是从自己的钱包转账到交易所的钱包地址,详细的充值和提币流程咱们会在后面的“弄懂数字货币交易平台”一文中详解。
总结
今天我带你过了一遍数字货币的参与过程,我们先介绍了钱包,接着介绍了钱包地址,以及尝试购买了一些代币,然后提币到个人钱包当中进行了测试。
为了确认交易是否达成,我们还介绍了区块浏览器,最后还教你如何将代币转移给其他人。这一篇文章虽然使用了特定的两个例子,但是在绝大多数数字货币钱包中,使用方式都是类似的。
最后,给你留下一道思考题,这一篇文章我们仅仅讨论了如何购买,那么数字货币挖矿的过程会是怎样的呢?你可以给我留言,感谢你的收听,我们下期再见。
附录:
OK国际站【www.okex.com】-
火币网国际站【www.huobi.pro】-
币安【www.binance.com】-
中比特国际站【www.zb.com】-
中比特海外版【www.exx.com】-
比特儿海外版:【www.gate.io】-
比特时代海外版:【www.aex.com】-
元宝网海外版:【www.bcex.ca】-
聚币海外版:【www.coinegg.com】-
云币海外版:【www.big.one】-
币久网海外版:【www.cex.com】-
币赢网:【www.coinw.com】-
kex:【www.kex.com】-
国外交易平台
Bitfinex:【www.bitfinex.com】-
B网:【www.bittrex.com】-
R网:【www.rightbtc.com】-
P网:【www.poloniex.com】-
L网:【liqui.io】-
H网【hashtoken.co】-
CEO【www.bite.ceo】-
BTBT【www.btbt.top】-
HitBTC:【hitbtc.com】-
bithumb:【www.bithumb.com】-
coincheck:【coincheck.com/cn/】-
bit-z:【www.bit-z.com】-
去中心化交易平台
以德【etherdelta.com】-
比特股【bitshares.org/wallet/#】-
场外交易平台
local【localbitcoins.com/zh-cn】-
可盈可乐【www.coincola.com/】-
比特币世界【www.bitcoinworld.com/】-
元宝场外交易【www.otc789.com/】-
电脑看行情网站
非小号【www.feixiaohao.com】-
手机看行情软件mytokenaicoin-
比特币、区块链新闻网站
金色财经【www.jinse.com】-
巴比特【www.8btc.com】-
bitcoin86【www.bitcoin86.com】-

View File

@ -0,0 +1,121 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第07讲 区块链的常见误区
经过了我前面几篇文章的铺垫讲解,你应该已经对区块链的知识体系已经有了一个基本的了解,但是,区块链是一项新兴的事物,大多数人依然处于知识的迷雾区,对区块链的理解并不是十分透彻。
我在很多场合都做过区块链领域的分享,有趣的是,无论是线上还是线下,大家都会问我一些相似的问题,今天,我就跟你一起聊聊几类理解区块链的常见误区。观点仅代表我个人的看法,也希望你可以提出不同的见解。
1.数字货币没有背书,我为什么要用呢?
在各种场合聊起数字货币时,我都会被问到这个问题。
其实,这个问题不是单纯一个数字货币的问题,而是货币发展的问题。
因为我们从小就被灌输了“钱可以买到东西”,所以信用货币的概念已经成了一种本能反应,这种本能反应会让我们觉得信用货币的存在是那样的理所应当,同时也自然而然地会把信用货币的概念代入到数字货币当中。
所以,这个时候,我们首先要跳出自己的视野局限。
如果你穿越成唐代人,忽然讨论起人民币这种特殊的纸可以买米买粮,其他唐代人肯定不买账。因为大家只认金子和银子。同理,当我们在讨论数字货币的时候,你完全套用信用货币的概念势必难以兼容,这与唐代人处境是不是相似呢?
并且,信用货币的体系并不是完美无缺的,首先是它在刚出现的时候不是特别的稳定,发展过程一波三折。一战和二战期间的经济问题,或多或少都与当时的货币设计缺陷有关,现代信用货币的设计都是建立在这些血的教训上的。
其次是信用货币是与国家利益息息相关的。比如国家之间的贸易战,通常会在本国货币政策上所有体现。
所以当我们在讨论数字货币的时候,先要想清楚我们到底在讨论什么,因为我们没有讨论任何基于国家的信用货币体系,我们在讨论的是一个完全崭新的虚拟货币体系。
很多人理解信用货币的方法很简单,比如我经常遇见的观点有:我相信法币是因为有政府背书。
但如果我们换个角度想,选择相信其实是个人行为。如果某种资产具有非常高度流动性,比方说美元,在东南亚或者中东地区,如果你不接受美元支付,美国政府也不会拿你怎么样,这桩生意你不做总有人做。
所以你通常会换个思路,我先接受,待会换成人民币不就好了,数字货币也是同理,充足的流动性本身就可以为资产提供良好的背书。
如果硬要说一说数字货币的背书,我认为,社区本身就是一种背书。
社区由用户、开发者、矿工三者组成的。
他们之间的利益相互绑定,用户使用数字货币决定了市场价格,开发者为数字货币开发了更多的功能来提升生产效率,矿工是系统的维护者,三者包含了数量巨大的个体,每个个体都相当于为数字货币作了背书。
2.数字货币是不是投机炒币?
另外还有一种误解来自于行业之外的人,认为数字货币就是投机、就是炒币。其实不是这样的,数字货币出现的初衷并不是为了投机炒币,而是希望构造一个点对点的去信任系统,只是在发展过程中被投机主义者大肆利用了。
确切的说法应该是数字货币的特性刚好满足投机者的需求,即使没有数字货币,投机主义也会存在并且长期存在,而且投机在金融领域并不是一个贬义词,它也是中性词汇。
投机者为整个交易市场提供了充足的流动性,商品价格波动风险被所有投机者所稀释,这是一个健康的交易市场所必备的。所以数字货币是中立性的工具,我们应当理性看待。
3.区块链是不是万能的?
很多人接触了区块链以后,觉得看什么都想拿区块链来做。但是,你忽略了一点,区块链本身也属于分布式系统,分布式系统有哪些局限、哪些约束,区块链一样也有。
需要指出的是,区块链领域有个说法叫做“不可能三角”,意思是说区块链的“去中心化”“安全”“环保”三个要素不可能同时全部满足。
这个说法我没有仔细论证,个人感觉这三个指标并不好量化,所以未必成立。本着学术严谨的原则,我不作过多的评价。
反而在分布式领域有个著名的CAP定理。
在CAP中Consistency是一致性表示同样数据在分布式系统中所有地方都是被复制成相同Availability是可用性表示所有在分布式系统活跃的节点都能够处理操作且能响应查询Partition tolerance是分区容忍性表示不同节点之间数据同步有意外情况产生时能够容错。
一般情况下CAP理论认为你不能同时拥有上述三种只能同时选择两种。所以当我们应用到区块链上时可以明显地发现区块链其实是一个AP系统尤其在A这个指标上也就是可用性做得非常好所以相应地C就会降低反映到具体系统中的交易吞吐量上自然会也会降低。
当我们在分区容忍性和一致性中做取舍的时候,如果强调“不可篡改”“去中心化”这两个特性,就会明显感觉到区块链跟不上大吞吐量的业务。
所以理解了以上内容,我们在做技术选型时,如果去中心化不是强需求,还是建议你使用中心化的解决方案。
4.去中心化是不是区块链唯一的评价标准?
既然谈到了中心化,我们就来看看“你是否应该去中心化”的话题,自区块链发展至今,“中心化”和“去中心化”的争论就一直存在。
支持去中心化的观点认为:区块链的初衷就是去中心化,所以也衍生出一条准则:“凡是没有做好去中心化指标的系统都不是区块链”。
持有这样观点的人通常都跟我一样是技术出身,或多或少都有些理想主义的极客情怀,这一点本来是无可厚非的,但市场是逐利的,情怀其实常常并没有办法变现。
所以,这导致的最直接结果就是:秉持这种去中心化原则会让区块链的落地过程异常缓慢。
持有“去中心化是唯一准则”这样的观点,往往也会误导刚刚入门的业务和产品相关的人员,误以为去中心化是区块链产品的一条评价标准。
其实并不是这样,去中心化只是一个公有区块链应当具备的基本特性,但是我们衍生到区块链应用层面的时候,其实去中心化往往并不能契合到一个公司的业务上,所以我在这里提倡:当我们在思考区块链的解决方案时,还是应当以需求为第一导向。
事实上,我们在讨论去中心化的时候,更多是夹杂了对强势的不满,这其实可以转化成“对服务者进行监督”的思路,一味地强调去中心化可能会陷入舍本逐末的尴尬境地,我们一定要看需求是什么,再去选择要不要。
换句话说,任何情况下,人与人之间必然存在信息不对称和认知不对称的问题,任何应用都会存在信息提供者和信息消费者这两种角色。
这是由人类社会结构决定的,妄图消除这两种角色之间的差异是非常难的。所以应用的“去中心化”要问运营者和消费者,而不是空喊口号。
有个常提及的词叫做“赋能”,被赋于能力的角色始终处于被动地位的,我们可以把区块链看做新型的赋能工具,至于是不是去中心化,设计过程中要看具体的应用场景,实施过程最终取决于消费者。
5.联盟链为什么没有公有链普及?
我相信很多人入门区块链以后都会有个疑问,区块链这么火热,怎么都是公有链热度高,联盟链反而声响不大。
所谓联盟链,就是这个区块链具有准入许可,不像公链,任何人都可以随时进入,准入许可意味着候选节点进入区块链时,需要得到已经在网络中的节点的许可,所以联盟链也叫做许可链。联盟链的节点数通常不多,维护成本相比公链要低。
造成联盟链不普及的原因,有以下三种。
第一是观察者偏差因为To B的业务往往是商务合作的形式并不直接进入大家的视野实际上有很多大型机构已经尝试或者已经部分落地了的联盟链业务。
第二是联盟链往往会遇到政策和监管要求,与公链相比,实施起来条条框框太多了,发挥的空间有限。
第三是联盟链表面上是一个技术问题本质上是一个博弈问题这是我2016年在文章《论联盟链的局限性与公有链》表达过的一个观点。
你往往需要设计一个业务模型,使得所有的博弈趋于均衡稳定,但是这又非常困难,我们无法一概而论。
总不能每做一块业务还要搞个形式化验证吧,并且联盟链无论是应用生态还是技术迭代都会比公链缓慢。
所以整体上看,联盟链的应用范围仍然不及公链广泛。
6.区块链是否会颠覆当下互联网?
很多早期的区块链文章经常说:区块链会颠覆当下的互联网什么的,关于这一点,我其实持保留意见。区块链如何打通与现有互联网的界限还是一个未知数,最大的可能性仍然是区块链成为互联网的一部分,作为底层设施改进了原来互联网的架构。
总结
今天,我带着你从不同的角度聊了理解区块链的常见误区,我们从谁在为区块链背书谈起,提到了区块链是否是万能的,去中心化是不是区块链的唯一标准,联盟链为什么没有公有链普及,以及区块链是否颠覆了当下的互联网。希望能唤起你对区块链的独立思考。
最后和你分享一个问题,区块链会改变微信和支付宝的地位吗?你可以给我留言,我们一起讨论,感谢你的收听,我们下期再见。

View File

@ -0,0 +1,121 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第08讲 最主流区块链项目有哪些?
这篇文章是区块链基础部分的最后一篇,在今天的内容里,我会介绍一些主流、热门的区块链项目,同时,我也会介绍一些创新型的区块链项目,希望可以让你对区块链的行业有一个大体的认知。
由于区块链项目数量众多我仅从市值前100的项目中挑选一些我比较熟悉的区块链项目进行讲解。
区块链行业的发展非常迅速币种市值排名的波动幅度也比较大例如在2017年8月以前比特现金项目还没有上线如今已经是常霸市值Top5的区块链项目之一。
现在常霸Top3的区块链项目分别是比特币、以太坊、瑞波币。那么这些币种到底是做什么的呢为什么市值会经常波动呢联盟链项目为什么没有出现在这里呢今天我就一一为你介绍这些问题。
主流区块链项目
1.比特币
由于比特币项目已经为大家所熟知,所以在这里,我就简单介绍一下参数,不再过多介绍。总体来看,比特币的市值和交易量远远超过其他区块链项目。
比特币的发布时间为2009年1月9号预计它的挖矿可以一直持续到2140年发行总量收敛到2100万。比特币的出块时间是10分钟出块时间是指全网平均产生一个区块的时间间隔。
比特币是所有数字资产的始祖,这带来的效果就是:比特币的公众认可度非常高,纵然面临着矿池中心化 (关于矿池中心化的问题会在后面的“深入区块链技术”部分内讲解)的问题,但是公众依然非常信任比特币这种资产。
比特币曾经面临过区块容量不足的问题,但随着隔离见证(关于隔离见证的问题,也会在后面“深入区块链技术”的部分进行讲解)的生效,网络拥堵的问题缓解了很多。具体细节我们留到“比特币专题”中再做详细叙述。
2.以太坊
以太坊是一个区块链应用平台,它的极大创新在于它提供了智能合约这种可以自定义业务逻辑的工具,智能合约是一种可编程的合约,合约是由用户编写并且部署到区块链上的。
以太坊的优势是为全世界的开发者们提供了一种开发工具,这种工具让所有人都能释放出巨大的创造力,所以基本上可以看成:只要是有一定技术基础的开发者,通过智能合约可以随时为以太坊贡献内容。
这形成了一种良性循环,开发者使用智能合约的时候,发现的问题提交给以太坊开发者社区,社区改进智能合约的缺陷,新的开发者基于智能合约开发多样性的工具包,这种核心开发者与社区互动的良性循环是以太坊生态最重要的一部分。
以太坊的口号是“世界计算机”,从这句口号里,可见它野心的大小。
在2016年的时候以太坊的市值大约是比特币的十分之一在2017年这个数字已经达到四分之一。
以太坊在2014年开始众筹2015年3月份正式运行它采取的共识机制是PoW但根据核心团队公布的方案后期会逐渐迁移到PoS共识算法。以太坊的总发行量是6000万+1872万/年目前的区块时间是12秒。
同时我们从以太坊社区可以看到以太坊绝大部分开发流程和智能合约都已经形成行业标准比如常见的ERC20代币标准ERC725身份标准。
而ERC20代币标准则为智能合约指明了主要的业务方向数字资产有的叫智能资产它们的含义差不多。以太坊2017价格大幅上涨最直接的原因就是ERC20代币成为事实意义上的区块链标准资产。
3.瑞波币
瑞波币Ripple是一个比较另类的区块链项目因为从本质上来说它更像是一种支付结算协议瑞波币不需要挖矿它是通过一种叫“Open Coin”的算法提供瑞波协议共识来达到记账的目的。
瑞波币旨在为全球跨境机构提供了高效率的支付过程,提供较好的全球支付体验。因为涉及了机构之间的资产转移,瑞波币被设计成需要准入许可才能进入瑞波的支付网络,这一点有些像我们所说的联盟链。
瑞波团队掌握了一半以上的瑞波币,所以瑞波币面临的币价被操纵的问题很严重。如果你是一个技术极客,那么你可以略过该项目。如果你想创建一个有关支付结算的区块链项目,那么一定要研究瑞波币。
4.莱特币
如果我们仔细观察会发现比特币的Logo颜色为金色而莱特币的Logo的颜色为银色。一金一银相信你应该明白莱特币的定位了。
莱特币在技术上仅仅把比特币的挖矿算法修改成了Scrypt算法Scrypt算法是一个可参数化、可配置的挖矿算法不过它依然没有防住专业矿机的出现。它的其他核心代码几乎与比特币保持一致。
莱特币的崛起得益于良好的市场运作,从提供的功能来看,莱特币与比特币没有区别。那么说,为什么还要有莱特币呢?
是这样的,比特币扩容之争的核心焦点在是否使用“隔离见证”的方法,我们其实知道,“隔离见证”虽然在比特币社区提出,但是第一个应用的地方是莱特币,相信你能看出这里的逻辑,即:莱特币作为比特币的先行者,它会替代比特币做一些具有实验性质的试运行。
5.比特现金
目前比特现金市值排名基本在Top5左右与比特币相比比特现金仅仅是从区块容量上高于比特币其他技术上的区别并不是很大。
比特现金的诞生要从比特币扩容之争开始谈起由于比特币的区块容量是1MB随着用户增多交易愈发拥堵。
所以围绕着提升网络容量,社区内部发生了分歧,“支持隔离见证”与”支持直接扩大区块尺寸”分成了两派,这就是著名的扩容之争。
比特币核心开发者们支持前者,矿工们支持后者,由于比特币核心开发者掌握了代码的控制权,但是矿工掌握了记账权,所以两权发生了分离,矿工索性一拍大腿,你不改代码,我花钱找人改,这就产生了比特现金。
比特现金作为社区共识分裂的产物,体现了区块链开放共识的特点,你不支持我,我分分钟就可以独立出来。
6.Tether
Tether也是一个特殊的区块链项目它为所有区块链资产提供了法币主要是美元兑换网关。
Tether又称USDT言外之意就是和美元一对一锚定用户存入多少美元就会产生多少USDT进入虚拟资产网络。USDT可以直接在虚拟货币交易所与比特币等其他区块链资产进行交易。
Tether可以直接在二级市场流通是数字货币交易市场重要的交易入口。另外Tether可能存在被冻结和没收的风险。
7.匿名性区块链项目
匿名性区块链项目是指使用交易匿名技术让公开可查询的交易内容变成私密的匿名性区块链项目。市值比较不错的有门罗币、达世币、Zcash三种它们分别使用了不同类型的匿名技术为区块链技术的匿名特性发展做出了贡献。
从需求上来看,这三种都是为了解决其他所有数字货币无法匿名的问题,因为从技术上看,比特币也好,以太坊也好,交易是可以被追踪的。
所以以上三种区块链提供了不同程度的匿名,按照匿名程度分别是:达世币<门罗币
国内的公有区块链项目
中国的公链项目不多分别有NEO量子链元界公信宝比原链
目前市值最高的是NEONEO的前身是小蚁在经历了2017年初的市值低谷之后NEO通过品牌重塑以及市场推广目前已经稳居市值Top10
NEO主打的也是智能合约不过相比以太坊NEO更有方向性旨在通过智能合约塑造一个基于区块链的智能经济NEO的创始人达鸿飞也是一个非常Nice的大叔
量子链是也是国内比较知名的区块链项目它的市值稳居Top20与NEO不同的是量子链完全支持以太坊智能合约也就是说能在以太坊上运行的智能合约也能在量子链上运行
量子链的创始人是戴旭光人称帅初是一个不到30岁就登上福布斯的技术极客
元界在2017年初上线造成了一波市场轰动元界是当时唯一一家既能提供数字货币交易平台服务又能提供公链技术服务的技术团队2017上半年整个市场非常看好
随即创始人初夏虎基于元界发了两个代币由于这两个代币的运作没有跟上导致市场恶评不断再经过9.4的一刀切式监管元界项目坠入低谷
公信宝是比特股社区的开发者将比特股的底层技术石墨烯技术改造成属于自己的公链项目公信宝团队是一个靠谱的团队市场价值也十分不错
比原链是巴比特社区创始人长铗发起的比原链目前负责人是段新星比原链也是一个致力于打造资产数字化提供资产流通的一个公链平台
总结
总结一下今天我带你过了一遍区块链的主流项目包括比特币以太坊瑞波币莱特币比特现金Tether匿名性区块链项目以及国内的公有区块链项目大部分市值较高的项目还都属于数字货币的范畴
最后留给你一个问题没有发行市值高的区块链项目多是数字货币项目所以这是为什么呢你可以给我留言我们一起讨论
感谢你的收听我们下次再见

View File

@ -0,0 +1,141 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第09讲 深入区块链技术(一):技术基础
在“浅说区块链基础”的部分中,我概括介绍了区块链的入门知识以及区块链的应用领域,在“深入区块链技术”部分的第一篇中,我将带你一起总览下区块链的技术概要,本篇提到的所有技术内容,我们都会在后续文章中进行详细的讲解。
区块链的技术定义
简单来说,区块链是一个提供了拜占庭容错、并保证了最终一致性的分布式数据库;从数据结构上看,它是基于时间序列的链式数据块结构;从节点拓扑上看,它所有的节点互为冗余备份;从操作上看,它提供了基于密码学的公私钥管理体系来管理账户。
或许以上概念过于抽象,我来举个例子,你就好理解了。
你可以想象有100台计算机分布在世界各地这100台机器之间的网络是广域网并且这100台机器的拥有者相不信任那么我们采用什么样的算法共识机制才能够为它提供一个可信任的环境并且使得
节点之间的数据交换过程不可篡改,并且已生成的历史记录不可被篡改;
每个节点的数据会同步到最新数据,并且会验证最新数据的有效性;
基于少数服从多数的原则,整体节点维护的数据本身可以客观反映交换历史。
通常我们在分布式系统领域也见到过上述的要求比如第2条就阐述了分布式系统基本要求一致性要求基于少数服从多数原则是为了容忍网络分区区块链就是解决上述问题的技术方案。
我们结合以往讲过的内容和将要讲的内容先提炼一下区块链在技术上的7个特征你先记住我们后续会慢慢道来
区块链的存储基于分布式数据库;
数据库是区块链的数据载体,区块链是交易的业务逻辑载体;
区块链按时间序列化区块数据,整个网络有一个最终确定状态;
区块链只对添加有效,对其他操作无效;
交易基于非对称加密的公私钥验证;
区块链网络要求拜占庭将军容错;
共识算法能够“解决”双花问题。
区块链的类型
我们在讨论区块链时,通常指的是公有区块链。除此之外,还存在另外一种区块链:联盟链。
我们在前面的文章介绍过它。所谓联盟链,就是这个区块链具有准入许可,不像公链,任何人都可以随时进入。准入许可也就意味着候选节点进入区块链时需要得到已经在网络中的节点许可,所以联盟链也叫做许可链。
早期文章里可能还会涉及私有区块链的定义,其实我认为私有区块链更像是一个捏造的概念,如果是完全私有的分布式数据库,技术人员往往会有更好的选择。
如今云计算日趋成熟,大规模的分布式存储已经不是难题,不必在区块链这种低并发、低吞吐量的系统中折磨自己。
所以我们所说的区块链通常指的是公链。除了公链和联盟链的概念,还有一种区块链概念,叫作侧链。
侧链是一种双向挂钩技术,将主链中的代币锁定到侧链中使用。所以可以将主链看作主干道,侧链看作与主链相对独立的一条分支道,作为主链功能的低耦合拓展。
区块链的核心技术组成
无论是公链还是联盟链至少需要四个模块组成P2P网络协议、分布式一致性算法共识机制、加密签名算法、账户与存储模型。
1. P2P网络协议
P2P网络协议是所有区块链的最底层模块负责交易数据的网络传输和广播、节点发现和维护。
通常我们所用的都是比特币P2P网络协议模块它遵循一定的交互原则。比如初次连接到其他节点会被要求按照握手协议来确认状态在握手之后开始请求Peer节点的地址数据以及区块数据。
这套P2P交互协议也具有自己的指令集合指令体现在在消息头Message Header)的命令command域中这些命令为上层提供了节点发现、节点获取、区块头获取、区块获取等功能。
这些功能都是非常底层、非常基础的功能。如果你想要深入了解可以参考比特币开发者指南中的Peer Discovery的章节。
2. 分布式一致性算法
在经典分布式计算领域我们有Raft和Paxos算法家族代表的非拜占庭容错算法以及具有拜占庭容错特性的PBFT共识算法。
如果从技术演化的角度来看,我们可以得出一个图,其中,区块链技术把原来的分布式算法进行了经济学上的拓展。
(图片来自网络)
在图中我们可以看到计算机应用在最开始多为单点应用高可用方便采用的是冷灾备后来发展到异地多活这些异地多活可能采用的是负载均衡和路由技术随着分布式系统技术的发展我们过渡到了Paxos和Raft为主的分布式系统。
而在区块链领域多采用PoW工作量证明算法、PoS权益证明算法以及DPoS代理权益证明算法以上三种是业界主流的共识算法这些算法与经典分布式一致性算法不同的是融入了经济学博弈的概念下面我分别简单介绍这三种共识算法。
PoW通常是指在给定的约束下求解一个特定难度的数学问题谁解的速度快谁就能获得记账权出块权利。这个求解过程往往会转换成计算问题所以在比拼速度的情况下也就变成了谁的计算方法更优以及谁的设备性能更好。比特币本身的演化很好地诠释了这个问题中本聪设计的思路本来是由CPU计算。随着市场发展人们发现GPU也可以参与其中而且效率可以达到十倍百倍现在这项工作基本以ASIC专业挖矿芯片为主。
PoS这是一种股权证明机制它的基本概念是产生区块的难度应该与你在网络里所占的股权所有权占比成比例目前有三个版本PoS1.0、PoS2.0、PoS3.0。它实现的核心思路是使用你所锁定代币的币龄CoinAge以及一个小的工作量证明去计算一个目标值当满足目标值时你将可能获取记账权。
DPoS简单来理解就是将PoS共识算法中的记账者转换为指定节点数组成的小圈子而不是所有人都可以参与记账这个圈子可能是21个节点也有可能是101个节点。这一点取决于设计只有这个圈子中的节点才能获得记账权。这将极大地提高系统的吞吐量因为更少的节点也就意味着网络和节点的可控。
3.加密签名算法
由于我不是密码学专业出身,所以这里我将会以介绍为主。
在区块链领域,哈希算法是应用得最多的算法。哈希算法具有抗碰撞性、原像不可逆、难题友好性等特征。
其中难题友好性正是众多PoW币种赖以存在的基础在比特币中SHA256算法被用作工作量证明的计算方法也就是我们所说的挖矿算法。
而在莱特币身上我们也会看到Scrypt算法该算法与SHA256不同的是需要大内存支持。
而在其他一些币种身上我们也能看到基于SHA3算法的挖矿算法。以太坊使用了Dagger-Hashimoto算法的改良版本并命名为Ethash这是一个IO难解性的算法。
当然除了挖矿算法我们还会使用到RIPEMD160算法主要用于生成地址众多的比特币衍生代码中绝大部分都采用了比特币的地址设计。
除了地址我们还会使用到最核心的也是区块链Token系统的基石公私钥密码算法。
在比特币大类的代码中基本上使用的都是ECDSA。ECDSA是ECC与DSA的结合整个签名过程与DSA类似所不一样的是签名中采取的算法为ECC椭圆曲线函数
从技术上看,我们先从生成私钥开始,其次从私钥生成公钥,最后从公钥生成地址,以上每一步都是不可逆过程,也就是说无法从地址推导出公钥,从公钥推导到私钥。
(图来自《精通比特币》一书)
4. 账户与交易模型
从一开始的定义我们知道,仅从技术角度可以认为区块链是一种分布式数据库,那么,多数区块链到底使用了什么类型的数据库呢?
我在设计元界区块链时参考了多种数据库有NoSQL的BerkelyDB、LevelDB也有一些币种采用基于SQL的SQLite。
这些作为底层的存储设施,多以轻量级嵌入式数据库为主,由于并不涉及区块链的账本特性,这些存储技术与其他场合下的使用并没有什么不同。
区块链的账本特性通常分为UTXO结构以及基于Account-Balance结构的账本结构我们也称为账本模型。UTXO是“unspent transaction input/output”的缩写翻译过来就是指“未花费的交易输入输出”。
这个区块链中Token转移的一种记账模式每次转移均以输入输出的形式出现。而在Balance结构中是没有这个模式的。
总结
今天我介绍了区块链的技术概念、分类以及核心技术组成,相信你对区块链技术有了一个初步的了解。
区块链虽然是一个新兴的概念但它依赖的技术一点也不新如非对称加密技术、P2P网络协议等。好比乐高积木积木块是有限的但是不同组合却能产生非常革新的事物。
所以区块链也成了一个新的领域,基本上现有的很多概念,都能被“区块链化”,那么你能否在自己的领域,想到“区块链化”哪些概念呢?你可以给我留言,我们一起讨论。
感谢你的收听,我们下期再见。
参考链接:
https://bitcoin.org/en/developer-guide#peer-discovery
https://en.bitcoin.it/wiki/Protocol_documentation
https://en.bitcoin.it/wiki/Network

View File

@ -0,0 +1,153 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第10讲 深入区块链技术P2P网络
在上一篇文章中我大致讲解了一下区块链技术的几个核心要素。P2P网络协议、分布式一致性算法共识机制、加密签名算法、账户与存储模型。今天我们就来看看区块链技术的第一个核心要素P2P网络。
如果我们简单来看P2P技术它的应用领域已经非常广泛了从流媒体到点对点通讯、从文件共享到协同处理多种领域都有它的身影出现。
同样的P2P的网络协议也有很多比较常见的有BitTorrent、ED2K、Gnutella、Tor等也就是我们常说的BT工具和电驴。
比特币、以太坊等众多数字货币都实现了属于自己的P2P网络协议但是这种模式并不同于以上讨论的P2P网络协议所以我们今天讨论的重点主要是区块链技术的P2P技术也就是比特币和以太坊的P2P网络。
由于区块链的P2P网络技术知识繁多我们主要提炼其中的四个内容进行讲解区块链的网络连接与拓扑结构、节点发现、局域网穿透与节点交互协议。
希望读完本篇可以让你对目前成熟的区块链P2P网络的拓扑结构以及运行原理有个大体的认知。
网络连接与拓扑结构
1.网络连接
除去少数支持UDP协议的区块链项目外绝大部分的区块链项目所使用的底层网络协议依然是TCP协议。
所以从网络协议的角度来看区块链其实是基于TCP/IP网络协议的这与HTTP协议、SMTP协议是处在同一层也就是应用层。
在“区块链的常见误区”这篇文章中我们提到了“区块链是否会颠覆互联网”这一说法如果要是认真分析的话它颠覆的层面其实最多只到HTTP协议不能再多了。
以HTTP协议为代表的、与服务端的交互模式在区块链上被彻底打破了变更为完全的点对点拓扑结构这也是以太坊提出的Web3.0的由来。
比特币的P2P网络是一个非常复杂的结构考虑到矿池内部的挖矿交互协议与轻节点。我们仅仅讨论全节点这种场景下的P2P网络发现与路由。
比特币的P2P网络基于TCP构建主网默认通信端口为8333。
以太坊的P2P网络则与比特币不太相同以太坊P2P网络是一个完全加密的网络提供UDP和TCP两种连接方式主网默认TCP通信端口是30303推荐的UDP发现端口为30301。
2.拓扑结构
P2P网络拓扑结构有很多种有些是中心化拓扑有些是半中心化拓扑有些是全分布式拓扑结构。
比特币全节点组成的网络是一种全分布式的拓扑结构,节点与节点之间的传输过程更接近“泛洪算法”,即:交易从某个节点产生,接着广播到临近节点,临近节点一传十十传百,直至传播到全网。
(比特币全球节点图,图来自网络)
全节点与SPV简化支付验证客户端之间的交互模式更接近半中心化的拓扑结构也就是SPV节点可以随机选择一个全节点进行连接这个全节点会成为SPV节点的代理帮助SPV节点广播交易。
节点发现
节点发现是任何区块链节点接入区块链P2P网络的第一步。这与你孤身一人去陌生地方旅游一样如果没有地图和导航那你只能拽附近的人问路“拽附近的人问路”的这个动作就可以理解成节点发现。
节点发现可分为初始节点发现,和启动后节点发现。初始节点发现就是说你的全节点是刚下载的,第一次运行,什么节点数据都没有。启动后发现表示正在运行的钱包已经能跟随网络动态维护可用节点。
1.初始节点发现
在比特币网络中,初始节点发现一共有两种方式。
第一种叫做DNS-seed又称DNS种子节点DNS就是中心化域名查询服务比特币的社区维护者会维护一些域名。
比如seed.bitcoin.sipa.be这个域名就是由比特币的核心开发者Sipa维护的如果我们通过nslookup会发现大约二十多个A纪录的IPv4主机地址。
我们通过nc命令尝试连接域名下的某个主机的8333端口会发现连接成功运行结构如下。
✘ chenhao@chenhaodeMacBook-Pro ~ nc -nvv 149.202.179.35 8333
found 0 associations
found 1 connections:
1: flags=82<CONNECTED,PREFERRED>
outif en0
src 192.168.1.104 port 62125
dst 149.202.179.35 port 8333
rank info not available
TCP aux info available
Connection to 149.202.179.35 port 8333 [tcp/*] succeeded!
好的,到目前为止我们已经手动做了一遍初始节点发现的工作,这些操作是由比特币的代码完成的。
第二种方式就是,代码中硬编码( hard-code 了一些地址这些地址我们称之为种子节点seed-node当所有的种子节点全部失效时全节点会尝试连接这些种子节点。
用在以太坊中思路也大致相同也是在代码中硬编码hard-code了一些种子节点做类似的工作。
2.启动后节点发现
在Bitcoin 的网络中,一个节点可以将自己维护的对等节点列表(peer list)发送给临近节点,所以在初始节点发现之后,你的节点要做的第一件事情就是向对方要列表:“快把你的节点列表给我复制一份。”
所以在每次需要发送协议消息的时候它会花费固定的时间尝试和已存的节点列表中的节点建立链接如果有任何一个节点在超时之前可以连接上就不用去DNS seed 获取地址,一般来说,这种可能性很小,尤其是全节点数目非常多的情况下。
而在以太坊网络中,也会维护类似的一个节点列表(NodeTable)但是这个节点列表与比特币的简单维护不同它采用了P2P网络协议中一个成熟的算法叫做Kademlia网络简称KAD网络。
它使用了DHT来定位资源全称Distributed Hash Table中文名为分布式哈希表。KAD网络会维护一个路由表用于快速定位目标节点。由于KAD网络基于UDP通信协议所以以太坊节点的节点发现是基于UDP的如果找到节点以后数据交互又会切换到TCP协议上。
3.黑名单与长连接
公有区块链面临的网络环境是非常开放的任何人只要下载好钱包打开运行就进入了这个P2P网络这也会带来被攻击的可能。
所以在比特币的代码中会有一段去控制逻辑你可以手动将你认为可疑的节点移除并加入禁止列表同时去配置可信的节点。当然以上并不属于客户端的标准协议的一部分任何人都可以实现属于自己的P2P网络层。
以太坊上有针对账户进行的黑名单处理,但是这属于业务层。我没有找到很详尽的资料,所以你有兴趣的话,可以自己尝试一下。
不过总的来说,黑名单我们也可以通过操作系统的防火墙去处理,这并不算一个特别棘手的问题。
局域网穿透
前面我们说到了区块链的P2P网络结构是一种全分布式的拓扑结构。但是如今我们的网络环境是由局域网和互联网组成的。也就是说当你在局域网运行一个区块链节点在公网是发现不了的公网上的节点只能被动接受连接并不能主动发起连接。
如果这个局域网是你可以控制的那么很好说咱们只需要在VPC网络中配置路由将公网IP和端口映射到局域网中你的IP和端口即可。
这个条件是非常苛刻的那么到底有没有一种方案可以自行建立映射呢答案是就是NAT技术和UPnP协议。
NAT技术非常常见这里使用的是源NAT简而言之就是替换TCP报文中的源地址并映射到内网地址。
UPnP是通用即插即用Universal Plug and Play的缩写它主要用于设备的智能互联互通所有在网络上的设备马上就能知道有新设备加入。
这些设备彼此之间能互相通信更能直接使用或者控制它一切都不需要人工设置。有关UPnP的资料比较多这里就不赘述了你可以自行搜索相关的信息。
比特币和以太坊均使用了UPnP协议作为局域网穿透工具只要局域网中的路由设备支持NAT网关功能、支持UPnP协议即可将你的区块链节点自动映射到公网上。
节点交互协议
一旦节点建立连接以后,节点之间的交互是遵循一些特定的命令,这些命令写在消息的头部,消息体写的则是消息内容。
命令分为两种,一种是请求命令,一种是数据交互命令。
节点连接完成要做的第一件事情叫做握手操作。这一点在比特币和以太坊上的流程是差不多的,就是相互问候一下,提供一些简要信息。
比如先交换一下版本号,看看是否兼容。只是以太坊为握手过程提供了对称加密,而比特币没有。
握手完毕之后无论交互什么信息都是需要保持长连接的在比特币上有PING/PONG这两种类型的消息这很明显就是用于保持节点之间长连接的心跳而设计的而在以太坊的设计中将PING/PONG协议移到了节点发现的过程中。
请求命令一般分为发起者请求,比如比特币中的 getaddr 命令是为了获取对方的可用节点列表inv命令则提供了数据传输消息体中会包含一个数据向量。
我们说区块链最重要的功能就是同步区块链而同步区块恰巧是最考验P2P网络能力的。区块同步方式分为两种第一种叫做HeaderFirst它提供了区块头先同步同步完成以后再从其他节点获得区块体。
第二种叫做BlockFirst这种区块同步的方式比较简单粗暴就是从其他节点获取区块必须是完整的。第一种方案提供了较好的交互过程减轻了网络负担。这两种同步方式会直接体现在节点交互协议上他们使用的命令逻辑完全不同。
总结
今天我与你分享了区块链的P2P网络结构与节点交互过程一般P2P网络技术要解决两个主要问题第一是资源定位第二是资源获取这一篇文章也是主要围绕这两点展开其中节点发现和局域网穿透是属于资源定位问题节点交互协议是属于资源获取问题。
在这一篇文章中,我仅以比特币和以太坊为例进行分享,虽然区块链项目比较多,但是他们要做的事情大多是类似的,比如以太坊是改进版的实现,而比特币使用了简单版实现。
P2P网络模块作为所有区块链的最底层模块直接决定了整个区块链网络的稳定性。区块链网络是一个网状分布式的结构与互联网结构有点相似那么亲爱的读者我们是不是可以设计一个节点爬虫去爬全网节点呢你可以给我留言我们一起讨论。
感谢你的收听,我们下次再见。
参考链接https://bitnodes.earn.com/

View File

@ -0,0 +1,131 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第11讲 深入区块链技术(三):共识算法与分布式一致性算法
共识机制的概念,我们在前面的文章“浅说区块链共识机制”中已经讲解了一部分,但是,共识算法其实是一个非常大的话题,一篇文章肯定没有办法做到面面俱全。
那么今天的内容,我会将重点放在梳理技术的脉络上,详细分析的部分会少一点。如果你对共识算法有兴趣的话,可以自行查找相关内容,也可以和其他的资料进行相互补充的阅读。
从相亲大会说起:分布式系统的模型
由于区块链就是一种分布式系统,所以这篇文章我就从这一概念开始讲起。 为了让你更容易理解分布式系统,我们先来构建一个模型。
在“浅说区块链共识机制”那篇文章中,我举了一个村庄举办相亲大会的例子,我们来回顾一下。
大村子因为人口增长变成11个小村落分散在地图各地
村落之间的通信只能依靠信鸽;
一只信鸽可能无法完全覆盖所有村落,需要有中继村落代为传输消息。
相亲大会的举办权会为村子带来巨大收益,为了产生合理的举办者,人们约定了几条规则:
大会举办权从A和B两个村子中产生他们每一届都是候选村
投票时所有村落仅能投A或B
用投票的方式产生举办者,少数服从多数。
所有村子会为了举办权都会使出浑身解数,比如延迟发送投票结果、篡改别人的投票结果、假装没有接收到通知等等。
其实这是一个典型的分布式系统,可以看成是我们简化版的区块链网络环境,那么这个分布式系统会遇到什么样的问题呢?
分布式系统面临的问题
分布式系统面临了几个问题:一致性问题,可终止性问题、合法性问题。
可终止性可以理解为系统必须在有限的时间内给出一致性结果,合法性是指提案必须是系统内的节点提出。当然其中面对的最重要也是最基础的问题,就是我们常说的一致性问题。
一致性是指在某个分布式系统中,任意节点的提案能够在约定的协议下被其他所有节点所认可。
需要提醒你区分的一点是:这里的“认可”表示所有节点对外呈现的信息一致,而不是对信息的内容认可。一致性也分严格一致性、最终一致性,这些我们在后文会谈到。
我们回到上面的例子我们提到了所有的村子只能投A或B其实这个投票的动作可以理解为提案。
在“投票过程被大家所认可”这个语境下“被大家所认可”表示某个村落投票的结果已经被记录用于最后统计结果而不是认可投给A或者投给B这也是我在上述强调你要注意区分的一点。
那我们这里所说的一致性到底体现在那里呢?
主要体现在下面两种类型的问题上。
非人为恶意的意外投票过程。非人为恶意篡改可归类为信鸽半路挂掉、信鸽迷路、信鸽送错目的地、信鸽送信途中下雨导致信件内容模糊、接收信件的人不在家、天气变化信鸽延迟送达等等。这些对应到分布式系统面临的问题就是:消息丢包、网络拥堵、消息延迟、消息内容校验失败、节点宕机等。
人为恶意篡改投票过程。人为恶意篡改包括“精神分裂式投票”中继篡改上一个村落的投票信息。对应到分布式系统面临的问题就是消息被伪造、系统安全攻击等等。发生的人为恶意篡改的过程就可以称之为系统发生了拜占庭错误Byzantine Fault),如果系统可以容忍拜占庭错误而不至于崩溃,也就是在发生系统被恶意篡改的情况下仍然可以达成一致,我们将这样系统称作为做拜占庭容错系统。
问题1我们已经有较成熟的方案了。分布式系统本质上是一种并行异步操作如果通过中心化的手段将系统中的“并行不确定”操作变更为“同步串行”操作就能解决上述的问题。
比如让第三方机构介入托管所有人的投票;或者构造一个不可伪造令牌,大家轮流将投票统一写到令牌上。
这些也是现代分布式系统经常使用的方法。但是这些方法有个缺陷,如果在分布式系统中被过多地使用以后,系统便会越来越像单点系统。
我们设计分布式系统的初衷就是为了克服单点系统的可用性不足、扩展性不好、单点性能上限等缺陷,这种退化的方案可能不是我们想要的。
而问题2要求设计拜占庭容错系统这个在IT行业并不常见因为多数IT系统是中心化的所以如果我们想要解决问题2这就引出了我们今天要介绍的共识算法与分布式一致性算法。
有关分布式系统的定理
我们在介绍具体的分布式一致性算法之前,先介绍两个定理,做一下铺垫。
第一个是FLP不可能性简单来说是即使网络通信完全可靠只要产生了拜占庭错误就不存在一个确定性的共识算法能够为异步分布式系统提供一致性。换句话来说就是不存在一个通用的共识算法可以解决所有的拜占庭错误。
第二个是CAP定理CAP定理是分布式系统领域最重要的定理之一这个我们在“理解区块链的常见误区”一文中稍微讲到过。也就是在设计分布式系统的过程中“一致性”“可用性”“分区容忍性”三者中我们只能选择两个作为主要强化的点另外一个必然会被弱化。
我们由CAP定理可以推导出严格一致性和最终一致性。严格一致性是指在约定的时间内通常是非常短、高精度的时间内系统达到一致性的状态这种系统很难实现即使实现也很难有高的性能。
所以人们从工程的角度提出了最终一致性,最终一致性不要求严格的短时间内达到一致。为了其他两个指标,我们相当于让一致性在时间上做了妥协。区块链满足了最终一致性,而且处理过程时间比较长。
可用性其实是传统技术后端架构上非常重要的指标从单点到主备模式、从主备模式到异地多活再到现在的Paxos和Raft协议。
我们从软件架构上也经历了基于ESB的模块化SOA模式到无状态的微服务架构。从工程的角度来看根据业务需求达到4个9、6个9就足够了只是肯定比不了区块链近乎100%的可用性。
分区容忍性在企业内部极少出现尤其是中心化的服务性应用所以很少考虑。然而区块链的P2P网络环境十分复杂所以必须要保证很高的分区容忍性。
通过以上我们可以发现比特币、以太坊等公链是偏重高可用性、分区容忍性AP满足最终一致性C且TPS较低的分布式系统。
所以如果有人号称他们的区块链能够达到媲美中心化系统上万的TPS先别着急投资你问问他们技术是不是知道CAP定理再问问他们的去中心化程度如何。
这点我们也可以从EOS等高性能的区块链身上佐证EOS全球只有21个记账节点而以太坊全球有上万个节点可以随时参与记账所以越想去中心化你的TPS就不可能高这也就是为什么EOS的TPS高而以太坊的TPS低。
接下来我来介绍一下经典的分布式一致性算法和区块链的共识算法。经典的分布式一致性算法在多数的论文中一般被叫做共识算法,在这里,我为了与区块链的共识算法做出区别,所以在命名上改成了分布式一致性算法,但是它们要解决的问题是一样的。
共识算法与分布式一致性算法
1.经典的分布式一致性算法
经典分布式一致性算法有Raft协议Raft协议是一种强Leader的一致性算法它的吞吐量基本就是Leader的吞吐量它无法抵御节点恶意篡改数据的攻击。
稍微复杂一点的就是Paxos协议Paxos能提供不同场合不同种类的一致性算法所以Paxos有很多变种经典Paxos是Leaderless的有变种是强Leader型的叫做Fast Paxos有关Paxos的文献非常丰富这里就不赘述了。
以上两种都是不提供拜占庭容错的系统,下面介绍一种具有拜占庭容错的一致性算法。
PBFT全称实用性拜占庭容错系统Practical Byzantine Fault Tolerance, PBFT)PBFT是一种状态机要求所有节点共同维护一个状态所有节点采取的行动一致PBFT非常适合联盟链等对性能具有较高要求的场合超级账本项目中的Fabric框架默认采用的就是PBFT的修改版本。
2.区块链共识算法
区块链的共识算法,我在某些场合直接称作基于经济学的博弈算法,以区别于经典分布式一致性算法思路,它的整体思路就是让攻击者的攻击成本远远大于收益。
区块链中的共识算法目前具有工业成熟度的是PoW另外两种比较成熟的是PoS和DPoS其次还有一些变种和单一币种使用的共识算法例如Ripple共识、PoC共识概念性证明、PoE共识存在性证明
在使用PoW共识算法的情况下容错阈值是50%而PBFT及其变种的容错阈值是33%左右,这里的百分比是指作弊节点占全网节点的比例。
PoX类的算法其实都延续了PoW的设计理念相比较经典分布式一致性算法PoX类算法通过概率选择记账者降低了潜在的提案者另外是延长了达成最终一致性的时间。
第一条降低了系统通信复杂度,每次记账系统的确定性其实是概率确定的,又由于被选中需要付出成本,此处才提高了记账成本阈值,结合区块链的基础代币设计,是一个非常天才的想法。
有关PoW、PoS、DPoS的内容我在后面会有专文介绍。
总结
今天我们从相亲大会开始说起,介绍了分布式系统所面临的问题,之后,我们又引出了区块链所要解决的拜占庭容错问题,并重点介绍了分布式系统的基本定理,最后我还介绍了经典共识算法和区块链算法。
区块链并没有逃离分布式系统这个理论框架希望今天的内容能够帮助你分辨出真实的区块链项目。最后给你留一个思考题区块链行业有哪些公司使用了如PBFT、Paxos这样的经典共识算法呢你可以给我留言我们一起讨论。
感谢你的收听,我们下期再见。

View File

@ -0,0 +1,162 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第12讲 深入区块链技术PoW共识
上一篇文章中,我们谈到了区块链其实就是一种分布式系统,它在技术上并没有跳出分布式系统的理论框架,只是给出了一种不同于计算科学领域的解决方案。今天,我们就来重点聊聊区块链的这种解决方案: PoW 共识机制。
PoW工作量证明
因为比特币采用了PoW共识机制所以这个概念才得以被广泛传播。PoW全称Proof of Work中文名是工作量证明PoW共识机制其实是一种设计思路而不是一种具体的实现。
PoW机制其实早在1997年就被提出了它早期多被应用在抵抗滥用软件服务的场景中例如抵抗垃圾邮件所以PoW在邮件服务系统会有所涉及
我们借用维基百科的一张图来解释一下PoW机制是如何用在这个场景中的。
为了防止垃圾消息泛滥,接收者并不直接接受来自任意发送者的消息,所以在一次有效的会话中,发送者需要计算一个按照规则约定难题的答案,发送给接受者的同时,需要附带验证这个答案,如果这个答案被验证有效,那么接受者才会接受这个消息。
可以看出PoW的核心设计思路是提出一个计算难题但是这个难题答案的验证过程是非常容易的这种特性我们称之为计算不对称特性我们在“浅谈区块链共识机制”中举的24点游戏的例子就具备了计算不对称特性。
如何理解区块链PoW
上面介绍了一般的PoW是什么那么区块链上的PoW又是如何设计的呢我们还是以比特币为例子来讲一讲这个部分会有代码演示如果你在收听音频可以点击文稿查看。
在分析拜占庭将军问题的时候可以看出,如果所有节点在同一时刻发起提案,那么这个系统的记账过程将会非常的复杂混乱,为了降低具有提案权的节点数量,采用工作量证明不失为一个好办法。
所以我们需要构造一个计算不对称的难题这个难题在比特币中被选定为以SHA256算法计算一个目标哈希使得这个哈希值符合前N位全是0。
举个例子假设我们给定一个字符串“geekbang”我们提出的难题是计算一个数字与给定的字符串连接起来使这个字符串的SHA256计算结果的前4位是0这个数字我们称作nonce比如字符串”geekbang1234”nonce就是1234我们要找到符合条件的nonce。
我们以Python代码作为示例。
#!/usr/bin/env python
import hashlib
def main():
base_string = "geekbang"
nonce = 10000
count = 0
while True:
target_string = base_string + str(nonce)
pow_hash = hashlib.sha256(target_string).hexdigest()
count = count + 1
if pow_hash.startswith("0000"):
print pow_hash
print "nonce: %s scan times: %s" % (nonce, count)
break
nonce = nonce + 1
if __name__ == '__main__':
main()
代码中我规定了基础字符串是”geekbang”nonce从10000开始自增往上搜索直到找到符合条件的nonce值。
我们计算的结果放在图中,你可以点击查看。
# 前4位是0
0000250248f805c558bc28864a6bb6bf0c244d836a6b1a0c5078987aa219a404
nonce: 68828 scan times: 58829
# 前5位是0
0000067fc247325064f685c32f8a079584b19106c5228b533f10c775638d454c
nonce: 1241205 scan times: 1231206
# 前7位是0
00000003f41b126ec689b1a2da9e7d46d13d0fd1bece47983d53c5d32eb4ac90
nonce: 165744821 scan times: 165734822
可以看出每次要求哈希结果的前N位多一个0计算次数就多了很多倍当要求前7位都是0时计算次数达到了1.6亿次。这里我同时截图了操作系统当时CPU的负载可以看到单核CPU负载长时间达到100%。
通过上述程序希望你对区块链PoW机制有个直观的了解。由于结果只能暴力搜索而且搜索空间非常巨大作弊几乎不可能另外符合条件的nonce值也是均匀分布在整个空间中的所以哈希是一个非常公平且粗暴的算法。
以上代码的基本逻辑就是PoW挖矿过程搜索到一个目标值就会获得记账权距离上一次打包到现在未确认的交易矿工就可以一次性将未确认的交易打包并广播了并从Coinbase获得奖励。
实际挖矿的基本步骤如下。
生成Coinbase交易并与其他所有准备打包进区块的交易组成交易列表并生成默克尔哈希
把默克尔哈希及其他相关字段组装成区块头将区块头Block Header作为工作量证明的输入区块头中包含了前一区块的哈希区块头一共80字节数据
不停地变更区块头中的随机数即nonce的数值也就是暴力搜索并对每次变更后的的区块头做双重SHA256运算即SHA256(SHA256(Block_Header))),将结果值与当前网络的目标值做对比,如果小于目标值,则解题成功,工作量证明完成。
如果更深程度去理解的话PoW机制是将现实世界的物理资源转化成区块链上虚拟资源的过程这种转化为区块链提供了可信的前提。
PoW挖矿的发展历程
好了现在我们知道了PoW的过程其实就是计算一个难题解的过程。
在区块链的发展史上PoW经历了大致两个阶段。分为早期分散挖矿阶段和中心化矿池挖矿阶段。我们目前处于第二个阶段并且将会长期处于这个阶段。
早期分散挖矿是中本聪的愿景期望是1CPU=1票所以如果CPU挖矿那么将会是非常理想化的情况而现实的情况是SHA256只需要非常简单的重复计算逻辑它不需要复杂的逻辑控制。
那么CPU这种重控制逻辑轻重复计算的计算单元来搞这么低端的暴力计算非常吃力不讨好大部分人的第一反应肯定是用GPU呀非常正确。
所以这个时期出现了GPU挖矿它的效率是CPU的十几甚至上百倍那么1CPU=1票的逻辑就被打破了挖矿工具的改变让人们意识到挖矿技术也是极大改进的。除了GPU挖矿我们还有ASIC芯片挖矿这部分内容我们在讨论挖矿算法分类时会详细讲解。
同期我们也慢慢进入到了中心化挖矿阶段。中心化挖矿很好理解,算力如果越分散,也就意味着竞争越激烈,如果某个节点计算出答案了,那么也意味着其他矿工这段时间的工作量几乎都白费了,投入了物理资源结果零收益,可以说是负收益。
那怎么办呢?思路就是把分散的算力汇聚到一个池子里面,这个池子我们称作矿池,就像四面八方的小溪流最终汇总成一条大江一样。
矿工参与到某个矿池相当于矿工把算力租给矿池了与其他矿工联合挖矿最后看起来矿池这个节点的算力就会很大获得记账权的概率就越大如果这个矿池计算出了答案将获得Coinbase的奖励矿池就会按既定的分配比例打给每一位参与的矿工。
我们借用一下《精通比特币》一书中的部分图来看一下:
矿池作为一个中心节点,可以被矿工连接,而在比特币全网来看,矿池节点本质上也只是一个全节点,它与其他全节点一起组成了比特币的点对点网络,特殊的地方仅仅在于它可以产生新的区块。
PoW挖矿算法分类与简介
PoW挖矿算法大致分为两个大类第一类叫做计算困难第二类叫内存困难。
这两类的区别在于对于提供工作量证明的组件要求不同。我们知道计算机的组成分为计算单元和存储单元通过以往的编程经验我们还可以知道一个计算机的瓶颈往往是IO如果要制造大量的IO操作可以通过写程序撑大内存制造大量的数据处理过程使工作量证明从计算单元转变为存储单元。
那为什么要这么做呢?
其实在PoW挖矿中心化以后又出现了一次挖矿工具改进这次超越了GPU人们先是尝试在FPGA上尝试SHA256的计算过程结果计算效率成倍于GPU。
FPGA出现的时间比较短暂最终人们开发出了ASIC专业芯片来计算SHA256这就是我们常说的专业矿机。
专业矿机的出现加速了PoW挖矿的中心化过程因为购买专业矿机需要额外的时间和精力配置运行还有一定的门槛普通人也只能从专业机构手里购买专业矿机。
所以这些专业矿机直接就是数字货币印钞机,生产专业挖矿芯片的商业公司几乎成了数字货币的货币发行司,这不得不说到市值直逼英伟达的比特大陆公司,它用的就是专业生产数字货币挖矿芯片。
新的数字货币开发者们为了防止情况重演不断发明新的挖矿算法。有名的有Scrypt、X11、SHA-3不过这些依然是计算困难型的挖矿算法依然没有逃脱出现专业矿机的命运。
这里不得不提到以太坊的PoW挖矿算法ETHASHETHASH是Dagger-Hashimoto的修改版本它是典型的内存困难型挖矿算法。直到如今也没有芯片厂商设计出挖矿芯片。
正如我们上文所说,因为工作量证明要求的组件从计算资源转变为内存资源,而对内存的高要求使得矿工必须加内存。
在专业矿机上加一块内存的收益与在GPU上加一块内存获得的收益是差不多的所以厂商并没有研发内存困难型专业矿机的动力没有专业矿机的出现这从某种程度上也缓解了算力中心化的问题。
PoW的优势和劣势
PoW共识的内在优势在于可以稳定币价因为在PoW币种下矿工的纯收益来自Coinbase奖励减去设备和运营成本成本会驱使矿工至少将币价维持在一个稳定水平所以攻击者很难在短时间内获得大量算力来攻击主链。
PoW共识的外在优势是目前它看起来依然是工业成熟度最高的区块共识算法所以在用户信任度上、矿工基础上都有很好的受众。
PoW共识最大的缺点是非常消耗计算资源耗电耗能源这一点也一直为人们所诟病。因为每次产生新的区块都会让相当一部分工作量证明白白浪费了也就是将计算资源浪费了。
目前来看这个是无解的只要是PoW共识一定会遇到计算资源浪费的问题。不过人们也想了一些改进方案早期如素数币近期有比原币它们都号称深度学习友好型的工作量证明方法。
从理论上来看PoW会一直有51%算力攻击的问题即攻击者只需要购买超过全网51%算力设备,即可发起“双花攻击”,甚至“重放攻击”等多种高收益攻击,这个问题目前没有解决方案。
除了51%攻击PoW共识还有自私挖矿的问题自私挖矿是一种特殊的攻击类型不会影响区块链正常运转但是会形成矿霸间接造成51%攻击,我们就曾经遇到过这样的自私挖矿攻击。
PoW共识机制是一种简单粗暴的共识算法它不要求高质量的P2P网络资源它可以为公链提供稳定有效的记账者筛选机制。同时它也面临了挖矿中心化严重的问题这也促使人们研究出了新的共识机制我们留到下一篇讲解。
总结
今天我介绍了PoW工作量证明并且使用Python语言演示了一遍基于SHA256的挖矿算法工作过程又介绍了发展历程和算法分类最后提到了PoW的优势和缺陷。相信你对PoW机制的理解可以更加深入了。
PoW工作量证明的挖矿过程是否可以替换成有意义的算法呢历史上是否有过类似创新你可以调查一下我们一起分享。

View File

@ -0,0 +1,118 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第13讲 深入区块链技术PoS共识机制
上一篇我们讲到了PoW共识机制这一篇我们就来分享另外一种共识机制PoS共识机制。
PoS全称是Proof of Stake中文翻译为权益证明。这一篇我们会将PoS与PoW对比讲解帮助你加深理解。
PoS的由来
PoS最早出现在点点币的创始人Sunny King的白皮书中它的目的就是为了解决使用PoW挖矿出现大量资源浪费的问题。PoS共识机制一经提出就引起了广泛关注Sunny King 也基于PoW的基础框架实现了第一代PoS区块链点点币。
PoW的具体实现有很多版本但它们大多只是在挖矿算法上有所改进主体逻辑并没有发生质的变化。PoS包含了多个变种实现每个变种往往会涉及区块链代币经济模型的改动可以说是牵一发而动全身。
这些实现有点点币、黑币、未来币、瑞迪币它们都推动了PoS机制的发展PoS研究前沿还有以太坊的 Casper ,以及 Cardano 的Ouroboros。
那到底是什么样的机制导致PoS具有这样的特性呢让我们来看一看。
什么是PoS
在讲PoS之前我先来讲一个叫做币龄的概念币龄这个概念其实很好理解它的英文是 CoinAge字面意思就是币数量乘以天数。
比如你有100个币在某个地址上9天没有动那么产生的币龄就是900如果你把这个地址上这100币转移到任意地址包括你自己的地址那么900个币龄就在转移过程中被花费了你的币数量虽然还是100个但是币龄变更为0。币龄在数据链上就可以取到任何人都可以验证。
我们回过头来看看PoS究竟是什么区块链共识机制的第一步就是随机筛选一个记账者PoW是通过计算能力来获得记账权计算能力越强获得记账权的概率越大。
PoS则将此处的计算能力更换为财产证明就是节点所拥有的币龄越多获得的记账的概率就越大。这有点像公司的股权结构股权占比大的合伙人话语权越重。
以上算是简述了PoS的概念实际上PoS的发展经历了三个版本第一个版本是以点点币为代表的PoS1.0版本这个版本中使用的是币龄第二个版本的代表是黑币blackcoin对应使用的是币数量相当于是财产证明后面黑币又升级到PoS3.0,这个版本又回到了币龄。
PoW早在比特币出现之前就已经应用了而PoS是才是真正意义上为了区块链而创造出来的概念。
PoS的实现原理
好了现在我们开始讲解PoS的具体实现原理吧。这一部分公式较多如果你在收听音频可以点击文稿查看。
通过上一篇我们知道PoW挖矿的基本逻辑和步骤我们先寻求一个nonce小于目标值这一步用公式可表示为
Hash (block_header) < Target
从公式中我们可以看到PoW下所有矿工的目标值是一样的只要计算结果哈希小于目标值即可简化来看就是前导0的个数
而在PoS系统中这个公式变更为
Hash (block_header) < Target * CoinAge
我们可以看出多引入了一个变量叫做CoinAge也就是币龄这里就有意思了
这个变量为会造成每个矿工看到的目标值不一样如果你的币龄越大也就意味着你的获得答案越容易这里的Target与PoW一致与全网难度成反比用来控制出块速度的
例如当前全网的目标是4369A矿工的输入的币龄是15那么A矿工的目标值为65535换算成十六进制就是0xFFFF完整的哈希长度假设是8个字节也就是0x0000FFFF
而B矿工比较有钱他输入的币龄是240那么B矿工的目标值就是0x000FFFFF你如果仔细观察肯定会发现相比A矿工的目标值B直接少了一个零即如下
A 矿工 Hash( block_header ) < 0x0000FFFF
B 矿工 Hash( block_header ) < 0x000FFFFF
所以B矿工获得记账权的概率肯定要比A高
具体代码分析这里就不讲解了这里需要币龄作为输入如果我们写示例代码也只是一个简单的参数PoS需要放到区块链的语境中才能运作
PoS的相关问题
通过上述的介绍我们知道PoS似乎完美地解决了PoW挖矿资源浪费的问题甚至还顺带解决了51%攻击的问题这里可以顺便讲一下51%攻击是什么它是指PoW矿工如果积累了超过51%的算力则可以一定程度篡改账本
这里顺便科普一下什么是51%攻击呢我们发现矿工挖矿的成本不再是物理设备和电费而是虚拟代币它的边际成本几乎为零本质上PoS让挖矿者和使用者合二为一了
这也意味着如果挖矿者发起51%攻击就需要拥有全网51%的币或币龄这几乎不可能办到即使你成功地实施了51%攻击那么也意味着作为全网最大的持币大户的你损失也会最大
PoS看起来相当完美其实并不然PoS有很多缺陷
PoS遇到的第一个问题就是币发行的问题一开始的时候只有创始区块上有币意味着只有这一个节点可以挖矿所以让币分散出去才能让整个网络壮大那么如何分散出去又是另外一个难题了
所以早期PoS币种基本都采用了分阶段挖矿有的叫混合挖矿其实我并不同意混合挖矿这个说法混合就意味着同时很多币种其实是分了阶段的即第一阶段是PoW挖矿到第二阶段才是PoS挖矿
随着ERC20类型的标准合约代币的出现这个问题被解决了不再需要第一阶段改成PoW也可以将代币分散出去
第二个问题是由于币龄是与时间挂钩的这也意味着用户可以无限囤积一定的币等过了很久再一次性挖矿发起攻击所以解决方案是PoS机制需要引入一个时间上限来控制时间因素的自然增长
第三个问题是虽然引入了时间上下限用户还是倾向于囤积代币这会造成币流通的不充分基于此所以瑞迪币引入了币龄按时间衰减构造了权益速度证明鼓励用户流动代币而不是倾向于囤积代币
第四个问题是离线攻击即使引入了时间上下限时间仍然是自然流动的也就是可以不需要求挖矿节点长时间在线挖矿是可以离线的这简直是灾难所以任意一个PoS机制的实践形式都必须避免这个问题因为网络节点数量的多少直接关系到区块链网络的健壮性
当然这些问题都不是致命问题还记得我们一开始提到了PoS经历了三个版本而第二个版本PoS 2.0使用的不是币龄而直接是币的数量
这会造成完全不同的结果上述第二四问题都不存在了似乎看起来直接使用币的数量会更好一些但却出现了整个PoS机制的致命问题
这个问题叫做Nothing at Stake翻译过来叫做无成本利益问题大体的意思在PoS系统中做任何事几乎没有成本比如在PoS系统上挖矿几乎没有成本这也就意味着分叉非常方便
方便到什么程度呢每个诚实矿工在产生孤块的时候都可以继续挖下去反正也没什么成本反正分叉链和主链都可以同时挖也就是任何持币较少的用户都可以尝试分叉并且把分叉链广播出去
这个时候如果其他诚实矿工看到了第一反应也是没有成本那么咱们也来挖吧说不定什么时候就值钱了意思就是说任何逐利的矿工并不会使这个系统变得更强壮稳定而是更加的混乱
无成本利益问题无论以币龄还是币数量作为PoS的参数都无法避免
而PoW则没有这样的问题我们回到PoW系统中来看因为任何的分叉都会造成挖矿成本直接变成负收益所以这会抵抗分叉的产生矿工倾向于跟随最长的链
由于以太坊部分采用了PoS共识它的名字叫做Casper它必须解决上述无成本利益问题攻击所以Casper协议要求PoS矿工需通过抵押保证金的方法对共识结果进行下注具体实践结果我们还需要拭目以待
总结
最后我们来总结一下PoS共识机制PoS的区块链系统无需外部物理输入所以它相比PoW更为环保不费电并且矿工就是使用者这会在一定程度上抵御了51%攻击所以基于PoS机制的数字货币属于理想状态的数字货币
PoS的缺点是缺乏工业级的区块链应用从逻辑上来看有点循环自证明的味道就是用自己的币来维护系统的安全而币的安全性是由系统保证的所以现阶段PoS共识机制往往不是独立运行的而是混合了PoW一起运行这就可以弥补PoS的缺陷
PoS共识机制目前也出现了矿池也可能会出现中心化挖矿的风险
虽然PoS共识机制未来变数依然很多但它的可塑性比PoW好技术上的探索空间大目前PoS币种相比较PoW币种风险也较高
那么有哪些区块链项目使用了PoS共识机制呢你可以给我留言我们一起讨论感谢你的收听我们下期再见

View File

@ -0,0 +1,181 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第14讲 深入区块链技术DPoS共识机制
上一篇文章里我们讲解了PoS共识机制这一篇我们来分享PoS的一个扩展机制这个机制在业界也非常的流行它叫做DPoS共识机制。DPoS全称是Delegated Proof of Stake中文翻译过来是代理权益证明。
从BM开始聊起的故事
我们聊DPoS时为什么要从BM聊起呢
其实这和聊比特币绕不开中本聪一样DPoS是BM一手创造的。DPoS不是独立提出的共识算法而是直接被BM应用到比特股项目中在稳定运行了3年多后又接着被BM构造成可复用的区块链工具箱石墨烯。
虽然应用得很早但DPoS算法直到2017年才被BM单独拎出来作了一篇“DPoS技术白皮书”这期间伴随着比特股、Steemit、EOS三个项目的依次发布。
那么到底BM是谁市场上对这个人的评价为什么富有争议呢或许我们从了解BM开始才能体会到DPoS的精髓。
我们在前面的文章中曾简单提过BMBM的本名是Daniel Larimer由于他的GitHub昵称是ByteMaster所以才被称作BM。BM是比特股、Steemit、EOS项目的创始人截止发稿时这三个产品的市值均在区块链项目的Top33以内。
与年少成名V神的辍学经历不同BM 2003年毕业于弗吉尼亚理工学院获得计算机学士学位算是正经的科班出身。
BM曾直言不讳地说到“我的人生目标就是找到自由市场的方案来保护生命、自由和财产”。他认为要达成这个目标就必须要从货币开始。
我们在数字货币一节提到过无论是贵金属还是信用货币都是历史的必然所以在选择使用什么货币上BM认为不一定是美元他希望的是构造一种自由安全的数字货币。
2009年他怀揣梦想开始了数字货币的事业他先发现了比特币于是不遗余力地推广着这个项目。
然而在2010年BM指出中本聪10分钟一次的交易确认时间太长了这样的话性能会是一个瓶颈然而这样的想法却遭到了中本聪的暴击看不懂就算了我没时间搭理你。
于是BM觉得比特币不是希望便着手开发第一个项目——比特股同时创造出DPoS把自己的高性能共识算法想法形成了实践。
在这里我们可以看出DPoS与其他共识机制的第一个区别就是交易确认时间短。
2014年当V神还在到处奔走开始发起以太坊项目的众筹时当很多项目还是基于比特币的微创新时比特股就已经横空出世了。
所以比特股一跃成为了当时的明星项目它的口号是“Beyond Bitcoin”在这里我们可以感受到极强的攻击性和目的性也正因为如此日益强大的比特币社区被树在了它的对立面。
比特股一共有2个版本比特股在1.0版本之前某些版本甚至都没有提供向下兼容。虽然后来正式发布了1.0版本,似乎并没有改善多少。糟糕的使用体验,庞大的系统资源开销,还是让尝鲜的用户逐渐流失了。
这时候BM利用了自己手里超过1/3的记账节点在没有达成社区共识的情况下强行增发了比特股总量。这一招几乎就是比特股项目的灭顶之灾社区人就此纷纷退出。
虽然社区萎靡BM还是继续了开发工作将比特股升级到了2.0它的易用性和稳定性勉强可以满足正常使用。随着比特股2.0的发布BM也同时发布了石墨烯工具箱。
尽管在技术上提供了改进但比特股社区最终选择让BM离开比特股项目比特股回到了另一位币圈大佬——巨蟹的手里。随后比特股的发展陷入了长期的低迷长期在2分最多到2角钱左右直到去年的牛市比特股涨到过2元人民币。
虽然最终离开了比特股但是BM依然会参与BTS紧急Bug修复工作。与此同时BM又开发了一款旨在颠覆传统互联网媒体行业的项目——Steemit这也是开辟了基于区块链Token内容社区的先例。Steemit也是基于石墨烯技术的它非常流行。
2017年随着Steemit的成熟BM宣布退出了Steemit开展了下一个项目EOS。EOS的目的是要做出区块链行业的操作系统为开发者提供底层功能包括并行运算、数据库、账户系统等等。
EOS一经发布就广受关注短短五天内EOS便筹集到了数亿美金它的代币销售规模在目前为止是最大的。
现阶段的EOS超级节点竞选也体现出了BM强大的影响力。 EOS项目影响力也越来越大BM因为与V神在区块链上的理念不合也经常互怼他们争论的重点是二人对于去中心化的前提假设不同这也造就了两个不同的设计逻辑所以两人的争论过程可以说是非常地吸引眼球了。
我们从BM的个人经历、项目经验、影响力都可以看出BM是一个很懂金融的天才式程序员同时也是一个有点刚愎自用导致与社区矛盾不断的意见领袖。
DPoS详解
讲完了BM的故事我们再来讲讲DPoS。我们在前文粗略地讲过DPoS算法我们先来回顾一下。
简单来理解DPoS共识算法就是将PoS共识算法中的记账者转换为指定节点数组成的小圈子而不是所有人都可以参与记账这个圈子可能是21个节点也有可能是101个节点这一点取决于设计只有这个圈子中的节点才能获得记账权。这将极大地提高系统的吞吐量因为更少的节点也就意味着网络和节点的可控。
1.DPoS共识的目标
从名称上我们也可以判断出DPoS与PoS共识是直接关联的。DPoS算法是BM根据当时PoW、PoS的不足而改进的共识算法它的目的就是为了提高性能也就是交易确认时间短。
在PoS共识中人们使用财产证明来“挖矿”也就是说这是任何人都可以参与的只要你持有币你就可以参与挖矿。
但是我们可以看出PoS并没有解决性能问题在这里我们直接认为提高性能就是提高TPS我们可以构造一个等式
TPS = transactions / block_time
TPS表示区块链每秒能确认的交易数 transactions 是由区块大小block_size和平均每笔交易大小决定的而区块大小受全网网络状态network_bandwidth 限制也是由记账节点之间物理带宽witness_performance决定的。
记账节点的个数witness_count直接决定了物理带宽的上限因为记账节点数量越多则对物理带宽要求越高对网络的稳定性要求也越高。
要注意的一点是在DPoS中记账节点不叫做矿工而是改称为见证人Witness。
所以这个公式变成了下面的样子。
TPS = (block_size * network_bandwidth * witness_performance) /-
(block_time * witness_count)
我们可以看到要提高TPS可以提升分子项降低分母项也就是增大区块大小block_size、提升记账节点网络带宽network_bandwidth、提升记账节点处理性能witness_performance减小区块时间block_time、减小记账节点数量witness_count。
分子项我们可以看到,它基本受限于物理资源的上限,目前工业水平制造的物理资源的使用上限基本就是整个项的上限了,所以可操作性不大。
而分母项是由共识算法决定的所以我们从区块时间以及记账节点数入手DPoS算法便正是从这两项着手的。
首先改动的便是限制记账节点的数量,也就是见证人的数量。
我们在PoW和PoS中可以看到成为记账节点是无需门槛的你可以随时参与挖矿随时退出。
那这会带来什么问题呢,首先无法确定记账节点的数量,其次无法确定记账节点之间的网络环境,记账节点数越多网络环境越复杂,这些不确定性会增大网络分区的概率,从而导致区块链分叉。
如果我们事先规定好记账节点的数量接着让全网所有节点可以投票决定哪些节点可以成为记账节点这样就限制并减小了分母项witness_count这个过程我们也称作投票选举。
因为记账节点数量不多,那么我们可以在共识算法中可以规定出块时间为一个固定值,这个值可以很小,通过轮流出块的方式来进行记账。
以上思路基本就是DPoS的基本设计思路BM还为DPoS算法确立两个原则
投票选举过程一定要保证最大权益所有者最终能控制全网,因为一旦出了问题,他们的损失最大;
与PoW、PoS一样所有节点仅承认“最长”链。
这两个原则确立了DPoS共识的基本特性第一条放大了PoS共识使用者就是记账者的优点第二点则规定了分叉时系统应该表现的行为。
2.DPoS共识算法分析
在DPoS共识算法中区块链的正常运转依赖于见证人(Delegates),见证人是由全网节点投票产生的,见证人也是记账节点的实际控制人,相当于咱们选课代表,课代表帮我们整理作业。
见证人在完成打包交易的同时可以领取区块奖励和交易的手续费并且可以执行社区投票的提案所以DPoS共识算法不仅仅是算法而是一个包含了协作治理关系的共识机制。
我们可以引用“DPoS算法白皮书”中的内容来看看BM设计DPoS算法是怎样的思路。
BM认为所有区块链实际是建立交易之上的确定性状态机。共识是在确定交易顺序过滤无效交易的一个达成一致意见的流程。
DPoS为了尽快确定交易顺序过滤无效交易所以规定了在正常情况下所有记账节点轮流每3秒产生一个区块轮到了某个记账节点出块时必须在3秒内提交区块否则就会错块。
假设一直没有记账节点错过自己顺序,那么他们生产的链条势必是最长的链条,如果记账节点在非指定时间生产区块被认为是无效的,每经过一轮,所有节点轮流出块的顺序就会发生重新洗牌。
下图就是一个理想的轮流记账状态。
-
(图来自白皮书)
DPoS算法白皮书介绍了7种异常的情况会打破上面的正常情况。
例如少数记账节点发起恶意分叉或者发生故障,如下图。-
-
(图来自白皮书)
在这种情形下B节点只能在9秒内生产1个块而大多数分支由于数量多一倍将预期能在9秒内生产2个块诚实的2/3的大多数可以比小的那一部分创建一个更长的链条由于原则二DPoS可以抵御这种攻击。
在DPoS白皮书中介绍了少数记账节点恶意或故障造成的分叉、网络分区情况下重复出块、少数记账节点重复出块、记账节点数量不足、多数记账节点的联合腐败等各种情况。
由于篇幅有限你如果感兴趣的话可以自行阅读。遗憾的是白皮书中的内容没有经过严格证明以定性分析为主所以我们无法确定DPoS算法是否有设计缺陷。
在实际应用中比特股中见证人是101人EOS里是21人。比特股中见证人们赚取手续费EOS里见证人们分享EOS的通胀收益。他们都是通过公开选举选出来的选票就是大家手里的比特股或EOS。
3.有关DPoS的一个争论中心化问题。
我们之前文章中提过的FLP和CAP定理如果为了提升性能即一致性的效率势必会牺牲其他两项。这也会引出有关DPoS的一个争论中心化问题。
我们以比特股社区为例每个人都可以尝试成为101个见证人节点中的一个他们可以在社区里拉票为社区做事或者干脆用钱买很多bts。平时大家象征性地开个会因为是轮流记账各个节点之间竞争不大。
但是不要忘记区块链的发展非常依靠社区这种方式势必会带来社区的中心化。虽然比特股中101个见证人负责记账但总得有人指定发展方针于是又设计出了11人理事会这同样是通过选票选出来的。
11人理事会有很高的权力他们相当于11个超级节点通过举手表决甚至可以决定修改代码而这11人理事会是比特股系统里的中心也是规则的制定者。
这是DPoS算法的优势也是DPoS算法的劣势。在PoW中矿工、开发者、用户三权分立。
而DPoS似乎将这三权合并到了见证人和理事会手中。在EOS中BM还制定了区块链宪法要求所有记账节点必须遵守所以也有人抨击这是具备了BM特色的去中心化。
从某种角度来看DPoS是社区治理加上共识算法不再是单纯的技术共识这是与PoW、PoS算法最大的不同。
DPoS的基本假设是相信节点是好的所以尽可能快速选择记账节点而把问题发生后的修复过程推迟到投票中可以说DPoS并不考虑拜占庭容错问题把拜占庭容错推给了社区治理而在社区治理上可归纳为一切皆投票。
而现实生活中很多情况下投票并不能解决问题比如投票人都是有惰性的集齐所有人投票成本是很高的如果记账节点没有上限所有节点的投票都投给自己DPoS系统就会退化成PoS系统。
总结
我们来总结一下DPoS共识机制。
DPoS共识机制本身将“矿池”纳入系统内部并把它们统称为见证节点虽然不会出现中心化挖矿的风险但是DPoS由于节点数不多并且见证节点权力较大可以认为DPoS本身就是带中心化思路的共识机制。
最后留一个思考题给你有关DPoS算法你能想到有哪些攻击方式吗欢迎给我留言我们一起讨论。
感谢你的收听,我们下期再见。
链接:
https://mp.weixin.qq.com/s/r-bmH1tu-Gnn1eJ3GhI0nQ
http://me.tryblockchain.org/blockchain-dpos-bm-eos.html

View File

@ -0,0 +1,197 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第15讲 深入区块链技术(七):哈希与加密算法
区块链最核心的两个技术点是共识机制和密码学,由于共识机制是公链的基础,所以这部分内容我已经在前面的内容中优先讲解了。
接下来,我来讲一讲区块链的密码学基础,有关区块链密码学你只需要了解它的基本原理和优劣即可。
另外,区块链的密码学中文资料也十分丰富,如果你感兴趣的话,可以在学有余力的基础上酌情深入。
区块链中主要应用了两类密码学算法,第一类是哈希算法,第二类是非对称加密算法。
我们先来看看哈希算法。
1.哈希算法
哈希算法是一类数学函数算法,又称散列算法,它是一种数据映射关系。
为了方便举例,我们假设 h = HASH( X | z )你输入一个任意长的数据z经过哈希运算后返回给你固定长度的数据hz叫做原像h是哈希结果又称作“数据指纹”z可选的数据集合构成了X。
哈希算法具有下面的4种特性。
原像不可逆。原像不可逆是指对于任意给定的h都无法依据h自身的信息推导出z。
难题友好性。难题友好性通俗的理解就是如果要得到难题答案你只能暴力枚举没有比这更好的方法。在h = HASH( X | z )中从h无法推导出z只能不断地计算尝试那么z所在的数值集合构成了XX的大小是哈希算法的安全因子之一。
发散性。发散性是指对于任意的z即使我们只改动非常少的信息量例如改动1个比特位生成z那么HASH(z) 与 HASH(z) 就是两个大相径庭的结果,完全不相似。
抗碰撞性。抗碰撞性是指对于任意两个不相同的z那么他们对应的h值也不同。如果对于任意的 y 不等于 z则 HASH(y) 不等于 HASH(z)满足上述定义哈希特性的算法我们也称作具有严格抗碰撞性。如果我们任意给定一个z你都无法找到另外一个z使得其值也等于h满足这样的哈希特性的算法就有弱抗碰撞性。
目前流行的 Hash 算法包括了MD5、SHA-1 和 SHA-2其中MD5被证明不具有强抗碰撞性。SHA Secure Hash Algorithm是一个 Hash 函数族分为SHA-1、SHA-2、SHA-3代表了三代哈希标准目前使用比较多的是SHA-2系列。
第一代的SHA-1 基于 MD4设计并且模仿了该算法SHA-1 已被证明了不具备“强抗碰撞性”,所以安全性不够高。
为了提高安全性,第二代 SHA-2一共包含了 SHA-224、SHA-256、SHA-384和 SHA-512 算法(统称为 SHA-2它们跟 SHA-1 算法原理类似。SHA-3 相关算法也已被提出它的出现并不是要取代SHA-2因为SHA-2目前并没有出现明显的弱点。
由于对MD5、和SHA-1出现成功的破解我们需要一个不同与之前算法可替换的加密散列算法也就是现在的 SHA-3。
1.1 区块链上的哈希算法
哈希算法被广泛地使用在构造和验证区块、交易的完整性上,由于哈希算法的四个特性,使得我们可以把任意的交易数据做成数据摘要,然后再一个一个链接起来,形成数据块的链式结构。
这样我们可以通过验证每个区块间接地验证交易,然后每个交易原数据也可以做成哈希数据摘要,用于验证交易数据的完整性。
我们借用比特币开发者文档中的图,这个图表达了区块链的基本数据结构,
在图中可以看出,当前区块里面包含上一个区块的哈希,形成一个哈希指针链表,由于哈希的发散性,所以这个链表也有极大的发散性。
我们可以用代码模拟一遍我们先列表构造5个简化的区块其中第一个块是创世区块我们规定它指向的前向区块的哈希全为零
后面第2个块第3个块中content分别记录了两笔交易这里为了方便理解我使用了文字表述交易的内容实际上区块链上的交易是二进制格式化的数据而不是文本数据。代码中并没有填充哈希是在运行时填充的。
#!/usr/bin/env python
import hashlib
def main():
# example:
block_headers = [
{"prev_block_hash":"0000000000000000000000000000000000000000000000000000000000000000", "content":"genesis block:A pay C 12.3 BTC"},
{"prev_block_hash":"to_be_hashed", "content":"2nd block:C pay B 2.0 BTC"},
{"prev_block_hash":"to_be_hashed", "content":"3th block:transactions..."},
{"prev_block_hash":"to_be_hashed", "content":"4th block:transactions...j"},
{"prev_block_hash":"to_be_hashed", "content":"5th block:transactions..."}
]
# hash prev block header
index = 0
for header in block_headers:
# genesis block, ignore
if index == 0:
print header
index = index + 1
continue
# generate hash chain
prev_block_header = block_headers[index - 1]
target_buffer = prev_block_header["content"] + prev_block_header["prev_block_hash"]
header["prev_block_hash"] = hashlib.sha256(target_buffer).hexdigest()
print header
index = index + 1
if __name__ == '__main__':
main()
我们可以直接得到结果这是一个典型的哈希指针链表每一个区块的prev_block_hash域指向上一个区块哈希。
{'content': 'genesis block:A pay C 12.3 BTC', 'prev_block_hash': '0000000000000000000000000000000000000000000000000000000000000000'}
{'content': '2nd block:C pay B 2.1 BTC', 'prev_block_hash': '01279c1208a8eca3d4a47a123119b04f1dcc592c818aace2715b2c418b38822a'}
{'content': '3th block:transactions...', 'prev_block_hash': '6d96c220b22371dc1d2b3549da42bd3ea2191f07f18112bf195bc6675bbc6b97'}
{'content': '4th block:transactions...j', 'prev_block_hash': '9e41c61fa151320145a56a38e85c01b8c025729614f4c10596d99068ea0b3395'}
{'content': '5th block:transactions...', 'prev_block_hash': '34f002b445a38fa7402e590629e76943060ffc4de96b1b9bc6b0f564e5a7bc72'}
如果我们将第二块中的content从”C pay B 2.1 BTC” 修改为 “C pay B 2.0 BTC”那么我们将得到如下结果我们可以发现从第三个块往后所有的块指向的前一个区块的哈希都不再与上面的一致。
{'content': 'genesis block:A pay C 12.3 BTC', 'prev_block_hash': '0000000000000000000000000000000000000000000000000000000000000000'}
{'content': '2nd block:C pay B 2.0 BTC', 'prev_block_hash': '01279c1208a8eca3d4a47a123119b04f1dcc592c818aace2715b2c418b38822a'}
{'content': '3th block:transactions...', 'prev_block_hash': 'f91faad6b874fb97a20ad9cbc57ef1302a431a2cce4ac5efe28a64b353526849'}
{'content': '4th block:transactions...j', 'prev_block_hash': '99d17dfe9a9fab68cffd6a82bc3786fe3c2d3165f1fba30b3f2ffc418c97fc8b'}
{'content': '5th block:transactions...', 'prev_block_hash': 'd2f42291ef0811e5babc1d38ca8019ee457f84b323a3d549a04b6a4535357d7f'}
以上我们构造了一个极简的区块链的基本结构,区块头描述了一个区块的基本信息,在实际应用中,里面通常包含了下面的几个内容。
图中有当前区块高度、本区块的哈希、前一区块哈希、nonce值等等。
所以前一区块哈希是一个区块头必备的数据域,这种链式结构具备发散传导性,越往历史以前的篡改,越容易导致大面积的影响,这也叫做历史逆向修改困难。
在PoW共识机制的情况下这种逆向修改的难度会随着当前全网算力线性增长。
1.2 默克尔树Merkle tree
哈希算法的一个重要应用是默克尔树Merkle tree默克尔树是一种数据结构通常是一个二叉树也有可能是多叉树它以特定的方式逐层向上计算直到顶部最顶层叫做默克尔根默克尔树最为常见和最简单的是二叉默克尔树。
默克尔树的基本结构如下图。
(图片来自维基百科)
比特币和以太坊都使用了默克尔树这种数据结构,只不过里面存放的数据都是哈希。我们在比特币的核心版本源码中可以发现注释中有介绍。
图片来自比特币Core源码
以太坊中针对比特币的设计做了改进,叫做默克尔帕特里夏树(Merkle Patricia tree相对于比特币在块头中只有一棵树以太坊有三棵树。
区块链的挖矿算法也应用了哈希算法挖矿算法利用的是其难题友好性我们在PoW共识机制中讲解过这里不再赘述。
2.非对称加密算法
非对称加密算法是相对于对称算法而言的,这两者组成了密码学的核心内容。
这两者的使用区别体现在密钥是否可以公开,对称密钥要求加解密过程均使用相同的密钥,而非对称加密可以提供一对钥匙,私钥自己保管,公钥可以公开。
常见的对称加密算法有 DES、3DES、AES、IDEA 常见的非对称加密算法有RSA、ECC等。
在比特币等众多数字货币的项目中,在账户层面主要使用的是非对称加密算法。
在对称加密算法里,由于双方需要提前共享密钥,在使用过程中有诸多不便,非对称算法的出现解决了这一难题。
在非对称算法中私钥一般是通过一个随机数产生的这个随机数我们也叫做种子从这个角度来说知道了这个随机数也就等于知道了私钥不过私钥的产生范围非常大在比特币中是2的256次方差不多在10的70方数量级上。
如果你产生随机数的算法足够均匀分布私钥碰撞的可能性比中了1亿大奖同时被雷劈中的概率还要小数亿倍。所以区块链对产生随机数的算法要求比较高它要求真实的均匀随机分布而不是计算机伪随机数。
如果我们有了私钥,接下来就如图所示:
我们从私钥到公钥是由非对称加密算法保证的这种算法在比特币中选择的是ECDSA算法ECDSA算法中选择的椭圆曲线名为secp256k1。
而从公钥到地址是由哈希算法保证的在这一步使用了SHA256和RIPEMD160。椭圆曲线加密算法ECC利用了“寻找离散对数”的难解性提供了单向不可逆性具体原理你可以找资料了解一下。
在区块链上一个比特币交易的产生由两部分组成第一部分是签名加锁对应到的是交易的输出、第二部分是解锁花费对应到的是交易的输入当我们构造一笔交易的时候必然会用到私钥这是所有数字货币资产控制权由私钥保证的根本原因。具体逻辑我们留到下篇讲解UTXO的时候讨论。
最后来谈谈量子威胁的内容。我在讨论比特币等众多数字货币项目的时候,很多人会问我如何看待量子计算的威胁问题,大家认为量子计算的强大计算力威胁到了哈希的抗碰撞性。其实这不是一个设计缺陷,而是一个发展问题,是可以在区块链的发展过程中解决的。
我对于量子计算的威胁论有以下的看法。
即使出现了量子计算攻破非对称加密算法的问题那么首先要看是什么算法例如是RSA还是ECC。
其次要看攻击成本是否足够低因为理论上的可行性并不代表工程可行性这是两码事。例如持续攻击比特币要花费1亿美金持续攻击时间超过20年才能生效那么这笔买卖很明显不划算。
量子计算威胁的对象不止加密货币而是整个密码学体系如果发生破解事件很可能是银行、互联网后端系统目前整个互联网应用都基于HTTPS如果HTTPS被破解在量子计算面前传统的账号密码几乎不可用。
量子计算目前发展虽然看起来喜人,但是离实际应用还很远,很多计算其实并非是通用计算,而是专用计算,也就是说一个量子计算机写入的算法只能解决一个特定问题,而且还是概率解,可用性易用性还需要较长时间转化。
总结
今天我向你介绍了哈希算法,讲解了区块链哪些地方使用了哈希算法,并介绍了非对称加密算法,最后还谈了一下我对量子计算威胁论的看法。
密码学是所有区块链的基础,可以说如果没有密码学的支撑,区块链将会退化成普通的分布式日志系统。
那么亲爱的读者,比特币地址有哪些类型呢?以太坊的地址又是如何生成的呢?你可以给我留言,我们一起讨论。感谢你的收听,我们下次再见。
参考阅读:
《区块链技术指南》
《精通比特币》
https://yeasy.gitbooks.io/blockchain_guide/content/crypto/

View File

@ -0,0 +1,199 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第16讲 深入区块链技术(八): UTXO与普通账户模型
我们在第2讲“区块链到底是怎么运行”一文中提到了村长给张三转账的例子那里村长的例子就是UTXO模型的一个简化版本。
评论区里有不少留言在问:“为什么不直接记余额呢?”看来很多人都对这个问题很感兴趣,今天我们就来聊一聊这个话题。
区块链网络中有两种记账模式除了UTXO模型还有 Account Based 结构,也就是普通账户模型,也叫账户余额模型,前者在比特币系的数字货币中被广泛使用,后者更多是用在智能合约型的区块链上。
普通账户模型
我们先从传统的账户模型出发来聊聊是如何记账的假设我们现在有一个支付系统在这个支付系统中有村长和张三两个账户村长账户里有100万现在要转账给张三10万这其中涉及的操作是这样的
检查村长的账户余额是否大于10万
把村长的账户扣除10万变成90万然后发送一笔转账消息给张三的账户
张三的账户接受到转账消息将张三的账户余额加10万。
我们可以发现,无论是村长还是张三,都具有一个余额作为状态,即当前余额是记录在某个地方的,只需要读出来即可,这种设计我们叫做账户余额模型。
如果以上三个步骤是在一个中心化系统中,甚至在同一个数据库中,那将非常简单,会直接退化成一个事务,我们见到的银行账户、信用卡系统、证券交易系统、各种电商类应用,理财类应用基本都是一个中心化系统中的,最多也就是跨表跨数据库。
想必这类场景下的设计,各位工程师对此应该是了如指掌的。
如果以上的步骤中村长和张三的账户分属两个不同的系统例如从A银行到B银行就需要经过人民银行支付系统即可信任的中心化第三方来做中介。
你可能发现了在跨行转账的这种情况下是没有办法做事务的所以1和3是不同步的如果3操作失败还需要从2倒退到1的状态这个情况叫做冲正交易。
普通账户模型具有自定义数据类型的优点但是却需要自己设计事务机制就是上述所说的冲正交易。而接下来所讲的UTXO模型则恰恰相反。
UTXO模型
UTXO全称是“Unspent Transaction Output”这指的是未花费的交易输出。这里面三个单词分别表示 “未花费的”“交易”“输出”接下来我来详细讲解一下UTXO的含义。
UTXO的核心设计思路是无状态它记录的是交易事件而不记录最终状态也就是说只记录变更事件用户需要根据历史记录自行计算余额。
有点像MySQL中的Binlog主从模式的情况下按照Binlog来更新数据Redis的AOF模式备份模式也是如此UTXO也是类似的思路。
下面我们按照按照普通账户中的例子来重新讲解一遍。
如果要记录交易本身那么我们可以构造一笔交易这笔交易中村长转账10万给张三的同时90万转给自己。
如下所示:
村长 100万 > 张三 10万-
 -
        > 村长 90万
这里其实有三条子记录,左边一条,右边两条,左边叫做输入,右边叫做输出。
输入和输出组成了交易,输入和输入需要满足一些约束条件:
任意一个交易必须至少一个输入、一个输出;
输入必须全部移动,不能只使用部分,所以才产生了第二个输出指向村长自己;
输入金额 = 输出金额之和 + 交易手续费,这里必须是等式。
对于村长来说首先构造交易的输入输出满足上述条件然后广播到全网接收方自行判断交易是否属于自己。这里满足约束条件构成的交易模型也就是村长记录的三条转账事件就是UTXO模型。
账户余额模型与UTXO的比较
我们可以归纳出UTXO与普通账户模型的一些区别。
存储空间UTXO占用空间比账户模型高因为账户模型只记录最终状态。
易用性UTXO比较难处理账户模型简单容易理解。例如UTXO在使用上还需要配合高效的UTXO组装算法这个算法要求尽可能降低输入输出的个数还要让“零钱“归整算法的复杂度相比账户余额无疑要高。
安全性UTXO比账户模型要高UTXO本身具备ACID的记账机制而账户模型需要自行处理例如重放攻击。
普通账户模型具有较高的自由度可以让智能合约有更好的发挥空间并且它避免了UTXO的复杂组装逻辑精度控制上也更为得心应手。
UTXO似乎天然是为数字货币设计的具有较高频次跨账户转移场景都使用UTXO会比较好考虑到智能合约的普适性UTXO与智能合约并不能很好地兼容但是这也对开发者的自身水平提出了更高的要求。
区块链中的UTXO模型
我们借用比特币开发者文档中UTXO模型的图示来看看UTXO实际的构造形式。
上图中所有的交易都可以找到前向交易例如TX5的前向交易是TX2TX2中的Output1作为TX5中的Input0。
意思就是TX2中的付款人使用了Output1中指向的比特币转移给 TX5 中的收款人接着TX5中的人又把收到的比特币转移给了TX6中的收款人成为了TX6中 Output0。
我们也可以发现TX6中的收款人还没有产生TX7交易也就是说Output0还没有被花费这时候我们终于得到了UTXO的真正语义Unspent Transaction Output未花费的交易输出。
我们这时候可以发现UTXO也同样能表示余额不过是重演计算的方式它用不同的方式表达了余额我们把一个地址上所有的UTXO全部找出来就是这个地址总的余额了。
我们还可以发现无论是TX5还是TX2都已经成为历史交易它们都忠实客观地记录了两笔交易这两笔交易代表的是事件而不是余额状态转移这是我们看到的最直观的区别。
我们再来看看一个真实的交易例子。
这是区块链上一笔真实交易的例子它记录了一笔450ETP的转账记录。
左边是输入,右边是两笔输出,其中第二个输出是给自己的账户,这和我们村长转账给张三的例子是一样的。
下图是交易解码为JSON格式的样子可以看到Previous_output是放到Inputs数组里的意思就是前向输出作为本次的输入。
{
"hash" : "89e80e14db07c4904a57e2c1efb689bccbbf43942103c1a92166d5c0f27ea3d2",
"height" : 1093399,
"inputs" :
[
{
"address" : "MLWtmjwCtmK44FMwJMSfAkHaEvnnb2N6HX",
"previous_output" :
{
"hash" : "770a72f35d3e3a78bd468949bad649f03b241cf7e2a84cc2d6fdabacdcc47f06",
"index" : 0
},
"script" : "[ 304402202b21d7a79276985dc99777b70fd5095796dad58f35e29a019d2cb6cca5df481802205ffab088a6047f5b6382ba02a0eed4e78ab7950fe264d3774e8b0b357a7593d101 ] [ 03ea3462dc01e7b5569e89737211887035f8f1e99e1fe4332181d83daccaa6d917 ]",
"sequence" : 4294967295
}
],
"lock_time" : "0",
"outputs" :
[
{
"address" : "MGz9yjLLn4AqyraRjSpiP2GmTWKnT3yfiL",
"attachment" :
{
"type" : "etp"
},
"index" : 0,
"locked_height_range" : 0,
"script" : "dup hash160 [ 63ab0013d183f2592e4b46a358df01e88a09c0b8 ] equalverify checksig",
"value" : 45000000000
},
{
"address" : "MLWtmjwCtmK44FMwJMSfAkHaEvnnb2N6HX",
"attachment" :
{
"type" : "etp"
},
"index" : 1,
"locked_height_range" : 0,
"script" : "dup hash160 [ 8a63941b392771c40f1c15e4374808f6bb464cba ] equalverify checksig",
"value" : 118082150283
}
],
"version" : "2"
}
我们再看看比特币上的例子:
这一笔比特币交易包含6个输入几十个输出交易一共3.5kb,交易的输入输出会影响交易大小,比特币的交易费是根据字节收费的,交易尺寸越大越贵,而交易尺寸主要和输入输出的个数有关,也就是说,算法上并不规定输入输出的个数,而只有区块尺寸限制。
在比特币中将小于100kb的交易称为标准交易超过100kb的称为非标准交易。它的前向input以及生成一个out约占用161~250 bytes 。所以在比特币中大约的inputs/ouputs的最大数目限制为 100KB/161B ~= 600个。
UTXO的特性及缺点
从计算的角度来说UTXO具有非常好的并行支付能力也就是我们上文中所说的如果没有尺寸限制一笔交易可以包含任意笔输入输出同时也没有次序要求在一笔交易中哪一个UTXO在前哪个在后面不影响最终结果。
从存储的角度来说UTXO具有较好的可裁剪特性可裁剪性指的是UTXO类型的交易如果从最老的那一笔UTXO开始截断数据库那么之前的数据可以删除掉了。
如果想进一步压缩数据尺寸可以在任意位置截断记录UTXO对应的交易哈希即可然后从其他节点获取并校验UTXO这也是SPV轻钱包工作的基础之一。
以太坊中并没有使用比特币的这种UTXO设计这与以太坊的宗旨有关以太坊的目标是构建通用计算而比特币是数字货币需求不同导致设计的不同。
V神指出了UTXO的缺陷一共有三类。
1.可表达的状态少 。
UTXO只能是已花费或者未花费状态这就没有给需要任何其它内部状态的多阶段合约或者脚本留出生存空间这也意味着UTXO只能用于建立简单的、一次性的合约UTXO更像是一种二进制控制位。
2.区块链盲点Blockchain-blindness
UTXO的脚本只能看到自己这条历史轨迹无法看到区块链的数据的全貌这导致了功能性扩展受到了限制我们在花费比特币的过程中需要小心翼翼的组合UTXO这也导致了系统状态逻辑复杂不适合设计成智能合约的基础结构。
3.价值盲点Value-blindness
UTXO脚本不能提供非常精细的金额控制基于账户模型的余额在花费过程中可以任意的按值存取它仅取决于程序能表示的最小精度。
而UTXO要求必须全部移动如果要满足一个目标值金额对组合UTXO算法的要求会比较高采用许多有不同面值的UTXO一方面要求尽可能地精确另一方面又要求输入输出的数量尽可能的小。
UTXO是比特币上的原生设计在区块链以前是没有这种逻辑数据结构UTXO的出现给了人们看待数据转移的不同视角但UTXO不是所有区块链所必需的公链开发过程中的是否选用UTXO模型可以根据业务场景进行判断。
总结
好了今天我们分别介绍了普通账户模型和UTXO模型并从不同角度比较了二者的优劣。
从技术选择上来看比特币选择UTXO是为了满足支付的安全性以太坊选择普通账户模型是为了智能合约的自由度。
最后留给你一个问题历史上UTXO或账户模型是否引发过比较严重的使用缺陷呢你可以给我留言我们一起讨论感谢你的收听我们下期再见。

View File

@ -0,0 +1,133 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第17讲 去中心化与区块链交易性能
第17讲 去中心化与区块链交易性能
通过前面的文章我们了解了一些区块链的基本技术细节,今天这篇文章我将带你一起看看区块链争议的最大内容——去中心化与区块链交易性能。
比特币和以太坊的TPS一直被技术领域的人所诟病或许这与工程师“高性能高并发”的情节有关。
那么说去中心化与高性能TPS是否真的可以做到鱼和熊掌的兼具呢区块链业界又采取了哪些方案进行改善呢围绕这两个主题我们开始聊聊今天的话题。
再谈去中心化
说到区块链的最大标签,莫过于“去中心化”,在任何讨论区块链的场合,这个词几乎都会被提起。
今年3月份全球顶级数字资产交易平台OKEX的负责人徐明星曾经发文他表示业界应该避免使用“去中心化”这样的词汇而改用“点对点”“点对点”一词后来甚至被直接冠到了比特币白皮书的标题上。
去中心化与点对点有区别吗?我认为是有的,去中心化是包含了一定政治主观色彩的词汇,点对点只是一个中性词汇,更适合用来描述系统的性质。
去中心化这种说法树立了一个无形的靶子,这个靶子可大可小,大到政府机关,小到小商小贩。
正如我们说的是P2P网络而不是去中心化网络。所以在技术领域使用点对点而不是去中心化可以避免这种概念被过度消费
说到了“过度消费”,我认为“去中心化”已经演变成了区块链行业对外宣传的消费概念,这是一种情怀消费,它消费了人们对强权者的不满,例如店大欺客的商家、死皮赖脸的中间商、缺乏诚信的供应商。
这些内容,你或多或少都在生活中经历过,当“去中心化”的口号响起的时候,人们终于找到了一个发泄口,强烈的共鸣放大了区块链的光环,造成了区块链能掀起一场大革新的错觉。
革新肯定是有的,但去中心化只是表象,如果我们加深层次去理解,就可以发现数字货币和数字资产带来更多的是交易效率的成倍提升。
人类的现代文明是建立在交易的基础上的没有交易就意味着直接回到了农耕社会。所以交易效率的提升才是区块链的根本所在那么说区块链本来是这样看似低效的TPS为什么说它提高了交易效率呢
我们先回到传统的交易模式来看一看。
交易首先是基于中心化平台的,当我们进入某个中心化平台,在这个平台内部,交易效率是提升了,但是我们回顾整个交易的生命周期,就会发现这个平台可能只是交易的一环,平台和平台之间的协作似乎并不是那么顺畅。
跨境支付便是典型的例子市值长居Top3的区块链项目Ripple就是为了解决跨境支付的难题而产生的。
我们再来看区块链点对点的交易模式它的TPS看似低效但是它提供了全局无缝衔接的资产流转过程这减少了整个交易生命周期的步骤这也是区块链提升交易效率的关键所在。
所以说,虽然中心化系统能提供优秀的高性能服务,但是慢在人工审核、平台之间衔接、内部审计,平台之间的协作业务推进,想必你一定也深有体会。
技术上的去中心化
我们在聊DPOS共识机制的时候提到过一个TPS的计算公式
TPS = (block_size * network_bandwidth * witness_performance) /-
(block_time * witness_count)
其中witness_count 记账节点的数目与准入门槛在业界的争议比较大,如果完全去中心化的话,首先就意味着记账节点没有准入门槛,记账的节点可以无限多,当然这只是一个理想环境,工程实施的可行性几乎为零。
比特币全球的全节点1.2万个大大小小的挖矿节点只有几十个常出块的只有5大矿池但是比特币依然没有限制记账节点的准入门槛以太坊也是如此。而在EOS中既规定了记账节点的数目又规定了门槛。
可以这么说控制了记账节点的数量和准入门槛就等于决定了区块链TPS的大小。
为了帮助你深层次地理解去中心化与TPS的关系这时候我们再次回到之前一直提到的CAP定理中。
CAP定理中C为最终一致性决定了出块时间的长短。A是可用性这个是必选的必须要保证区块链7 X 24 X 365全部可用。
P是网络分区容忍性P的含义在区块链上有两层第一层是必须保证分区可容忍也就是一旦出现因为网络分区而导致区块链分叉必须有一种机制可以合并区块链第二层含义是如果我们尽量避免出现网络分区那么就可以避免P的出现从而提升C的性能。
C和P是可以相互调整的有两种情况。
情况1如果我们选择调整C也就是拉长了最终一致性的确认时间那么对P的要求就会减弱也就是网络产生分区不要紧反正区块链有足够的时间恢复最终一致性。
情况2如果我们选择调整P也就是限制较少的记账节点的数量并且对记账节点之间的带宽提出要求降低出现网络分区的可能性那么对C的要求就会减弱就可以降低出块时间。
情况1就是比特币和以太坊的典型思路情况2就是EOS的典型思路。
区块链属于分布式系统通过简单分析我们可以知道区块链交易TPS与去中心化的具有不可调和性任何一个号称TPS过万的区块链项目肯定是极其中心化的至少技术上是的
所以,那些试图兼具高性能与去中心化的工作大多都是徒劳的。
各个区块链的TPS指标
我们接下来看看一些区块链项目的TPS指标。
图中是TPS都在千笔以上的区块链项目通过控制了记账节点的数量牺牲了去中心化特性提升了TPS比如石墨烯系列的DPOSRipple的共识。
如果我们把CAP做一个可视化处理就构建出来一个三角形分布我们可以得到下图
从图中我们可以看出PoW、PoS型公链偏好AP特性于是TPS有限。联盟链以及DPoS型共识偏好比较均匀可以达到可观的TPS。
传统数据中心往往不考虑P在第二层语义上的问题更不考虑拜占庭容错问题所以他们拥有更好的TPS但是在网络分区和出现拜占庭错误的时候表现得不尽如人意。
这些共识机制在不同场景中可以有不同的选择,不存在适用所有场景的的共识机制。
业界的可选方案之一Sharding 分片
好了我们在上文讨论了CAP定理对区块链的影响那么业界也还是使出了浑身解数来尽可能地提升TPS。
目前一共有两种正在讨论的方案分别是Sharding分片技术和闪电网络。闪电网络旨在解决比特币微小额支付的实时性问题其中的算法是比特币TPS扩展的一种方案这部分的详细内容我们留到比特币专题再进行讲解。
这两种方案不涉及修改共识机制。如果我们修改为DPoS共识机制、DAG共识算法也可以提升TPS不过不在本篇的讨论范围。DAG共识机制我们在后续文章进行深入讨论。
分片技术是一种安装传统数据库分片的扩展,主要思路是将数据库分成多个分区(碎片)并将分区放置在不同的服务器上。
在区块链场景下,全网的节点相当于于分布式数据库中的不同服务器,这时候我们可以将交易分成不同的部分,然后每个记账节点只需要验证交易的一部分即可,而不必验证完整的交易性。
这带来的好处是就是并行化处理,记账节点之间相当于是协作关系,而不再是单纯的独立关系。
随着网络的增长,这种协作关系也可以随之扩展,这种扩展也叫做水平扩容。
分片技术有以下优势首先是TPS可以从十几笔提升至少两个数量级也就是千笔每秒这不但对应用友好也提升了用户体验其次TPS的提升可以带来更多应用这些应用在共识的激励下可以水平扩展区块链的性能形成一种良性循环。
下面我介绍一下分片的两种方案:状态分片、网络分片。
第一种方案是是网络分片网络分片是我们按照网络进行分区区域内的交易归集在一起并在区域内进行验证这样区域内的用户可以享受低延迟高吞吐的TPS但是会带来跨区域分片的复杂性。我们也可以将网络分片比喻成数据库集群分区。
其次是状态分片,状态分片是在以太坊上提出的方案,状态分片目前没有确切的技术方案,尚在研究讨论阶段。
我们可以简单类比数据库的分表。我们将同一张表的数据塞到不同的节点,这些节点分布在全世界各地并且没有可信的网络环境。所以状态分片是非常复杂的技术,实践的最终结果我们需要看以太坊后续的动作。
总结
好了,今天我们再次讨论了去中心与高性能区块链的问题,因为有了前面文章的储备,这次我们更深入地讨论了去中心化的深层次逻辑,并从技术理论上重新剖析了去中心化的涵义。
接着我们还比较了各个区块链的性能指标最后我们提到了一个提升TPS的备选方案。希望读完本篇可以让你对区块链去中心化和性能有更深层次的认识。
本期的问题是还存在哪些提升TPS的方案呢各有什么样的优劣你可以给我留言我们一起讨论。
感谢你的收听,我们下期再见。

View File

@ -0,0 +1,149 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第18讲 智能合约与以太坊
在前面的文章里,我们介绍了区块链的核心技术,也穿插介绍了一些项目。然而每个区块链都有自己的特色,接下来我们将针对每个项目进行详细讲解。今天我们就来讲讲智能合约和以太坊项目。
今天我们从智能合约这个概念入手,聊聊什么是以太坊项目以及它的发展历史。最后还会介绍几款钱包给你,希望通过今天文章的讲解,你也可以尝试在以太坊上编写简单的智能合约。
智能合约的概念
不同于法律意义上的合约概念,区块链领域的合约表达的是可以“自治自理”的 计算机协议,这套协议具有自我执行、自我验证的属性。
如果完全从技术角度来看,智能合约等价于一段事先就被规定好逻辑和条款的计算机代码被激活运行的状态,同时,智能合约也提供了通用的用户接口,用户可以通过接口与用户交互。
智能合约这一概念早在20世纪90年代就有人提出这个人是从事智能合约和数字货币研究的尼克萨博Nick Szabo博士尼克1996年在《Extopy》期刊上发表了对智能合约的描述他认为智能合约是一个由数字表单指定的承诺这个承诺包含关系到多方执行的一组协议。
从定义中我们可以得知,智能合约由多个协议组成,这些协议包含了用户接口,能表达用户的承诺,它可以安全有效地确定公共网络上的关系。
换句话说,智能合约是一个由计算机处理、可执行合约条款的交易协议,其总体目标是满足协议既定的条件,例如支付、抵押、保密协议。这可以降低合约欺诈造成的损失,降低仲裁和强制执行所产生的成本以及其他的交易成本。
我们举个实际的例子解释一下今年4月9日上海某建设银行支行开放了“无人银行”银行中充斥了众多机器和显示屏智慧柜员机、VTM机、外汇兑换机、VR设备和两台机器人代替了传统的柜台。
这里的智慧柜员机、外汇兑换机器人众多电子设备都可以认为是智能合约的一种表现形式,用户在办理银行业务时,如办理大额汇兑业务,业务流程和逻辑依据已经定在程序中,用户只需要按照操作一步一步进行,办理完成后即可获得单据。
这里“既定的业务流程、机器人模样的人机交互界面、双方同意承诺”组成了智能合约的概念,它甚至具有一定的法律效力。
萨博提出的是智能合约的概念以及我们举的例子都是广义的智能合约概念。智能合约具有多种实践形式而在区块领域所说的智能合约概念我们其实是指Blockchain-based这种形式。
在萨博的智能合约概念中提到了开放式网络,而我们知道开放式网络的基本要求就是拜占庭容错,通过前面文章的讲解我们知道,区块链天然具有拜占庭容错特性。所以如果在区块链上实践智能合约这个概念,两者会非常契合,天造地设。
首先实践了智能合约这一概念的是比特币比特币脚本bitcoin script包含了5种标准交易脚本这些脚本的功能不仅仅提供了普通单人支付的情况它还提供了多方共同签名支付的脚本叫做多重签名支付多重签名支付可以看成是萨博语义下的智能合约。
除了比特币,发扬光大智能合约这个概念的区块链项目就是以太坊了,下面,我重点来介绍一下以太坊项目。
以太坊及其发展历史
以太坊Ethereum项目的目标是打造一个去中心化的新一代互联网应用平台这个平台称作Dapp平台。
这些Dapp基于以太坊智能合约虚拟机开发、编译、部署并且可以自定义业务逻辑部署后全网可见且自动执行理想情况下不存在宕机、审查、欺诈、第三方干预的情况。
2013年底以太坊的创始人Vitalik在比特币开发者社区提出了可以运行图灵完备Turing-complete形式的应用但这一思想并没有得到比特币社区的支持。
2014年Vitalik带着自己的想法宣布以太坊项目正式成立2014年上半年开始筹集资金聚拢一些早期开发者同年7月份进行了为期42天的ICO共筹集了超过1800万美元的比特币。
2015年7月第一个版本的以太坊发布主网正式上线这一阶段Bug和设计缺陷较多多是开发者在使用。
2016年以太坊发布第二个大版本Homestead用户逐渐多了起来同期也吸纳了不少Dapp开发者。
2016年6月以太坊上发生了著名的黑天鹅事件——TheDAO事件这打开了ICO市场同时也造成了以太坊社区分叉形成了以太坊和以太坊经典两个代币。
2017年4月ICO风靡中国ERC20提供了低成本方便高效的资金募集方式为ICO提供了极大的便利趁着数字货币牛市以太坊的价格涨幅达十多倍2018年1月以太坊价格突破1000美元。
以太坊的核心概念
以太坊核心概念包括智能合约虚拟机EVM和Solidity编程语言、账户模型、以太币和Gas交易和消息。
1.智能合约虚拟机EVM和Solidity编程语言
以太坊的核心概念首先是智能合约。
智能合约包含两部分一部分是开发语言主要以Solidity为主Solidity与Javascript语言在使用上十分接近这极大地降低了Dapp开发人员的学习成本。
Dapp开发者编写好代码以后使用Solidity编译成十六进制字节码然后部署到EVM上也就是把合约广播到全网等矿工打包后就形成了常年运行的Dapp了。
另一部分就是EVM。 EVM是以太坊智能合约虚拟机我们可以等价理解它为Javascript、Python等脚本语言的执行引擎。
它是一个轻量级的虚拟机隔离环境它并不提供访问本地网络、进程、文件系统的功能它更像是一个封闭的容器这个容器里面装了一个正在运行Dapp可以看成是无法和外界交互的Docker Container。
Dapp在运行过程中可以被请求或其他事件触发然后执行相应的逻辑这些请求和事件是由以太坊上的交易产生的不是来自本地操作系统的事件。
Dapp运行过程中每次状态发生变化则意味着全网同步更新大家的计算结果都是一致的这有两个特性
所有Dapp的计算结果经过全网共识一旦确认过几乎无法被伪造和篡改
由于必须经过全网共识,所以这限制了整个网络的容量。
2.账户模型
以太坊并没有采用UTXO模型也不同于银行账户它是由以太坊开发者设计了自己的账户模型。
以太坊上的账户有两种类型第一类叫做合约账户CAContracts Accounts)第二类叫做外部账户EOAExternally Owned Accounts
简单理解就是CA是智能合约代码用的账户EOA是人用的账户所以CA可以存储并执行智能合约代码它的智能被EOA激活它也不保存和存储私钥合约账户可以调用其他合约。
EOA则是人们直接控制的账户可以存储以太币可以发送交易到合约账户触发既定的逻辑。EOA账户由公钥标识由对应的私钥控制。
当合约账户被调用时存储其中的智能合约可以在矿工处的虚拟机中自动执行并消耗Gas如果Gas不足则会触发“Out of Gas”异常被终止执行。
无论是CA还是EOA在以太坊内部都被看做状态对象state objects意思就是说这些账户都有自己的状态EOA具有以太币余额的状态而CA除了余额还多了合约存储状态。
3.以太币和Gas
Gas是执行智能合约操作的燃料智能合约的每一个步骤都会消耗GasGas是由以太坊的平台代币以太币转化而来最小单位是wei1ETH 相当于 10的18次方 wei。
以太币可以通过PoW挖矿而产生目前以太坊主要通过GPU挖矿。挖出一个块可以换得5个以太币并且还有一定的交易费、以及叔伯块的奖励。今年4月6日爆出著名矿机芯片厂商比特大陆已经开发出针对以太坊的ASIC专业矿机相比GPU的效率提升2.5倍。
4.交易和消息
以太坊上的交易与比特币中的UTXO交易不同它是指EOA账户将一个经过签名的数据包发送到另外一个账户的过程这个过程产生的账户状态变化将被存储到以太坊区块链上。
以太坊上除了交易还有消息这个概念,消息指一个合约账户调用其他合约账户的过程,可以类比函数调用过程。
所以以太坊上的Dapp如果被触发有两种可能第一种是交易触发第二种是消息触发。
这两种的区别在于前者是EOA发起的后者只能是其他合约账户发起的。
状态对象的状态变化被以太坊共识机制的记录下来交易和消息驱动着状态的变化于是在一个开放式的网络中构建一个全球共享的Dapp变得十分方便。
以太坊上智能合约具有全网准实时同步、准确执行、去中心化运行、较低的人为干预风险等特性EVM和Solidity为全球开发者提供了较低的进入门槛。
与比特币的主要区别
以太坊项目又被称作区块链2.0项目这里2.0就是指智能合约。那么以太坊与比特币相比,到底智能在那里呢?我们具体来看看。
与比特币相比以太坊首先不是一个单纯的数字货币项目它可以提供全世界无差别的区块链智能合约应用平台这个平台基于我们前面文章所介绍的区块链四大核心技术要素即P2P网络、共识机制、账户模型、加密模块。
除了以上的四个技术要素以太坊还推出了EVM——以太坊智能合约虚拟机并且它还推出了自己的智能合约语言Solidity。
于是区块链的开发者因为智能合约的出现开始分为两类。第一类是公链底层开发者主要是以C++和Go语言为主的全节点开发者他们需要对区块链各个技术模块有很深的理解。
第二类是智能合约开发者也就是应用开发者这类开发者对区块链的运行原理不需要理解很深只需要会编写Solidity了解规范即可。
除了以太坊智能合约这个概念以外,它还设计了下面的内容。
研究并实现了自己的PoW挖矿算法——ETHASH这是一个内存困难型的挖矿算法。
叔伯块激励机制,降低了挖矿中心化的趋势。 取消了UTXO模型采用了账户模型和世界状态提供了数据结构的可塑性。
设计了Gas机制避免程序死循环消耗全网资源的情况出现。 研究并实现了自己的PoS共识算法——Casper可防止Nothing-at-Stake攻击。
以太坊提供了在区块链自由编程的能力智能合约让所有人得以开发属于自己的Dapp这是与比特币作为单纯的数字货币所不具有的能力。
总结
本篇我们介绍了智能合约的概念以及以太坊项目,并且讲解了与比特币的主要区别,以太坊上的一些核心概念,下一篇我们将结合实际案例讲解智能合约,带领你认识一些智能合约模板,并顺便介绍一下其他区块链智能合约平台。
亲爱的读者快来构想一下属于自己的智能合约Dapp吧。你可以给我留言我们一起讨论。
参考链接:
https://en.wikipedia.org/wiki/Smart_contract http://tech.ifeng.com/a/20180413/44947993_0.shtml

View File

@ -0,0 +1,266 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第19讲 上手搭建一条自己的智能合约
上一篇我们聊到了区块链智能合约,我主要介绍了智能合约的概念,但是并没有给你提供智能合约的实际运行案例,那么今天,我们就自己动手写一个智能合约,并且介绍一下智能合约标准模板,供你参考学习, 并搭建起自己的智能合约。
本篇将以以太坊作为基础知识进行讲解,本篇面向没有任何智能合约基础的人群,所以配备了较多的插图和操作命令,如果你正在收听音频,可以点击文稿查看,希望读完这篇文章可以帮助你快速入门智能合约。
搭建一条智能合约
在实际操作智能合约之前我们首先回顾一下以太坊以太坊又称以太坊钱包。以太坊钱包提供了包括账户管理以太坊转账、Dapp部署与使用在内的一些常规功能。
以太坊社区提供了多种语言实现的客户端和开发库多数客户端支持JSON-RPC2.0标准目前支持的客户版本有Go-ethereumGo语言、ParityRust语言、Cpp-ethereumC++语言、Ethereum-libJavascript)、EthererumJ(Java语言)、PyethappPython语言),基本涵盖了主流编程语言。
图片来自以太坊官方文档
官方推荐使用的版本是Go-ethererum这是Go语言实现的版本又称Geth客户端。
需要提醒你的是这里客户端的实现语言并不是要求用户熟悉相应的编程语言这里的用户是指Dapp开发者比如在操作Geth客户端的时候用户其实并不需要了解Go语言。
1.下载与安装Geth
本文使用Geth来进行测试首先我们要获取Geth客户端如果用户使用的是Ubuntu环境的话可以直接从PPA安装。
# apt-get install software-properties-common
# add-apt-repository -y ppa:ethereum/ethereum
# apt-get update
# apt-get install ethereum
安装成功后我们可以查看Geth的版本。
表示我们已经安装成功,当然你可以也可以编译安装,由于篇幅有限,你可以另寻资料进行尝试。
2.搭建以太坊私链
如果在以太坊的主网上运行和开发测试智能合约这是不明智的因为会消耗真实的以太币不过我们可以使用Geth搭建一条属于自己的以太坊区块链也就是以太坊私链。
怎么搭建呢?其实很简单,只需要修改配置文件和一些运行参数即可。
{
"config": {
"chainId": 98,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"difficulty": "200000000",
"gasLimit": "2100000",
"alloc": {
"7df9a875a174b3bc565e6424a0050ebc1b2d1d82": { "balance": "300000" },
"f41c74c9ae680c1aa78f42e5647a62f353b7bdde": { "balance": "400000" }
}
}
然后执行:
$ geth --datadir /root/geth-test/ init genesis.json
这样,我们就初始化了属于自己的创世区块信息。
接下来我们创建一个账户由于是用户私链挖矿只有你一个人挖矿所以使用CPU挖矿完全没有问题。
我们通过如下命令进入Geth命令行交互页面
$ geth --datadir /root/geth-test/ --networkid 98 console
如上图所示的那样,运行通过。
personal.newAccount()
我们创建了一个新账户这个账户就是EOA账户并通过eth.getBalance获取了当前地址的余额显示为0。
输入Exit退出后我们开始以挖矿模式启动这里我们最好记录一下我们的地址
【0xf8f7ff845596f0bab1e973859bfcaec6cd2a82ab】
我们使用如下命令启动挖矿注意在Etherbase的地方填上述地址
$ geth --datadir /root/geth-test/ --networkid 98 --mine --minerthreads=1 --etherbase=0xf8f7ff845596f0bab1e973859bfcaec6cd2a82ab
以太坊的PoW挖矿算法是内存困难型的首先需要生成DAG这个视你设备的性能而定需要耗费一定时间请耐心等待如下图所示我们可以看到DAG生成非常耗费时间。
在我的远程开发机上一共耗费了6分半又经过了4分钟我挖到了第一个块如下图所示。
这期间机器的负载如下。
可以看到CPU和内存占用很高我这里使用测试的机器是2Core 4GB Ubuntu16.04。
现在我们再去检查一下Etherbase所指向地址的余额。
可以看到已经有5个以太币了以太币的最小单位wei所以5后面18个零表示5个以太币。
3.编写并部署属于自己的智能合约
智能合约的开发与钱包是独立的用户可以使用IDE进行调试等操作目前Dapp的IDE并不多常见有Truffle、Embark、Remix几种
这篇文章中我并不使用IDE这里仅仅会给出一些示例代码即经典的Hello Word你如果想尝试编写自己的智能合约可以使用在线IDE。
https://ethereum.github.io/browser-solidity/。
首先我们要获取Solidity编译器通过 apt-get install solc 来安装。
安装成功后我们新建一个Solidity源码文件命名为helloword.sol并且写入代码如下。
pragma solidity ^0.4.11;
contract helloWorld {
function renderHelloWorld () returns (string) {
return 'helloWorld';
}
}
执行 solc bin helloword.sol 获得EVM二进制码。
编译器警告我们暂时不必理会接下来我们还需要生成ABI部署参数使用命令 solc abi helloword.sol。
开始部署我们进入console
定义code和abi两个变量如下注意code的值最前面有0x二进制数据是用十六进制表示的。
>code="0x6060604052341561000f57600080fd5b6101578061001e6000396000f300606060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063942ae0a714610046575b600080fd5b341561005157600080fd5b6100596100d4565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561009957808201518184015260208101905061007e565b50505050905090810190601f1680156100c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6100dc610117565b6040805190810160405280600a81526020017f68656c6c6f576f726c6400000000000000000000000000000000000000000000815250905090565b6020604051908101604052806000815250905600a165627a7a72305820fcce0b6910e479539e4796b7d56620a6f90e03ba47449c843bec54958f68bf700029"
>abi=[{"constant":false,"inputs":[],"name":"renderHelloWorld","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]
你可以在控制台分别执行,由于结果比较长,这里就不放出来了。
// 这一步解锁账户,用于方便部署合约
>personal.unlockAccount("0xf8f7ff845596f0bab1e973859bfcaec6cd2a82ab")
// 使用上述定义的abi变量生成合约信息
>myHelloWorld=eth.contract(abi)
// 注入code信息激活合约
>contract=myHelloWorld.new({from:"0xf8f7ff845596f0bab1e973859bfcaec6cd2a82ab",data:code,gas:1000000})
最终执行结果如下。
我们可以通过txpool来查看未确认的交易。
接下来只要等待出块即可,你的合约就会成为正常运行的合约了,否则合约还不可以调用。
由于我本地挖矿出块异常缓慢所以我尝试了Remix IDE运行后我们可以得到如下结果。
至此一个简单的HelloWord智能合约就生成啦不过它的运行成本非常高昂所以我们极力建议使用在一些方便的虚拟环境中。
智能合约标准模板
当任何人都可以写代码自定义业务逻辑的时候,也就意味着需要一套标准让人们降低开发门槛,标准化的接口让产品之间可以协作。那么我们接下来就来讨论一下以太坊上的三种智能合约标准模板。
这三种模板都与Token有关。那么首先我们就来区分一下数字货币与Token的概念数字货币一般指一个区块链项目的平台代币比如以太坊上的以太币元界上的ETP都是基础代币。
而Token往往代表了一种资产这些资产在已经存在的其他区块链之上运行资产还可以像商品一样交易例如消费积分、游戏虚拟资产。Token离具体的区块链应用也会更近因为区块链应用的项目方通常也是Token的发行方。
目前最广泛使用的三种Token标准都是基于以太坊的它们分别是ERC20、ERC223、ERC721。这里的ERC表示Ethereum Request for Comments翻译过来就是以太坊意见征求稿。
1.ERC20
2015年11月V神在Github上提交了ERC20代币的技术标准随后2016年到2017年大量的区块链项目都使用ERC20作为工具进行ICO。这使得ERC20成为了区块链整个行业内的Token标准可见这种标准的影响之大。
实际上ERC20代币是一类运行在以太坊区块链上的智能合约只不过这些合约代码遵循一定的规范这个规范就是ERC20标准它规定了跨Dapp转移Token、Token交易以及一些使用接口。
ERC20一共定义了6个函数和两个触发事件他们都是使用Solidity语言编写的。
6个函数描述了如何转移以及Token的相关数据如何被访问市面上99%的ERC20 Token都可以找到这6个函数。2个事件提供了Approve和Transfer的格式化输出。
下面我们重点看一看ERC20的接口。
// ---------------------------------------------
// ERC Token Standard #20 Interface
// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
// -------------------------------------------
contract ERC20Interface {
function totalSupply() public constant returns (uint);
function balanceOf(address tokenOwner) public constant returns (uint balance);
function allowance(address tokenOwner, address spender) public constant returns (uint remaining);
function transfer(address to, uint tokens) public returns (bool success);
function approve(address spender, uint tokens) public returns (bool success);
function transferFrom(address from, address to, uint tokens) public returns (bool success);
event Transfer(address indexed from, address indexed to, uint tokens);
event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}
Allowance允许多次创建两个不同的地址之间的单向交易Token的拥有者可以从此智能合约中提取Token
Approve这个函数需要引用Allowance顾名思义它定义了Token的拥有者同意创建属于自己的交易这个函数要求两个参数作为输入分别是花费者的地址以及发送金额
BalanceOf定义了查询目标地址账户余额的接口
Transfer和TransferFrom定义了Token如何转移以及执行转移过程
TotalSupply定义了这个Token最大发行量。
上面我们简要介绍了ERC20标准合约的接口下面我们来看看升级版的ERC20。
2.ERC223
在某些情况下ERC20也有些缺陷。例如某人使用ERC20发送100个Token到另外一个账户如果目标账户是一个合约账户目标账户的合约代码如果不兼容ERC20 标准怎么办呢?
这一点非常有可能,由于合约代码无法识别交易,所以这笔交易就会被拒绝。
我们知道以太坊使用的并不是UTXO这意味着合约之间不满足ACID那么很遗憾发送方的这100个Token就永久地丢失了。
为了解决这个问题非官方的社区开发者提交了ERC223模板可以解决这个问题使用者需要把既存的ERC20合约升级到ERC223合约。
3.ERC721
2018年初有一个区块链游戏火了叫做以太坊养猫游戏这个游戏也是一个智能合约。它基于ERC721标准实际上它也是一种Token标准。
ERC721与ERC20最大的区别是ERC721定义了每一份Token都是唯一的它们有唯一的标识。例如芒果和米饭是两种不同属性的资产从物理世界来看他们是不能直接混在一起使用的我们不能把芒果加到大米中。
这样一来ERC721中Token的含义也转变成了一种物权所有权凭证不再是ERC20中的同质资产。
总结
今天我们介绍了以太坊钱包,手把手教你搭建了一条以太坊私链,并告诉你如何编译和部署智能合约,最后我还介绍了三种流行的智能合约模板,希望能帮助你上手并能深入地理解智能合约。
今天的问题是,除了以太坊之外,还有哪些主打智能合约的区块链项目呢?你可以给我留言,我们一起讨论。感谢你的收听,我们下次再见。
参考链接:
http://www.ethdocs.org/en/latest/ethereum-clients/go-ethereum/index.html
https://github.com/ethereum/wiki/wiki/JSON-RPC
http://remix.ethereum.org
https://github.com/ethereum/go-ethereum/wiki/Private-network
https://theethereum.wiki/w/index.php/ERC20_Token_Standard

View File

@ -0,0 +1,133 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第20讲 区块链项目详解比特股BTS
前面两篇我们都聊了智能合约的话题,智能合约可以说是当下区块链最热的概念了,在多数人眼里,没有智能合约的区块链价值几乎就大打折扣。
那么说,实际上是不是这样呢,我们今天就来聊聊一个并没有开放式智能合约的区块链项目——比特股。
比特股发布于2014年虽然没有引入智能合约的概念但它提供了功能极为丰富的金融类工具比特股上所有的金融合约都是事先在代码里写好的所以说它的本身就是一个超级智能合约集合。
什么是比特股
比特股是一个公开透明的、7*24小时不间断运行的、基于区块链技术的去中心化交易平台。
它兼具了区块链的优点,也是第一个有关稳定数字货币的尝试,目前比特股提供了若干核心的金融服务,例如支付、撮合交易、资产存托等服务。
相较于传统的金融IT系统它的服务器是由分散在世界各地的受托人Delegated维护的即使其中一些人被攻击也不会导致整个系统的宕机。
比特股目前全网在线的服务器有27个由于DPoS共识算法提供了较好的交易吞吐性能理论上比特股的TPS可达10万这也是比特股在技术上区别于其他区块链的最显著特征。比特股较好的TPS其实也是为了它的功能服务的。
在这里,我们能看出比特股平台的性质。
首先比特股平台是一个交易平台交易平台的显著特征是整个市场对时间敏感大家都希望下单之后快速成交所以高TPS是一个交易平台的基本需求。
其次,比特股是去中心化的交易平台。目前流行的中心化数字货币交易平台最大的问题是资金管理系统和撮合系统都由同一家控制的。
然而在传统的证券交易领域,证券登记和交易撮合是两个不同的主体,他们之间是协作关系,共同受到证券会的管辖。
所以,如果你的数字货币存在中心化交易平台,你的交易撮合也受它来控制,这里的交易撮合指的是一个交易双方通过挂出买单和卖单,系统完成撮合匹配直至最终成交的过程。
由于以上的这一切都是不透明的,这里面就有很多的不确定因素。
比如交易平台跑路风险、黑客攻击、资产莫名其妙丢失,或者撮合的过程中,交易对手方是谁,是否有内幕交易。这些情况都会带来较大的风险。
比特股的两个机制
那么比特股是如何设计中心化交易所来避免上述风险的呢?
比特股作为一个去中心化的交易所,它有两个机制可以避免上述的风险。
第一、资金出入是由承兑商来支持的,人人都可以成为承兑商,也就是人人承兑; 第二、锚定机制提供了稳定货币的出入金过程,锚定机制也保证了比特股的出入资金和交易撮合是分离的,避免了中心化交易平台的弊端。
这个过程可以简述为:法币<—>锚定资产(系统内置货币)<—>bts 的相互转换。从法币到系统内置货币用到了人人承兑机制从系统内置货币到bts的转换用到了锚定机制。
这里的bts是比特股上流通的平台代币它和比特币一样有类似的总量上限设定大约在36亿左右目前流通量26亿左右。我们接下来就来看看这两个机制。
1.人人承兑
人人承兑就是提供了从法币到系统内置货币的转换,比特股系统内置了多种货币,它锚定了多数法币。
例如bitCNY、bitUSD、bitEUR等等这些系统内置货币是可以与CNY、USD、EUR按照11兑换的。而人人承兑货币其实就是提供了bitCNY和真正人民币之间的相互转换。
它的机制上有点类似那个比特币的场外交易。所谓场外交易,就是没有中心化撮合中介,交易双方自行议价成交。
例如,我想要买比特币,就可以找到一个专门的承兑商,直接把这个钱支付给交易商,然后承兑商再把比特币支付给我。这部分的内容,后面我们讲数字货币交易所的时候会和你详细讲解。
人人承兑在逻辑上差不多它提供了一个CNY法币和bitCNY的兑换手段实际上就是让法币和比特股系统内置货币的交换能够进行而且是去信任的进行。
所以从资金托管的角度来看,比特股与中心化交易所很大的区别,比如你在一个交易所里充值,你只能信任这个交易所在保管你的钱,在你要提现的时候,你只能信任交易所愿意让你提出。
但是人人承兑的就不一样了人人承兑是你从A承兑商获取bitCNY你可以找B承兑商再换成人民币不需要只在同一个地方兑换。
因此一个人此时有充值的需求,过一段时间可能就有提现的需求,所以实际上每个人都可以成为承兑商,我可以是买家也可以是卖家,交易角色的转换可以让市场更灵活。当然市场上也有专门提供充值和提现服务的 “承兑商”,这些承兑商收取手续费来盈利。
但是,不是所有的中心化风险都可以通过技术解决,人与人的信任问题没有一劳永逸的解决办法,即使你们当面交易也有可能遇到对方欺诈的行为。
我们只能说CNY法币与bitCNY锚定之后的充值和提现相对更安全人人承兑提供了一种有效的机制缩短了出金入金的周期提升了安全性如果资金在比特股系统之内整个使用期间也没有人能威胁到你的资产。
2.锚定机制
锚定机制是一种去中心化的抵押机制。我们刚才提到了比特股系统内置了多种货币它锚定了多数法币例如bitCNY、bitUSD、bitEUR等等这些系统内置货币是可以与CNY、USD、EUR按照11兑换的。
系统内置货币的发行商是系统自身发行给抵押了bts的用户发行的数量是由抵押的代币数量决定的。你用bts抵押然后换取bitCNY。
换句话说任何持有bts的人可以用它来抵押生产系统的内置货币例如bitCNY它的抵押规则要求两倍价值的bts进行抵押由于有2倍价值的bts作为保障所以定义1 bitCNY = 1元人民币的风险较低。
比特股系统本身提供bts与bitCNY交易对例如现在bts价格是0.5元人民币我就能用4个价值2元的bts抵押产生1枚bitCNY也就是2倍价格抵押。
这种抵押担保机制保障了bitCNY的价值并且从技术层面来讲比特股的共识机制保证了恶意修改bitCNY的数量的造假行为是不可行的。
如果bts价格下跌系统就会自动把我抵押产生的bts卖掉因为抵押了2倍价值的bts所以如果没有暴跌50%以上系统都可以在交易市场上卖掉我抵押产生的bts并在市场上获得bitCNY。
如果暴跌50%以上系统会以一成的价格强制平仓卖出抵押的bts直至卖够抵押产生的bitCNY。
从操作层面来看支付bitCNY实际上消耗的还是bts但需要消耗多少就以实时价格买入多少bts。
买入操作是瞬间完成的,在比特股上有专门的代币资金池来提供,实时价格由系统为之决定的,所以使用者不用承担任何比特股代币价格波动带来的风险。
至此稳定的bitCNY货币就产生了它兼具了区块链的优点且是一种稳定货币。
除了抵押以外,还有强制平仓、强制清算这种机制来保证价值和实际所锚定的货币等价。内容比较深,留给你自己挖掘。
比特股的技术概览
比特股的核心代码是由Cryptonomex公司开源的石墨烯Graphene框架演变而来它的主体代码是C++编写的里面使用了大量的boost库组件如果你对石墨烯技术感兴趣并且熟悉C++,可以仔细研究一番。
除了比特股核心这里还有一套Javascript编写的UI产品叫做Bitshares-UIBitshares-UI其实是一个轻量级的基于浏览器的钱包比特股钱包这个钱包将用户密钥存储在本地浏览器上并且密钥是通过用户密码加密并储存在浏览器数据库。
发送交易时,先本地对交易进行签名,再传输到代理服务器上,由服务器广播至比特股全网,这个服务器你也可以自己搭建。
比特股所使用的共识算法我们已经讲过是DPoS所以比特股也有见证人节点目前有101个见证人节点从101个节点中社区又选出了11位代表我们叫做理事会。理事会接受社区投票然后行使比特股上的治理权。
比特股使用的也是ECC椭圆曲线非对称加密算法值得一提的是比特股并没有类似比特币地址的概念在比特股上取而代之的是可读的账号系统这些账号与私钥一一绑定可读账号就是比特股系统中的地址。
比如我的账号是“chenhao”那么在比特股上你支付给我bitCNY的时候接收方一栏直接填“chenhao”即可。
总结
今天我向你详细介绍了比特股系统,比特股也是一场伟大的实验,它打破了区块链应用数字货币的局限性,让区块链技术具有丰富的金融特性。
比特股技术上的优势多体现在DPoS算法上所以本篇我重点介绍了比特股的产品特性。
比特股社区也是区块链界的一股清流,因为持有比特股往往需要学习大量金融知识。
投资者想要投资比特股,光是弄清楚锚定机制足以让投机者就需要花费大量时间,所以一旦被比特股套牢,似乎只能学习比特股进行自我提升,这也让比特股社区的平均金融知识储备高于其他区块链项目。
比特股上的“强制平仓”和“强制清算” 是什么意思呢?你可以跟我留言,我们一起讨论,感谢你的收听,我们下期再见。
附录:
【http://bitshares.org/】
【https://github.com/bitshares/how.bitshares.works/tree/master/developers#bitshares-documentation-for-developpers】

View File

@ -0,0 +1,162 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第21讲 引人瞩目的区块链项目EOS、IOTA、Cardano
在第 8 讲中,我们已经讲过了一些成熟的区块链项目,这些项目多数都属于数字货币项目。
今天我们来聊几个比较创新型的区块链项目,它们非常吸引人们的视线,容易引起话题,一方面它们的市场营销非常成功,另一方面它们也提出了革新的区块链技术概念。
下面我们来聊聊三个项目。
柚子EOS
1.什么是EOS
EOS全称EOS.IO软件EOS也是EOS.IO上的平台代币缩写它暂时没有准确的中文翻译中文社区把EOS叫柚子这一点其实得益于EOS的发音与水果“柚子”相近。
EOS是一个以太坊的竞争型区块链它提供了全新的区块链架构使得去中心化平台水平扩容和垂直扩容都成为了可能。
如果智能合约是程序那么可以把EOS看成是一个超大的操作系统了它为所有的程序也就是智能合约提供了基本设施。例如账户、授权、数据库、异步通信等接口。
它甚至可以跨平台驱动大量的CPU或者集群所以EOS的TPS肯定是远超以太坊的这也使得构建基于区块链的应用几乎没有成本而且快速高效。
2.EOS的瞩目之处
在说EOS之前我们来回顾一下DPoS。
DPoS其实是BM参照现实世界中的议会制度而设计的共识算法。DPoS的核心理念其实是投票它的设计理念是延迟性惩罚它假设参与者绝大部分都是没有恶意的。
“人性本善”的假设虽然让系统的作弊成本降低,但是随之而来的惩罚也非常严厉,就是丧失见证人的资格,但是带来的好处则是效率的提升。
我们来看看EOS吸引人的地方这里一共有两点第一是EOS号称可以提供百万级TPS交易性能第二是EOS的链上治理机制区块链宪法以及21个超级节点见证人节点
在EOS中记账节点又被称作超级节点EOS一共有21个主节点另外还有100个备选超级节点这些超级节点完全是等价的。
超级节点的基本职责包括了忠实打包交易、执行并验证智能合约、向全网广播有效区块以外还多了一项职责保障并促进EOS项目的发展。
如何促进呢BM在EOS中强化了DPoS算法的投票机制并首次提出了区块链宪法的概念我们可以直接引用EOS技术白皮书中的内容来一探究竟。
EOS.IO 应用使得区块链创建了一个点对点的服务条款协议或者绑定用户到一个合约,这都需要用户对其签名,简称“宪法”。
宪法的内容定义了仅仅依靠代码无法在用户间履行义务,同时通过建立管辖权和可选的法律来解决相互间的争端。
每个在网络广播的交易都必须将宪法的哈希值作为签名的一部分,从而显性地将签名者绑定在合约中。
宪法还定义了人类可读意图的源代码协议。 这个意图是用来识别错误和功能之间的差异,当错误发生时,引导社区对什么是适当或不当修复。
可以看出区块链宪法是一种非代码强制执行的规则有点像我们安装软件时的“同意”协议所以它更像是一种人为承诺为了弥补DPoS较弱的抵抗恶意规则的缺陷。
那么什么人可以发起并修改宪法呢就是超级节点也就是记账节点它规定了17/21以上的节点同意才能发起修改提案。
我们可以看出超级节点的权力十分巨大,这也引来了人们对此产生了争议。
3.EOS的争议
Vitalik 针对EOS超级节点竞选发表过意见。他认为21个节点的DPoS虽然引入了治理结构但也很容易受到选民和持币大户的操纵最终导致“财阀统治型”的治理结构。
在超级节点竞选过程中某些节点为了获得更多的选票承诺当选后可以给投票者分红这在西方文化中是无法接受的这一点似乎违背了BM设计DPoS的初衷所以BM以及EOS团队都表示坚决反对。
BM对此也给了回应BM表示自己的目标是降低创建社区的准入门槛并允许市场自由竞争来奖励最高效的社区以及惩罚最腐败的社区。
他也认为善良是主观的,而且每个社区都能定义持有什么样的价值观是好人,并积极驱逐他们所认为的坏人。
Vitalik和BM都相互发文怒“怼”对方但是总的来说Vitalik和BM这种公开讨论推进了区块链行业的发展给人们带来了更多哲学和设计原则上的思考。我在附录中给出了社区翻译版文章你可以进行查询。
埃欧塔IOTA
IOTA是一个为了物联网IoT)而生的区块链项目。严格来说IOTA不是“区块链”因为它没有区块也不是链式结构。
IOTA提出了一种基于有向无环图DAG的分布式账本结构这种结构IOTA将其命名为The Tangle探戈。
上图是常见区块链账本结构而下图展示了Tangle的账本结构。
我们来看看这两张图的区别首先区块链账本结构的打包单位是区块而Tangle直接就是交易或者或“交易引用”。
任意交易Tx-black会引用过去的两条交易记录这样被引用的交易Tx-purple相当于有了一次确认间接地证明了合法性随着一次又一次的被引用Tx-purple会转变成Tx-green。
Tx-black相当于图种的黑色图块代表未确认的交易
Tx-purple相当于紫色图块代表已确认但还未成熟的交易
Tx-green相当于是绿色图块代表已确认已成熟的交易是可信的。
也就是说我们发送交易的目标是成本绿色部分的交易成为绿色部分的交易可信度是可以计算的面对不同的交易场景可信度可以设置为51%90%或者百分之百。
那么说,如何计算这种可信度呢?
IOTA上的共识算法叫做MCMC算法它可以任意选择黑色部分的两笔交易进行引用。
我们回到DAG的结构中我们发现每一个绿色的交易都会有一条从黑色起始位置通往它的路径那么你这笔交易的可信程度就可以很容易计算。
例如我们执行MCMC算法N次这笔交易被全网接受的概率就是M/N其中M就是能从底部通往这笔交易的数量。
Tangle结构和MCMC共识是非常具有吸引力的它也带来了以下特性。
0交易费由于没有记账节点目前没有考虑设置交易费。
水平扩容由于Tangle的结构不涉及记账节点交易吞吐可以随着规模大容量也跟着提升。
分区再合并由于不是单链结构私下记账以后也可以合并到Tangle账本中不存在分叉这一说。
IOTA的Tangle账本结构为区块链技术带来了新的视角这也是它吸引人的关键。
卡尔达诺Cardano
卡尔达诺Cardano也是一个正在开发中的新一代区块链智能合约平台。
卡尔达诺项目最大的特色是由理论研究主导,严格采用数学形式化验证的来证明严谨、安全性的区块链。
卡尔达诺认为现阶段基础公链在无论在可规模化性Scalability、可互操作性Interoperability和可持续发展性Sustainability均存在不足卡尔达诺希望进行概念和技术上的创新最终解决上述三个方面问题。
卡尔达诺的团队认为目前区块链面临着两个比较突出的问题:
1.区块链协议的升级将会导致区块链分叉; 2.区块链的水平扩容和垂直扩容能力不足。
所以Cardano提出了分层架构理念这似乎与传统IT架构模式分层式架构模式有点像卡尔达诺由两个层次组成。
Settlement Layer清算层卡尔达诺的代币ADA在该层流动是整个系统的支付和清算的基础。
Computation Layer 计算层:卡尔达诺将在计算层提供智能合约、身份认证、消息通信等等功能。
相比于概念创新,卡尔达诺的团队研究了一种被命名为 Ouroboros 的算法它其实也是PoS共识算法的变种不同的是卡尔达诺团队为此提供了数学形式化证明证明了它是高效、安全的共识算法。
卡尔达诺是一种理论研究驱动实践的尝试无论是两层设计还是Ouroboros算法都为区块链技术的发展提供了值得参考的视角。
总结
今天我们介绍了EOS、IOTA、ADA三个受人瞩目的区块链项目EOS和ADA都是致力于区块链去中心化的应用平台IOTA致力于为物联网提供分布式账本。这些项目引领了区块链的发展方向无论是技术层面还是市场层面他们都是非常出色的。
所以,你还可以想到那些技术或者市场做得出色的区块链项目呢?快来分享一下吧。感谢你的收听,我们下次再见。
参考链接:
EOS.IO 技术白皮书
https://github.com/EOSIO/eos/wiki
BM回怼V神加密经济治理有局限所以我选DPOS
V神回应BM你说的没错但我必须要提醒你
https://steemit.com/cn/@niking/iota
https://docs.iota.org/introduction
https://whycardano.com/cn/
https://iohk.io/blog/ouroboros-at-crypto-2017/

View File

@ -0,0 +1,176 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第22讲 国内区块链项目技术一览
区块链的深入技术篇写到了现在,我们已经一起看过了很多国外区块链项目的技术逻辑。实际上,国内的优质区块链项目其实也不少,并且势头很足,不容小觑。
我在前面的文章中介绍过国内的几个区块链项目,不过仅从发展的角度做了一个简要概述,并没有进行深入探讨,今天我们就重点来看一看这些项目的设计思路与技术特点。
小蚁NEO
1.简介
我们以前讲到过NEO的前身是小蚁小蚁最早在2015年发起它在2017年中正式更名为NEO。
NEO项目一共经历过两次ICO第一次ICO是项目创立第二次ICO是项目更名后的品牌升级。可以说通过NEO项目的起起落落见证了整个国内区块链项目的发展。
在重做了市值管理和社区建设后NEO成为了市值TOP10区块链项目之一。
2.设计思路
NEO是一个开放式智能经济平台它提供了数字身份、数字资产、智能合约三种核心元素用来支持NEO智能经济生态。
数字资产数字资产是以电子数据的形式存在的可编程控制的资产NEO在底层也直接支持类似ERC20的Token机制所以用户可以在 NEO 上自行注册登记资产、交易和流转。它也通过数字身份解决与实体资产的映射关系,用户通过正规的数字身份所注册登记的资产受到法律的保护。
数字身份数字身份是指以电子数据形式存在的个人、组织、事物的身份信息NEO 将实现一套兼容 X.509 的数字身份标准以及支持 Web Of Trust 式的点对点的证书签发模式。
智能合约NEO上的智能合约与以太坊不同叫做NeoContract。这套智能合约体系的最大特点是直接支持C#、Java 等主流编程语言,所以开发者可以在熟悉的 IDE 环境Visual Studio、Eclipse 等)中进行智能合约的开发、调试、编译。
NEO 的通用轻量级虚拟机 Neo VM 具有高确定性、高并发性、高扩展性等优点。
3.技术特点
NEO采用了PBFT类的共识算法。NEO的修改版为dBFT共识算法这里d为Delegated就是代理人的意思。所有的PBFT类算法都有个特性就是通信复杂度是节点数量的平方次例如7个节点出一次块至少通信72次对网络带宽要求很高。所以记账节点一般不会很多它带来的优势就是TPS较高并且不会分叉。
自成一派的智能合约体系。这里降低了智能合约开发者的局限性不必使用Solidity语言开发。
C#技术生态。NEO的主要实现都是C#语言编写的,得益于.Net Core的开源NEO的技术生态也在一直扩张。
Token体系。提供了等价于以太坊ERC20的 NEP-5 Token体系。
元界Metaverse
1.简介
元界是我所主导的一个开源区块链项目项目于2016年8月发起经过了5个月开发和测试于2017年2月份上线。
元界是一个关注社会和商业需求的区块链项目目标是构建以数字资产Metavase Smart Token和数字身份(Avatar)为基础新型区块链生态,这种生态会为人类社会带来深刻的变革。
除了数字资产和数字身份两个概念我们还提出了BISC内置智能合约和BaaS区块链即服务的概念并把数字身份作了延伸提出了Oracle价值中介此Oracle非彼Oracle
总体思路是总结人与人、人与资产之间的关系把总结后的通用需求抽象成模型然后做到区块链底层供使用者方便使用这种方式我们叫做BISCBuit-in Smart Contract内置智能合约它可以降低商业应用在开发和使用过程中的技术风险。
通过BISC元界提供了数字资产MST、数字身份Avatar、Oracle以及资产交易的功能这一切都是围绕资产和人来展开的。
数字资产MST可以让人们获得区块链带来的点对点操作资产的优势数字身份Avatar体现了人与人、人与资产之间的关系。
它可以连接到MST上通过Avatar任何人都可以成为OracleOracle可以帮助人们构建不可篡改的去中心化信誉系统资产交易可以为MST解决基础的流动性需求。
人们将区块链作为基础服务植入IT系统中的过程叫做BaaSBlockchain As A ServiceBaaS是一种快速、方便构建区块链应用的方式。
2.技术特点
延续并扩展了UTXO模型一切皆UTXO为资产和身份带来了良好的安全性。
内置BISC没有为用户提供自己编写智能合约的功能提高了安全性降低了多样性。
PoW挖矿与以太坊的PoW挖矿算法兼容。
内置了数字身份,提供了基于数字身份的域名系统,可以连接到数字资产上。
默认提供HD类型的主私钥账户体系。
块上限是1MB但出块速度是33秒所以TPS大约是比特币的18倍。
提供等价于ERC20 的MST Token体系。
量子链QTUM
1.简介
量子链致力于开发比特币和以太坊之外的新型区块链生态它的目标是通过自行设计让比特币和以太坊完美地融合在一起并通过智能合约为人们提供Dapp平台。
除此之外量子链还提出了移动端Dapp策略通过引入身份机制和Data-feed链外数据达到合规性要求最终通过推动Dapp的普及让传统互联网企业可以将量子链作为一个新的应用平台进行尝试。
量子链关注利用区块链技术进行价值传输首次提出了VTP——Value Transfering Protocal价值传输协议的概念。这里的价值传输协议是对标HTTP、SMTP、POP3、SSH等协议的。
量子链认为在比特币之前人们一直无法在不借助第三方的情况下进行较好的点对点价值转移比特币是运行在互联网上的一个VTP协议随着区块链技术的发展人与人、人与信息的交互更加多样化未来会有更多的实体会被数字化Tokenization
这里所说的就是资产登记被登记完之后肯定还会面临价值流转的问题。量子链从技术出发提供了第一个结合比特币UTXO和以太坊EVM的区块链技术生态区来解决上述问题。
2.技术特点
基础代币QTM与比特币脚本高度兼容兼具UTXO和账户模型的优点。
与以太坊智能合约体系高度兼容的技术栈。
共识算法使用了PoS3.0算法属于经典PoS算法。
提出了主控智能合约和普通智能合约的概念通过主控合约可以引入链外数据Data-feed。
通过主控合约可以提供合规性需求。
提供了等价于以太坊ERC20的 QRC20 Token体系。
比原链Bytom
1.简介
比原链是一种多元的资产交互协议。简单来理解也是做数字资产的,不过换了种说法,理念稍不同。比原链认为在区块链上存在两种不同形态资产。
比特资产:是指区块链上原生的数字货币、数字资产,例如比特币、以太币;
原子资产:对应到现实世界的资产,例如权证、权益、股息、债券、情报资讯、预测信息等。
人们可以通过比原链进行对上述两种资产进行登记、交换、对赌、甚至基于合约的更具复杂性的交互操作。目的是连通原子世界与比特世界,促进资产在两个世界间的交互和流转。
比原链采用三层架构。
应用层对移动终端等多终端友好,方便开发者便捷开发出资产管理应用;
合约层采用创世合约和控制合约进行资产的发行和管理,在底层支持扩展的 UTXO 模型 BUTXO 对虚拟机做了优化,采用自省机制以防止图灵完备中的死状态;
数据层使用分布式账本技术,实现资产的发行、花费、交换等操作。
2.技术特点
共识算法是PoW属于忠实的比特币PoW党。
挖矿算法采用对人工智能 ASIC 芯片友好型算法,在哈希过程中引入矩阵和卷积计算,使得矿机在闲置或被淘汰后,可用于 AI 硬件加速服务,从而产生额外的社会效益。
兼容比特币UTXO模型。
默认提供了基于HD的主私钥账户体系。
加密模块提供了基于国密SM2、SM3标准算法。
植入了隔离见证设计。
本体网络Ontology Network
1.简介
本体网络是原NEO项目组成员李俊创立的不过与NEO是完全独立的项目随着技术大咖季宙栋的加入市值跃入TOP20。
本体网络是一个主打构建分布式信任体系的区块链项目,支持多链、多系统融合的协议网络,不同的链和不同的系统都可以通过本体的信任协议进行协作。
本体包含独立的分布式账本、P2P网络协议、模块化的共识协议组模块化的智能合约机制几个主要模块。
本体的产品形式是ONTOONTO是基于本体的综合客户端产品、区块链搜索引擎和区块链体系的入口。
ONTO将帮助用户实现包括数字身份管理、数字资产管理、分布式数据交换等综合性功能ONTO可以将数字身份与现实身份进行映射关联用户可以利用这款产品建立自己的数字身份和多维的身份画像通过密码学算法实现隐私保护。
本体主要提供了以下三种协议。
提供分布式身份管理框架 ONT ID一个基于W3C的DID规范构建的去中心化的身份标识协议。
提供分布式数据交易协议 ONT DATA用于构建去中心化数据交易应用框架。
提供了信用评分协议ONT Scores),支持建立开发不同的声誉评价逻辑,提供评级授权与审计功能。
支撑这些协议的是ONT公链以及ONT区块链高性能可定制化框架。
2.技术特点
基于账户模型并保留UTXO模型。
共识算法采用VBFT它是结合PoS、VRF(Verifiable Random Function)和BFT的全新共识算法。
模块化的智能合约提供WASM和NEO VM 两种。
通过FPGA加速计算密集型的业务模块。
多层跨链的结构设计。
提供链上搜索引擎。
总结
今天带你了解了一些从国内发起的比较知名的区块链项目其实还有不少区块链项目例如公信宝、YoYow等今天就介绍到这里你可以进入这些项目的社区寻求更详细的资料。
好了,今天的问题是,你觉得做公链最大的挑战是什么?你可以给我留言,我们一起讨论。
参考引用: https://info.ont.io/view-point/V0019/zh

View File

@ -0,0 +1,209 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第23讲 联盟链和它的困境
不知不觉我已经写到了深入区块链技术部分的最后一篇,今天我们就一起来聊聊联盟链。
其实在2016年的时侯联盟链是非常火热的当时的公链还处于探索阶段以太坊也不够成熟这给了很多联盟链涌现的机会。所以说从技术上来看联盟链其实非常强劲毫不逊色于著名的区块链项目下面我们就一起来看看联盟链技术。
简介
联盟链源自于Vitalik对区块链的概念分类是他第一次提出了联盟链的说法联盟链的英文是Consortium Blockchain。
我们回顾一下联盟链。所谓联盟链,就是这个区块链具有准入许可,不像公链,任何人都可以随时进入,准入许可意味着候选节点进入区块链时需要得到已经在网络中的节点的许可。
所以联盟链也叫做许可链也就是Permisson Chain这个叫法在国外比较常见。联盟链的节点数通常不多维护成本相比公链要低。
有关联盟链与公链的概念区别,它们的区别仅仅是看新加入的节点是否要经过全网中其他节点的许可,这决定了一个区块链是否开放,开放程度决定了项目生态的大小,这也是最直观的区别。
联盟链的技术框架很多,其中又以超级账本项目下的技术框架最为知名,应用也最为广泛,它基本代表了联盟链,所以,今天我们就重点来介绍一下超级账本项目。
超级账本HyperLedger
超级账本在2015年年底被发起吸纳了众多重量级公司加入它们包括大家耳熟能详的IBM、Intel、Accenture、日立、JP摩根、Digital Asset Holdings等公司。
超级账本的代码和组织结构都结构清晰、层次分明。可以说无论从声势还是实力上来说,它都可以完胜公链。
例如超级账本组织是会员制的加入超级账本需要缴纳一笔入会费入会费决定了你的会员等级。再如超级账本Frabric的架构设计简直就是教科书级别的干净利落、模块清楚几乎挑不出毛病。
超级账本由Linux基金会主持宗旨是构建一个面向企业应用场景的开源分布式账本技术平台。
因为企业应用场景的多样性所以超级账本包含了不只一个项目它是由多个项目组成的。一共9个项目其中5个是主要的技术框架其他4个是辅助性工具。
它的主要技术框架分别是下面的5种。
1.Hyperledger Fabric 没有中文名暂译【纺布克】是IBM提供的超级账本第一个项目。 纺布克旨在用模块化架构作为开发区块链程序或解决方案的基础,允许一些组件——例如共识算法和成员管理变成即插即用的服务。
2.Hyperledger Sawtooth中文名【锯齿湖】Intel提供是超级账本第二个项目。 锯齿湖是一个可以创建、部署和运行分布式账本的模块化平台基于硬件依赖的PoET共识可以面向大型分布式验证器群同时也比较低功耗。
3.Hyperledger Iroha没有中文名暂译【伊路哈】由Soramitsu提供。 伊路哈是为了将分布式账本技术简单容易地与基础架构型项目集成而设计的一个区块链框架。
4.Hyperledger Burrow没有中文名暂译【掘地者】由Monax提供。 掘地者提供了一个模块化的区块链客户端提供了权限管理的智能合约虚拟机它部分建立在以太坊虚拟机EVM规范的基础上。
5.Hyperledger Indy没有中文名暂译【因迪】。 因迪是特别为去中心化的身份而建立的一种分布式账本。它提供了基于区块链或者其它分布式账本互操作来创建和使用独立数字身份的工具、代码库和可以重用的组件。
另外4个辅助性工具是Cello、Composer、Explorer、Quilt这四个辅助性工具可以对以上5个框架进行管理例如Composer可以类比Docker中的ComposerExplorer就是区块浏览器。
我们不排除随着超级账本的发展,还有新的技术框架加入,当然,也可能存在既有的框架被市场淘汰。不过这些都不是本文的重点,所以我们不作过多介绍,你可以通过查阅超级账本官方网站获得更多内容。
1.纺布克Fabric
纺布克是由IBM提供的它基于Go语言前身是Openchain项目。在超级账本成立之初Openchain的代码量就已经达到4万行了随着项目的推进项目成员对Openchian进行了重构也就是我们看到的纺布克1.0版本。
纺布克提供了比较完备的模块化组件,如下图所示。
我们可以看到它的架构上分成了成员关系管理、区块链服务、Chaincode服务三个大模块。
成员关系管理相当于账户和权限管理系统区块链服务提供了区块链一样的账本结构Chaincode服务相当于智能合约。
成员关系管理是基于 PKI 的成员权限管理,平台可以对接入的节点和客户端的能力进行限制。
区块链服务提供一个分布式账本平台,多个交易被可以被打包进一个区块中,多个区块单向链接成一条区块链。区块链代表的是账本状态机发生变更的历史过程,这与公链区别不大。
Chaincode包含核心的业务处理逻辑并对外提供接口外部通过调用Chaincode接口来改变账本数据在纺布克中Chaincode是运行在隔离环境中的也就是Docker。
纺布克的一个可能的工作模式如下图。
如果Chaincode运行在Docker中我们按照经典的IT架构来分析可以发现纺布克基本就是经典分布式系统的升级版它可以提供宕机容错可插拔的共识模块让用户自行选择是否需要拜占庭容错。
2.锯齿湖Sawtooth
锯齿湖也是一个高度模块化的区块链技术框架它基于Python语言1.0版本之后和纺布克一样,作为一套稳定的框架,它已经有了实际的应用了。
它是第一真正意义上提供拜占庭容错共识选项的超级账本项目,有以下四个特点。
链上治理:利用智能合约进行投票运营成员管理彼此之间的关系。
高级交易执行引擎:可以并行处理交易的创建和验证,性能可观。
支持以太坊智能合约:兼容了以太坊智能合约技术栈。
支持主流语言编写智能合约编写智能合约不局限Solidity可以是Go、Javascript、Python等语言。
相比以上四个特点最引人注意的其实是锯齿湖提供了一个新的共识算法叫做PoETProof of Elapsed Time它的中文译作时间流逝证明。
如果你熟悉Raft共识算法的话我们知道Raft算法是一类强Leader的共识算法选举Leader的时候每个节点自己倒计时CountDown最先数完的那个成为候选人。
这个过程叫做超时选举Election Timeout)。每个节点每轮选举中得到的倒计时时间是不同的它的代码实现为随机产生通常是150毫秒到300毫秒。
PoET与上述规则类似只是倒计时时间的产生变更为硬件依赖的这里的硬件目前是由英特尔提供的SGXSoftware Guard Extensions它可以提供可信的程序执行环境。
SGX提供了一种名为Enclave的机制它支持两个函数“CreateTimer”和“CheckTimer”。CreateTimer用于从Enclave中产生一个计时器。
CheckTimer会去校验这个计时器是不是由Enclave产生并验证是否已经过期。如果满足这两个条件就给该节点开具一个证明这个证明可以被其他节点验证验证通过则表示同意该节点成为记账节点。
我们看出PoET共识算法的拜占庭容错是由SGX保证的具有一定的硬件依赖。
锯齿湖官方提供了的四种工作模式开发模式、PoET模式、PoET仿真模式以及Raft模式。
可以发现锯齿湖相当于是Raft协议的变种版本选择Raft模式使得锯齿湖可以退化成经典分布式系统。
3.掘地者Burrow
掘地者也是一个基于以太坊EVM的智能合约执行引擎的区块链技术框架最初项目名叫Eris它是基于Go语言构造的。
掘地者主要由下述组件组成。
共识引擎提供了基于Tendermint PBFT算法的高性能拜占庭容错共识算法。
应用程序区块链接口ABCI为共识引擎和智能合约引擎提供接口规范。
许可型以太坊虚拟机EVM权限许可是可以通过本地安全接口强制绑定到智能合约上其他与以太坊智能合约一样。
API网关提供REST和JSON-RPC两种API接口。
掘地者也是模块化的分布式账本技术提供许可型的智能合约执行环境它也基于EVM规范。除了Tendermint PBFT共识算法没看到与纺布克的的区别。
4.伊路哈Iroha
以上几个技术框架,基本都是通用技术框架,不涉及业务概念。伊路哈是第一个关注资产创建和管理的区块链平台,通过名字我们也可以发现是一个日本公司主导的项目。
伊路哈具有如下特征。
可以帮助人们创建和管理多样化的复杂资产,例如货币、不可分割的权利、产品序列号和专利等等;
提供基于域名分类的账户管理机制,类似“子账本”系统;
提供权限管理;
系统本身提供验证业务逻辑规则,以及交易查询接口。
相较于纺布克和掘地者是Go语言开发伊路哈是使用C++14开发的。
5.因迪Indy
因迪也是一个从身份出发去构建一个分布式经济系统的技术框架。
因迪具有如下的特征。
基于多冗余拜占庭容错RBFTRedundant Byzantine Fault Tolerance实现的共识算法叫做Plenum。
意图通过构建去中心化的身份来打造分布式账本。
全局唯一性的身份,无需中心化授权。
基于W3C标准的身份属性和格式
提供零知识证明手段。
因迪与其他通用技术框架显得非常不同,对身份的研究或许会成为因迪的突破点,这点与元界的数字身份很像。
BaaS与BTaaS
超级账本很多技术框架是可以依托云计算来帮助企业进行快速搭建的当然IBM和微软已经开始这么干了他们将它称之为BaaSBlockchain As A Service)。
我们进一步思考,例如比特币提供了全球支付的功能,那么这种功能是否可以植入到云服务中呢?
答案是肯定的。对于诸多有支付需求的应用来说自己搭建比特币节点并且结构化区块到数据库中是非常痛苦的过程毕竟比特币全节点提供的API有限而我们的查询需求可能细致到交易输出和脚本签名。
所以把比特币转化成PaaS服务也是另外一种BaaS思路。
因此我们把原来的BaaS概念拆成了两种
BaaS是指把公链提供的服务转化成云计算中的PaaS服务的过程
BTaaS是指把区块链技术框架转化成PaaS服务的过程。
这两种概念还是有较大内涵上的差别的我使用了上图来表达我认为BaaS是未来区块链的发展方向BTaaS只是作为经典方案的补充。
联盟链的困境
超级账本系列技术框架很好地诠释了分布式账本技术走到极致是什么样子的。
这里也可以看出,几乎所有的超级账本项目都是技术主导,技术的强大也让他们忽视了市场的真实需求。
联盟链是少数节点之间的活动,它往往退化成微观经济中的博弈,所以利用联盟链构建少数节点之间的协作系统不是一个技术问题,而是变成了如何构造一个稳定的微观经济模型使得协作者可以达成帕累托改进,在这里,技术变成了次要的。
再好的技术工具如果不结合有效的激励和反馈机制,那么联盟链的应用落地过程似乎变得异常艰难,它很可能最后沦落为普通的分布式系统,这个分布式系统仍然是中心化的。
这里我再提出一个问题,为什么我们不用已经成熟的技术框架,非要用联盟链技术框架呢?这就是我认为联盟链最大的困境,它是一杆加农炮,但是并没有人来告诉我们这杆加农炮可以解决什么问题。
总结
今天我们重点介绍了超级账本旗下的五个联盟链技术框架,希望可以给你提供一些技术选型上的参考。随后我们又介绍了区块链即服务这一延伸概念,最后我向你分享了我对于联盟链的观点。
今天留给你的问题是,除了超级账本之外,还有哪些有名的联盟链技术框架呢? 你可以给我留言,我们一起讨论。感谢你的收听,我们下次再见。
参考引用:
https://www.slideshare.net/ormium/architecture-of-the-hyperledger-blockchain-fabric-christian-cachin-ibm-research-zurich
http://thesecretlivesofdata.com/raft/
https://intelledger.github.io/introduction.html#proof-of-elapsed-time-poet
https://github.com/hyperledger/burrow
https://github.com/hyperledger/iroha
https://github.com/hyperledger/indy-plenum/blob/master/docs/main.md
https://wiki.hyperledger.org/projects/indy
https://github.com/hyperledger/indy-node
https://www.hyperledger.org/wp-content/uploads/2018/01/Hyperledger_Sawtooth_FAQ.pdf
https://medium.com/kokster/understanding-hyperledger-sawtooth-proof-of-elapsed-time-e0c303577ec1
https://www.hyperledger.org/wp-content/uploads/2017/08/Hyperledger_Arch_WG_Paper_1_Consensus.pdf
http://blockchaindev.org/archives/08-on-limitation-of-private-chain.html

View File

@ -0,0 +1,142 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第24讲 比特币专题(一)历史与货币
我们终于到了“信仰”篇。“信仰”这个词是我经常在公司调侃新员工,问他们有没有为“信仰”充值,这里的信仰指代的就是比特币。
比特币相关的技术前面一个专题已经介绍过了,再深入挖掘就是隔离见证和扩容之争了,我们今天重点介绍比特币本身的来龙去脉,感受一下这个世界的变化之大。
比特币的逆袭史
俗话说读史明智,我们就从比特币的历史开始聊起。比特币的历史总结起来大约有四个时期:创立前期、创立期、成长和稳定期。
创立前期
在比特币创立之前世界上已有多种类似技术产品最早的是Ecash协议接着Ecash又有多种数字货币产品出现其中以亚当·贝克的“Hashcash”和戴维(Wei Dai)的“B-money”、尼克·萨博的“Bit-gold”以及哈尔·芬尼在“Hashcash”技术上发展出来的“RPOW”等技术产品。
创立期
2008年11月中本聪发表了比特币的白皮书《比特币一种点对点的电子现金系统》接下来的时间中本聪实现了他所描述的比特币系统。
2009年1月3日比特币网络正式开始运行。中本聪在创始区块中写道“The Times 03/Jan/2009 Chancellor on brink of second bailout for banks”。这句话有两层意义第一层意思是表示了中本聪没有预先挖矿毕竟这是当天泰晤士报的新闻中本聪显然不可能预先获知泰晤士报将要报道些什么。通常对这句话第二层意思的解读是认为中本聪嘲讽了当下的中心化银行体系。
2009年1月9日Bitcoin v0.1版本发布12日中本聪进行了第一次交易这一次交易中中本聪给海尔发送了10个比特币。
2009年秋天,一个叫“新自由标准”的用户通过Paypal支付了5.02美元购买了5050个比特币折合0.000994美元一个比特币,这是比特币和法币的第一次兑换。
2009年到2010年初已经有一些其他的开发者被逐渐吸引过来大家一起开发、维护、挖矿那时候普通电脑还可以挖到比特币。
2010年4月,一个叫拉斯诺的人发现可以使用GPU来挖比特币5月22日他用挖到的比特币购买了两个比萨共花费10000BTC这是比特币第一次被用于实物支付也就是著名的比特币披萨事件。
2010年7月世界上第一家比特币交易所在日本东京成立名叫Mt.Gox中文“门头沟”。
成长期和稳定期
2014年2月发生“门头沟事件”门头沟交易所被黑一事震惊全球比特币价格应声跳水
2014年6月以太坊开始了为期42天的ICO众筹使用的是BTC
2017年11月28日比特币价格超过一万美元。
最后附一份由维基百科归纳的比特币价格变化以及对应的事件。
从上图可以看出,比特币的成长史就是对美元的逆袭史,比特币的发展经历了很多争议和阻碍,但是依然不妨碍它成为一种世界级现象,甚至是很多人的信仰,那么比特币的意义到哪在那里呢?
比特币的意义
这个话题可能会引起一些争论,我姑且将本节的内容限定为“我”所理解的比特币,仅供你参考。
首先比特币没有通常意义上的实用价值,不单单是比特币,所有的信用货币,包括黄金白银在内都不具备实用价值。
这里的实用价值是指解决人的低层次需求,如果按照马斯洛需求层次理论来分,是指衣食住行等生存需求。
换句话说,比特币也好,黄金也好,在生活面前都是废物,而无法直接利用,毕竟黄金吃下去也不能饱还有生命危险,比特币的私钥即使看得见却也摸不到。
但是用货币就是能买东西,买来的东西可以帮你解决生存需求,换句话了吃饱了才能干其他事情。“买”这个动作就是比特币所要解决的,当然信用货币也能解决,也就是我们所说的支付功能。
所以作为信用货币的比较,比特币到底有什么不同?它的意义超过信用货币吗?我个人认为是超过的。老生常谈的去中心化、防篡改我这里就不谈了,我们接下来换几个角度来聊聊它。
1.无国界的共识
它打破了一般信用货币的局限性,我称作无国界的共识。
比较常见的论调,比特币你信它就有价值,不信就什么用途也没有。这里隐含的语义是“承认过程”。
例如你在美国吃顿饭,使用人民币支付,美国人一定不是特别同意,毕竟在美国就必须使用美元支付。换句话来说,“承认过程”很大程度上是身不由己,你所处的国家决定了必须承认某种信用货币。
比特币奇怪就奇怪在,没有人会强迫你使用比特币,你的一念之间就可以决定比特币对于你的价值。
如果类比到黄金,比如你长这么大,一直都是别人告诉你黄金非常值钱,所以你也觉得黄金值钱,这其实就是共识灌输的过程,当然你也可以公开表示“我觉得黄金不值钱”,这当然也没什么问题。
想象一下,如果全世界都能达成比特币都可以用于支付的共识,比特币和黄金在共识的效果上也没什么不同了,那么声称“我觉得黄金不值钱”就变成了“我觉得比特币不值钱”,这里的逻辑是一样的。
2.记账是本职
比特币的本职是记账不要想得太复杂它就是来帮你记账的。例如你在宜家买了一套家具比特币可以帮你记下来当然不是说这个事件而是帮你记录价值转移你动用了你曾经创造的价值的多少BTC来购买这套家具。
这个记账过程防篡改能力非常强,几乎没人能操控,也没有国界之分,只要你的交易方承认比特币,这笔买卖就可以达成。
3.高效的资源调度
比特币使用的是PoW算法这个需要消耗大量能源进行挖矿的算法一直被人诟病但是结合上述记账本职我们也换个角度来看看这件事。
目前全国的电力分配不均,中国的内蒙东北有着丰富的风力电,可惜这些富余的电力难以调度,超高压输电线路造价高昂,甚至超出了电厂本身。
而比特币挖矿恰好需要极大地耗费能源,如果在偏远的资源丰富地区进行挖矿,相当于将架设超高压输电线路蜕化为网络通信设施,地方政府可以把庞大的风电资源转化成比特币,最多只需要十分钟,就可以在资本市场变现。所以每个人每次使用比特币的过程,相当于让偏远地区获得了平等参与社会运作的过程。
4.三权分立的社区自治形态
这里讨论的三权分立的形态,并不是指政府组织结构的形式,而是指矿工、开发者、投资者三者组成了相互制衡的数字货币的治理形态。
比特币并没有真正意义上完全地去中心化在记账权上它目前被5大矿池所把持。当人们抨击EOS的21个节点有中心化的嫌疑时BM总是拿出比特币矿池的例子来反击。
实际上这里偷换了概念,比特币中矿工的权力其实是有限的。
技术限制由于PoW的特性矿工无法进行长程攻击Long Range Attack篡改和分叉的边际成本随着篡改的区块数量线性攀升所以看似矿工的51%攻击,也就改一两个块而已。
开发者制衡:扩容之争是很好的例子,我们下一篇会详细介绍,矿工是逐利的,而开发者决定了比特币的长期发展,所以从某种意义上来说,作弊不如和开发者合作。
投资者制衡:矿工是比特币的直接利益相关者,无论是社区分歧还是主链分叉,矿工首先确保的是收益稳定,黑天鹅事件造成的巨大价格波动是不利于收益预期的。
总结起来就是,虽然比特币在记账权上没有彻底去中心化,但是目前的情况也可以接受,至少矿工还受两方制约,矿工看收益,收益的价格看投资者,投资者看比特币长期发展,比特币长期发展看开发者,开发者受制于矿工,三者相互制衡。
BIP及其发展
比特币BIPBitcoin Impovement Proposals)是一种设计文档用来描述比特币新特性的提案第一个比特币BIP是2011年8月19号一个名为Amir Taaki的人提交的编号bip001它描述了BIP本身是什么。
随后几年直到现在比特币的BIP编号将近200个它展示了比特币强大的社区协作能力。
很多人认为某个区块链项目一旦上线这个链就稳了,实际上,做公链好比一场没有尽头的马拉松长跑,主网上线表示长跑开始,接下来才是真正拼实力的时候。
具体怎么拼则要看IPImprovement Proposal。可以说IP代表了一个区块链项目的生命力。例如HD账户是bip32和bip39提出的最开始的比特币是没有这个功能的隔离见证也是由一系列bip组成的。
我们再比如说就算是你想修改比特币的2100万上限也是可以的只要你提的BIP详细论证了改上限的必要性以及充分验证了达成条件如果最终社区同意了你的提案2100万上限改成3000万个也不是梦一切都是可以操作的。
这就回到了社区自治的特性上了,你承认并持有比特币,那么你就可以参与决策比特币的发展。
总结
好了今天我们简要回顾了比特币的历史和货币形态最后还介绍了BIP为下一篇介绍扩容之争做准备。
其实比特币作为整个数字货币的标杆和领头对区块链生态和未来有不可忽视的力量。虽然现在号称区块链2.0、区块链3.0的项目很多,但是真正意义上达到了工业级水准的,还是只有比特币。
无独有偶,我有一次在外面帮投资机构评估一个区块链项目,我也提到了信仰,项目方不约而同地表示持有,不过,他们的信仰是以太坊,所以今天的问题是,你觉得以太坊以后会取代比特币的地位吗?你可以给我留言,我们一起讨论。
感谢你的收听,我们下期再见。
参考链接:
https://zh.wikipedia.org/wiki/比特幣歷史
http://www.btcshuo.com/portal.php?mod=view&aid=339
https://bitcointalk.org/index.php?topic=137.0

View File

@ -0,0 +1,142 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第25讲 比特币专题扩容之争、IFO与链上治理
上一篇我们介绍了比特币的历史和比特币的特性,顺便提到了比特币的扩容之争。
今天,我就来讲讲比特币扩容之争的来龙去脉,并且透过比特币的扩容之争,我们可以聊一聊其背后的区块链链上治理问题。
扩容之争
扩容之争是比特币历史上影响较大的事件,它也是比特币社区治理的经典案例。扩容之争的背后其实是社区治理的难题:如何让社区达成一致。
扩容的需求是由于比特币的使用人数逐渐增长,于是比特币的网络也日益拥堵。关于如何解决这种网络拥堵的问题,比特币社区出现了两种不同的解决方案。
方案一:极端扩容,直接将区块的上限进行扩容,它的优点是可以快速解决问题,缺点是十分直接,只能舒缓一时的拥堵,并没有从根本上解决问题,更不能带来新的特性。
方案二隔离见证要求坚守1MB的容量上限通过隔离见证的方法绕过1MB的限制。这种方式改动比特币交易的结构它的优点是结构的改变可以带来崭新的特性缺点也不少不但花费的时间较长用户的使用感知也并不算完美。
社区就上述的两种方案产生了不同的分歧(分叉),从而产生了极端扩容派和隔离见证两个派别,派别之间谁也不服谁,对峙十分激烈。
于是又出现了一些人开始试图调停双方的矛盾,希望社区不要分歧,可以达成一致。这一类人群就构成了第三个派别:调停和解派系。
至此社区中形成了极端扩容派、调停和解派、隔离见证派三个派别他们开启了漫长的拉锯战中间也有达成过短暂的三次共识92共识、香港共识、纽约共识调停和解也一度将极端扩容的上限从20降到8M甚至是2M。但是一切的努力还是不了了之。
社区分歧仍然逐渐加大,最后比特币产生了硬分叉。一条链变成了两条。极端扩容派在比特币主链上硬分叉出一条没有隔离见证的链,分叉之后的币就是比特现金( BitcoinCash缩写BCH而隔离见证则成了现在我们看见的比特币。至此扩容斗争进入双链对抗的时代。
关于扩容之争详细的来龙去脉。如果感兴趣的话,你可以查阅相关资料,一探究竟。
扩容之争引起的IFO
扩容之争基本在2017年11月结束比特币硬分叉出比特币现金已经成了定局。比特币现金的出现还带来了一件新事物就是IFO——Initial Fork Offering也就是分叉比特币形成新的数字代币这其实就是ICO的替代品。
这里要提一句2017年9月4号七部委发文明令禁止ICO所有和人民币挂钩的交易所都必须限期关闭。
“一刀切”政策让ICO在国内基本死掉了于是国内的人坐不住了就纷纷开始寻觅替代品。比特币的分叉带来了全新的灵感于是IFO应运而生。
怎么理解呢我们之前讲过ICO这里来回顾一下ICO的中文名是首次代币发行又称为区块链众筹这是一种新型的融资模式投资者可以用手中的比特币或其他代币投到其他的区块链创始项目。
ICO从本质上来说就是一纸白皮书接下来全靠吹忽悠散户投币“我要出一个新的代币了你们快来买吧。”
而IFO的集资依靠的是与比特币的关联“我要出一个代币了这个代币是由比特币分叉出来的哦你们快来买吧”靠着与比特币的连带性IFO打了一记集资的擦边球。
所以国内诸多项目方和经验资深的投资方一拍即合搞IFO吧。但是IFO比ICO限定在只能从比特币上分叉所以技术的发挥仍然有限。
一时间除了比特现金一共出现了9个比特币分叉项目发行总量都是2100万区别在于附加功能例如区块时间调整、区块大小调整、是否有隔离见证、未来会加哪些功能等。
它们分别是下面这些项目,收录可能不全,你了解即可。
比特币黄金Bitcoin Gold简称BTG区块大小1M有隔离见证功能区块时间 10分钟。
比特币2XBitcoinX简称B2X区块大小2M有隔离见证功能区块时间 10分钟。
比特币钻石Bitcoin Diamond简称BTD出块时间60s免手续费转账比特币10000:1领取持币有POS利息。
超级比特币Super Bitcoin 简称SBTC支持智能合约闪电网络和零知识证明功能。
LBTC闪电比特币基于DPoS共识需要重新开发点付张银海为中国区负责人。
BTP比特币白金总量2100万其他信息不详。
GOD比特上帝分叉总量2100万不挖直接分发给用户项目发起人郭宏才人称宝二爷。
BUM比特币铀分叉总量2100万其他信息不详。
Bitcoin Silver比特币白银总量2100万其他信息不详。
链上治理
链上治理指的是人们直接在区块链发起社区提案,并进行决策的过程。
这里首先要求的是链上支持基本治理协议,这套协议可以规定或强制执行提案,链上治理直接决定了区块链本身的发展方向。链上治理的参与方包括了投资者、使用者、开发者、矿工四类人群。
链上治理与链下治理的区别在于,区块链本身是否提供强制执行的机制让少数服从多数。
在链上治理协议中,参与者需要可以通过投票参与治理,而链下治理中,多数通过提案、社区见面开会等多种线下线上互动方式,让整个社区达成一致,扩容之争中的三次共识就是典型的链下治理。
各种类型的链上治理
1.比特币BIP和区块投票
虽然比特币没有提供完整的链上治理机制但是比特币也支持简单的投票机制例如在区块中写入共识信息表示支持某项提案例如矿工可以在区块中填写NYA表示支持纽约共识。
但这一切都是基于比特币的BIP首先得有BIP才能发起投票。BIP的组织架构比较社区化主要由Github上的一些开发者和核心社区成员组成。
矿工的所有行为也是非强制性的,当真正发生主网升级时,矿工仍可以选择不升级,这将带来分叉,也是所有人都不愿看到的。
2.以太坊Gas limit投票
以太坊上提供了对Gas消耗的上限参数——Gas limit矿工通过投票选择增加或减少Gas limitGas limit决定了单个区块上可以处理的智能合约数量但这仅针对这一项细分功能并不能决定整个区块链的发展。
实际上以太坊的发展受Vatalik本身影响比较大核心成员和早期资本的推动是以太坊治理的主要源动力。
3.比特股BTS和柚子EOS的链上治理
我们在前面的文章介绍过EOS区块链链上治理结构——区块链宪法。实际上宪法也没有强制约束力但是它成为了一种社区强制约束力类似宣誓过程。
EOS和比特股的治理结构来自于DPoS算法提供的投票过程投票是根据币的数量作为权重的使用者、投资者、开发者、矿工这四种角色中其中把矿工和投资者进行了合并受资本的要挟风险比较大。
以上治理结构我们把比特币和以太坊归为一类这类倾向于链下治理EOS和比特股倾向于链上治理。
链上治理的几个问题
无论链上治理还是链下治理方式都存在一些问题。
升级的实际执行者矿工总是理性的,也就是追求自身利益最大化。
惰性投票,只有很少一部分人会真正地去投票。
投票权过度集中,大户持有者往往话语权更重。
链下治理相比链上治理,更接近我们现实社会的方式。链上治理不是一个设计问题,它是社区制度问题,“如何让区块链更好地发展”相比“区块链项目应当设定什么样的发展目标”,是排在第二位的。
社区在自身追求目标的过程中,会自发地找到最佳治理结构,人为设计可能会有诸多漏洞和缺陷,也限制了可开发性。
例如链上治理至少存在以下几个问题。
1.公地悲剧
当所有人都觉得别人会投票的时候,也就没有人投票了,这个典型案例是英国脱欧公投。区块链上进行链上投票可能也会遇到类似的问题。
2.女巫攻击
目前区块链很难映射现实中人的身份,如果按照身份去投,大户是可以扮演多个伪造身份进行投票的,在产生区块链数字身份之前,链上治理只能依托于币的数量进行权重投票。这便造成一个代币一票,持币多的选民有更大的话语权。
3.贿选
这其实是女巫攻击的延伸,链上治理节点可以承诺将获得的收益与其他节点进行分享,这种拉票方式其实就是贿选,如果恶意节点可以通过贿赂成为记账节点,进而左右区块链的升级过程,后果非常可怕。
目前创始团队进行控制式治理是最常见的,在社区强大后,创始团队再退出,让社区自己运作,是比较典型的“中本聪模式”。
链上治理其实是一个很热门的话题,它关注的是区块链自身的发展,很可能会是区块链的一个重要研究方法,但是这并不是技术所能解决的,所以并不太乐观。
总结
今天带你了解了什么比特币的扩容之争,又从扩容之争谈到了区块链治理,区块链治理没有明确的最优方案,本篇更多地是带你了解了区块链行业的现状,希望能带给你一些新的思考。
好了,本期的问题是,区块链最终会发展出有效的链上治理结构,来保证所有人的权益吗?你可以给我留言,我们一起讨论。感谢你的收听,我们下期再见。
【扩容之争】参考链接:
https://zhuanlan.zhihu.com/p/30930715

View File

@ -0,0 +1,175 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第26讲 数字货币和数字资产
我们前面重点介绍了比特币,并通过比特币阐述了数字货币的逻辑和发展现状。比特币区块链带来了数字货币,那么区块链还会为我们带来什么呢?今天,我们就来看看这个内容。
需要提前说明的是,本文大部分阐述的是我的个人思考和预测,而不是行业已经发生的事实,仅供你参考。
区块链应用范围统计
据统计截止2018年3月全球数字货币共计1500多种总市值超3200亿美元。然而市值分布占比不够分散单比特币就占了一半市值剩下以太坊、瑞波币、比特币现金等数字货币占了另外一半。
大致来分,目前区块链首先在金融领域发力,其次在信息通讯、底层基础设施、教育、能源、医疗等行业应用地比较广泛。
从占比来看,金融和信息通讯类占比最高,占所有区块链项目类型接近七成。
其中中国发起的项目偏好金融,金融类区块链项目接近一半,而从全球来看,金融类项目占比不到四成。这点也可以从我前面的文章得到佐证。区块链在各行业的快速发展,带来了全新的机遇。
从数字货币到数字资产
数字货币是数字资产的清算底层,数字资产的经济活动依赖数字货币。
数字货币一般只能是公链项目,数字资产依靠公链生态提供,这种支撑型结构决定了数字货币的种类不会很多,而数字资产会非常多。
目前数量繁多的数字货币最终会消亡一大半,只剩下几个生态丰富的数字货币,通过这几个数字货币来支持数量繁多的数字资产,而这些公链会通过一些大型的中心化交易平台完成互通互兑,小型的交易平台多为垂直类的数字资产服务。
比特币本身是最成功的数字货币项目,同时也是最成功的区块链项目。
比特币的应用生态主要集中在全球无国界支付结算上,由于比特币本身是一种原生资产,它没有与任何其他资产锚定,所以比特币的应用生态取决于人们的共识,这点比特币已经做到了。
只要比特币的社区不发生大的动乱,那么比特币的地位是很难超越的,尽管有诸多崭新的区块链技术冒出来,如提升共识效率、提升网络容量等等。
但是比特币的共识经过了近十年的历史开创,形成成熟稳定的生态结构,这一点在技术上是无法取代的。
所以比特币依然会作为互联网领域的第一支付手段,并且延伸到线下场合。
除了比特币还有Tether和bitCNY等锚定型数字货币这些数字货币最大的特性是与法币锚定。其实也可以与实体资产锚定只不过我们还没有走到那一步。
综上,我们可以总结出两大类数字货币:原生数字货币和锚定型数字货币。
原生型数字货币具有如下特点:
非营利性社区自治;
依赖社会共识承认;
超级结算工具;
可用于支持数字资产。
锚定型数字货币具有如下特点:
商业性自治;
依赖广泛的承兑商;
稳定的支付结算工具;
可用于支持数字资产。
那么根据数字货币的划分方法,我们也可以将数字资产划分为原生数字资产和资产数字化的资产。
数字资产的宏观分类
数字资产目前已经展现出非常强大的生命力,最终数字资产会像互联网应用一样席卷全球,数字资产交易所也会像春笋一样冒出。
借此时机,我对数字资产进行一个分类,数字资产所产生的金融我们称为数字金融,国内又称为通证和通证经济,涵义上差不多。
Token是数字资产最直接的表现形式Token的生态结构具有自发和原生性大致可以分成这几种类型。一种是基础设施型生态一种是金融型生态还有一种是商业垂直应用生态这三种生态都非常有潜力。
基础设施型Token
基础设施一般就是指公链的权益代币,很多公链都在做这个领域的研究,当然这也是最迫切需要被突破的,有了成熟的基础设施,区块链应用才得以广泛普及。
这类的Token的典型是以太坊上的以太币Ether除了以太坊还有EOS、NEO等可以说能够支持发行Token的公链都具有较高的潜在价值它们目前处于军阀混战时期后期是垂直细分还是一统江山很难判断。
另外基础设施型Token本身也具备数字货币的功能。
金融型Token
这类Token的典型是Tether、bitCNY等锚定型数字货币以及交易平台的Token例如火币的HT、OKEX的OKB和币安的BNB。
这类Token的典型特点是在为原生数字资产创造流动性它是数字金融发展的必然结果。
金融型Token有点接近证券只能在流动性高的地方产生例如数字资产交易所、承兑平台。
商业垂直生态型Token
这一类Token具有非常大的商业潜力释放的能量也是最大的这里当然不是指单个Token而是某个商业生态形成的一类Token。
例如游戏直播平台可以打通形成一类Token文化产权也可以打通形成一类Token。这类Token是非常好的连接器连接局部商业在行业内部形成流动市场。
这类Token探索的人不少例如游戏链、明星链此类由于自己单干一个链太过垂直会面临被以太坊收割的风险所以在前面两个类型的Token成熟之前这类Token并不会大规模流行。
同时这类Token的设计者也面临了两个挑战。
首先从业者需要理解区块链,理解区块链不单指理解区块链的技术原理,而是区块链本身蕴含的思维,这里的思维我归纳为两类,第一类是开放的产品形态,第二类是社区共同治理。
其次从业者容易拘泥于传统互联网时代的商业模式例如做内容或做流量的App表现方式无非广告和会员思维很难跳出来。
要知道未来商业垂直型的Token几乎肯定都是原生数字资产所以按照阿里或者腾讯的模式可能找不到区块链的方向这类Token的未来一定是新的阿里和腾讯。
我预测这类Token会极大地改变互联网产品的运营模式Token模式下的产品运营会拉近用户与运营商的距离他们不再是对立关系而是区块链式的共生社区自治的关系区块链的治理模式也会影响产品的运营模式。
最后我们总结一下以上三类Token依赖关系是
商业垂直生态型Token 依赖基础设施型Token
金融型Token依赖基础设施型Token
商业垂直生态型Token可能依赖金融型Token。
Token的流动性大小依次是
基础设施型Token > 金融型Token > 商业垂直生态型Token
Token的种类数量分布依次是
商业垂直生态型Token > 金融型Token > 基础设施型Token
数字资产的属性分类
上面我们从宏观角度对Token进行了分类当然也可以从Token本身的属性进行分类。
这里可以引用我专栏第5讲“区块链与数字货币”那一篇我们提到了虚拟货币的三种类型游戏代币类、积分类、数字货币类这里的分类方法主要是按照是否与实体经济发生联系。
那么Token从这个角度来看只有两类。
普通Token
积分型。这种Token可能比较常见因为我们经常遇到例如超市积分产品积分等等这种在产品运营上可能换了一种形式相比较原来的积分体系流动性可能有所提升。
会员型。大多数会员制的营销方式相当于是使用权预售例如苹果手机预售发行不必局限在某个渠道商可以以发行Token的方式进行预售。这种类型的Token也可以映射到当下现实场景中去。
分红型。这种类型的Token典型是币安的BNB利润回购是分红型Token常见的手段但由于操作不够透明很可能会遇到问题。
价值型Token
很多人表示区块链是改变人类生产关系的一次革命,这点我表示认同。
例如以太坊,你拥有以太币,意味着你拥有这个系统的使用权,你需要通过以太币这个交易媒介才能跟别人进行交换目标资产。
这时以太币就有了货币属性以太坊通过DApp构造了原生数字资产例如以太猫人们可以使用以太币购买以太猫。
原生数字资产、资产数字化的资产都可以通过以太币获得时,那么就意味着以太币改变了人类的生产关系,这当中并没有涉及任何法币兑换。
所以说价值型的Token一定会触及改变了原有的生产关系。就如一个人刚接触股权概念的时候很难解释清楚股权对应什么Token也是类似的处境Token具有可编程属性它可以带来多种属性合一。
使用权表示Token可交付产品或服务
可交易,流动性是数字资产的基本需求;
可升值,这是由第二条带来的附加属性,也就是升值。
Token技术栈比较
Token的实现已经有ERC20为主的以太坊生态、比特股SmartCoin生态、NEO的NEP-5生态、量子链的QRC20生态还有元界的MST生态。
从技术上来看Token一定要满足高并发快速清结算的需求目前区块链的性能是一个问题不少项目都在研究。
从技术发展来看以太坊等智能合约型区块链一定会发展出类似”Import ERC20”的合约机制来满足市场的需求而由于比特股SmartCoin和元界的内置智能合约型的技术框架取决于市场对技术配套设施的敏感程度安全程度的提升也带来应用的局限性。
可以看出智能合约是Token的必备手段可编程也必须降级为简单的导入合约模块的形式。
总结
好了今天我们重点介绍了数字资产并且根据我的个人经验分享给你一些我的观点我还介绍了数字资产Token的分类。随着监管趋严市场回归理性Token的价值也会随着生态成长而逐步被人们发现良币会驱逐劣币是必然的。
今天的问题是Token会是区块链经济生态终局吗你可以给我留言我们一起讨论。
感谢你的收听,我们下期再见。

View File

@ -0,0 +1,120 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第27讲 弄懂数字货币交易平台(一)
在前面的文章中,我向你介绍了数字货币交易平台如何操作。
可以这么说,如果没有数字货币交易所,就没有今天繁荣的数字货币市场,区块链技术也不会这样被广为人知。
交易的两种模式
先来说说交易模式,交易模式分为两种:场内交易和场外交易。
场内交易,又称成交单优先模式,指的是有交易场所将买卖双方聚集在一起,进行竞价交易的交易方式。这种交易方式中,交易场所负责用户的资产托管、交易撮合、资产结算、履约担保等功能。
场外交易,又称报价单优先模式,指的是买卖方不通过第三方而直接成为交易对手的交易方式。
本文介绍的交易所主要是第一种交易模式,即场内交易模式。
传统交易所的运作流程
区块链领域的交易所与传统金融的结构十分相似,但也存在了一些区别,为了讲清楚这种区别,我先简述一下证券交易的结构。
传统一般有四种角色,分别是投资者,在国内大部分是散户,其次是证券公司,接着是交易场所,这里的交易场所仅指场内交易场所,最后是证监会。它们的关系如下图。
通常投资者在证券公司开户,然后投资者委托证券公司下单,证券公司接受投资者下单并收取一定的佣金,然后买卖单由证券公司在交易场所进行交易,这个过程叫做委托,投资者是委托者,证券公司是受托者。
换句话说,普通投资者是无法直接接触交易所的,这是因为交易所采取会员制,只有成为交易所的会员且有交易席位,才可以接收其他投资者的委托,所以这就限定了机构投资者,也就是证券公司了。
而这里交易所是非盈利性的事业法人,它接受国家证券主管机关证券委员会及证监会的领导、管理和监督。证券交易所本身并不参与证券交易,不能决定证券价格。
所以对于投资者来说,只和证券公司有直接联系,这里的流程可以简述为:
投资者到证券公司开户,然后下单给证券公司;
证券公司再将这些订单传递到交易所,订单在交易所完成撮合成交;
接着交易所将订单和成交数据传到证券登记结算公司,结算公司据此进行资金和证券账户的结算;
结算结果再回传给证券公司,证券公司通过自己的平台显示给投资者,例如成交信息,账户余额等等。
数字资产交易平台
数字货币交易平台也叫做数字资产交易平台,主要为人们提供交易数字货币或数字资产撮合交易服务。
这种交易市场是一种典型的买单、卖单交易市场,所以这些平台以场内交易为主,通过提供买单卖单的撮合服务然后赚取手续费,这个过程中也发展出了层次丰富的金融工具,例如杠杆交易。
人们提供了买、卖交易数字资产的过程,这个过程是一种数字货币交换到另外一种数字货币的过程。
这种交易市场通常是数字货币对数字货币的,当然这显然不够,所以这就催生了法币对数字货币的交易,这也是中心化交易平台的由来,目前流行的法币与数字货币的交易有美元、欧元、日元、澳元等。
目前市场上中心化的交易平台占据了绝大部分。从功能上来看中心化交易所一般都会提供以下业务模块充提数字货币、资产托管、交易撮合、资产结算、杠杆交易、KYC等。
上面我们介绍过传统交易平台的结构,借此我们也可以归纳比较出数字货币平台的与传统交易平台的优劣势。
传统交易所依赖券商,属于金字塔型结构,用户聚集在券商处,资金托管在银行,证券登记结算在第三方机构,本质上交易场所只提供了撮合、监管辅助、信息辅助等功能。
而由于数字货币的去中心化特性,数字货币交易平台属于扁平型结构,资产管理本身就内置在交易所内部。
所以任何一个交易平台都不需要第三方机构登记结算数字货币,这带来了业务架构上的易部署特性,用户流量和资金流量最终全部汇聚在数字货币交易所。
如果我们从这些业务模块出发,结合技术架构来看,中心化的数字货币交易平台更接近互联网应用的技术架构,它本质上是金融交易系统与互联网网络服务相结合,具有以下优势特性:
能够支持海量高并发实时撮合交易;
用户终端全平台支持,从桌面到移动端不一而足;
数字资产的超高流动性;
平台可以获取超高的利润;
价值发现功能。
虽然利润和流量都超大,但中心化交易平台也面临了一些天花板,例如动不动就被爆出被黑事件,这也着实让用户提心吊胆,所以我归纳了一些如下缺点:
内幕操作,交易所相当于是一个黑盒,内部操作不透明带来了巨大风险;
监管缺失,信息披露不完善,项目方跑路风险;
持仓风险,用户的资金完全托管在交易所;
趋利优先,区块链本身的发展是在盈利之后才会被考虑的;
交易所破产倒闭风险。
总的来说,数字货币交易所目前是区块链与现实的接触面最大的接触点,也是数字金融中的最重要一环。
数字货币交易平台的三种类型
其实在数字货币交易领域,交易平台是不必局限在中心化这一种实现方案的,这由于交易所也是由很多业务模块组成的,它是把某些模块进行去中心化,而不是整体去中心化,所以实际上它可以有三种实现类型。
模式一中心化模式资金管理系统与区块链账本各自记账包含充币提币的过程需要人工干涉。模式一的代表有很多现在市场上主流的交易所主要的有Binance、Bittrex、Bitfinex、Gate.io、Huobi.pro、Okex、Kraken等它们为数字货币和数字资产的发展提供了全球化、7*24小时不间断的流动性也就是上文我们介绍的数字货币交易平台。
模式二半中心化模式交易撮合与行情模块是中心化的而资产是在区块链上直接结算的。代表有0x Project、Keyber Network这些前沿的项目。
模式三:完全去中心化模式 比模式二更进一步所有模块都是去中心化的包括交易撮合和行情部分。代表有比特股和EtherDelta。
模式二和模式三我们统称为去中心化交易所,目前是区块链数字资产领域研究的一个前沿方向,多数方案都还不成熟,例如用户产品体验差、稳定性不足、数字货币流动性不足等等,当然更多还处于研发阶段。
虽然去中心化交易所是一个很好的方向,但可能会脱离掉用户的真实需求,正如我前面谈论“去中心化”这个概念所说,终端用户也许根本不关心平台是否是去中心化的。在这里,用户的主要诉求体现在下面几点:
用户终端产品的界面操作流畅、响应速度快、用户体验好;
资产结算速度快,如果存在充币提币的话取决于审核过程;
订单簿挂单的深度要好,可以快速成交订单;
托管的资产安全性高,如果有的话。
以上四点,目前模式一的交易平台的体验完胜模式二和模式三,这也是中心化交易平台流行的主要原因。
总结
数字资产交易平台一方面是互联网技术与区块链结合的典型案例,另一方面也是数字金融生态最重要的一环,区别于传统金融的券商结构,交易所本身的资产托管结构,让数字金融具备天然的流动性,这是传统金融体系所不具有的特性。
本篇给你介绍数字货币交易所,也是希望你了解交易所在数字金融中的地位,同时为你打开思路。好了,今天留给你的问题是,监管会会接纳数字货币交易所这种形式的交易体系吗?你可以给我留言,我们一起讨论。感谢你的收听,我们下期再见。

View File

@ -0,0 +1,124 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第28讲 弄懂数字货币交易平台(二)
在上一篇文章中,我们介绍了数字货币交易平台的概念,那么今天我们就来重点聊聊数字货币交易平台的技术。如果你有过设计或实现传统金融交易系统的经验,那么你阅读本篇就会更加容易。
由于中心化交易所是主流应用,所以今天我主要介绍的是中心化模式下的数字货币交易平台。
两套账本
数字货币交易平台的技术基本沿用了金融交易技术中的系统架构,只是把原来针对法币和证券(或平台代币)的部分,也就是我们通常称作资金管理系统的部分,完全替换为针对数字货币的数字货币管理系统,换句话说,就是换了一套内部账本。
然而我们知道,区块链本身也是用来记账的,也算作一种金融账本,所以一套内部账本,一套区块链本身的账本,这里就出现了两套账本,如何管理这两套账本,就是资金管理系统的首要任务。
如下图所示。由于中文语境下的交易有多重含义,本篇会用英文单词标注,以示区别。
(图示 数字货币交易所)
解释一下这张图,图的左边表示了多个区块链账本,右边的数字货币交易所有自己的内部账本,这两套账本是独立的。
交易所内部的账本记录的是交易Trade这个交易是由用户挂单接着被撮合引擎撮合成交而产生的而区块链账本上的交易Transaction是当且仅当用户发起充币提币请求并被执行时才会产生的。
这两种交易都用了中文“交易”来表示但是它们所属的语境不同前者的交易表示的是金融交易语境下的资产交换也就是Deal后者表示的是区块链上的技术概念表示资产转移的一次记账过程上述特意用英文以表区别希望你能够区分。
数字货币交易所包含哪些系统模块
一个数字货币交易所的后端其实至少有四部分构成Web业务逻辑系统、交易撮合系统、运营后台管理系统、资金管理系统。资金管理系统其实就是刚才说到的内部账本。
Web业务逻辑系统这个模块通常包含了用户账户模块、登录网关、账户安全管理、KYC认证、行情推送等等这个模块更偏向用户也与通常的电商账户系统十分类似。
交易撮合系统:这个模块是一个交易所的核心模块,为所有的用户提供订单撮合。
运营后台管理:这个模块是一个交易所运营人员使用的系统,交易所内部人员才能访问。
资金管理系统:这里的资金管理其实包含了三部分,第一部分是法币的支付网关,可能需要对接银行或第三方支付机构;第二部分就是数字货币钱包管理,它提供了大部分主流数字货币的支付功能;第三部分是用户持仓信息,所谓持仓就是用户持有多少数字货币,这个是记录在数据库中的,不需要与区块链保持一致,但是要求交易所的总账是平的。
各自模块的特征
Web业务系统与我们常见的电商系统无异主要是用户账户以及简单的业务逻辑重点是可扩展性业务要求比较弹性。
交易撮合系统本质上是一个高并发的计算系统,特点是系统性能高和稳定性好,其中订单队列可以是编程语言中的数据容器,也可以是内存数据库。
运营后台系统在整个交易所生命周期的早期并不凸显重要性,但是运营后台系统恰恰是交易所中后期发展的核心系统,重点在数据准确,要求网络安全性高和可扩展性好。
资金管理系统包含用户持仓状态,以及数字货币钱包服务,它是一个交易平台中安全性要求最高的系统,资金管理系统往往要搭配一个内存数据库,其中数字货币钱包服务也可以拆出来做成独立子系统,甚至可以改造成整个公司的内部区块浏览器,因为钱包服务需要设计成多个钱包实例,并统一所有的币种钱包接口。
一个交易所可能的结构如下图。
上图中MatchingGroup相当于是交易撮合系统Web-Group相当于Web业务逻辑系统Back-office相当于后台管理系统AssetsManagement相当于是资金管理系统。
涉及的技术栈
如果我们再将刚才提到的各个模块细分,会看到以下的功能。
(图片来自网络)
按照上图的细分功能,我们可以得到哪些技术支持一目了然。
首先是Server需要数据库作为支撑其次是Restful API作为基础通讯协议并且集成钱包相关的技术撮合引擎为Sever提供撮合服务。
在这里面例如需要SMS系统所以可以使用云服务中的SMS组件这些都可以是成熟的通用组件技术。我们可以发现中心化交易使用的技术与互联网技术并无不同。
把这些通用组件塞到下图中各个层次和大模块当中,所以最终一个交易所的详细架构可能是下图的样子。
(图片来自网络,缺失了资金管理部分)
我们来解释一下这张图。
首先是存储持久存储通常可以选择MySQL撮合相关的模块由于要避免接触磁盘IO所以需要为撮合模块提供Redis类型的内存存储二者需要保证最终一致性。
撮合和行情部分几乎与传统技术无异行情推送可以类比到其他推送系统只是频率更高一般首选Websocket技术。
这与传统互联网应用的最大区别里主要是数字货币钱包管理,这块完全是新的内容,对安全性、易用性提出了相当高难度的挑战,这里也是交易所资金托管的根本,所以如何管理好大量数字货币,往往要结合运营、内部管理制度、冷热钱包技术一起才能做好交易所的资金管理。
那么用户是如何挂单的,又是如何产生区块链交易的呢?我们来看一看。
##交易过程
那么说用户A拿0.01BTC 换取了B的10个ETP 的过程究竟是什么样的呢,我来举一个例子。
用户A挂10ETP买单出价0.01BTC经过Web业务系统进入撮合系统订单簿ETP-BTC买单队列等待撮合成交同时资金管理系统冻结0.01BTC。
用户B挂10ETP卖单出价0.01BTC经过Web业务系统进入撮合系统订单簿ETP-BTC卖单队列与步骤1中A的订单撮合匹配成功生成Trade同时资金管理系统结算对应资产B的资产变化为增加0.01BTC并减少10ETP A增加10ETP并减少0.01BTC。
成交Trade以及资产变化通过资金管理系统写RDB数据库形成成交记录同时更新行情数据库记录可供用户和运营后台管理系统查询。 要注意的是这一步并不是登记到区块链上。
用户B经过Web业务系统发起提币请求请求提取10ETP进入自己的数字货币钱包这个请求进入资金管理系统交易所运营人员可通过运营后台观察到这笔请求运营人员审核用户B的信息比如实名认证是否正常等。
提币请求进入运营系统后如果通过审核则资金管理系统会冻结用户B的10ETP同时将提币请求发起给数字货币钱包服务系统也就是WalletGroup子系统发起区块链上的交易xTransaction,等待交易被打包,并根据更新提币审核状态,供用户查看。
数字货币钱包服务根据区块信息查询交易x是否被打包如果已经打包则资金管理系统将完全把用户B被冻结的10ETP直接抹成0更新提币状态最终为完成提供区块交易ID以供用户和运营后台系统进行查询。
在步骤3中我们可以看到用户所持有的资产相当于是交易所对用户的负债但这也只是数据库中的一个数字并不是真正的链上资产。
在步骤6中我们看到区块链上的“交易”与步骤3中的“交易”完全不是一个概念同时用户的资产是否安全完全取决于交易平台的技术是否安全对交易所是否信任。
再来看看充值阶段。
简单来说,充值是与提币相反的过程,不同的是,充值不需要审核,一般数字货币交易所的原则都是“宽进严出”,在充值过程中,交易平台通常不直接使用数字货币钱包检测用户是否充值到账,而是使用“扫块”(block_scan)这一方法检测用户的充值。
总结
今天我简单介绍了数字货币交易所的业务逻辑,相信你已经对数字货币交易所有了一个初步的了解,数字货币交易所是区块链行业最重要的业务,全世界每个月都有新的数字货币交易所诞生。
今天我只讲了中心化的数字货币交易所,而去中心化的交易所,除去资金管理系统,基本业务逻辑是不变的。所以今天的问题是,去中心化交易系统应该如何设计呢,主要会遇到哪些挑战?欢迎留言,我们一起讨论。

View File

@ -0,0 +1,131 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第29讲 互联网身份与区块链数字身份
前面的一系列的文章,我们一起从区块链技术聊到了数字货币,接下来又讲到了数字资产的话题,相信你应该对区块链应该有了一些了解。接下来,我们将要进入一个全新的专题,来聊聊区块链可以与互联网发生什么反应。
今天我要讲的是数字身份,为什么要聊身份这个概念呢?
这也是从比特币身上获得的启发,比特币上不存在无主的资产,也就说任意的资产必然归属到一个地址上。所以我们就在思考,是否可以更进一步,这种联系是否可以不仅限于地址,而是可以扩大到人的身上。
什么是身份
数字身份是一个依托互联网产生的概念,那么在谈论数字身份之前,我觉得有必要先和你达成一下“身份”这个概念的共识。
如果说比特币记账记录的是资产的转移,那么对应到身份上,也可以抽象出类似的概念。
想象一下,“你的出生”这一事件是被谁所记录,“你昨天发的朋友圈”都在被谁所记录?
这么一来,身份的概念几乎也呼之欲出,身份是指有关你发生的一切客观历史的事件集合。
例如,你的身份证上简要记录了有关你的客观事实:你的出生日期、民族、户籍所在地,为了证明这些信息属实,所以国家给了这么一个证件,为此还戳上了一个唯一编号,也就是你的身份证号。
但我们要弄清楚的是,身份证并不是你的身份,只是你的凭证,你真正的身份托管在政府机构、银行、医院、社交平台的数据库中,换句话说,有关你的重要客观历史事件记录被这些机构所记录下来,这些记录组成了独一无二的你,使得你变得具有一定的辨识度。
你的身份记录也分为了两种,一种是资产和消费记录,另外一种是社交记录。支付宝做了前者,微信做了后者,这两者都是中心化的设施。
“身份”的前世今生
关于身份的难题古往今来一直有之,上至皇帝大臣,下至教书先生普通老百姓,如何证明自己的身份一直是一个难题。
从历史上来看,主要经历了三个阶段。
1.印章实物身份
这个很好理解,就是自己给自己颁发一个刻章,这个章由于带有私人标记,一般独此一份,很难被人模仿,例如玉玺、虎符等,这些就是为了表达身份的概念。
但是这个概念特别弱,因为古代生产力低下,无法大量记录客观事件,才把所有事件集合归并退化成一个小小的章。这也是不得已而为之,所以在古代谈不上准确的可定义身份概念,但是,现代的身份却也都是基于这种逻辑下产生的,例如我接下来要讲的卡片型身份。
2.卡片型身份
随着技术发展,卡片的流行发展了身份的概念,这里的典型就是名片、护照、身份证、驾照等等。
但这些卡片背后记录的依然是割裂的身份片段,例如医院就诊记录归医院所有,出入境记录归出入境管理局所有,商场消费记录归商场所有,这些记录都是割裂的。
如果出入境管理要你出具商场的消费记录,显然就变成了你的跑腿工作,这就是你的身份片段割裂所引起的。
不过这种情况在国内稍有改善,这得益于身份实名制的强制实施,身份证编号是被所有系统统一的唯一索引,通过打通身份后台系统,可以共享一些基本信息。
卡片型身份也在自我迭代,目前多数都被做成了芯片卡的样式,里面集成了一些基本的终端验证信息,所以可以提供电子化身份。
3.互联网身份
这个阶段就有了一些真正意义上的身份概念了。
你的出生地、户籍、微信朋友圈的记录、授权过的App、消费记录、挂号就医记录通过微信或支付宝可以将以往的身份片段串联起来形成一个可定义你的唯一身份。
举个典型例子,微信和支付宝可以满足大多数场合的身份证明的要求,例如医院就诊使用微信预约,医院需要知道你登记的信息是否准确,所以可以通过微信授权。支付宝也是如此,芝麻信用甚至可以提供身份声誉的概念了。
这两者的最终一步只需要打通和政府机构的身份数据管理,那么互联网身份有了这份加持以后就可以变成身份的完全体了。
在中国的任意区域的绝大部分场景,出示微信或支付宝来证明身份似乎不再遥远。
现阶段的身份问题
总结来说,我们正处于卡片型和信息化身份混用的阶段,我们在日常交流中需要的身份证件,例如护照、驾照、社会保险卡、商品序列号等,基本都是由国家或第三方机构颁发的,虽然这可能是模拟现实世界运作的首要方法,但这种方式也逐渐凸显了许多问题。
如果国家撤销其证书,个人可能会失去他们的身份,身份应当是与生俱来的概念,国家可以选择承认与否,但不应该存在黑户这样的人群。
某个中心机构签发的身份证明,往往不能被其他机构所接受。
集中控制的身份管理,只能在一个辖区或一个在线服务内有效。
随着区块链的出现,身份证明的瓶颈逐渐缓解,就像使用比特币并不需要申请账户一样,它也创造了重新定义身份的崭新机遇。
从互联网身份到区块链数字身份
互联网本身其实是围绕着机器建立的,而不是人类,换句话说,互联网虽然提供了信息高速公路,但是并没有提供中立、开放、统一的身份层。
于是,我们在互联网里,无法知道谁究竟是谁,它帮助谁连接了谁。当然,这在互联网早期是一件好事,它们并不能从我们身上窃取太多数据。
但是现在随着互联网应用程序变得越来越丰富多样,场景也十分复杂,典型的就是电子商务和社交媒体的普及。
W3C以及一些标准化组织提供了一些互联网身份的标准。这些标准的初衷是为了更好地服务互联网应用但是这些标准被实施的过程中仍然凸显了很多问题例如前段时间Facebook 8000多万账户数据滥用事件。
面对这些问题,我们这里总结了互联网身份问题以下的几个点。
身份数据的安全性问题,面临泄露和被篡改的风险。
不同机构之间的身份数据的兼容成本很高,带来身份数据碎片化且不一致的问题。
用户无法控制属于自己的数据,例如你今天发布的照片,并不知道会被哪个推荐系统采用。
重复创建和管理不同应用下的身份,典型案例就是重复注册各种账户。
虚假身份欺诈,这个比较好理解,就是被我的身份被盗用,尤其在账户泄露的时候。
概括起来主要是三个方面:非用户自主的身份、身份数据安全与隐私问题、身份数据所有权问题。
以上这些问题例如W3C、Sorvin基金会和OpenID基金会正在寻求一些去中心化的数字身份方案微软也在关注如何利用区块链构建去中心化的区块链身份这也是区块链数字身份研究的前沿。
如果想做区块链数字身份,我认为,这里必须涵盖身份的两大核心功能:验证和授权。
有关授权的内容,区块链天生就可以做授权,基于密码学的账户体系可以很好地控制数据自主,也会强制性地让运营商把身份控制权还给用户,并且,一切的关键数据都可以被登记下来。
这似乎迎合了我们一开始对身份的定义,记录客观事件的集合,并且,数据的集合可以被登记到区块链上。
另外,区块链数字身份还有个天然的优势是,可以无缝与区块链数字资产进行连接,把以往割裂的信息化身份和金融身份打通,这也是支付宝一直没有做到的。
换句话说,区块链的数字身份系统,它自带了去中心化用户自主的身份、并且可以与用户的资产进行连接,这些都是以往没有做到的内容。
当然,机遇越大,挑战也越大。这里,我也总结了一下区块链数字身份面临的三个挑战。
如何控制个人身份在区块链上的隐私边界?
现实中会产生庞大的身份数据,区块链无法承载这么多数据该如何解决?
如何兼容上述三种类型的身份,例如已经存在的互联网身份?
在光明与挑战兼具的路途之下,区块链的数字身份究竟会如何发展,关于未来,让我们拭目以待。
总结
好了,今天我带领你一起探讨了区块链数字身份的话题,我们先从身份的原始概念开始讲解,接着介绍了身份的简要发展和现在面临的问题,最后介绍了区块链数字身份和它面临的挑战。
那么今天的问题是,你觉得区块链数字身份会是接下来的热门概念吗?你可以给我留言,我们一起讨论。感谢你的收听,我们下期再见。

View File

@ -0,0 +1,147 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第30讲 区块链即服务BaaS
今天我来聊一个常常被公链忽略的区块链概念:区块链即服务。
“区块链即服务”也就是Blockchain as a Service它的缩写是“BaaS”一看这个概念就知道它离不开云计算了毕竟云计算的领域已经有了IaaS(Infrastructure as a Service)、PaaSPlatform as a Service和SaaSSoftware as a Service等概念。我们看见了带有“aaS”的后缀便很容易联想到了云计算的范畴。
从商业角度来说商业技术公司提及BaaS主要还是为了卖云服务因为大型机构偏向标准流程化的协作方式也就很难意识到区块链带来的非技术层面的革新这种现象在公链领域的数字资产上尤为突出如果单纯地把区块链作为一种技术框架集成到云计算中未免失去了区块链原有的魅力。
那么区块链到底与云计算有什么千丝万缕的关系呢?这就是我今天想抛砖引玉的地方。
两个角度出发
在讨论“区块链即服务”之前,我想提出一个比较新奇的观点,就是假如我们把比特币看做一个云,那么比特币就是世界上最大的云,只是比特币没有特定的供应商,它是开放式的,这个云提供了价值存储和价值传输的功能。
如果你也认同我的这种假设,那么接下来就需要考虑一个问题:它应该如何与已经存在的云计算进行结合呢?
以上是我从云计算角度提出的观点。另外一个观点是从协议考虑,如果比特币是一种开放式协议,云计算可以说是一堆成熟协议和框架的集合,那么是否可以把比特币这种支付协议集成到云计算中呢?
带着这两个问题,我们重新考虑一下“区块链即服务”这个概念。
什么是“区块链即服务”
如果我们打算弄清楚“区块链即服务”的概念首先我们需要找到“区块链即服务”与PaaS的联系。这里没有提到IaaS与SaaS因为我认为“区块链即服务”与PaaS更接近一点。
我们先来简要地了解一下PaaS 我们在上文提到过PaaS的英文是“Platform as a Service”。它是一组通用业务组件Component的集合它能够提供开箱即用的业务服务但并不类似于AWS的Amazon Translate服务、阿里云的短信服务这样单纯的技术框架或者代码包。
我们接下来考虑比特币,比特币提供了全球支付的功能。那么这种功能是否可以集成到云服务中呢?答案是肯定的。
例如我们希望可以在云计算平台快速实例化一个比特币的全节点,而不是自己去比特币的官网下载,并经历将区块同步至最新的漫长过程。
与此同时,对于有比特币支付需求的应用来说,除了搭建全节点,往往还要解析每一个区块的信息,因为区块本身是非结构化的,无法进行精细化控制查询,所以结构化区块数据显得尤为重要。
并且这里往往是通过RDB数据库进行存储的。等待区块完成异常同步之后接着还要解析并且结构化存储区块可以说是雪上加霜。
从技术角度考虑比特币全节点本身提供的查询API功能有限查询负载也非常有限我们不可能使用部署多个比特币钱包集群的方式来分担负载因为全节点的数据非常庞大5个比特币全节点已经是TB级别而且还在一直增长。
随之而来的,还有各种区块链软硬分叉维护、节点宕机监控,简直是噩梦。
但是暂停一下我们回过头来看看这难道不就是以往PaaS解决过的痛点吗
以上只是举了例子那么以太坊也可以如此其他公链也是如此实际上由于区块链本身就是基础设施所有的区块都已经被历史定格不需要改变这些庞大的区块数据本身也是PaaS的一部分。
结合云计算厂商的技术能力,它们可以提供稳定、方便、安全的区块链服务,帮助中小企业快速集成区块链服务,例如支付、身份验证服务。
根据以上分析,这样我们便可以给出区块链即服务的定义。
“区块链即服务”是指:提供多种方式的查询、交易广播、交易验证服务,使得公有区块链的服务可以集成到到互联网应用的架构中,这些服务包括了数字货币、数字资产、身份验证服务、第三方监管服务。
以前的这些服务是处于割裂状态的那么从PaaS衍生出来的BaaS可以帮助区块链被快速地集成和整合到已有的技术架构中。
上文提到与BaaS最接近的是PaaS那为什么不是SaaS呢SaaS最好的例子是Google Docs直接面向普通用户并且按需按时间付费使用厂商的应用是SaaS的显著特征。
这里一个典型的例子是公告公证今年北京大学发生了一件事情就是有人将有关某个教师的事件登记在区块链上那么这可以算作一个SaaS的典型进一步看blockchain.info这个平台也算作一个SaaS平台。
SaaS要求用户可以直接使用区块链快速构建应用构建过程最好是可视化的而不是一堆代码所以目前来看区块链领域的SaaS还尚不成熟。
IBM和微软曾经提出过BaaS的概念它也对标PaaS这里的区别在于客户是使用区块链技术框架构建起属于自己的联盟链还是使用公链上的服务。
前者更多的是DLTs技术destributed leder technology所以这里我们叫做BTaaSBTaaS也可以被传统IT方案替代例如分布式存储方案。
由于公链提供的服务往往会比联盟链丰富,生态发展快速,如果公链具有匿名性和权限管理机制,也许可以替代许可链。
架构集成与快速构建
架构集成主要考虑在已知的系统架构模式情况下,如果让“区块链即服务”可以更快速方便地被已有架构集成。这里的挑战困难主要包括两个方面。
第一、系统级的多币种私钥管理体系。因为区块链本身就包含了大量资产,这些资产可以看做是线上资产,如果有没有进行良好的权限管理,那么资产将面临极大的失窃风险。
第二、稳定可控的区块链服务。稳定可用是考虑任何一个钱包稳定连续运行,一旦被控制或者被分叉,系统可以快速识别并警告运营者。
总之,架构集成是一个比较大的话题,也有很多经验可以从经典互联网应用中获得,主要还是开发和运维的思路需要转变。
互联网公司在区块链领域的尝试
既然聊到了区块链即服务就不得不聊聊国内已经尝试实践“区块链即服务”的公司了无论是BaaS还是BTaaS这其中都有所体现。
一线互联网公司更倾向DLTs技术也就是BTaaS类三四线以及业绩边缘化的互联网公司倾向于Token为代表的经济生态也就是BaaS技术。
下面是我们公司的Frank收集分类的国内应用案例涉及的行业有金融、公益、互联网、食品溯源、物流、电商等领域我在这里列出来供你参考。
蚂蚁金服区块链,联盟链。 蚂蚁金服技术实验室宣布开放区块链技术,支持进口食品安全溯源、商品正品溯源、支付宝爱心捐赠平台。
阿里健康区块链,联盟链。 阿里与常州市政府就医疗数据保护达成共识,推出了国内首个在医疗行业的区块链解决方案——阿里健康。
Symbiont其起源于Counterparty合约币项目旨在建立第一个用于发行区块链智能证券和交易智能证券的平台。
跨境食品溯源,联盟链。 阿里巴巴与普华永道PwC达成合作关系共同开发一种使用区块链技术的系统来减少食品假冒。
阿里邮箱+法链,公链。 将使用名为“法链”的区块链技术,推出基于阿里云平台的邮箱存证产品等。
阿里云+Hyperledger联盟链。 阿里云上推出了Hyperledge Fabric区块链自动化配置和部署的解决方案。
数字雄安区块链实施平台,联盟链。 阿里巴巴、蚂蚁金服与雄安签署战略合作协议,将承建“数字雄安区块链实施平台”。
天猫奢侈平台Luxury Pavilion溯源联盟链。 阿里云发布区块链解决方案支持天猫奢侈平台Luxury Pavilion推出全球首个基于区块链技术的正品溯源功能。未来消费者只需点击“一键溯源”便可了解产品产地、入境报关时间等信息。
金链盟FISCO BCOS区块链平台联盟链。 由腾讯牵头集结了微众银行、平安银行、招银网络、京东金融、华为等31家企业。旨在整合及协调金融区块链技术研究资源形成金融区块链技术研究和应用研究的合力与协调机制提高成员单位在区块链技术领域的研发能力探索、研发、实现适用于金融机构的金融联盟区块链以及在此基础之上的应用场景。
微黄金,联盟链。 腾讯财付通与工商银行合作,以工商银行的黄金产品为基础,联合推出的在线黄金交易服务。其中,由腾讯提供联盟链的底层技术支持。
公益寻人链,联盟链。 将区块链技术应用到公益领域,连接腾讯内部多个寻人平台,实现各大公益平台的信息共享。
星贝云链,联盟链。 以腾讯区块链技术为底层打造的供应链金融服务平台“星贝云链”,是国内首家与银行战略合作共建的基于区块链的供应链金融平台,也是国内首个基于大健康产业构建的供应链金融平台。
TrustSQL联盟链。 腾讯发布区块链项目TrustSQL旨在以区块链基础设施构建安全高效的解决方案为企业及机构搭建价值连接器共同推动价值互联网发展。
腾讯云金融级解决方案BaaS联盟链+私链。 腾讯云发布区块链金融级解决方案BaaS(Blockchain as a Service)。
这套方案构建在腾讯金融云之上,并整合了腾讯在支付、社交网络、媒体网络、征信平台等业界领先领域的资源在内的解决方案,将在智能合约、互助保险、大数据交易及资产交易、供应链金融与供应链管理、跨境支付/清算/审计等场景下,为金融用户提供安全、可靠、灵活的区块链服务。
腾讯云+Hyperledger联盟链。 腾讯云加入Hyperledger参与国际区块链生态建设推动区块链技术以及相关标准的制定。
区块供应链联盟链+云单平台,联盟链,腾讯与中国物流与采购联合会(简称“中物联”)签署了战略合作协议,并发布了区块供应链联盟链及云单平台。
京东区块链平台,联盟链。 京东发布自己的区块链平台,愿景是协同盟友构建新一代基于互联网的“可信价值传递基础设施”,服务于商业数据的高效可信传递。与此同时,京东积极推动自身的零售和供应链大数据“上链”,通过场景数据在区块链中的传递,助力基于区块链技术实现规模化应用,建立社会化跨主体共享的区块链联盟链网络。
国内信用证信息传输系统,联盟链。 苏宁银行加入由中信银行上线的国内首个区块链信用证信息传输系统,成为联盟成员。
区块链黑名单共享平台,联盟链。 苏宁金融宣布上线基于区块链黑名单共享平台系统即采用超级账本Fabric联盟链技术将金融机构的黑名单数据加密存储在区块链上金融机构可通过独立部署节点接入联盟链开展区块链黑名单数据上传和查询等业务。
小米移动+Hyperledger联盟链。 北京小米移动软件加入超级账本项目。
网易星球,区块链应用。 网易星球为用户构建星球居民身份,集合用户的社交、娱乐、购物、出行等相关数据(实际跟区块链技术并无天多关系)。
玩客云,区块链应用。 迅雷推出基于区块链技术的玩客云共享计算生态、CDN共享经济并发行代币玩客云现已改名链克停止了内地转账功能
迅雷链,公链。 迅雷发布了拥有百万级并发处理能力的区块链项目——迅雷链。采用独创的同构多链框架在业内率先实现了链间的确认和交互不同交易可以分散在不同链上执行从而达到百万TPS。
暴风播酷云,区块链应用。 它是一台可以赚取BFC积分的家庭私人影院智能终端。在非工作状态下用户通过闲置的存储空间和宽带帮助暴风系列软件、第三方CDN业务、第三方区块链业务进行超大文件网络加速甚至区块链网络全节点部署不仅可以共享资源还可以赚取BFC积分。
总结
今天我们主要了解了“区块链即服务”的概念,我们先从比特币出发,再从云出发,得到了“区块链即服务”的不同视角。接着我们浅析了“区块链即服务”应该做什么,并从架构集成的角度探讨了“区块链即服务”。最后我还列出了国内互联网公司在区块链即服务商的尝试。
好了,今天的问题是,如何设计一个稳定可控的区块链服务呢?你可以给我留言,我们一起讨论。感谢你的收听,我们下次再见。

View File

@ -0,0 +1,297 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第31讲 数字货币钱包服务
上一篇,我们谈到了“区块链即服务”的概念。实际上,区块链第一个需要解决的服务就是数字货币支付服务。如何将数字货币钱包集成到系统中,我认为这是区块链行业最为迫切的问题。
今天我们就来了解一下数字货币钱包,它面临了什么样的问题,这样的问题又需要什么技术才能解决,而数字货币平台想要定制自己的数字货币钱包服务,又应当如何集成。
数字货币钱包的分类
目前市面上的数字货币钱包有很多种,看起来似乎有些眼花缭乱,不过,我们可以将它们进行分类后,再快速了解。
下图展示了按照不同属性区分的区块链钱包。
左一是按照用户端平台划分的钱包,这种钱包实际是在服务端运行的,用户端的钱包实际上只是一个代理,所以用户不需要关心钱包的细节,使用起来十分方便,典型的例子是各种在线钱包。
左二是按照货币类型分类的钱包主要是指这款钱包到底是否支持多币种这里的多币种可以是基于以太坊ERC20 Token的同一个区块链上的多币种也可以是集成了比特币和以太坊等不同区块链的多币种。
右二是按照私钥存储的方式来区分的钱包实际上这里主要涉及了用户私钥是否被平台托管如果不托管直接存储在用户端也就是硬件、终端设备、纸质记录这些都可以被称为On-chain的钱包如果用户无法接触到私钥私钥被托管在平台那么这种钱包也被称为Off-chain的钱包。
右一是按照访问方式进行分类的钱包,例如可以多个人共同管理,同时它也是需要多重签名支持的钱包,否则就变成了个人私有的钱包。
以上的分类并不是绝对的一个钱包可以兼具以上不同的属性例如某个Mobile钱包是提供On-chain的也提供多重签名、提供多币种的钱包这种钱包通常就是业界比较流行的钱包类型。
但是,对于平台方来说,上述钱包类型可能不足以支持自己平台的需求,并发挥出最佳的功效。毕竟作为平台来说,对高可用、分叉检测、区块确认的要求是远远高于普通钱包的,这样的问题又是如何解决的呢?这就引入了一项新的技术。
扫描区块技术 Block scan
我们之前在深入区块链技术部分介绍过构成区块链的四个核心技术是P2P网络协议、分布式一致性算法、加密签名算法、账户与交易模型。这四个技术对应到数字货币钱包中就是P2P网络、持久化存储、账户以及私钥管理、共识与交易验证四大模块。
其中持久化存储模块是由全节点钱包自带的嵌入式数据库提供的这里有LevelDB、BerkerlyDB、SQLite3等多种选择。
但是无论选择哪种嵌入式数据库,都面临了一个严峻问题,精细化的交易查询验证与性能不可兼具。换句话来说,任何全节点的嵌入式数据库都无法和服务器级别的数据库相媲美。
对于平台开发来说,显然选择服务器级别的数据库是更为合适的选择。那么这里就涉及了一个问题,如何把全节点钱包中的数据转换成为数据库服务器中的数据,这就需要用到一种扫描区块技术,简称扫块。
扫块顾名思义就是指扫描全节点钱包中的所有区块然后将其解析后存储到数据库服务器的过程这些数据库可以是MongoDB也可以是MySQL取决于你的业务需要。
我们可以举元界区块链扫块的例子,元界上的区块结构与比特币接近,你可以将其类比成比特币区块链。
以下是Python代码展示了基于MySQL的关系型表结构目的是从元界的嵌入式数据库中扫描区块然后存储到MySQL中。
def init_table(conn):
tables = []
tb_block = '''
create table if not EXISTS block (
number bigint primary KEY ,
hash char(64) not null,
bits bigint,
transaction_count INTEGER ,
mixhash VARCHAR (128),
version char(8) ,
merkle_tree_hash char(64),
previous_block_hash CHAR (64),
nonce varchar(128) ,
time_stamp bigint
) DEFAULT charset=utf8;
'''
tb_tx = '''
create table if not EXISTS tx (
id bigint PRIMARY KEY ,
block_height bigint REFERENCES block(id),
hash char(64) not null
)DEFAULT charset=utf8 ;'''
tb_address = '''
create table if not EXISTS address(
id int PRIMARY KEY ,
address VARCHAR (64) UNIQUE
)DEFAULT charset=utf8;
'''
tb_output = '''
create table if not EXISTS tx_output(
id bigint PRIMARY key,
hash char(64) NOT NULL ,
tx_id bigint REFERENCES tx(id),
output_index bigint not null,
output_value bigint,
address_id bigint REFERENCES address(id),
script varchar(1024),
asset varchar(64),
decimal_number varchar(8)
)DEFAULT charset=ascii;
'''
tb_output_fork = '''
create table if not EXISTS tx_output_fork(
id bigint PRIMARY key,
hash char(64) NOT NULL ,
tx_id bigint,
output_index bigint not null,
output_value bigint,
address_id bigint,
script varchar(1024),
asset varchar(64),
decimal_number varchar(8)
)DEFAULT charset=ascii;
'''
tb_tx_fork = '''
create table if not EXISTS tx_fork (
id bigint PRIMARY KEY ,
block_height bigint,
hash char(64) not null
)DEFAULT charset=ascii ;'''
tb_input_fork = '''
create table if not EXISTS tx_input_fork(
id bigint PRIMARY key,
tx_id bigint,
belong_tx_id bigint,
tx_index bigint,
tx_value bigint not null,
script varchar(1024),
address_id bigint,
asset varchar(64),
decimal_number varchar(8)
)DEFAULT charset=ascii;
'''
tb_block_fork = '''
create table if not EXISTS block_fork (
number bigint primary KEY ,
hash char(64) not null,
bits bigint,
transaction_count INTEGER ,
mixhash VARCHAR (128),
version char(8) ,
merkle_tree_hash char(64),
previous_block_hash CHAR (64),
nonce varchar(128) ,
time_stamp bigint
) DEFAULT charset=ascii;
'''
tb_output_asset = '''
create table if not EXISTS tx_output_asset(
id bigint PRIMARY key,
hash char(64) NOT NULL ,
tx_id bigint REFERENCES tx(id),
output_index bigint not null,
output_value bigint,
address_id bigint REFERENCES address(id),
asset_name varchar(64),
issuer varchar(64),
asset_type varchar(8),
description varchar(64)
)DEFAULT charset=utf8;
'''
tb_input = '''
create table if not EXISTS tx_input(
id bigint PRIMARY key,
tx_id bigint REFERENCES tx(id),
belong_tx_id bigint REFERENCES tx(id),
tx_index bigint REFERENCES tx_output(output_index),
tx_value bigint not null,
script varchar(1024),
address_id bigint REFERENCES address(id),
asset varchar(64),
decimal_number varchar(8)
)DEFAULT charset=ascii;
'''
我们按照元界区块链的结构,可以把表分为四大类:
第一类是区块block 第二类是交易Tx 第三类是交易输入输出tb_inputtb_output 第四类是分叉处理。
下面我贴一个普通的以JSON格式展示的区块和交易你可以对比一下和上述表的关系
下面是一个区块,里面包含了一笔交易。
{
"header" :
{
"result" :
{
"bits" : "7097242144892",
"hash" : "cb36f2a1cbbf6a6300f4bf4915a5f54476ab603f2703a99e5d8d2db7ae2b37ed",
"merkle_tree_hash" : "3457b988bc6b61a7ad803f0742a68064c622ec618b833d99d153b92cba264d53",
"mixhash" : "47266114351983928450891657703600980449927404535067001902399906817438963939929",
"nonce" : "1864926684099479906",
"number" : 1000000,
"previous_block_hash" : "049257f31f4412bf115ed44a9305012ccea888cf842c2f0b66a528f258016e50",
"time_stamp" : 1520339120,
"transaction_count" : 1,
"version" : 1
}
},
"txs" :
{
"transactions" :
[
{
"hash" : "3457b988bc6b61a7ad803f0742a68064c622ec618b833d99d153b92cba264d53",
"inputs" :
[
{
"previous_output" :
{
"hash" : "0000000000000000000000000000000000000000000000000000000000000000",
"index" : 4294967295
},
"script" : "[ 0340420f ]",
"sequence" : 0
}
],
"lock_time" : "0",
"outputs" :
[
{
"address" : "MUiW2CViWLQBg2TQDsRt1Pcj7KyrdqFPj7",
"attachment" :
{
"type" : "etp"
},
"index" : 0,
"locked_height_range" : 0,
"script" : "dup hash160 [ e45695c2c390625376a7225a7ebea90dbb4147cf ] equalverify checksig",
"value" : 270750000
}
],
"version" : "1"
}
]
}
}
我们可以发现区块头部分的数据被存储到tb_block表中然后交易哈希被存储的tb_tx表中接着交易的输入输出被存储到tb_input和tb_output中这三者是通过区块高度、交易哈希被链接起来的。
tb_block <--区块高度--> tb_tx <--交易哈希--> tb_input/tb_output
完整的Python脚本可以通过这个链接查看
https://github.com/mvs-org/mvsd-mysql-sync/blob/master/tools/sync.py
整体的思路是使用getblock的JSON-RPC从第0个高度的区块一直扫描到最新区块并且存储到MySQL中。
这里最难以处理的问题是保持MySQL中的区块数据与全节点数据的一致性也就是当区块链分叉时MySQL需要感知到发生了分叉接着移除被分叉的区块并且接着同步到正确的区块上。
这个处理方法有不同的思路上述脚本使用了移动区块数据的方法也就是将孤儿块移动到tb_tx_fork下接着同步正确的区块。实际上也可以通过标记法即在tb_block中将此块标记为孤儿块。
关系型的表结构也可以做成标准化的区块链本身作为基础设施历史交易已经不可篡改如果把这些结构化的区块做成公共基础设施并提供基于API的开放调用这便就是我们常见的区块浏览器了。
上文我们介绍了扫描区块的思路和实践实际上我们也可以使用Presto技术将钱包中的数据转换成类SQL查询但这里服务的稳定性和性能需要经过测试才可以被平台使用。
扫描区块技术解决了所有区块链资产可视化、高并发查询的问题所以它在一些大规模的数字货币交易所中也有应用。区块浏览器就是基于这种技术产生的一种Web服务下面我们就来看一看区块浏览器与扫描区块的具体关系。
区块浏览器
我在前面介绍数字货币和交易所时有提到过区块浏览器,它提供了可视化的交易查询和验证服务。
从技术上看一个区块浏览器的主要工作就是把区块扫描到数据库服务器中然后搭建一个Web访问服务用户只需要输入交易哈希或者区块哈希即可查询到交易是否已经被打包和确认。
目前比特币和以太坊的流行区块浏览器比较多,不局限在某一个区块浏览器,因为大家看到的区块数据是一样的,区别就是如何更好地展示,做得更好的话,还可以集成一些咨询和资产托管的功能。
从产品意义上来说我认为区块浏览器更适合叫做资产浏览器因为它为人们提供了资产证明的服务而不必肉眼识别交易或者自行手动解析交易一般来说区块浏览器也提供基本的API查询服务。
区块浏览器也为人们提供了区块和交易的统计数据,帮助人们直接地了解这个区块链的活跃程度,人们也可以根据统计数据制作区块活跃度等指数帮助投资者了解这个区块链项目。
区块浏览器降低了普通人查询和验证交易的门槛,其实它也是整个区块链行业的配套基础设施,而对于平台来说,从第三方获取交易验证始终是一件不安全的事情,也面临着中心化的风险,那么平台如果想搭建自己的交易查询和验证服务,需要如何操作?
这就需要把数字货币钱包服务,集成到自己的系统里。下面我们就来聊一聊具体是如何集成的。
数字货币钱包服务
实际上,大规模的区块链应用都需要搭建一个数字货币钱包服务,数字货币钱包服务为系统中的其他模块提供了可扩展的、统一的、安全的交易查询和验证服务。
下图是我从交易平台开发归纳出来的数字货币钱包服务。
数字货币钱包服务可以为交易平台其他模块提供接口统一的API同时将不同的数据结构化到数据库服务中最后可以通过传统高可用手段完成交易查询和验证。
当然这也和交易所的规模有关如果是一个小型交易所扫块可能不是必需的但是统一接口的API却是必须的。
我认为数字货币钱包服务应当有一套标准的钱包服务框架,支持主流数字货币,从而降低大家的使用和部署门槛,这也和我们上一篇聊到的“区块链即服务”的概念不谋而合。
可以说区块链的配套设施和技术还很原始,还有很大的发展和提升的余地。
总结
好了,今天我们先了解了一下数字货币钱包的分类,接着详细讲解扫块技术,然后又谈到了区块浏览器,最后分享了一下数字货币钱包服务的集成思路,希望可以让你对区块服务的实践有一个初步了解,你也可以根据已有的技术知识重新拆解和分析区块链技术。
那么今天的问题是,数字货币钱包服务可以应用到微服务架构中吗?

View File

@ -0,0 +1,124 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第32讲 区块链与供应链(一)
前面的文章里,我们聊了很多与区块链数字资产、数字金融相关的内容,它们都属于基础设施。今天,我们来聊聊另外一个话题:区块链与供应链。
供应链是一个非常大的话题,几乎在任何的实业里都会有供应链的身影。对于企业来说,如何做好供应链管理,似乎是一个万年不变的难题。
而对于一个行业来说,如何站在行业全局的角度提供出供应链的最佳配置策略,也是一个万年不变的难题。
所以当供应链遇到区块链,区块链的一些优秀特性刚好可以解决目前供应链领域的痛点。
什么是供应链
在聊区块链和供应链之前,我先简单地向你介绍一下什么是供应链。供应链虽然也带了一个“链”字,它其实是一个网链状的结构。
下图展示了笔记本电脑供应链的各个环节。
(图片来自维基百科)
图片中展示笔记本电脑的生产制造过程左侧表示了制造一个笔记本电脑的原料供给侧Laptop的右侧表示为需求侧包含了批发商wholesaler、经销商retailer)等多个角色,它们都是围绕了笔记本电脑而形成的供应链。
通过上面的图,我们来归纳一下到底什么是供应链?供应链围绕核心企业与产品构建,是一个从供应商开始、途径制造商、运输商、分销商最终到消费者的网链状结构。
我们可以发现供应链是一个网链状的复杂结构,每个角色又与其他角色互相交叉,于是可见它的管理也是非常复杂的。
供应链领域
供应链领域又分供应链管理和供应链金融,我们先从供应链管理开始。
1.供应链管理
供应链管理就是指对整个供应链系统进行计划、协调、操作、控制和优化的各种活动和过程,其目标是使这一过程所耗费的总成本最小。需要注意的是:这里的总成本是指整个供应链参与的企业总成本最小,不是指单个环节的成本最小。
我们已经知道了供应链涉及了供应商、制造商、渠道商等角色。那么连接这些角色的主要是采购Purchasing、库存Inventory、物流Logistics等一系列事务。采购、库存和物流主要围绕仓储、配送中心、物流运输展开所以我们也可以把供应链看作是由供应商、制造商、渠道商、仓库、配送中心、物流运输等构成的网络。
在这个网络之中,各个角色之间最大的问题就是信任问题,因为只有建立信任才能协作完成一个完整的产品制造和销售过程。供应链管理面对的首要问题就是如何降低信任成本,将原本松散的企业形成互信的链式结构,每个角色必须通过有效的链上管理来协调自身和外部的资源,从而满足市场需求。
在这个链式结构中,有信息流、物流、资金流三种流动过程。
信息流:是指每个角色需要了解并追踪产品在供应链中的当前位置和状态;
物流:是指产品或原材料被转移到目标角色手中的过程;
资金流:是指上下游资金结算的过程。
上述图片展示了在供应链管理过程中,物流指向需求侧,资金流指向供应侧,信息流则需要在各个角色之间共享。
而目前供应链的现状是,资金流、信息流、物流各自独立运行,资金流靠银行,信息流靠供应链管理工具,物流靠运输行业,它们都是围绕一个或多个核心企业展开的,所以各个角色极度依赖核心企业,这种模式暴露了以下几个问题:
核心企业对上下游的延伸和掌控范围有限;
上下游可能因为竞争关系,存在信息流作假和被篡改的风险。
市场供需变化无法及时传导到供给侧,从市场需求到供给侧的风险依次放大。
这些问题一方面会增加核心企业的供应链管理的复杂度,另一方面是非核心企业参与感不强导致的风险忽视。虽然市场上也出现了一系列工具来帮助提升供应链上下游协同能力,但是还是存在了一些问题。
在整个供应链过程中,存在多个不同的参与方。由于不同参与者可能使用不同的数据库甚至是纸质文档,因此,数据的跨系统整合较难。
传统数据库体系中的数据本身存在被篡改、被攻击的风险。在准确性和安全性上还存在较大的提升空间。
由于产品的追踪难度大,一旦某个环节出现问题,监管机构对于不合规的活动在调查、取证及问责上存在一定的难度。
换句话说,只要中心化的思路不变,只是形式变换了,传统技术仍然难以有效地解决问题。但是区块链的信息透明共享、节点之间对等、不可篡改等各种特性,几乎就是针对供应链的对症下药,所以区块链也被誉为供应链管理的终极武器。
2.供应链金融
供应链金融和供应链是两个概念,因为多了金融两个字,于是严格来说,供应链金融属于金融的范畴,它是专门为供应链服务的金融。
供应链金融(supply chain finance, SCF)可以泛指各种融资工具,它可用于为供应链中的各方提供资金,通过短期信贷手段来平衡上下游之间的流动资金差,从而最大限度地减少总供应链成本,企业也可以利用供应链融资与供应商建立更牢固的关系,降低金融风险和提高流动性。
与其他金融一样,供应链金融的核心也是风险管理,良好的风险管理前提是供应链信息真实可靠的透明共享。传统供应链金融围绕银行展开,银行在供应链信息上的收集也受制于传统技术,并不能完全掌握企业之间的真实订单情况,那么风险控制则十分依赖对企业的信誉判断了。
所以,如果所有的参与方都可以真实准确地查阅整个供应链的流程和状态,那么风险管理就变成了整个供应链参与方共同分担,而不仅仅只是核心企业和银行。
区块链为供应链带来的新曙光
区块链为供应链主要带来了思维上的变革,不再是以围绕核心企业打造的生态,而是共治的生态,区块链作为基础设施可以为参与方提供良好的可信环境,从而降低供应链的成本。
通过上文我们知道,供应链有三流:物流、信息流、资金流。理想的情况其实是“三流合一”,也就是由区块链本身提供信息流、资金流、物流三流管理。
这里如何理解呢?
区块链本身也可以提供信息登记,例如订单状态可以被格式化成区块链的交易附加内容。
区块链应用到资金流,这个想必你也应该猜到了数字资产,其实物品被登记后也属于一种有价凭证,对有价凭证的验证和交付可以看成数字资产的另外一种形式。
区块链应用到物流这里或许要结合IoT技术一起完成因为区块链作为分布式系统无法直接感知物流状态例如运输途中食品的温度这个是需要依赖传感器的传感器获得的数据可以上传到区块链也可以通过哈希处理后登记到区块链。
实际上,现阶段在供应链商达到“三流合一”是十分困难的,但我认为这是一种趋势,这取决于区块链的发展速度。
所以区块链在供应链中的切入点往往是从物流切入的,因为物流是连接各方最直观的表现,也是关系最紧密的。从物流切入可以避免与现有供应链工具的直接竞争,例如既存的供应链管理工具已经提供了信息流管理,银行提供了资金流管理,所以从物流入手项目落地的可能性最大。
在物流上,区块链可以保证数据登记真实可信,信息对所有参与方公开透明,并且提供产品溯源功能,这似乎就已经发挥了很大的功用,解决了一些难题。
说到这里你可能觉得奇怪,国内“四通一达”效率之高几乎吊打全世界,为什么还说物流有很多问题呢?其实国内的环境比较特殊,“四通一达”的创始人之间有比较好的信任基础,而且国内电商的和互联网技术的崛起,也为国内物流环境创造了良好的土壤。
所以这里主要针对的是跨境物流环境,跨境物流面临的痛点还涉及了海关、跨境汇率、目的地国家政策等多方面的影响,相互之间的信任程度更低,所以解决跨境物流是区块链在供应链上的一个突破点。
区块链应用到供应链上也有很多著名案例,比如业界经常提到的几个案例:
马士基Maersk和IBM的海运保险区块链平台案例
沃尔玛利用区块链进行食品追踪溯源案例;
众安的区块链养鸡场实时记录和追溯整个鸡的成长过程案例;
海航科技基于区块链技术的物流端到端的虚实融合信息流平台。
实际上通过仔细分析我们可以发现以上机构使用的是DLT技术也就是联盟链并非公链。下一篇我们通过技术视角来详细剖析一下这个现象。
总结
好了,今天我主要介绍了什么是供应链,供应链的现状以及面临的难题,最好又聊到了区块链又可以为供应链带来什么,应该从哪里切入。今天的问题是,你觉得供应链还有什么难题是区块链可以解决的呢?你可以给我留言,我们一起讨论。

View File

@ -0,0 +1,150 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第33讲 区块链与供应链(二)
上一篇我们一起学习了供应链的相关知识,并探讨了区块链是否可以为供应链带来新的机遇。今天,我们就从一个具体的案例出发,看看区块链到底是如何帮助供应链的。
由于区块链应用到供应链上的典型案例并不多,所以本文主要是以一种探讨的角度和你分享,希望给你提供一些思路。
跨境物流问题
上一篇我们剖析了区块链切入供应链的点是跨境物流。我们先来看看跨境物流会涉及哪些环节。
跨境物流一般包含了托运方、仓储、港口、海关、航运公司几个角色。
航运公司提供实际的运输服务,从航运公司的角度来说,一个集装箱要尽可能地装满才能获取最大收益;然而实际的货物托运需求,可能并不能装满一个集装箱。
那么,围绕货物与集装箱资源配置的货运中介就出现了,货运中介提供集装箱与货物的调度、拼凑、与上述参与方沟通协调的服务。
在实际的操作过程中,航运公司一般不与托运方直接对接,而是和货运中介对接,托运方与货运中介对接。
托运方 <--> 货运中介 <--> 航运公司
这里隐含了三个问题:
航运可能出现短时间大量的物流调度,同时也产生庞大的信息流,但货运中介处理能力有限,不能及时处理,这就属于订单匹配问题;
托运货物如果是贵重物品,托运方往往要求中介现金抵押,所以中介也要求航运公司抵押,这属于供应链金融问题;
三方议价会造成议价成本过高,这属于供应链流程问题。
在实际航运过程中,还会出现“丢包”的情况。换句话说就是集装箱丢了,如果你看过了《一切尽失》这部电影,就知道主角的船是被随波漂流的集装箱撞毁的。所以,即使是集装箱的供应商,也未必有能力跟踪集装箱的去向,一旦集装箱交付给下游,剩下的就只有听天由命了。
这中间其实还是会有一些信任问题,集装箱交付给下游后,如果有一种技术可以让参与方们都承认交付过程是真实无误的,那么在丢包时可以追踪到是谁在哪个环节出了问题,而不至于在追责参与方时,出现“踢皮球”的情况。
上述案例我们可以从联盟链方案和公链方案两个角度进行剖析。下面我们先来看看联盟链方案。也就是基于分布式账本技术DLT的解决方案。
基于分布式账本技术DLT的解决方案
分布式账本技术英文全称是Distributed Ledger Technology缩写为DLT。DLT技术是联盟链的首选技术在DLT技术中关注点不是Token而是核心业务可编程逻辑所以DLT技术可以看成是区块链技术的一个变种。
基于DLT技术的供应链解决方案的思路还是围绕核心企业展开也就是前期的方案制定和执行依然是核心企业牵头上下游企业需要成为平台的会员才可以享受服务。联盟链可以为这些平台上的会员提供一定的信任保障。
在上述航运的案例中DLT可以围绕航运公司的订单展开参与方都可以成为DLT的会员节点。
在DLT技术中关注点是如何连接核心企业。DLT技术很可能首先运用到航运、货运中介和银行之间。
方案1自建DLT物流追踪平台
自建一个物流追踪平台核心参与方可以选择部署节点或成为记账节点。如果DLT使用的是PBFT或PoET算法则要求参与方节点不能联合作弊也就是核心参与方之间必须有基础信任否则任意参与方就算有意发起攻击也会造成不可估量的损失。
方案2选择第三方DLT技术平台
另外一种情况是选择第三方DLT平台而不是自建这方便让中小企业加入但这里的风险也是显而易见的由于记账节点都是第三方DLT平台所以参与方首先要信任DLT平台。
从技术角度来看一般DLT平台也搭建在云端例如Azure、IBM Bluemix等这也是为什么这些机构不遗余力地销售“区块链即服务”的概念对所有参与方而言记账节点是否需要自己参与运行取决于业务敏感度。
以上两个方案中不可篡改性是由DLT技术的共识算法保证的这里还是会退化成对记账节点的信任问题所以DLT技术的实践形式往往是“某某区块链供应链平台”这里的信任问题转化为对平台的信任。
除了上述结构托运方和货运中介之间也可以直接搭建DLT技术平台略过货运中介这个取决于托运方的规模如果托运方是一个大中型企业那么也直接参与形成如下结构。
探讨到这里我们也可以发现DLT技术的局限性。
仍然围绕核心企业展开,通常只解决了单个问题,也会面临传统技术相同的问题;
DLT价值孤岛由于DLT平台太多会造成数据孤岛DLT平台之间并没有打通面临着天花板。
但是DLT技术有如下优势
能解决实际问题,可以快速落地;
有行业巨头的大力支持,可以和现有供应链管理工具栈无缝对接。
基于公链的解决方案
基于公链的供应链解决方案目前极少,本文我主要是提出一种思路和你一起探讨。
用公链解决供应链难题,也是从协作信任的角度出发。在上述案例中,问题主要集中在订单匹配和货物追踪上。
1.订单匹配
订单匹配其实不是区块链的长项即使有智能合约技术但受制于TPS低效的计算使得海量匹配不可行那么我们换个思路。
订单匹配本质上也是一种撮合计算,如果我们把所有的货物看成一种资产,那么以资产的体积、重量、存储要求作为条件进行最优匹配,生成最优货运策略。这个过程其实与数字货币交易所的职能十分相像。
所以我们可以把订单匹配这一步暂时放到链下,只在链上记录最优货运策略,所有人可以根据当前订单的状态验证是否为最优货运策略,如果满足预期则执行最优货运策略。
换句话说,托运方事先在链上生成订单,订单被全网的航运公司看到以后,通过自己的链下订单匹配生成最优订单策略,接着向托运方发起承运请求,托运方验证是否满足自己的期望,是的话则接受承运请求,那么这笔订单成交。
在成交的同时托运方要求航运公司进行资产抵押这里的抵押则不必是现金了可以是物流行业的通用Token这里的Token具有可编程属性双方可在协商一致的情况指定抵押的解锁条件。
2.货物追踪
完成订单匹配和抵押以后,进入实际承运阶段,这时候对货物的追踪则显得至关重要。传统的技术是通过中心化数据库来记录货物的位置和状态,在终端使用 IoT 传感器技术,将货物状态和位置数据上传至数据库。
这里的策略很简单,我们不变更终端部分,仅仅把中心化数据库的职责替换由公链来执行。
这里也并不是百分百的替换而是把关键数据记录在公链上非关键数据依然留在中心化数据库或者类DAG技术区块链账本中主要考虑到公链是一种珍贵的共享资源海量数据上链会形成对公链的DDoS攻击。例如货物的实时温度变化区块链无法承载如此海量的数据也算是在公链上的折衷方案。
这里也会涉及数字资产的概念如果给货物一个唯一的编号那么这个编号可以被区块链记录而形成唯一性的数字资产类似ERC721 Token标准。
3. 可能的结构
图中是一套以元界为基础的公链方案。
在Back-end部分元界区块链承担了货物追踪和订单撮合的职能而所有参与方可以通过搭建属于自己的元界区块链节点服务获得链上的订单信息。
在Front-end部分工作人员可以通过移动设备获得订单数据工作人员也可以像以前一样通过IoT蓝牙传感器获得货物的数据接着通过移动设备上传至服务器由服务器挑选并计算后登记到元界区块链上。
两者的比较
公链方案与DLT技术相比具备以下优势。
透明度高:对于可公开的信息,零售环节的普通购买者也能够通过区块浏览器查询到产品来源。
不可篡改性由于公链的共识算法的不可篡改性比DTL技术更强且参与的节点更多所以数据的真实和可靠性更好。
Token转移由于区块链本身支持Token登记所以物流提单可以做成Token变成有价证券进行转移。
参与性强:任何客户、政府或是监管机构都可以参与到供应链流程整个或某个特定环节,并跟踪与浏览者相关的某些公开或非公开信息。
共享公链的基础设施例如参与方不需要再搭建可视化Web服务直接使用区块浏览器即可货物Token也可以参与到交易平台进行二级交易。
DLT技术与公链方案相比具备以下优势。
可控性高DLT技术一般严格控制参与方核心企业的权益可以得到保障。
可快速落地:方案和思路延续传统技术,实施起来方便,对参与方的认知门槛要求低。
匿名性较好一般公链并没有提供清晰的权限管理和匿名技术所以企业的数据必须脱敏才可以明文上链而DLT技术不存在这个问题。
总结
好了今天我和你一起探讨了区块链技术在供应链上的两种实践方案第一种是DLT技术第二种是围绕公链展开的方案这两种方案各有优劣。
所以今天的问题是,你认为哪种方案会是未来的主流呢?你可以给我留言,我们一起讨论。感谢你的收听,我们下次再见。
https://github.com/hyperledger/sawtooth-supply-chain

View File

@ -0,0 +1,109 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第34讲 从业区块链需要了解什么?
今天我们来到了最后一个专题如何从业区块链。经过了前面33篇文章的洗礼相信你对区块链应该有了一个比较全面的了解了。
在今天的文章中,我会从两个角度出发,先从行业的角度来讲讲区块链行业现状以及人才需求,再从人才角度来谈谈从业区块链需要具备哪些基础技能。
行业现状
那么行业现状与实际的人才需求是怎样的呢?我们一起来看看。目前区块链领域的人才需求大致可以分为以下几种。
根据客户的需求搭建基于DLT技术的分布式账本应用在DLT上实现客户要求的业务需求这类与传统解决方案型的人才十分接近。
公司已经具有了某些行业的资深经验目标是通过技术选型选择某个公链在此公链上开发基于区块链的应用。目前游戏与社交类的项目比较成熟游戏类有以太养猫、LeBloc等内容社区类有Steemit、币问、币乎等项目。这一类的特点是可以很好地与现有技术结合在业务层面利用区块链的资产数字化特性商业潜力大技术发展空间也很大进入门槛较低风险较低。
公司获得融资或者在海外发起ICO目标是研发新一代公链这一类是为了通过改进现有的区块链技术不足而创建的项目技术发展空间最大进入门槛最高风险也最高。
区块链生态基础设施类。数字资产交易平台、数字资产管理、移动钱包、硬件冷钱包、数字金融媒体、区块链咨询、矿池运营等都属于此类,这些都是目前商业利润最高的区块链产业,技术发展空间较大,进入门槛较低,风险也较低。
目前区块链的人才供应需求远远不足以支撑如此庞大的市场。换句话说就是人才极度稀缺,人才的稀缺与过高的估值形成鲜明对比,这也就是泡沫的形成。
与上面的分类相关的,是行业相应需求的编程语言。
第1类是DLT技术由于超级账本的流行DLT基本以Golang为主但也会涉及应用可视化交互的问题毕竟交付给客户的时候指望客户使用命令行是不现实的所以不可避免地需要具备一些前端技术。
第2类是公链应用由于智能合约的存在使用区块链的门槛大大降低最流行的以太坊智能合约是以类JavaScript的语言Solidity编写的目前也出现了不限定编程语言的智能合约区块链。实际上我认为Solidity比其他完全开放式的智能合约要安全许多所以建议你如果打算学习智能合约还是最好从以太坊入手。
第3类是研发自己的公链。目前主流的是静态编译型语言以C++和Golang最为常见也有用Rust、Java、C#实现的公链SPV轻钱包型多使用Java、Python、JavaScript实现。可以说公链研发几乎都涉及了主流编程语言。
第4类是在商业上与区块链最为紧密但是技术上却是最不紧密的整体技术栈与传统互联网网络技术差别不大例如搭建一个区块链财经类网站甚至不需要任何区块链技术但是对内容运营有较高要求。
人才现状
我们分析了区块链行业的现状接下来我们看看现有的人才构成。我们如果把现在互联网的人才划分一下大致分为5个类别
技术决策者这类主要指CTO、技术总监、技术专家等
代码生产者和维护者也就是广大IT从业者、开发工程师
需求产生和归纳者,产品经理、需求分析师;
交互与可视化前端工程师、UI/UE与视觉设计等
产品运营,实际与用户接触,吸纳和维持用户。
目前的区块链产业基本以数字货币交易、数字资产管理、资讯类App为主细分来说就是移动App钱包、炒币用行情工具、区块链资讯类App以及一些简单的区块链App应用对人才的需求大致符合互联网产业的需求也就是上述5类人才都是需要吸纳的。
我们可以发现区块链产品的模式还比较单一处于非常早期的状态。但就算是这些单一的App应用从业人员也是不足的。
我在公司的实际运营过程中,发现有几种人才十分稀缺。
理解传统金融交易,同时又了解互联网产品的人才。传统金融交易涉及的往往是券商或者证券交易所,区块链是新兴行业,所以具有跨界知识的综合性人才比较受欢迎。
理解社区建设和互联网产品运营,又同时了解数字货币的人才。这一类最缺的其实是内容运营,无论是原创内容还是编辑内容,都需要扎实的区块链知识作为基础。这类人群招聘中很少遇到,一般公司都选择自己培养。
了解大型开源项目建设,同时乐于和社区沟通分享的顶尖技术人才。不少顶尖技术人不擅于与人沟通,这也导致参与社区型项目过程中,其他开发者对其误解甚至产生偏见。
我在实际招聘工作中,经常会遇到不同的候选人,针对他们的盲区,我总结了以下经验。
第一点是候选人的完全匹配度非常不高,但某一技能模块匹配度又很高,直接选用的话要考虑培养成本,不选用又感觉可惜,招聘者经常处在两难的选择。
例如应聘者来自传统交易领域,但是完全不懂区块链,也不了解有哪些知名可靠的数字货币交易平台,那么必然就需要一个较长的培训过程。所以我建议各位求职者业余时间炒炒币感受一下,并且购买几本区块链相关书籍作为入门铺垫。
第二点是思维转变。很多求职者抱着跟风的心态过来尝试,由于区块链大热,所以就来试试。我认为这是好的开始,毕竟勇敢迈出第一步很重要。
但是在实际面试过程中,这部分求职者由于对经济和金融理解有些浅薄,有一些错误的认识,这类人才即使进入区块链行业不久也会被吓跑。区块链行业早期收益高,风险也高,大家一定要认清自己的风险偏好再作打算。
第三点求职者本身抗拒数字货币,认为数字货币就是泡沫,他们认为区块链技术才是未来,但是当我问为什么区块链技术是未来的时候,也答不出个所以然。这里有可能是对数字货币巨大风险的恐惧,也有可能是不愿意接触了解产生的偏见。数字货币作为区块链的第一大应用,客观接受是前提。
第四点是求职者以为投递区块链岗位,需要非常深的区块链理解和技术储备。但这部分求职者往往是仅通过网络上几篇文章的阅读,就过来面试区块链岗位了。
其实作为招聘者我一般不问区块链技术也不会问共识算法我一般还是问编程语言的基础知识例如TCP/IP协议C++的右值引用,所以即使不懂区块链也没有关系,区块链也是构建在互联网之上的,扎实的编程基础才决定了后续学习效果和成长的速度。
这里,我列出了公司实际的一些岗位需求,给你参考。
公链核心开发者:编程语言基本功非常扎实,代码风格容易阅读,精通中英文文档撰写,英语口语流畅,了解区块链技术基础即可。
钱包App以及其他基础设施开发者了解主流语言开发包了解移动互联网产品的开发和上架过程了解区块链私钥管理即可。
社区运营:互联网产品社区运营,对数字货币和开源社区抱有热情,熟悉常见线上线下运营手段。
钱包App产品运营互联网产品运营这类与理财类App比较接近。
数字资产交易平台这类人才需求最大基本上会涵盖上述5种人才储备。
区块链研究这类分为行业战略研究、技术研究两类前者类似咨询行业后者主要是CTO、架构师等高端技术社区、开源技术社区推进。
明确与制定自己的发展方向
其实无论是区块链还是前段时间大热的人工智能,是做技术还是做产品,我们首先要找准的都是自己的方向。
不同的人从业的出发点也不同我曾经面试过一位C++技术大牛他与C++之父共事过两年,是十分聪颖、沟通能力良好的一位工程师,当我力邀他加入我们公司的时候,他说道:“我要的不是某个火热的行业,只是希望有一份稳定且风险不高的工作,继续自己的兴趣技术研究。”
如果求职者看哪一行火热就想从业,这种随波逐流的心态可能会导致什么也做不好。所以我十分建议你先要弄清楚自己的职业喜好,如果有条件,你可以做一个职业和性格测试,找准自己未来的定位,争取让自己的性格与自己的职业摩擦最小。
区块链是一个新兴的行业,可选的余地大并不意味着对从业者没有要求。恰恰相反,这样的行业恰恰需要从业者有扎实的编程语言基础,相对完备的计算机和网络理论知识结构。
毕竟无论是人工智能还是区块链,如果你具备了扎实的基础,在上手学习的过程中,也会快人一步。
不过仅仅拥有领域知识是不够的,目前行业的发展都呈现出跨界跨领域的趋势,所以你也不必局限在自己的领域内,适当地扩充其他知识也是十分有助于职业发展的。
总结
今天我分别从行业需求和人才分布两个角度出发,谈及了区块链行业从业话题。其实无论什么样的工程师想入门区块链,都需要具备扎实的编程语言知识、计算机和网络知识,基本功扎实这个标准,放到任何一个行业都是一样的。
总结起来,你首先要找准自己的职业方向,其次是具备扎实的领域基础知识,最后是拓宽自己的知识面,想必这样从业区块链也会信心十足,早日实现财富和技术自由。
那么今天的问题,你认为从业区块链行业最重要的知识点是什么呢?你可以给我留言,我们一起讨论。感谢你的收听,我们下次再见。

View File

@ -0,0 +1,218 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第35讲 搭建你的迷你区块链(设计篇
程序员的天赋技能就是通过代码实践自己的想法,完成一个作品会有相当的成就感。
今天我们终于也来到了实践环节。我将以C++14的代码为例和你分享设计并实现一个迷你区块链的例子。
目标和范围
首先我们要知道达成的目标,根据目标划定工作范围。
考虑到我们无法搭建一个类似比特币的庞大P2P网络也没有太多精力实现一个真正意义上的完整功能的全节点钱包而且完整的全节点过于复杂会让学习者迷失在细节中。
所以我们的目标是构建一个包含仅有基础功能的全节点客户端它可能没有太炫酷的UI页面也没有复杂的命令它们可以提供下面的功能。
提供P2P节点发现和同步区块的功能
提供创建公私钥对的功能;
提供发送交易的功能;
提供交易查询的功能;
提供余额查询的功能;
提供挖矿的功能,在任意地址上都可以发起单机挖矿;
提供基础日志,方便跟踪监视。
以上7个功能基本涵盖了一个区块链全节点的主要功能但是由于我的时间有限代码不能全部实现主要是讲解设计和实现思路。后续我会逐渐完善代码你也可以一起参与。
代码开源在https://github.com/betachen/tinychain
技术选型
我们在深入区块链技术专题中说到过区块链的四个核心技术概念P2P网络、账户模型与存储、共识、加密模块。
首先P2P网络模块是区块链的最底层模块之一我们主要考虑方便实现和测试可选的方案有轻量级消息队列和WebSocket。考虑到集成的便利性我们首选WebSocket因为至少需要一个HTTP JSON-RPC Server我们可以复用Server中的Websocket服务。
除了通讯协议之外还要考虑数据交换格式我们考虑采用易读通用的JSON格式而不是像比特币一样的数据序列化格式后期更改可以考虑升级到Protobuf后者优势主要体现在性能上。而在我们的例子中性能永远不是首先考虑的更多是它的易读和易调试性。
其次我们来说说账户加密部分由于ECDSA非对称加密模块过于复杂我们选用OpenSSL库中的RSA算法作为加密模块。而交易模型上我们考虑使用UTXO模型因为状态模型需要维护状态可能会带来额外的代码复杂度。
再来说说数据库存储,这个模块需要考虑到易用性和易读性,我们选用 SQLite 3作为持久化存储。
最后我来谈谈共识算法这一模块我们选用PoW作为共识算法这是考虑到PoW实现起来十分简单而且交易和区块的哈希计算会涉及SHA-256使用PoW算法我们就可以复用SHA-256的代码使用SHA-256算法作为挖矿算法会降低我们的工作量。
详细功能
有了技术选型之后,我们再对目标功能点进行细分拆解。
P2P网络节点发现、节点维护、持久化保存、区块同步。
公私钥对:命令行,创建公私钥对并生成地址,提供私钥存储,公私钥验证。
发送交易:命令行,发送成功验证,输入是交易哈希。
交易查询命令行JSON格式的交易查询返回输入是某个地址。
余额查询命令行JSON格式的余额查询返回输入是某个地址。
挖矿命令行、JSON格式挖矿信息返回输入是某个地址。
区块共识:编织区块链的算法,包含创世区块以及调整全网挖矿难度。
交易共识验证单个交易的算法包含签名验证和UTXO验证。
基础日志:用于监控网络,区块验证等操作。
区块持久化存储:分叉与合并时的一致性,并为查询提供接口。
提供格式化输出交易的功能这里的格式化主要指JSON格式。
有效防止双花交易。
通过详细的功能拆分我们可以发现,功能点多达三十余个,如何设计实现这三十多个功能点是我们接下来首先要解决的问题。问题是这三十多个功能点不是孤立的,而是有相互联系的,我们先从顶层开始设计。
最顶层是一个区块节点一个完整的可执行程序我们命名为Tinychain而对应的命令行客户端为cli-tinychain。
Tinychain的核心程序主要包含以下结构
tinychain
├── blockchain
├── consensus
├── database
├── network
├── http-server
└── node
我们以node为最顶层那么node会包含其他五个模块node启动就会把其他5个服务启动。
cli-tinychain 主要包含以下结构:
cli-tinychain
├── JSON
└── http-client
命令行就简单多了我们把命令行的执行和计算全部都扔到tinychian当中命令行只用一个http-client用JSON把API包起来即可。
通过分析我们知道,以下组件是必不可少的,但是我们不必自己开发,可以直接选取一些现成的开发包直接集成即可。
基础组件
├── log
├── JSON-paser
├── sha256
└── key-pair
区块数据结构设计
有了大致的顶层设计已经分类好,那么接下来我们考虑为每个模块填充一些数据结构。一个区块链最重要的是区块,所以我们从区块开始。
一个区块包含两部分,分别是区块头和区块体,区块头是一个区块的元数据,区块体就是包含交易的列表,所以我们直接设计交易体。
区块头的设计
我们参照比特币的设计区块头包含了前向区块哈希、默克尔根哈希、时间戳、难度目标、Nonce值和版本号。
所以我们的结构可能是这样的。
{
"target_bits" : "4575460831240",
"hash" :
"4a9169e2f4f8673ac9627be0fa0f9e15a9e3b1bc5cd697d96954d25acacd92df",
"merkle_tree_hash" : "3d228afc50bc52491f5dd8aa8c416da0d9a16bf829790ea0b7635e5b4d44ab4f",
"nonce" : "3852714822920177480",
"height" : 1234567,
"previous_block_hash" : "4d2544e044bfd2f342220a711b10842bb6cfae551b1bc1ed6152ff5c7f3ff654",
"time_stamp" : 1528070857,
"transaction_count" : 1,
"version" : 1
}
target_bits 表示当前区块的目标值;
hash 表示这个区块的哈希;
merkle_tree_hash 表示这个区块当中交易列表的默克尔根;
nonce表示随机数
height 表示当前区块的高度;
previous_block_hash指向前向区块哈希
time_stamp表示生产这个区块时的时间戳
transaction_count表示这个区块当中包含多少笔交易
version表示区块的版本号不代表交易的版本号。
在这里我们的区块头大小不是固定的因为它没有经过序列化完全以JSON表示所以我们这里就不考虑字节印第安序的问题了也不考虑固定长度的问题。
有了区块头我们再看看交易体的设计由于使用UTXO作为交易模型那么我们先考虑一个输入、一个输出的结构。
{
"hash": "8c14f0db3df150123e6f3dbbf30f8b955a8249b62ac1d1ff16284aefa3d06d87",
"version": 1,
"input_size": 1,
"output_size": 1,
"size": 135,
"inputs": [{
"prev_out": {
"hash": "0000000000000000000000000000000000000000000000000000000000000000",
"index":0
iq },
}],
"out": [{
"value": "5000000000",
"address": "f3e6066078e815bb2"
}],
}
我们可以按照这种结构来设计交易体。
地址设计
区块链地址都有通常意义上的地址,我们这里将公钥直接算作地址,不再将公钥进行哈希转换。
内存池
内存池是指缓存交易的一块交易缓冲区这里一个节点的主要处理对象所以对内存池的管理是编织区块链的最重要一步。我们这里的内存池使用标准库STL中的容器。
哈希计算
区块和交易的哈希计算均使用SHA-256。
开发环境搭建
由于选取了C++作为实现方式搭建工程的过程会比较复杂一点。我们用的是Ubuntu 16.04开发环境默认的gcc编译器是gcc-5.4是支持C++14标准的。代码也是全平台可移植的如果你使用Mac也可以尝试搭建。
除了gcc之外我们还需要Cmake来构建工程。我们也许需要Boost库的支持例如Filesystem和Datetime等基础组件。
所以我们的工具链是:
gcc或clang
cmake
boost 1.56+ (datetime)
最后我们还需要一个简单好用的轻量级Httpserver我选取了元界代码中的Mongoose库这里的Mongoose不是MongoDB是由Cesanta开源的一个HTTP Server库支持epoll和select两种网络并发机制也支持WebSocket。
当然除了C++实现之外我们也可以使用Python来实现实际上也有不少Python实现的Demo但我发现用Python实现的例子很多是在单进程中模拟区块链的数据结构并不是真正意义上的分布式节点所以我采取了使用C++实现的策略。
测试环境搭建
我们知道区块链是一个分布式网络环境,在开始之前,我们需要构造一个简单且容易测试的分布式网络环境。
我们不可能购买大量的云计算资源所以我们推荐你购买一个基础版的ECS节点2Core 4G就可以性能稍好更好接着我们选用Docker来搭建容器集群在容器中部署节点其中宿主机作为编译环境将编译完成的钱包部署到全部的Docker容器中。
总结
今天我大致介绍了实践一个迷你区块链的思路,我们先划定了实践的范围,接着考虑了技术选型,然后细化了详细功能,考虑了一个区块链需要的数据结构,最后考虑了开发环境和测试环境的搭建。今天的问题是,你觉得搭建一个迷你区块链最难的部分是哪一部分呢?
链接:
https://github.com/cesanta/mongoose
一些Python实现迷你区块链的例子
https://medium.com/crypto-currently/lets-build-the-tiniest-blockchain-e70965a248b
https://hackernoon.com/learn-blockchains-by-building-one-117428612f46
http://adilmoujahid.com/posts/2018/03/intro-blockchain-bitcoin-python/

View File

@ -0,0 +1,509 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
第36讲 搭建你的迷你区块链(实践篇)
上一篇文章中我们介绍了实现一个迷你区块链的大致思路。今天我们将通过代码编写以及简单的功能测试来完成我们的迷你区块链Tinychain。
除了正常的测试案例之外我们还可以构造一些极端测试案例来观察Tinychain的分叉合并挖矿难度调整等情况。
代码编写
通过前文的分析,我们已经了解到了实践一个迷你区块链的大致思路。接下来,我将从顶层到底层来搭建区块链。
代码编写1 Server
从链的顶层设计来看我们需要一个入口那么我们就从入口开始我需要先为整个服务做一些基础设置最后再来Server.run()。
所以,我们的代码大概是这样子的。
// server setup
node my_node;
mgbubble::RestServ Server{"webroot", my_node};
auto& conn = Server.bind("0.0.0.0:8000");
mg_set_protocol_http_websocket(&conn);
log::info("main")<<"httpserver started";
Server.run();
我们首先生成一个node实例然后被Server装载进去最后设置好Server启动。
这个Server主要有两个功用第一是向本地用户服务也就是接受命令行接受本地RPC调用第二是接受外部网络传送进来是的新交易和新的区块。所以Server是整个节点的入口。
代码编写2 node
那么这里的node其实就是区块链的node里面包含了区块链的基本设置这些一般都是硬编码在代码中的例如一般区块链都有个“魔法数”实际上就是区块链ID这个ID会被放在所有消息的开头如果区块链ID不匹配则抛弃接收到的消息。
这里的区块链ID我们设置在这里。
blockchain(uint16_t id = 3721):id_(id) {
id_ = id;
create_genesis_block();
}
代码中所展示的id_就是区块链ID在Tinychain的案例中我也是硬编码的。
在一个node当中至少要包含network、blockchain、miner三个模块。
public:
void miner_run(address_t address);
blockchain& chain() { return blockchain_; }
network& p2p() { return network_; }
private:
network network_;
blockchain blockchain_;
miner miner_{blockchain_};
network也就是P2P网络类blockchain是区块链的核心类miner是共识模块下的核心类三者被聚合到node中。
同时node也会提供一些blockchain和miner的接口方便Server层调用。
代码编写3 blockchain
一个blockchain实例应当包含下面的内容。
uint16_t id_;
block genesis_block_;
chain_database chain_;
key_pair_database key_pair_database_;
memory_pool_t pool_;
genesisblock 就是创世区块这个是预先生成好的。genesis_block的信息也是被硬编码在代码中我在Tinychain的例子为了方便测试每个genesis_block都是可以自行生成的。
chaindatabase chain 是相对于memory_pool而言的chain_就是已经经过确认并且在本地持久化存储的区块数据由于时间有限Tinychain的案例中还未实现持久化存储可以后续升级替换
memory_pool 是指还未经过确认,暂时驻留在内存中的交易池,交易池中的交易会在挖矿时,被导入到新的区块中。
// 装载交易
new_block.setup(pool);
这里的pool就是交易池。
key_pair_database 是指专门存储用户的私钥的数据库,同时提供私钥管理。
同时blockchain也负责统一对外提供上述功能的接口。
// 获取当前节点高度
uint64_t height() { return chain_.height(); }
// 获取当前节点最新区块
block get_last_block();
// 查询指定区块
bool get_block(sha256_t block_hash, block& out);
// 查询指定交易
bool get_tx(sha256_t tx_hash, tx& out);
// 查询目标地址的余额
bool get_balance(address_t address, uint64_t balance);
// 获取当前区块链的ID
auto id() {return id_;}
// 获得交易池数据
memory_pool_t pool() { return pool_; }
// 区块打包成功以后,用于清空交易池
void pool_reset() { pool_.clear(); }
// 从网络中收集未确认的交易到交易池
void collect(tx& tx) {
pool_.push_back(tx);
}
void merge_replace(block_list_t& block_list)
除了上述接口之外blockchain还负责当发现自己处于较短的分叉链上时自动合并到最长链。
代码编写4 network
在network中可用的地址簿代表了可用的其他对等节点至少是连接过成功一次的。
public:
void broadcast(const block& block);
void broadcast(const tx& transaction);
void process(event_t ev, func_t f);
private:
endpoint_book_t book_;
channels_t channels_;
地址簿会随着网络的变化进行更新,实时状态的地址簿是驻留在内存中的,当节点关闭是,会被刷到持久化存储中。
channels代表了已经激活的连接这些连接可以被broadcast接口使用当本地节点产生新的区块和交易时会调起这些channels。
当P2P网络产生了新的事件时会通过process接口处理新到达的交易和区块这一事件会传导给blockchain模块。
代码编写5 consensus
consensus的含义为共识共识会在两种情况下产生第一是对本地生产的交易进行验证第二是外来的区块和交易进行验证。
无论是哪种情况他们遵循的验证规则是一样的。validate_tx和validate_block分别承担了这样的功能。
bool validate_tx(const tx& new_tx) ;
bool validate_block(const tx& new_block) ;
除了验证区块之外还涉及到提供基础挖矿设施。我们知道挖矿分为两种一种叫做solo挖矿另外一种叫做联合挖矿。其实无论哪种挖矿类型都必须用到miner类。
public:
//开始挖矿
void start(address_t& addr);
inline bool pow_once(block& new_block, address_t& addr);
// 填写自己奖励——coinbase
tx create_coinbase_tx(address_t& addr);
private:
blockchain& chain_;
miner类展示了在solo挖矿情况下支持开始挖矿以及计算自己的coinbase的过程。
实际pow_once的挖矿代码如下pow_once被start调用start里面是一个死循环死循环里面包了pow_once函数。
bool miner::pow_once(block& new_block, address_t& addr) {
auto&& pool = chain_.pool();
auto&& prev_block = chain_.get_last_block();
// 填充新块
new_block.header_.height = prev_block.header_.height + 1;
new_block.header_.prev_hash = prev_block.header_.hash;
new_block.header_.timestamp = get_now_timestamp();
new_block.header_.tx_count = pool.size();
// 难度调整:
// 控制每块速度控制最快速度大约10秒
uint64_t time_peroid = new_block.header_.timestamp - prev_block.header_.timestamp;
//log::info("consensus") << "target:" << ncan;
if (time_peroid <= 10u) {
new_block.header_.difficulty = prev_block.header_.difficulty + 9000;
} else {
new_block.header_.difficulty = prev_block.header_.difficulty - 3000;
}
// 计算挖矿目标值,最大值除以难度就目标值
uint64_t target = 0xffffffffffffffff / prev_block.header_.difficulty;
// 设置coinbase交易
auto&& tx = create_coinbase_tx(addr);
pool.push_back(tx);
// 装载交易
new_block.setup(pool);
// 计算目标值
for ( uint64_t n = 0; ; ++n) {
//尝试候选目标值
new_block.header_.nonce = n;
auto&& jv_block = new_block.to_json();
auto&& can = to_sha256(jv_block);
uint64_t ncan = std::stoull(can.substr(0, 16), 0, 16); //截断前16位转换uint64 后进行比较
// 找到了
if (ncan < target) {
//log::info("consensus") << "target:" << ncan;
//log::info("consensus") << "hash :" << to_sha256(jv_block);
new_block.header_.hash = can;
log::info("consensus") << "new block :" << jv_block.toStyledString();
log::info("consensus") << "new block :" << can;
return true;
}
}
上面的代码从一开始到for循环之前都可以提取出来做成叫做getblocktemplate的接口getblocktemplate是一种JSON-RPC调用
通过这个调用就可以把挖矿的状态信息分享给其他矿机矿机拿到blocktemplate以后直接进行nonce部分暴力搜索即可
代码编写6 database
database是偏底层的接口主要的功能有两个第一是提供区块和私钥的持久化存储第二是提供交易和区块的查询接口
上文blockchain中的blockchain_database和keypair_database都是从database派生过来的
key_pair_database
// 相当于是本地钱包的私钥管理
class key_pair_database
{
public:
key_pair get_new_key_pair()
const key_pair_database_t& list_keys() const
private:
key_pair_database_t key_pair_database_;
};
blockchain_database
public:
uint64_t height();
auto get_last_block();
bool get_block (const sha256_t block_hash, block& b);
bool get_tx (const sha256_t tx_hash, tx& t);
bool push_block (const block& b);
bool pop_block (cconst sha256_t block_hash);
private:
chain_database_t chain_database_;
代码编写7 commands
commands提供了开发者命令行交互接口
bool exec(Json::Value& out);
static const vargv_t commands_list;
private:
vargv_t vargv_;
node& node_;
首先得有一个可识别的命令列表接着是执行接口例如命令行发起生成新key_pair的过程执行getnewkey命令
先被command解析接着执行exec执行的时候需要用到node对象
实际上command类比较繁琐因为一个功能复杂的钱包维护的命令和种类可能多达几十种
同时命令又可以被JSON-RPC调用所以一般命令行客户端本身就是一个轻量级的http-client
std::string url{"127.0.0.1:8000/rpc"};
// HTTP request call commands
HttpReq req(url, 3000, reply_handler(my_impl));
代码编写8 基础类
基础类是实际生成公私钥对构建交易tx的基本单元类构建区块的基本单元类
key_pair:
class key_pair
{
public:
key_pair() {
private_key_ = RSA::new_key();
public_key_ = private_key_.public_key();
}
address_t address()
sha256_t public_key() const
uint64_t private_key() const
// ...一些序列化接口(tinychain中是Json)
private:
private_key_t private_key_;
public_key_t public_key_;
tx:
public:
input_t inputs() const { return inputs_; }
output_t outputs() const { return outputs_; }
sha256_t hash() const { return hash_; }
private:
input_t inputs_;
output_t outputs_;
sha256_t hash_;
block:
class block
{
public:
typedef std::vector<tx> tx_list_t;
struct blockheader {
uint64_t nonce{0};
uint64_t height{0};
uint64_t timestamp{0};
uint64_t tx_count{0};
uint64_t difficulty{0};
sha256_t hash;
sha256_t merkel_root_hash; //TODO
sha256_t prev_hash;
};
// ... 一些其他接口和序列化函数
std::string to_string() {
auto&& j = to_json();
return j.toStyledString();
}
sha256_t hash() const { return header_.hash; }
void setup(tx_list_t& txs) {tx_list_.swap(txs);}
private:
blockheader header_;
tx_list_t tx_list_;
首次运行
我们编写完基础类和基本结构的代码之后,就可以运行试一试。
编译成功是这样子的。
我们可以看到有Tinychain和Cli-tinychain。
Tnychain就是我们的核心程序cli-tinychain就是我们的命令行客户端。
实际上我在Server里还嵌入了一个可视化的Websocket界面。
只需要在Tinychain可执行文件同目录底下创建webroot文件夹将etc底下的index放入webroot下接着打开浏览器127.0.0.1:8000就可以看到了。
实际上这个页面我想做成区块的监视页面,只是还没改造完成,目前支持发送命令。
我们开始首次运行Tinychain。
运行后等node和server全部started就可以开始操作命令行了。
也可以通过日志进行监视但是需要在代码处详细打桩这次我偷懒了没有好好打所以不多直接查看同目录下debug.log和error.log即可。
首次挖矿
我们通过./tinychain启动之后开始第一次挖矿。
✘ chenhao@chenhaodeMacBook-Pro  ~/workspace/tinychain/build/bin   master  ./tinychain
20180610T232347 INFO [main] started
20180610T232347 INFO [node] node started
20180610T232347 INFO [main] httpserver started
20180610T232356 INFO [consensus] new block :{
"header" :
{
"difficulty" : 9001,
"hash" : "",
"height" : 1,
"merkel_header_hash" : "",
"nonce" : 0,
"prev_hash" : "00b586611d6f2580e1ea0773ec8b684dc4acf231710519e6272ed7d0c61ed43e",
"timestamp" : 1528644236,
"tx_count" : 0
},
"txs" :
[
{
"hash" : "cddf6e838eff470d81155cb4c26fd3a7615b94a00e82f99b1fd9f583d7bc0659",
"inputs" :
[
{
"hash" : "00000000000000000000000000000000",
"index" : 0
}
],
"outputs" :
[
{
"address" : "122b03d11a622ac3384904948c4d808",
"value" : 1000
}
]
}
]
}
20180610T232356 INFO [consensus] new block :0de5c36420aab2f7fc9413cfbd21bece697a349106771dc58b25a6a099d6aa86
20180610T232357 INFO [consensus] new block :{
"header" :
{
"difficulty" : 18001,
"hash" : "",
"height" : 2,
"merkel_header_hash" : "",
"nonce" : 6048,
"prev_hash" : "0de5c36420aab2f7fc9413cfbd21bece697a349106771dc58b25a6a099d6aa86",
"timestamp" : 1528644236,
"tx_count" : 0
},
"txs" :
[
{
"hash" : "cddf6e838eff470d81155cb4c26fd3a7615b94a00e82f99b1fd9f583d7bc0659",
"inputs" :
[
{
"hash" : "00000000000000000000000000000000",
"index" : 0
}
],
"outputs" :
[
{
"address" : "122b03d11a622ac3384904948c4d808",
"value" : 1000
}
]
}
]
}
刚开始挖矿会比较快随着难度提升会趋向于稳定到10秒种左右一个块如果长时间不出块难度会自动降下来。曾经元界的代码在难度调整上有缺陷遭受了严重的“难度坠落”攻击。
我们可以通过这个位置观察难度调整的情况。
第一笔交易
我们保持挖矿,接下来发送一笔交易。 我们先通过getnewkey命令获得一个新公私钥对以及对应的地址。
接着发送第一笔交易。
探测到接下来被打包到区块中。
分叉与合并
区块链分叉是数据全网不一致的表现,通常是矿工节点行为不一致导致的,常见的有网络分区和协议不兼容,如果同时产生,那么必然会出现两条比较长的分叉链。
在现实情况中分叉1个是最常见的2个已经非常罕见了3个以上基本是网络分区造成的。
如果我们要在Tinychain中实践网络分区和分叉我们需要构建局域网多节点私链环境可以通过docker来试验。
通过本文,你可以看到即使是搭建一个迷你区块链,它的工作量也是巨大的,其中不仅仅只是组合几个基础组件那么简单,还要涉及各个模块的设计和交互等详细的工作。
由于在短时间内全部搭建以及实现Tinychain所有功能是不可行的在这里我只为你提供了一些实践的思路。
目前Tinychain缺失了P2P网络实现、RSA公私钥对集成、共识模块的交易和区块的验证等内容我会在后续逐渐完善你也可以跟我一起补充。
总结
好了通过今天的代码实践我们实现了迷你区块链Tinychain并且通过运行与测试Tinychain我们了解到了一个最简单区块链的运行原理希望通过今天的文章可以帮你加深对区块链技术的理解。
区块链技术只是作为基础设施服务于广大的开发者和业务需求。目前区块链的发展远远不止Tinychain中所展现的样子我们还需要去考虑区块链2.0智能合约如何设计Token经济等一些问题。
随着区块链的发展和应用规模区块链安全问题也日益突出所以今天的问题是如果要攻击Tinychain可以采取什么手段呢你可以给我留言我们一起讨论。
感谢你的收听,我们下次再见。