接上文。
Facebook如期上线了FBCoin的官网和白皮书,官宣里还放了几个钱包的截图,可谓吊足了人们的胃口。坊间已经有了各种讨论了1,各种阴谋论2也紧随其后。这里还是推荐BinanceResearch的调研报告和孟岩老师的访谈。
这一次同时上线的还有一个开发者网站,里面有三篇TechnicalPapers,分别是:
TheLibraBlockchain介绍LibraProtocol以及她的官方实现LibraCore。
Move:ALanguageWithProgrammableResources介绍为Libra量身定做的智能合约语言——Move语言。
StateMachineReplicationintheLibraBlockchain介绍Libra上跑的共识算法——LibraBFT。
之前就在想FBCoin的诞生如果要给开放式金融提供新的可能,就一定要看FBCoin赋予了开发者哪些权限,会不会推出自己的智能合约语言。这个想法现在得到了证实,这个语言直接被命名为Move,一如Facebook的格言「MoveFastandBreakThings」。同时Move也表示智能合约的本质就是对用户资产的转移进行编程,还真是一语双关呢。
初看FBCoin的白皮书和官网,特别是首页的那个宣传视频,里面反复的在各种普通人的生活日常中快速的切换着——大多是还是来自我们这些第三世界国家——这让我产生了一种非常不真实的穿越感,看来币圈还真的是一个有时间膨胀效应的地方。
但是无论如何,我们都要在这种不真实感中寻找真实。这三篇TechnicalPapers包含比我预想的还要多的GoodStuff,总之我吃的很饱。
Move语言的必要性
李笑来:Facebook又犯傻,用得着专门设计个Move语言吗?——巴比特,对于Facebook发币,行业大咖如此点评
“Ifyou’rewritingaprogramthathastoworkverycloselywithaprogramwritteninacertainlanguage,itmightbeagoodideatowritethenewprograminthesamelanguage.”?——?PaulGraham
FBCoin会推出自己的智能合约语言并不令人意外,毕竟上个月Durov在TON的Channel里就已经丢出了一份Fift的文档了3。不出一个新语言,感觉扎克伯格在面子上也挂不住。另外FBCoin要处理的Context和我们目前所遇到的Blockchain都不一样,在Move的TechnicalPaper中这些诉求被归结为以下四点:
First-classassets
Flexibility
Safety
Verifiability
安全性Safety
我们一个一个来看,先说安全性。和其他拥有自己的智能合约语言的区块链项目一样,Move设计之初的一个核心诉求就是安全性,你能想象BillionsofPeople因为一个智能合约的漏洞就被黑客薅的倾家荡产家破人亡吗?——虽然我实际上相信FBCoin是可以回滚的...
Inparticular,transferringEthertoasmartcontractinvolvesdynamicdispatch,whichhasledtoanewclassofbugsknownasre-entrancyvulnerabilities.High-profileexploits,suchastheDAOattackandtheParityWallethack,haveallowedattackerstostealmillionsofdollarsworthofcryptocurrency.——Move:ALanguageWithProgrammableResources
QBTC交易平台涉嫌已移交检察院审查起诉:1月18日消息,最新消息显示,四川省武胜县局回复,QBTC APP平台交易QT等虚拟货币涉嫌,2020年12月10日侦查终结,目前已移交武胜县人民检察院审查起诉,提币请求需等待法院判决。
2020年6月4日QBTC遭到调查,用户无法提币。8月6日武胜县局发布案情通报,称2020年5月8日接群众报案,称其在“QBTC”APP平台交易虚拟货币被。经查李某等人涉嫌以成都云快科技有限公司名义,搭建“QBTC”虚拟货币交易平台,利用“QT”等虚拟货币实施。2020年6月4日将李某等10余人抓获归案。[2021/1/18 16:25:55]
这里Move喜闻乐见的又把Ethereum上的这几个Case拿出来批判了一番。Move的白皮书提到,想要一劳永逸的解决安全性的问题,不能信任智能合约的开发者,要么在编译期,要么在执行期一定要做检查。而Move看起来则是参考了JVM中的设计,选择了一个折衷主义的方案,在执行期之前,加了一个BytecodeVerifier。
一等公民First-classassets
这是一组PL里的概念,所谓的编程语言中的一等公民就是在我们编程时首要考虑的被编程对象,最常见于理解各种函数式语言。
FirstClass:该类型的值可以作为函数的参数和返回值,也可以赋给变量。
SecondClass:该类型的值可以作为函数的参数,但不能从函数返回,也不能赋给变量。
ThirdClass:该类型的值作为函数参数也不行。
FBCoin这里用这种说法,我认为只是在强调一件事情,就是用户自己发行的数字资产和Libra里的那个StableCoin是平级的。
这里原文还是继续ChallengeEthereum。
However,theexpressivityoftheEVMhasopenedthedoortoexpensiveprogrammingmistakes.LikeStrawCoin,theEthercurrencyhasaspecialstatusinthelanguageandisimplementedinawaythatenforcesscarcity.Butimplementersofcustomassets(e.g.,viatheERC20standard)donotinherittheseprotections(asdescribedin(2))—theymustbecarefulnottointroducebugsthatallowduplication,reuse,orlossofassets.Thisischallengingduetothecombinationoftheindirectrepresentationproblemdescribedin(1)andthehighlydynamicbehavioroftheEVM.
一个典型的例子就是美图币。虽然这个ICO合约只在OpenZeppelin标准库的基础上增加了一个函数,结果那个函数里的操作就溢出了,使得黑客可以无限增发。类似的例子还有POWH、Hexagon、etcs,不胜枚举。
另一方面,一些用户自己的代币不是第一公民,使得合约有的时候处理Ether和ERC20时,需要分别讨论。一个典型的例子就是Bancor的合约,为了避免额外的判断,Bancor合约中单独写了一个ERC20Token来打包Ether,将相关的逻辑统一起来。后来这种方式逐渐形成标准,就是我们后来经常看到的wETH交易对。
动态 | Bloqboard 及 LoanScan 团队推出集成银行服务的 Defi 应用 Linen:曾建立基于以太坊的借贷平台 Bloqboard 和借贷数据提供商 LoanScan 的团队正在推出一款集成银行服务的 Defi 应用 Linen。Bloqboard 兼 Linen 创始人 Vitaly Bahachuk 表示,Linen 旨在减少借贷过程对多个 DApp 的需求,精简贷款流程从而降低风险。Linen 将集成传统银行服务,例如存款、储蓄、借记卡功能和汇款,并引入基于以太坊的借贷协议(例如 Compound),目前借贷服务已经支持 USDC,并将计划支持 DAI。Linen 近期完成新一轮未公开的融资,新的投资者包括加密货币支付提供商 Wyre 和 Hashkey,此前 Linen 投资者包括 Polychain Capital 和 Coinbase 等机构。Bahachuk 表示 Hashkey 的投资具有战略意义,Linen 希望向亚洲敞开大门,Hashkey 是该地区的主要投资者之一。[2019/9/21]
这方面EOS的处理的则更为优雅,绝大部分底层的功能,也是通过超级节点部署智能合约的方式上线的,其中就包括eosio.token本身。而EOS和你自己发行的数字资产在合约里的唯一区别就是发行的合约不同而已,并且EOS的assets结构,也已经包含了这些边界保护。
EOS中是把原生资产和用户资产同时下放到了合约层面,而在Libra中,是把用户资产和原生资产同时上升到协议底层。
可验证性Verifiability
但是BytecodeVerifier理论上只能检查一下类型不匹配、内存溢出这样的简单Bug,要检查出所有逻辑上的Bug无异说要解决停机问题,而且这部分时间复杂度也会被加到共识算法的CriticalPath上,必须要做出相应的权衡。Move的解决方法是,只将一些时间复杂度最低,同时又最关键的检查工作放在这个阶段,其他则寄希望于链下的静态验证的工具。
为了简化这些静态检查工具的设计,Move在语言层面的功能上进行了一些必要的牺牲,而这一切都是为了将来做形式化验证做铺垫。
Nodynamicdispatch
Thetargetofeachcallsitecanbestaticallydetermined.Thismakesiteasyforverificationtoolstoreasonpreciselyabouttheeffectsofaprocedurecallwithoutperformingacomplexcallgraphconstructionanalysis.
首先拿掉的就是动态分派。动态分派是指在运行期选择调用方法的实现的流程。现代高级编程语言中被广泛采用,被认为是面向对象语言的基本特性。但是一旦包含这个特性就会使得做静态验证十分困难。一个典型的例子就是TheDAO硬分叉事件里面的Re-entrancy攻击。
Limitedmutability
EverymutationtoaMovevalueoccursthroughareference.Referencesaretemporaryvaluesthatmustbecreatedanddestroyedwithintheconfinesofasingletransactionscript.Move’sbytecodeverifierusesa“borrowchecking”schemesimilartoRusttoensurethatatmostonemutablereferencetoavalueexistsatanypointintime.Inaddition,thelanguageensuresthatglobalstorageisalwaysatreeinsteadofanarbitrarygraph.Thisallowsverificationtoolstomodularizereasoningabouttheeffectsofawriteoperation.
公告 | 趣币网今日正式完成9亿QB的销毁:趣币(qubi)数字交易平台今日发布公告称,按照社区决议,趣币团队已于2019年1月3日上午12:00对QB限售通证进行销毁。本次销毁的QB数量为9亿枚,占总发行量的90%。[2019/1/3]
函数式语言的一个基本特性就是Immutability,这使得我们可以在执行函数之前就可以对程序的状态进行断言。但是保持纯粹的Immutability的话,编写业务逻辑势必会十分痛苦。Move这里依然采取了折衷主义的办法,参考了Rust的实现,保证每个对象在任何阶段只有一个可修改的引用,这样静态验证时就只要trace一个目标。
Modularity
Movemodulesenforcedataabstractionandlocalizecriticaloperationsonresources.TheencapsulationenabledbyamodulecombinedwiththeprotectionsenforcedbytheMovetypesystemensuresthatthepropertiesestablishedforamodule’stypescannotbeviolatedbycodeoutsidethemodule.Weexpectthisdesigntoenableexhaustivefunctionalverificationofimportantmoduleinvariantsbylookingatamoduleinisolationwithoutconsideringitsclients.
https://doc.rust-lang.org/1.30.0/book/first-edition/mutability.html
Module也是函数式语言中的概念,原本的目标是达成接口与实现分离这个目的,从而实现各个模块分别开发,验证与编译。与Class最大的区别在于Class是动态的,而Module是静态的。
在Move里则是扩展了这个概念的意义,根据白皮书,Move里的智能合约分为两类:-TransactionScript:一组顺序执行的,可以包含Module调用的转账语句,通常是一次性的,不在账本里进行保存。-Module:定义和某个资产相关的操作方法的集合。
换句话说,这个Module才是更接近我们一般认为的智能合约。但是我强烈猜测只有资产的发行方才能够定义Module到Libra中去,例如Uber可以在Libra中定义一个资产叫优惠券,可以Claim、使用和转让,而Spotify可能可以在Libra中定义另一个资产,比如一首曲子或一部专辑,支持订阅、转让、购买和注销。
而一般的开发者和Startup很可能只能开发一些TransactionScript,来给你的App和网站描述一些功能有限的业务逻辑。所以大概率那25个合作伙伴才是Libra里的一等公民。
灵活性Flexibility
最后Libra的灵活性仅仅只是相对于BitcoinScript而言的,我们一般开发者还是老实一点写TransactionScript好了。
形式化验证FormalVerification
如何保证智能合约的正确呢?这跟保证程序的正确性是一样的问题。只有懂得如何写出干净简单的代码,进行严密的思考,才能写出正确的智能合约。关于如何写出干净,简单,严密可靠的代码,你可以参考我之前的一些文章。
做智能合约验证的工作也许能圈到钱,然而却是非常枯燥而没有成就感的。为此我拒绝了好几个有关区块链的合作项目。虽然我对区块链的其它一些想法是感兴趣的,我对智能合约的正确性验证一点都不看好。——垠神,智能合约和形式验证
怎么样,这一套听下来,是不是很像Tezos?Tezos设计了一种参考了OCmal语法的函数式语言Liquidity来编写合约。合约又会被首先编译成一个Stack-based的中间语言Michelson,并使用了一个魔改出来的Mi-Cho-Coq工具,来跑形式化验证的Framework。
但是形式化验证真的是解决智能合约安全性问题的银弹吗?对此我抱有反对意见。为了安全性问题而在表达性上做牺牲似乎有舍本逐末的嫌疑,而且我认为即便要跑形式化验证,也可以让开发者使用一个Solidity语言的子集,姑且称之为XSolidity来跑——当然我期待着自由市场来打我的脸。
重新审视区块链
Tosaysomethingissomething,butunlikethepreviousversionofthatsomethingbecauseitsdefiningcharacteristicsaredifferent,isabitlikesaying:
“Unlikepreviousloavesofbread,whichviewtheloafofbreadasacollectivelybakedsetofingredients,theLibraLoafofBreadisasingleingredientstructurethatbakesthecomponentssequentiallyovertime.”--Facebook’sLibra:blockchain,butwithouttheblocksorchain-FinancialTimes
越来越多的人开始注意到,Libra事实上既没有Blocks,也没有Chain,只是使用了PBFT跑了一个分布式数据库而已。但是我们知道,实际上比特币所要面对的,是一个比拜占庭将军问题更加困难的场景,在比特币里你实际上是没有一个GlobalView的。节点可以随时加入和离开,通讯路径也是不可靠的,节点必须持续进行发现新节点,和帮助其他节点启动的工作。每个节点都只包含一部分关于网络的信息,因而逻辑上更像是一个MeshNetwork,
Libra这样的数据结构,也能算是区块链吗?如果按照ConsenSys的说法,大概是会被冠上"LibramightnotbeaRealBlockchainatAll"的帽子的。JamesonLopp也直接在他的文章标题里给Blockchain加了引号。
Blockchain:Ablockchainisareplicatedstatemachine.Replicatorsinthesystemareknownasvalidators.Usersofthesystemsendtransactionstovalidators.Eachvalidatorunderstandshowtoexecuteatransactiontotransitionitsinternalstatemachinefromthecurrentstatetoanewstate.
Cryptocurrency:Adigitalcurrencythatusescryptographytoverifyandsecurefinancialtransactions.
但是从上面Libra给Blockchain和Cryptocurrency的定义来看,好像又没什么问题。所以为什么我们会感觉那么奇怪呢?
作为银行的天秤座LibraasaBankService
Fbcoinlookslikeethandbtchadababyandswitchedtobftwithappointednodesthattheyclaimwilleventuallybeelecteddposstyle.Theutxomodelandassetfocusedprimitivesislikelytoheavilyrestrictitsapplications.Theconceptofbackingitwithotherassetsmeansitfailswhenthoseassetsfail.Ineffectit’sanewcentralbank.NoteIhaveonlyreadhalfofthewhitepapersoIreservemyrighttochangemyanalysis.——DanielLarimer
《精通比特币》和《精通以太坊》的作者,AndreasM.Antonopoulos为此事先专门做了一期QA视频,来解释为什么自己认为FBCoin不是真正的Crypto。在这期视频里,AndreasM.Antonopoulos给了Cryptocurrency的五个支柱,它们分别是:
开放Open
公开Public
中立Neutral
无国界Borderless
抗审查CensorshipResistant
抗审查很容易理解,Facebook只是一家YetAnother坐落在硅谷的公司,仅仅是用户在上面提供内容就会受到各国政府的审查,更别说提供管制更加严格的金融服务了。事实上,这份白皮书一出,Facebook立刻遭到了法国议员、美国民主党议员的口诛笔伐,据说下个月还要开听证会。基于同样的原因,FBCoin也无法做到无边界和中立。向在美国制裁名单上的国家和个人汇款会违反美国的相关法律,因此美国政府一定会要求FBCoin做出KYC的要求,Whoyouare?Whereyouare?Whatareyoudoingwithyourmoney...我们也很难想象FBCoin会提供一个公开透明的账本,这相当于把每个人每天做了什么完全暴露出来。
最后最重要的,FBCoin不能够Open,Libraisonlypermissionlessforthosewhoalreadyhavepermission.你当然也不能脱离这个系统之外使用和出售FBCoin,你不能绕过这个平台提现走人...因此AndreasM.Antonopoulos的结论是FBCoinisanewkindofbank,isnotacryptocurrency.
留精弃粗ChildError
但是FBCoin似乎在白皮书早就预见了你们的这些问题,直接拎出来三段给予正面回应。
Blockchainsaredescribedaseitherpermissionedorpermissionlessinrelationtotheabilitytoparticipateasavalidatornode.Ina“permissionedblockchain,”accessisgrantedtorunavalidatornode.Ina“permissionlessblockchain,”anyonewhomeetsthetechnicalrequirementscanrunavalidatornode.Inthatsense,Librawillstartasapermissionedblockchain.
ToensurethatLibraistrulyopenandalwaysoperatesinthebestinterestofitsusers,ourambitionisfortheLibranetworktobecomepermissionless.Thechallengeisthatasoftodaywedonotbelievethatthereisaprovensolutionthatcandeliverthescale,stability,andsecurityneededtosupportbillionsofpeopleandtransactionsacrosstheglobethroughapermissionlessnetwork.Oneoftheassociation’sdirectiveswillbetoworkwiththecommunitytoresearchandimplementthistransition,whichwillbeginwithinfiveyearsofthepubliclaunchoftheLibraBlockchainandecosystem.
EssentialtothespiritofLibra,inbothitspermissionedandpermissionlessstate,theLibraBlockchainwillbeopentoeveryone:anyconsumer,developer,orbusinesscanusetheLibranetwork,buildproductsontopofit,andaddvaluethroughtheirservices.Openaccessensureslowbarrierstoentryandinnovationandencourageshealthycompetitionthatbenefitsconsumers.Thisisfoundationaltothegoalofbuildingmoreinclusivefinancialoptionsfortheworld.
可以看出,FBCoin很清楚自己就是一个PermissionedBlockchain,但是我们之所以没有asopenasbitcoin是因为,咳咳,是因为目前technical水平不行
FBCoin在白皮书里标明自己会在五年后,开始从Permissioned向Permissionless去做Migrate。。。Butwait...这实在太不真实了。毕竟我们都看到了,以太坊从PoWmigrate到PoS都花了那么多年,我实在很难想象FBCoin能真正做到这一点。。。
孟岩:开放金融是个大话题。至于Libra,还不是完全达到了,毕竟现在还是个有准入的限制。他们宣布说未来要实现非许可网络,我挺惊讶的,技术上挑战很大,能不能兑现承诺难说。——孟岩:扎小哥,你还能再锋芒毕露一点吗?丨SheKnows深度解读Libra白皮书
但是这一点也不妨碍Libra走向公众,上一篇文章里我们讨论正确。Libra看起来是最不正确的了:
Libra是联盟链,但是不妨害她发币甚至上所——而且还是双通证。
Libra要做KYC,但是我一上来就开放源代码,还要成立基金会。
Libra使用非对称加密有公私钥,但是所有人都得来用我的钱包,所有私钥都在我的云端服务器上管理。
这实在太耐人寻味了,FBCoin很清楚自己想要的是什么,整个白皮书通篇都在对BTC和ETH进行批判,按照BM的话说,就像是BTC和ETH生了一个用PBFT的孩子。但FBCoin的世界观里认为,BTC和ETH就是两个需要留精弃粗的childerror,按照鲁迅的话说,就是要「取其精华、去其糟粕」。但是什么是精华,什么又是糟粕?FBCoin弃掉的糟粕恰恰是原教旨主义者眼中所认为的精华。
而这也正是Libra真正可怕的地方。
开放式金融的边界
在传统金融里面,你自己去发行货币,是很难形成市场的。但是在开放式金融里面,基本就没什么门槛,你需要做的就是利用区块链这个技术,然后再利用自己的一些资源如reputation,参与产品的构建。——X-Order创始人TonyTao:数字资产的货币化非常重要
最后回到我们开始的话题,讨论开放式金融。之前坊间很多文章都会混淆DeFi和OpenFinance,现在Libra一出,估计以后这两个概念就能够更清晰的划分了。
1900年在巴黎举行的第二届国际数学家大会上,希尔伯特作了题为《数学问题》的演讲,提出了著名的希尔伯特的23个问题。去年的万向区块链峰会上,吴忌寒也提出了未来十年区块链技术发展的8个课题。
下面是「吴忌寒第5课题——扩展区块链技术应用场景的专门技术」:
过去的ICO泡沫浪潮中,很多项目都涉及到一个基本的逻辑,区块链和现实世界并不交融。区块链的现实交互接口将在区块链第二个十年结束时得到极大发展。
大概有两个方向:一是现实世界的重压事件都在区块链上得到忠实记录,例如食品溯源;二是区块链上的虚拟事件驱动现实世界的物质产生变化,例如去中心化的Airbnb、网约车。——比特大陆吴忌寒:未来十年区块链技术发展的8个课题
现在我们应该能看得更清楚了。Facebook为我们描绘了开放式金融的新边界。我们回顾Libra的架构,发现这个连接现实与链上空间的基础设施,最后不是什么技术手段,而是Facebook的信用背书。换句话说,就是「利用自己的资源、Reputation、当然还有放在Facebook那儿的储备金,参与资产的构建」。而这个构建的过程就是用Move去Submit一个Module,里面定义了关于这个资产的各种方法和接口。再让thirdparty调用这些接口来编写自己的业务逻辑。
而这个资产的开放程度,实际上是你在设计Module接口的时候决定的。这里面蕴含了非常多想象的空间,比如Lyft和Uber同时定义了优惠券这个资产,谁预留的接口更丰富,第三方发挥创意的空间也就更多。最后可能会倒逼各个商家都加入这种OpenAssets的创建中去,从而形成新的网络效应。未来这种开放资产是否会支持跨链,从而migrate进其他的publicblockchain?我们尚不得知,但是可以预见的是旧世界一定会因此变得更加开放。
10年前,中本聪打开了加密货币的潘多拉之盒,在创世区块中摘抄了当天泰晤士报的标题,「TheTimes03/Jan/2009Chancelloronbrinkofsecondbailoutforbanks」。那个时候,他是否会想象到,在10年后的今天,世界已经发生了如此多的深刻的变化了。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。