『壹』 趁热再说几句区块链
趁热再说几句区块链
区块链,又火了
互联网成了维密的 T 台,大佬们穿着技术的内衣裤,搔首弄姿秀性感,腿毛飘飘在风中丝丝缕缕,油黑闪亮。
2017 年末,区块链成了最性感的小内内,各路人马人手一件,有的穿在裆部,有的顶在头上,还有的插在杆上当旗帜。
盯着屏幕上的智能合约代码,我有些忧郁。T 台上没我,T 台下也没我,我在暖气不足的办公室里,还穿着跟性感毫不沾边的羽绒服。
今天早上,在小区里遇到牛大妈,她拉住我,语重心长的告诫我,别写 Java 了,搞区块链吧,概念股都涨疯了。那是早上 7 点,小区里零下10 度严寒逼人,空气中却有一种莫名其妙的气息,闻起来生机勃勃,很可能是天然气锅炉排放的废气中有某种兴奋剂。
我感到无力,感到无奈,这一波的热度,绝逼又跟我无关了。我那几行智能合约代码,对区块链这个2017年的网红毫无贡献。 那些 T 台上的大佬们,又一次没叫我 “同去”,他们一贯如此!
区块链火的莫名其妙,仿佛就在一瞬间,几个月前的情势还完全不同。那时候,人工智能是主角,区块链就像是嫁到山东人家的媳妇,上不得台面的。有一次在饭桌上,一位 VC 大佬 (不是很大,半大不大)介绍自己的投资方向:“必须是人工智能,区块链不行的。” 他眼睛盯着我,炯炯有神。 我低下头,有些羞愧。这要是在微博上,我就死掐了,你可以看不起我这个人,但你不能看不起我用的技术,对不对?
然而,就在最近,这位大佬(不是很大,半大不大)开始转徐小平,马化腾关于区块链的文章了,而且评论道:“深刻好文!改变世界的区块链!”。不知道这位大佬(不是很大,半大不大)是否也要掀区块链的牌子了。
我一直疑心,有一个神秘的 “互联网名词炒作委员会”,就是他们在翻云覆雨兴风作浪,一波波的炒作各种概念......而我见到的那 VC 大佬(不是很大,半大不大),很可能不在这个委员会中。
人工智能 VS 区块链,该谁吃鸡?
人工智能与区块链,可谓是绝代双骄,成了近年来最火热的两个概念。
如果硬要比一下的话,人工智能与区块链,谁更牛逼?
谈起人工智能,人类就要发抖,说是害怕有一天被机器收拾了。这有点像家养的宠物狗,看到只断翅的苍蝇,就如临大敌,张牙舞爪上蹿下跳的汪汪叫,其实就是平时太无聊,找个机会自己吓自己玩。人工智能也好,机器人也好,别说收拾人类了,就是收拾只苍蝇,都还早着呢,往一百年外展望吧。我觉得,我国的 GDP 银河系第一,都会比人工智能拥有自我意识来的早。
而谈起区块链,那发抖的是各个中心化的权力机构,其中就要包括各国政府啦。这可真不是小狗抓苍蝇的游戏,想想吧,现在就有多少财富藏在了比特币链条上,而各国政府无能为力,束手无策,一筹莫展,恨之入骨。苍蝇也是肉,眼看着苍蝇越来越肥,小狗们抓不到,着急死了。
所以说啊,从长远来看,人工智能一定是牛逼多了。未来科技的接力棒,是要从人类的手上交给 AI 的,这还不够 AI 臭屁的?
但从近期看,区块链的意义却更加重大,因为,它改变的目标,乃是人类的组织模式。
区块链消解中心化的权力;区块链建立信任的网络;区块链用代码传递价值;区块链协调机器间的对话;区块链实现社区自治。从来就没有什么救世主,也没有神仙皇帝 - 这句歌词完全可以送给区块链。过去千百年来,社会的运转全赖中心化威权机构的安排,而今,终于有一丝曙光出现在技术的地平线......
管它什么东西,到我中华民族眼里,第一个问题是:这东西能不能吃?第二个问题是:这玩意能不能挣钱。
区块链自然不能吃,这个不用我回答了,问问你身边的广东朋友吧。要问人工智能与区块链,哪个在挣钱这件事上更牛逼,我还真回答不上来,广东人也一样不知道。这个问题该问那位 VC 大佬(不是很大,半大不大)。
中本聪当年搞 “一种点对点的电子现金系统”,真不是为的钱。 密码朋克小组里的那些大佬(真的很大,大无可大)哥们,都是货真价实的反贼,他们就是要跟政府对着干! 追求的那是个自由的感觉。 早到从 RSA 那三个哥们开始,只要是搞密码学的,又不是美国政府体制内的,哪一个不是美国政府的眼中钉肉中刺?这还说的是美国政府,换个别的政府,噢,天哪,血都凉了,坟头草都亭亭如盖了。
还有另一波大佬(真的很大,大无可大)哥们,他们是米塞斯、哈耶克一伙,对各国政府深怀敌意的一群经济学者。哈耶克认为,货币的发行权就不该垄断在政府手里,政府根本没有能力掌控货币的发行,货币的发行应该交给自由市场。让政府发行货币,就如同让老鼠去烹饪美食,首先老鼠就压根做不到烹饪,其次老鼠会偷吃原材料。 哈耶克说:任何人都可以发行货币,应该让多种货币在市场中自由竞争。
哈耶克一贯的核心思想就是:从来就没有什么救世主,也没有神仙皇帝,能够制定和控制经济运行的规则,这些规则是在自由市场中无意识的演化出来的。
交给自由市场吧,有些事情是人类理解不了的,也操作不好的。
哈耶克的核心思想,也是人工智能的核心思想,也是区块链的核心思想。为什么这么巧合呢?因为啊,牛逼的人想法都是相同的,而不牛逼的人各有各的想法。
人工智能说,这个函数太复杂,人类找不出来的,让机器找出很多个线性函数来拟合它吧,交给机器吧。
区块链说,信任这种事,交给人类真的不放心,还是让机器来执行约定好的规则吧。
把权力交给机器,是人工智能与区块链共同的哲学思想。
说到这里,我们可以犀利睿智的指出,其实人工智能和区块链干的是一件事嘛。 区块链从组织形式上,为机器开道。人工智能则从能力上,为机器开道。人类的组织形式和能力,都太过老旧了,该为将来的机器文明做一些变革了。
对于开发者来说,区块链要更容易上手一些。人工智能太麻烦了,又要数据又要显卡,还要建模调参看效果。所以,穷屌丝程序员,要挣小钱,就搞区块链吧。怀揣梦想,渴望挣大钱的程序员,请走右边,右边是人工智能通道,请闭上眼睛,齐步走,一二三,跳!
区块链,能干些什么?
在现阶段,用区块链干什么最合适? 我的答案是营销!换句话来表达,就是用来忽悠,最合适不过。
据说,现在全国有 5000 家公司与区块链有关系。又据说,全国能开发区块链的开发者,一共 200 人。
我觉得这两个数字都不很靠谱。我认为,靠谱的说法是,全国共有 5000 家公司的老总,在朋友圈里浏览过区块链的科普文章,于是他们的公司就都与区块链沾边了。 至于开发者,能跑起来 Hyperledger,Ethereum,能写几行智能合约,全国怎么也得有个 5000 人。
还据说,这个说法我认为较为靠谱,那就是在 2017 年,区块链技术带来的收入,不超过 1 亿人民币。
所以说,现在那些铺天盖地的宣传,大家听听就好了,不必太当真。在这个阶段,这种宣传倒也不是坏事,也算是推动行业发展了。四人抬轿,千人吆喝,总能快一点点,啦啦队也不是没有贡献。
而且,区块链的发展,也确实被推动了。我已经被 50000 个人问过:我能用区块链做些什么?
被忽悠一番后,大家都开始盯着自己家那些中心化系统了,怀疑的波光在眼神中流转。就像新一季开始,女人审视自己的衣柜一样。
其实呢,大家完全不必喜新厌旧。 区块链要干掉的,是中心化的 “组织”,不是要干掉中心化的 “系统”。你那 OA 该怎么用还怎么用吧,自家的 OA 系统,没必要搞区块链。就跟你一家族企业,要投票选举董事长了,你这不是脑子进水么。
要用区块链,您先想一想,您是要与谁,在哪个业务上,去达成 “共识”? 您是要与谁,在哪个环节,去取得 “互信”?
核心是 “共识”。
当然,区块链还能做到永不停机,这是以太坊大肆宣扬的。但在我看来,这真没那么重要。中心化的系统做好了,离永不停机也差不多。
举个区块链应用的例子。常见且便于理解的例子,是签合同的场景。我们现在签订合同,依然依赖的纸质合同。在纸质合同上签字盖章,然后一式两份,双方各持一份。这是发生在现实世界中,一次 “共识” 的达成。
“纸质” 与 “签字盖章”,这就是为了防篡改。而 “一式两份”,就是分布式存储。
要把签纸质合同这个过程,用软件来完美的实现,那就是区块链了。“纸质签字盖章” 在区块链上的实现,是通过时间戳、哈希运算、非对称加密签名等技术。 而 “分布式存储”,则是通过 POW,POS 共识算法以及 P2P 协议完成。
以上全过程的软件实现,就是一次区块链 “共识” 的达成。
IT 技术、互联网技术发展到今天,现金都被电子支付取代了,而合同却一直是个老大难,纸质合同流程一直顽固的存在着。现在,区块链就是来颠覆纸质合同这样顽固场景的。
再举个例子吧。 积分互通的场景。不知道为什么,2017 年末,做积分突然火起来了,家家户户都要做积分。我私下猜测,怕是有些楚王好细腰的意思,楚王的圣意被 “ “互联网名词炒作委员会” 破解了。早年间咱们的 “工分” 不就是一种积分么。
当然,商业积分在很多国家是非常成熟的,对于企业来说,积分是很好的客户忠诚度管理工具,但在我国一直没有做起来,所以,发展一下商业积分,是个好方向。
例子是这样的。两家企业,A 与 B,都发行了自己的积分,叫 A 积分与 B 积分吧。 两家企业想搞积分共用,让消费者可以在 B 那里用 A 的积分,在 A 那里用 B 的积分。
这就产生了一个场景,消费者灯下鼠到了企业 B,用 A 积分 100 万买了台保时捷,若是在传统的中心化系统下,企业 B 的系统要通过 API 连接到 A 的系统,验证灯下鼠的身份,以及积分数量。验证后,请求 A 的系统,要消费 100 万 A 积分,经 A 的同意,A 的系统记录 B 消费了 100 万积分。B 在自己的数据库中记录,收到 A 积分 100 万。
到了月底,B 拿着 100 万积分的报表,到 A 那里去结账。A 到数据库中查询,确认有 100 万积分到了 B 那里。OK,结算成功。
问题是,A 若是不承认 100 万积分怎么办? 抵赖怎么办?A 若是改自己的数据库怎么办?若是再复杂一些, 多家企业参与, B 收到 A 的积分,还可以到 C 那里去消费 A 的积分,这该怎么处理?
区块链就能完美的解决这个问题。A B 两家企业,通过联盟链,把积分交易近乎实时的达成共识。也不用月底再走对账手续了,任何时候,A B 两者的区块链数据都是一致的。
有的开发者要钻牛角尖了:我用传统的中心化系统,一样能保证数据库一致。
当然是可以的。但只要你做的完美,让 A B 两家的数据库能够完全一致,解决了各种可能出现的问题,那么实际上,你就是在开发一套区块链了。
在多方之间,达成 “信任”,达成 “共识”,就是区块链的用武之地。
中本聪设计比特币,完全是为了设计一种去中心化的电子货币。由此,诞生了区块链。
而到了以太坊,则区块链摇身一变成了 IT 基础设施。以太币乃是驱动区块链应用的价值度量,而以太坊上的智能合约,才是链条的主角。
理论上,智能合约能开发任何系统。智能合约英文是 Smart Contract,这里的 “智能”,与 AI 的 Artificial Intelligence 的智能没关系。实际上,尼克萨博在 95 年提出智能合约时,也与区块链也没关系,它的概念很简单,就是将法律条文写成可执行代码。
但巧克力与下雨天最配,智能合约与区块链最配。 如上文所述,合同,都是要一式两份,或者一式四份的。 而智能合约,既然是法律条文,又要可自动执行,当然不能控制在合同的某一方手中,一定是要实现分布式存储,才能令参与各方放心,这就是所谓的去中心化了。
今天,用区块链,用智能合约来做的应用,主要集中在如下几个领域:
金融领域:用来做数字货币;用来做支付系统;用来做汇款系统;用来做清算系统;用来做证券交易系统;用来做供应链金融。
资产描述:用来做资产的登记,例如房产土地注册,贵重物品登记。
保险产品:用来做互助保险,以及其它条款简单的保险产品。
身份认证:用来做个人以及企业的身份信息存储以及在线认证。
供应链:用来做商品的溯源,生产流程的跟踪。
政务:用来做投票;用来做公文存证;用来做产权登记。
当然还可以用来做游戏,比如做一个区块链养猫,养狗,养青蛙,或者也可以试试养汉子?
甭管做什么了,在您决定要进军区块链之前,在您决定开始搜索 “区块链” 之前,记住我的话,一定要先宣传,要用能让全世界都听到的嘹亮声音呼喊:我们做区块链了。
区块链技术的现状
能干什么,与干的怎么样,是两件事。
区块链最成熟的应用,自然还是比特币、以太坊等系统。而在商业应用领域,只能说大家都还在摸索。
很多报道说xx公司区块链应用上线了,其实多数都是在自己家里,或者几家公司联盟,在各自的实验室里跑了条链而已。还没见到哪个应用,把链条数据直接放出来的。
现阶段,智能合约的应用,也是与中心化的系统结合使用。少有把所有的业务逻辑,都在智能合约上实现。
把区块链用的纯熟的,多数都是创业型公司。能自己写一条链条的人,大约是不屑于打工了。
大规模、大容量的应用,例如电商什么的,几乎没有用区块链实现的。毕竟现阶段,区块链还有效率和容量的问题。 但我想,真的实现,也不会太久了。现在虽然还是 “只听楼梯响,不见人下来”,但一旦下来一个人,跟风者马上就会挤满房间的。
不用 10 年,区块链就会成为一种常用的技术,就和今天的关系型数据库一样。
但区块链注定有别于关系型数据库,有别于移动、大数据技术什么的,它是与互联网一个级别,甚至超越互联网的概念。因为,它挑战了人类的组织模式,它改变了人类的组织模式。
今天的互联网如此繁荣,如此剧烈的改变人类的生活,但它并没有改变人类的组织模式。电商是非常发达了,但只不过把市场从社区商店超市搬到了淘宝和亚马逊。银行还是那个银行,支付宝微信也不过是另一个银行;中介还是中介,淘宝店不过是商店的网上形态;你要证明自己是父母的蛾子,还是要去派出所盖个章,一切都没有变化,和明清时代也少有不同。以 “人” 为中心,来执行判断,来做决策,几千年来毫无变化。
是时候,将一部分工作,交给机器了。
当区块链技术发展 50 年后,人们回首望去,惊讶的发现,有那么多的机构竟然消失不见,才能领会到 2107 年区块链所生发出的意义。
10 年之后,区块链技术在开发中,将要占据十分之一的工作量。这是我估计的,不一定准,先瞎猜一个,万一准了呢。
上文说的,智能合约与区块链最配,智能合约仿佛侠客,而区块链则是一匹骏马。
区块链还有一个绝配,那就是物联网。万物互联,物与物之间的对话,物与物之间的交易,该怎么搞? 用区块链的去中心化存储,用区块链的共识算法,再合适不过。不过,那还远,区块链结合上物联网的时候,我国 GDP 肯定早已太阳系第一了。
我该怎么应用区块链
前文已叙,使用区块链的第一件事,是要大声喧哗,要让全世界都知道你用区块链了,一方面给自己做做营销,另一方面顺便推动行业发展。
第二件事,是审视下自己的业务,有那些地方,需要与他人达成共识,需要与他人达成互信,找到了,就是你用区块链的地方。
但切切记住,在今天应用区块链,一定要谨慎,这与用关系型数据库和JAVA 开发系统还是很不一样的。
一定要认真的分析,认真的设计,然后再动手。用哪个开源区块链,是公链部署还是私链部署,智能合约如何设计,与中心化系统的接口怎么搞,上线后怎么运行,怎么维护,这些都要仔细考虑。
其实能选择的技术路线,就那么几种,比特币,以太坊,Hyperledger,Quorum,可选的不多。
找国内的区块链公司,直接用他们的链条也可以,有些公司的链也很可靠了。趣链、布比好多家都是认真做链的。不过,就我所知,国内的链,也都是从那几条国际链改过来的。
要是自己搞,就找两个研究能力强的工程师,从头开始学习以太坊或者 Hyperledger,大约过二三个月,应该就能写智能合约了,也能做 Dapp 了,要是还不能,你就开掉他们吧,重新招两个。要是野心大的,想要自己改链条协议,从源码玩起,这个难度要大些,你得找几个数学好,精通算法的博士,认真干个一两年吧。其实,改链条源码,也是个良心活,改多改少,只要不放出去,也只有你自己知道。
动手之前,最好还是找一些做过区块链项目的,咨询一下。可能人家的一句话,就省却你 3 个月的功夫。 要知道,在浩瀚的互联网上,还真找不到区块链的成熟应用方案,大家都在摸索。
最大的挑战就是:我的应用场景,该如何用区块链技术来实现。
大家都在黑暗中摸索,摸到成功的,就是开了一盏灯,等到千百盏灯亮起,房间里灯火通明的时候,区块链技术也就不稀罕了。
怕的是摸了一通,黑灯瞎火,光摸到飘飘的腿毛,摸不到灯,大家就灰心丧气,就散了,不摸了。人工智能就散了好几次,这几年又重振信心,继续摸开了,大佬们的腿毛再次在黑暗中油光发亮。
用了区块链,我能得到什么
对于工程师来说,掌握了区块链技术,当然薪资要涨一把了。今天区块链人才还是很稀缺的。
对于一家企业来说,若是用上了区块链,千万别看着区块刷刷挖出来,自己个儿偷着乐,一定要大肆宣传,品牌会提升,销售会增加,股价市值会暴涨。
说到底呢,股价和市值,跟区块链技术没多大关系,涨了也是因为忽悠的技术好。那些大佬们,也就是 “互联网名词炒作委员会” 的委员们,人家不炒区块链,也会去炒 AI,不炒 AI 也会去炒 iOT,总之,人家的炒锅里不会缺料的。怎么忽悠,怎么来钱,刷刷的从天上掉钱。
真喜欢区块链技术,又在 “互联网名词炒作委员会” 里没有干爹的,就别想那么多了,屌丝戒之在贪。 别想钱的事了,先用上再说,得不到什么便宜,也能尝个鲜不是。
2013 年的时候,在望京的一间狭小办公室中,我与几个朋友聊天,谈起用 Java FX 做一个比特币交易网站。一位朋友说:“比特币现在涨疯了, 200 多块钱一个,做个交易所不错的。”
我那个时候就喜欢比特币,因为比特币那反贼气质,但我没有买。交易所也没做。
现在我后悔了,但却不仅仅因为错过了比特币高涨的盈利机会。而是我反思得出了一个结论,那就是,虽然我口口声声热爱自由,实在只是叶公好龙罢了,当一个自由的乌托邦摆在我的面前,我却没有珍惜,不敢走进去。我没买比特币,就是个好的例证。
『贰』 【深度知识】以太坊数据序列化RLP编码/解码原理
RLP(Recursive Length Prefix),中文翻译过来叫递归长度前缀编码,它是以太坊序列化所采用的编码方式。RLP主要用于以太坊中数据的网络传输和持久化存储。
对象序列化方法有很多种,常见的像JSON编码,但是JSON有个明显的缺点:编码结果比较大。例如有如下的结构:
变量s序列化的结果是{"name":"icattlecoder","sex":"male"},字符串长度35,实际有效数据是icattlecoder 和male,共计16个字节,我们可以看到JSON的序列化时引入了太多的冗余信息。假设以太坊采用JSON来序列化,那么本来50GB的区块链可能现在就要100GB,当然实际没这么简单。
所以,以太坊需要设计一种结果更小的编码方法。
RLP编码的定义只处理两类数据:一类是字符串(例如字节数组),一类是列表。字符串指的是一串二进制数据,列表是一个嵌套递归的结构,里面可以包含字符串和列表,例如["cat",["puppy","cow"],"horse",[[]],"pig",[""],"sheep"]就是一个复杂的列表。其他类型的数据需要转成以上的两类,转换的规则不是RLP编码定义的,可以根据自己的规则转换,例如struct可以转成列表,int可以转成二进制(属于字符串一类),以太坊中整数都以大端形式存储。
从RLP编码的名字可以看出它的特点:一个是递归,被编码的数据是递归的结构,编码算法也是递归进行处理的;二是长度前缀,也就是RLP编码都带有一个前缀,这个前缀是跟被编码数据的长度相关的,从下面的编码规则中可以看出这一点。
对于值在[0, 127]之间的单个字节,其编码是其本身。
例1:a的编码是97。
如果byte数组长度l <= 55,编码的结果是数组本身,再加上128+l作为前缀。
例2:空字符串编码是128,即128 = 128 + 0。
例3:abc编码结果是131 97 98 99,其中131=128+len("abc"),97 98 99依次是a b c。
如果数组长度大于55, 编码结果第一个是183加数组长度的编码的长度,然后是数组长度的本身的编码,最后是byte数组的编码。
请把上面的规则多读几篇,特别是数组长度的编码的长度。
例4:编码下面这段字符串:
The length of this sentence is more than 55 bytes, I know it because I pre-designed it
这段字符串共86个字节,而86的编码只需要一个字节,那就是它自己,因此,编码的结果如下:
184 86 84 104 101 32 108 101 110 103 116 104 32 111 102 32 116 104 105 115 32 115 101 110 116 101 110 99 101 32 105 115 32 109 111 114 101 32 116 104 97 110 32 53 53 32 98 121 116 101 115 44 32 73 32 107 110 111 119 32 105 116 32 98 101 99 97 117 115 101 32 73 32 112 114 101 45 100 101 115 105 103 110 101 100 32 105 116
其中前三个字节的计算方式如下:
184 = 183 + 1,因为数组长度86编码后仅占用一个字节。
86即数组长度86
84是T的编码
例5:编码一个重复1024次"a"的字符串,其结果为:185 4 0 97 97 97 97 97 97 ...。
1024按 big endian编码为004 0,省略掉前面的零,长度为2,因此185 = 183 + 2。
规则1~3定义了byte数组的编码方案,下面介绍列表的编码规则。在此之前,我们先定义列表长度是指子列表编码后的长度之和。
如果列表长度小于55,编码结果第一位是192加列表长度的编码的长度,然后依次连接各子列表的编码。
注意规则4本身是递归定义的。
例6:["abc", "def"]的编码结果是200 131 97 98 99 131 100 101 102。
其中abc的编码为131 97 98 99,def的编码为131 100 101 102。两个子字符串的编码后总长度是8,因此编码结果第一位计算得出:192 + 8 = 200。
如果列表长度超过55,编码结果第一位是247加列表长度的编码长度,然后是列表长度本身的编码,最后依次连接各子列表的编码。
规则5本身也是递归定义的,和规则3相似。
例7:
["The length of this sentence is more than 55 bytes, ", "I know it because I pre-designed it"]
的编码结果是:
248 88 179 84 104 101 32 108 101 110 103 116 104 32 111 102 32 116 104 105 115 32 115 101 110 116 101 110 99 101 32 105 115 32 109 111 114 101 32 116 104 97 110 32 53 53 32 98 121 116 101 115 44 32 163 73 32 107 110 111 119 32 105 116 32 98 101 99 97 117 115 101 32 73 32 112 114 101 45 100 101 115 105 103 110 101 100 32 105 116
其中前两个字节的计算方式如下:
248 = 247 +1
88 = 86 + 2,在规则3的示例中,长度为86,而在此例中,由于有两个子字符串,每个子字符串本身的长度的编码各占1字节,因此总共占2字节。
第3个字节179依据规则2得出179 = 128 + 51
第55个字节163同样依据规则2得出163 = 128 + 35
例8:最后我们再来看个稍复杂点的例子以加深理解递归长度前缀,
["abc",["The length of this sentence is more than 55 bytes, ", "I know it because I pre-designed it"]]
编码结果是:
248 94 131 97 98 99 248 88 179 84 104 101 32 108 101 110 103 116 104 32 111 102 32 116 104 105 115 32 115 101 110 116 101 110 99 101 32 105 115 32 109 111 114 101 32 116 104 97 110 32 53 53 32 98 121 116 101 115 44 32 163 73 32 107 110 111 119 32 105 116 32 98 101 99 97 117 115 101 32 73 32 112 114 101 45 100 101 115 105 103 110 101 100 32 105 116
列表第一项字符串abc根据规则2,编码结果为131 97 98 99,长度为4。
列表第二项也是一个列表项:
["The length of this sentence is more than 55 bytes, ", "I know it because I pre-designed it"]
根据规则5,结果为
248 88 179 84 104 101 32 108 101 110 103 116 104 32 111 102 32 116 104 105 115 32 115 101 110 116 101 110 99 101 32 105 115 32 109 111 114 101 32 116 104 97 110 32 53 53 32 98 121 116 101 115 44 32 163 73 32 107 110 111 119 32 105 116 32 98 101 99 97 117 115 101 32 73 32 112 114 101 45 100 101 115 105 103 110 101 100 32 105 116
长度为90,因此,整个列表的编码结果第二位是90 + 4 = 94, 占用1个字节,第一位247 + 1 = 248
以上5条就是RPL的全部编码规则。
各语言在具体实现RLP编码时,首先需要将对像映射成byte数组或列表两种形式。以go语言编码struct为例,会将其映射为列表,例如Student这个对象处理成列表["icattlecoder","male"]
如果编码map类型,可以采用以下列表形式:
[["",""],["",""],["",""]]
解码时,首先根据编码结果第一个字节f的大小,执行以下的规则判断:
1.如果f∈ [0,128),那么它是一个字节本身。
2.如果f∈[128,184),那么它是一个长度不超过55的byte数组,数组的长度为 l=f-128
3.如果f∈[184,192),那么它是一个长度超过55的数组,长度本身的编码长度ll=f-183,然后从第二个字节开始读取长度为ll的bytes,按照BigEndian编码成整数l,l即为数组的长度。
4.如果f∈(192,247],那么它是一个编码后总长度不超过55的列表,列表长度为l=f-192。递归使用规则1~4进行解码。
5.如果f∈(247,256],那么它是编码后长度大于55的列表,其长度本身的编码长度ll=f-247,然后从第二个字节读取长度为ll的bytes,按BigEndian编码成整数l,l即为子列表长度。然后递归根据解码规则进行解码。
以上解释了什么叫递归长度前缀编码,这个名字本身很好的解释了编码规则。
(1) 以太坊源码学习—RLP编码( https://segmentfault.com/a/1190000011763339 )
(2)简单分析RLP编码原理
( https://blog.csdn.net/itchosen/article/details/78183991 )
『叁』 以太坊交易(tx) 分析
更多请参考: Github: https://github.com/xianfeng92/ethereum-code-analysis
其中 object 和 opcodes 是相对应的,比如 60 对应就是 operation PUSH1,合约编译后的字节码即为一组的 operation 。
合约部署其实就是实例化一个 contract 对象,并将 data 的值设给 Code属性 。
创建合约的tx中,input字段对应的是合约的字节码,即指令数组。
其中 input 字段对应所要调用的函数签名的前四个字节(771602f7)以及对应的参数(1,2)
其中 input 字段为所要调用的合约函数签名的前四个字节(72a099b7)
关于函数调用,Call会把对应的Code读出来,依次解析,Code中会把所有的public签名的函数标志(4字节)push到栈里。然后依据 input 中需要调用函数的签名标志(前4字节)来匹配 Code, 匹配之后跳转到对应的 opcode 。
『肆』 美国上市公司由第三方审计作为公司状况的顾问是否具有可借鉴性
第三方审计 工作是由具备资质的会计师所进行审计,那么所谓的第三方,就是中立的一方,注册会计师正好具备这个特点。因为 第三方具有中立的特点 ,所以在对上市公司做审计工作的同时可以做到公平、公正、公开,不偏袒任何方面。可以最大程度的做到就事论事,以提高投资者对审计报告的认可度。
对于美国上市公司来说, 有效的财务会计报告内部控制对公司管理及其事务,尽到对其投资者的责任,有至关重要的作用。 公司管理当局、公司所有者、投资公众和其他相关方都需依赖公司承保的财务信息来制定决策。那么需要做到这些,自己来审计自己,显然是做不到足够的公平公正与公开,也不可能得到各方面的对报告的认可。 所以把这些交给具有中立性的第三方来做是最合适的事情。
那么 审计的独立性 ,就是说注册会计师不受那些削弱或总是有合理的估计,仍会削弱注册会计师做出无偏审计决策能力的压力及其他因素的影响。这对审计工作来说,至关重要,因为涉及到市场经济的,利益公平,独立性。这个独立性,也应当保持形式上的独立和实质上的独立,也就是说注册会计师与被审计单位或个人没有任何直接或间接的利益关系。不受到个人或外界因素的约束,影响和干扰,保持客观且无私的精神及工作态度。
而第三方审计,在我国也是非常有必要的。我们不仅是借鉴,而且也正在使用第三方审计的工作。而且 我国有明确的法律规定,上市公司的年度报告必须要经过第三方的审计。 这么做也是为了能够让上市公司的审计报告能够更加的客观,公平,公正,公开,做到不掺杂任何利益关系和个人 情感 关系。
全球第三大审计机构certik为众多知名项目保驾护航
据统计,2018年全球区块链130领域93706165发生近百起安全事件,损失超20亿美元,相较于2017年增长了538%。比特币的底层技术“区块链”面临着来自数据层、网络层、共识层、激励层、合约层、应用层的安全风险,安全攻击方式层出不穷,防不胜防。安全攻击主要发生在应用层,其中智能合约是区块链安全的重灾区。
而且还发生了很多的安全事件,影响较大的例如MtGox事件,MtGox是当时全球最大比特币交易平台,处理的比特币交易占全球70%。2014年,MtGox遭遇了最严重的黑客攻击,随后MtGox宣布暂停交易,理由是其安全软件存在漏洞。两周后,网站突然关闭,MtGox申请破产。
据MtGox估计,公司的比特币投资损失约合4.8亿美元,其中包括客户的75万单位比特币和公司自己持有的10万单位,合计约占全球比特币发行量的7%。此次事件导致投资者信心受挫,比特币直接暴跌36%。
还有非常多别的项目同样受到巨大的损失,仔细研究不难发现:在区块链的安全事件中,大多都是由于源代码存在漏洞而使黑客趁虚而入。智能合约受到区块链本身保护,所以智能合约代码可以最大限度的开源和让人阅读。但是代码的公开性使得黑客容易掌握代码的缺陷,进一步利用代码缺陷触发条件改变智能合约执行结果,使得区块链项目存在巨大的经济隐患。所以智能合约代码的开源性需要代码的高可靠性,这种可靠性要求100%的正确。
但是,对于程序员来说,写一个完全没有漏洞的代码实在是太难了,即使采取了所有可能的预防措施,在复杂的软件中也总会出现没有预料到的漏洞。所以,代码审计的重要性不言而喻。
通过代码审计,检查源代码中的安全缺陷,检查程序源代码是否存在安全隐患,或者有编码不规范的地方,通过自动化工具或者人工审查的方式,对程序源代码逐条进行检查和分析,发现这些源代码缺陷引发的安全漏洞,并提供代码修订措施和建议。
目前已经服务的有交易所、钱包、公链和智能合约等代码审计,为区块链行业保驾护航,合作的慢雾 科技 ,Certik等全球知名审计公司,我们有着优质的服务满足客户的需求,欢迎合作伙伴合作交流,共同探讨!
发生过的案例:
一、区块链代码审计可以解决哪些问题:让黑客无孔可入
随着BTC、ETH、EOS等区块链项目的迅速发展,区块链项目已经进入了智能合约时代,但是智能合约自身的正确性和安全性却面临着巨大的问题。
也就是说任何一个项目在使用区块链时都有可能走向歧途,不能完全保证代码的准确性。就像每个人在电脑打字时都会打错字一样,程序员在输入代码时也会存在笔误和错漏。
而区块链中的基础:智能合约代码的开源性需要代码的高可靠性,这种可靠性要求100%的正确。
差之毫厘,谬以千里。
用专业的术语来说:
类似比特币这样的代码全部公开,用智能合约代码存储在区块链上,与交易数据一样受到区块链的加密保护,要想修改智能合约代码需要掌握51%的算力,因此,智能合约代码的防篡改性得到大大提升。
智能合约受到区块链本身保护,所以智能合约代码可以最大限度的开源和让人阅读。智能合约解决了可以公开代码并保障其安全的问题,但是代码的公开性使得黑客容易掌握代码的缺陷,进一步利用代码缺陷触发条件改变智能合约执行结果,使得区块链项目存在巨大的经济隐患。
就像,我们在银行里转账,每一个账户的信息都是对的,转账才能够是正确的,你的财产才可以安全被保护,所以:区块链代码中一个字都不能错。
二、区块链代码错误导致的严重后果
区块链中的智能合约代码质量不好造成了许多严重的后果。
目前来看,许多交易所和代币项目在上交易所之前没有经过区块链代码审计,造成了许多虚拟货币被盗窃的黑客事件。
1、SMT项目方与美国BEC代币的安全漏洞
2018年4月25日凌晨,SmartMesh(SMT)项目方反馈发现其交易存在异常问题,经初步排查,SMT的以太坊智能合约存在漏洞。受此影响,火币Pro目前暂停所有币种的充提币业务。
另据媒体报道,发现SMT与美图BEC代币存类似的安全漏洞,即可通过溢出攻击可以收到大量的代币。
2、美图BEC的异常交易漏洞
2018年4月22日,美图BEC出现异常交易,据分析,BEC 智能合约中的batchTransfer批量转账函数存在漏洞,攻击者可传入很大的value数值,使cnt * value后超过unit256的最大值使其溢出导致amount变为0。
3、Parity多签名钱包漏洞
2017年7月,Parity多签名钱包由于其智能合约代码中存在漏洞,被黑客盗取时价超过3000万美金的ETH。
4、黑客盗币漏洞
2016年6月由于智能合约的一个错误,黑客从DAO偷走了价值5500万美元的ETH。
代码的安全缺陷倒逼智能合约的代码自动审计。
三、区块链代码审计成就完美合约
区块链智能合约通过代码建立一套“法律合同”,软件工程师创造一个完全无误差的代码是不可能的,程序员总存在疏忽的地方。红岸 科技 和国防 科技 大学的Ulord区块链项目研究团队对市面上的区块链智能合约进行了审计,他们的研究发现:
对所有的程序员来说,写一个没有bug的代码实在是太难了,即使采取了所有可能的预防措施,在复杂的软件中也总会出现没有预料到的执行路径或可能的漏洞。
这是为什么要代码审计最重要的原因之一。
区块链中的 “法律合同”是一项受解释和仲裁的约束,程序员很难去创造一个缜密的合约。在任意一个大的合约里,可能出现的文稿错误以及一些条款需要解释和仲裁。
同时,软件工程师不是法律专家,反之亦然。起草一份好的合约需要各种各样的技能,不一定与编写的计算机程序兼容。
因此,智能合约代码在一定程度上都可能存在安全隐患。传统的智能合约代码审计主要利用人工,依靠code reviewer阅读智能合约代码。人工代码审计最终还是依赖人的经验,代码审计效果不明显,针对目前ETH大量代币的智能合约,人工审计工作量大,难以高效的完成工作。
在区块链领域从事代码审计业务的项目公司较少,目前每个代币在上交易所之前,其区块链智能合约代码由交易所进行审察和判定,但交易所有时并不能完全有效地判断合约是否完美。
智能化代码审计,利用计算机进行稳健性检验是当前代码审计最重要的方式,掌握该项技术标准的国内公司并不多。
但,区块链代码审计的重要性不言而喻,区块链世界本身是相当安全的,但是由于人为撰写代码的问题,不可能完美,必须加强代码有效性的识别。
『伍』 区块链前景如何
2018年,区块链接棒AI成为最热门的技术名词,已经有越来越多的科技公司宣布进军区块链市场,互联网中,迅雷、人人、暴风、天涯等公司都有区块链相关动作。这些公司有着相同的命运,他们都曾经历过风光,但经过互联网创业大潮的冲击,开始走下坡路,而后蹭上区块链的热点,开始尝试逆袭。
全球区块链产业投资火热
据前瞻产业研究院发布的《区块链行业商业模式创新与投资机会深度分析报告》数据显示,截至2017年4月底,全球共计455家区块链公司,累计获得融资额19.47
亿美元。其中美国区块链相关公司获投融资总额高达12.52亿美元,占据全球市场的64.3%;中国区块链新兴企业融资总额约为1.14亿美元,占比达到5.86%,仅次于美国位列世界第二且增速迅猛。
目前区块链的整体生存现状良好,存活率87.25%。所有的获投公司中有47
家已经关闭,约占10.51%,另10家公司被收购。由于比特币市场竞争格局改变,部分公司被迫关停,同时部分币圈公司也逐渐向链圈公司转型
国家层面的探索也已经开始。3月23日,工信部信息化和软件服务业司发布消息称,将研究探索区块链在工业领域的应用。此前,工信部表示,正在筹建全国区块链和分布式记账技术标准化技术委员会,探索形成完备的区块链标准体系,更好地服务区块链技术产业发展。
『陆』 区块链是什么,怎么用区块链赚钱
区块链是一个信息技术领域的术语。从本质上讲,它是一个共享数据库,存储于其中的数据或信息,具有“不可伪造”“全程留痕”“可以追溯”“公开透明”“集体维护”等特征。基于这些特征,区块链技术奠定了坚实的“信任”基础,创造了可靠的“合作”机制,具有广阔的运用前景。
区块链赚钱的方法如下:
1、炒币,炒币就像炒股,炒币是区块链赚钱门槛最低的一种方式;
2、商贩,区块链是全球性的市场,可以像小商贩一样,从价格低的平台搬到价格高的平台去卖,赚差价;
3、推广赚佣金,区块链的做法是,首先注册交易所账号,生成自己的邀请链接,然后推广,有人通过你的链接注册了交易所并产生交易的话,即可获得佣金;
4、挖矿,比特币中的“挖矿”就是记账的过程;
5、技术支持,给一些团队和企业提供区块链技术支持;
6、开交易网站,收取手续费;
7、开发钱包,钱包是区块链的基础设施,就像区块链的“支付宝”或“微信支付”;
8、做区块链项目或基础设备供应商。
温馨提示:以上解释仅供参考,不作任何建议。入市有风险,投资需谨慎。您在做任何投资之前,应确保自己完全明白该产品的投资性质和所涉及的风险,详细了解和谨慎评估产品后,再自身判断是否参与交易。
应答时间:2020-12-02,最新业务变化请以平安银行官网公布为准。
[平安银行我知道]想要知道更多?快来看“平安银行我知道”吧~
https://b.pingan.com.cn/paim/iknow/index.html
『柒』 ethtool原理介绍和解决网卡丢包排查思路
之前记录过处理因为LVS网卡流量负载过高导致软中断发生丢包的问题, RPS和RFS网卡多队列性能调优实践 ,对一般人来说压力不大的情况下其实碰见的概率并不高。这次想分享的话题是比较常见服务器网卡丢包现象排查思路,如果你是想了解点对点的丢包解决思路涉及面可能就比较广,不妨先参考之前的文章 如何使用MTR诊断网络问题 ,对于Linux常用的网卡丢包分析工具自然是ethtool。
2020年06月22日 - 初稿
阅读原文 - https://wsgzao.github.io/post/ethtool/
ethtool - utility for controlling network drivers and hardware
ethtool is the standard Linux utility for controlling network drivers and hardware, particularly for wired Ethernet devices. It can be used to:
Most features are dependent on support in the specific driver. See the manual page for full information.
ethtool 用于查看和修改网络设备(尤其是有线以太网设备)的驱动参数和硬件设置。你可以根据需要更改以太网卡的参数,包括自动协商、速度、双工和局域网唤醒等参数。通过对以太网卡的配置,你的计算机可以通过网络有效地进行通信。该工具提供了许多关于接驳到你的 Linux 系统的以太网设备的信息。
接收数据包是一个复杂的过程,涉及很多底层的技术细节,但大致需要以下几个步骤:
NIC 在接收到数据包之后,首先需要将数据同步到内核中,这中间的桥梁是 rx ring buffer 。它是由 NIC 和驱动程序共享的一片区域,事实上, rx ring buffer 存储的并不是实际的 packet 数据,而是一个描述符,这个描述符指向了它真正的存储地址,具体流程如下:
当驱动处理速度跟不上网卡收包速度时,驱动来不及分配缓冲区,NIC 接收到的数据包无法及时写到 sk_buffer ,就会产生堆积,当 NIC 内部缓冲区写满后,就会丢弃部分数据,引起丢包。这部分丢包为 rx_fifo_errors ,在 /proc/net/dev 中体现为 fifo 字段增长,在 ifconfig 中体现为 overruns 指标增长。
这个时候,数据包已经被转移到了 sk_buffer 中。前文提到,这是驱动程序在内存中分配的一片缓冲区,并且是通过 DMA 写入的,这种方式不依赖 CPU 直接将数据写到了内存中,意味着对内核来说,其实并不知道已经有新数据到了内存中。那么如何让内核知道有新数据进来了呢?答案就是中断,通过中断告诉内核有新数据进来了,并需要进行后续处理。
提到中断,就涉及到硬中断和软中断,首先需要简单了解一下它们的区别:
当 NIC 把数据包通过 DMA 复制到内核缓冲区 sk_buffer 后,NIC 立即发起一个硬件中断。CPU 接收后,首先进入上半部分,网卡中断对应的中断处理程序是网卡驱动程序的一部分,之后由它发起软中断,进入下半部分,开始消费 sk_buffer 中的数据,交给内核协议栈处理。
通过中断,能够快速及时地响应网卡数据请求,但如果数据量大,那么会产生大量中断请求,CPU 大部分时间都忙于处理中断,效率很低。为了解决这个问题,现在的内核及驱动都采用一种叫 NAPI(new API)的方式进行数据处理,其原理可以简单理解为 中断 + 轮询,在数据量大时,一次中断后通过轮询接收一定数量包再返回,避免产生多次中断。
(1) RX errors
表示总的收包的错误数量,这包括 too-long-frames 错误,Ring Buffer 溢出错误,crc 校验错误,帧同步错误,fifo overruns 以及 missed pkg 等等。
(2) RX dropped
表示数据包已经进入了 Ring Buffer,但是由于内存不够等系统原因,导致在拷贝到内存的过程中被丢弃。
(3) RX overruns
表示了 fifo 的 overruns,这是由于 Ring Buffer(aka Driver Queue) 传输的 IO 大于 kernel 能够处理的 IO 导致的,而 Ring Buffer 则是指在发起 IRQ 请求之前的那块 buffer。很明显,overruns 的增大意味着数据包没到 Ring Buffer 就被网卡物理层给丢弃了,而 CPU 无法即使的处理中断是造成 Ring Buffer 满的原因之一,上面那台有问题的机器就是因为 interruprs 分布的不均匀(都压在 core0),没有做 affinity 而造成的丢包。
(4) RX frame
表示 misaligned 的 frames。
网线上的packet首先被网卡获取,网卡会检查packet的CRC校验,保证完整性,然后将packet头去掉,得到frame。网卡会检查MAC包内的目的MAC地址,如果和本网卡的MAC地址不一样则丢弃(混杂模式除外)。
网卡将frame拷贝到网卡内部的FIFO缓冲区,触发硬件中断。(如有ring buffer的网卡,好像frame可以先存在ring buffer里再触发软件中断(下篇文章将详细解释Linux中frame的走向),ring buffer是网卡和驱动程序共享,是设备里的内存,但是对操作系统是可见的,因为看到linux内核源码里网卡驱动程序是使用kcalloc来分配的空间,所以ring buffer一般都有上限,另外这个ring buffer size,表示的应该是能存储的frame的个数,而不是字节大小。另外有些系统的 ethtool 命令 并不能改变ring parameters来设置ring buffer的大小,暂时不知道为什么,可能是驱动不支持。)
网卡驱动程序通过硬中断处理函数,构建sk_buff,把frame从网卡FIFO拷贝到内存skb中,接下来交给内核处理。(支持napi的网卡应该是直接放在ring buffer,不触发硬中断,直接使用软中断,拷贝ring buffer里的数据,直接输送给上层处理,每个网卡在一次软中断处理过程能处理weight个frame)
过程中,网卡芯片对frame进行了MAC过滤,以减小系统负荷。(除了混杂模式)
网卡驱动程序将IP包添加14字节的MAC头,构成frame(暂无CRC)。Frame(暂无CRC)中含有发送端和接收端的MAC地址,由于是驱动程序创建MAC头,所以可以随便输入地址,也可以进行主机伪装。
驱动程序将frame(暂无CRC)拷贝到网卡芯片内部的缓冲区,由网卡处理。
网卡芯片将未完全完成的frame(缺CRC)再次封装为可以发送的packet,也就是添加头部同步信息和CRC校验,然后丢到网线上,就完成一个IP报的发送了,所有接到网线上的网卡都可以看到该packet。
产生中断的每个设备都有一个相应的中断处理程序,是设备驱动程序的一部分。每个网卡都有一个中断处理程序,用于通知网卡该中断已经被接收了,以及把网卡缓冲区的数据包拷贝到内存中。
当网卡接收来自网络的数据包时,需要通知内核数据包到了。网卡立即发出中断。内核通过执行网卡已注册的中断处理函数来做出应答。中断处理程序开始执行,通知硬件,拷贝最新的网络数据包到内存,然后读取网卡更多的数据包。
这些都是重要、紧迫而又与硬件相关的工作。内核通常需要快速的拷贝网络数据包到系统内存,因为网卡上接收网络数据包的缓存大小固定,而且相比系统内存也要小得多。所以上述拷贝动作一旦被延迟,必然造成网卡FIFO缓存溢出 - 进入的数据包占满了网卡的缓存,后续的包只能被丢弃,这也应该就是ifconfig里的overrun的来源。
当网络数据包被拷贝到系统内存后,中断的任务算是完成了,这时它把控制权交还给被系统中断前运行的程序。
网卡的内核缓冲区,是在PC内存中,由内核控制,而网卡会有FIFO缓冲区,或者ring buffer,这应该将两者区分开。FIFO比较小,里面有数据便会尽量将数据存在内核缓冲中。
网卡中的缓冲区既不属于内核空间,也不属于用户空间。它属于硬件缓冲,允许网卡与操作系统之间有个缓冲;
内核缓冲区在内核空间,在内存中,用于内核程序,做为读自或写往硬件的数据缓冲区;
用户缓冲区在用户空间,在内存中,用于用户程序,做为读自或写往硬件的数据缓冲区;
另外,为了加快数据的交互,可以将内核缓冲区映射到用户空间,这样,内核程序和用户程序就可以同时访问这一区间了。
对于有ring buffer的网卡,ring buffer是由驱动与网卡共享的,所以内核可以直接访问ring buffer,一般拷贝frames的副本到自己的内核空间进行处理(deliver到上层协议,之后的一个个skb就是按skb的指针传递方式传递,直到用户获得数据,所以,对于ring buffer网卡,大量拷贝发生在frame从ring buffer传递到内核控制的计算机内存里)。
网卡工作在数据链路层,数据量链路层,会做一些校验,封装成帧。我们可以查看校验是否出错,确定传输是否存在问题。然后从软件层面,是否因为缓冲区太小丢包。
一台机器经常收到丢包的报警,先看看最底层的有没有问题:
(1) 查看工作模式是否正常
(2) 查看检验是否正常
Speed,Duplex,CRC 之类的都没问题,基本可以排除物理层面的干扰。
Why rx_crc_errors incrementing in the receive counter of ethtool -S output?
Check ethtool -S output and find where are the drops and errors.
Check the numbers corresponding to rx_crc_errors .
显示了p1p1 的接口类型,连接模式,速率等等信息,以及当前是否连接了网线(如果是网线Supported ports 就是TP,如果是光纤则显示Fiber),这里例举下3个重要关键词
Supported ports: [ FIBRE ]
Speed: 10000Mb/s
Link detected: yes
ethtool
Counters Troubleshooting for Linux Driver
Why do I see rx_crc_errors in ethtool output?
ping请求错误分析
ifconfig 命令详解
ethtool 命令详解
ethtool 解决网卡丢包严重和网卡原理
『捌』 EOS的开发流程
EOS的是Block.One主导研发的一个区块链底层公链系统,它专门为支撑商业去中心化 应用(Decentralized Application)而设计,其代码开源。
比特币被称为区块链1.0,因为它开辟了数字加密货币的天下,走出了从0到1的决定性一步。
以太坊被称为区块链2.0,因为它提供了可运行智能合约的图灵完备的虚拟机,带来了无限的可能性。
而EOS则被称为区块链3.0,为什么? 两个字:性能。
EOS的定位正是其首页的口号:
英文:The most powerful infrastructure for decentralized applications。
中文:最强大的去中心化应用基础设施。
EOS期望做加强版的以太坊,一个高吞吐量的智能合约平台。
以太坊虽然功能齐备,但受制于其设计选择,15秒的出块速度导致交易吞吐量 远远不能达到大规模实用的程度,大约只有30~40TPS(交易/秒)。而EOS则选择了不同的技术路线,目标是达到可观的百万TPS——考虑到Visa实际的处理速度才1700TPS,这一目标的确相当诱人。
EOS的共识机制
比特币和以太坊之所以吞吐量这么低,是受制于其设想的应用场景以及针对该场景所选择的共识机制——这两者都假设系统运行的环境完全不可信,因此都采用了工作量证明(Proof of Work)这种共识机制。
共识,顾名思义,就是大家对某件事达成统一的认识——对于 区块链而言,某件事指的就是对交易的确认——任何一个节点要提交交易,都需要大家认可。
比特币和以太坊目前所采用的PoW机制是传奇人物中本聪的设计。在这种机制下,矿工们为了获得记账权和数字币奖励,需要不停挖矿来寻找合规的哈希值,通过对哈希值的共识来对交易数据进行确认和打包。PoW没有准入门槛,任何节点都 有平等的权利参与记账——当然,胜出的概率与算力有关:
RAM的价格是基于班科(Bancor)算法,也就是说是由市场供需调节的:如果RAM供不应求,则买入RAM时就需要更多的EOS通证,而这时卖出RAM也能获得更多的EOS通证。
内存是消耗资源,不可赎回,只能买卖。以EOS上发币为例,目前发币需要20M的内存,一个EOS可买20KB,按目前的存储价格发一个币需要消耗1000个EOS。这是EOS内存消耗的刚需来源。
课程概述
本课程面向对EOS去中心化应用开发感兴趣的朋友,课程内容涵盖EOS DApp开发的核心概念、智能合约的开发与部署以及前端页面与EOS区块链如何交互,并最终完成一个基于React和EOS的完整Dapp的开发。
第一章:进入EOS世界
了解EOS的定位与特点、共识机制、付费计算模型等核心概念。
第二章:Hi EOS
了解EOS节点的软件整体框架以及节点服务器、钱包服务器和命令行工具的作用, 学习配置、启动EOS节点服务器和钱包服务器的方法,初步了解命令行工具的使用方法。
第三章:钱包、密钥与账户
理解EOS中与个人身份相关的三个核心概念:钱包、密钥与账户,学习使用命令行工具 创建钱包、密钥与账户的方法。
第四章:智能合约的开发与交互
了解智能合约的概念与作用,学习EOS智能合约的编写和编译,学习使用命令行工具 部署合约并与合约交互。
了解EOS智能合约中状态的持久化机制,学习使用多索引表保存合约状态。
第五章:发行自己的代币
学习在EOS上发行代币的原理和实现机制,并通过实际操作,掌握如何 使用命令行工具进行代币的发行、转账和余额查看等操作。
第六章:使用代码与智能合约交互
理解应用与EOS区块链交互的原理,学习利用JSON RPC接口和eosjs封装库来 访问EOS区块链。
第七章:实战便签DApp开发
综合运用EOS知识,使用React完成一个EOS便签去中心化应用,学习从需求分析到 代码实现的完整过程。
eos开发还是需要一个完整的学习的,上面的课程地址如下:EOS教程