LIBRA:从 Move 语言的设计看 Facebook 的开放式金融

接上文。

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

Yield Protocol:已从 Euler Finance 遭攻击影响中完全恢复:6月27日消息,固定利率借贷协议 Yield Protocol 宣布已从 Euler Finance 遭攻击影响中完全恢复。3 月中旬,Euler Finance 遭到黑客攻击,损失金额近 2 亿美元,之后攻击者归还全部盗取资金。由于 Yield 的流动性提供者系统中的一些资金存放在 Euler 中,因此也受到了影响。[2023/6/28 22:04:12]

这里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交易对。

以太坊巨鲸从 Bitfinex 转移了超8000万美元的ETH:金色财经消息,以太坊巨鲸从 Bitfinex 转移了价值 80,656,629 美元的以太坊,交易地址为:0x4862733b5fddfd35f35ea8ccf08f5045e57388b3。[2022/4/19 14:32:34]

这方面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.

函数式语言的一个基本特性就是Immutability,这使得我们可以在执行函数之前就可以对程序的状态进行断言。但是保持纯粹的Immutability的话,编写业务逻辑势必会十分痛苦。Move这里依然采取了折衷主义的办法,参考了Rust的实现,保证每个对象在任何阶段只有一个可修改的引用,这样静态验证时就只要trace一个目标。

应用研究机构 Other Internet 从 Uniswap 赠款计划获得 100 万美元赠款:11月25日消息,应用研究机构 Other Internet 从 Uniswap 赠款计划(Uniswap Grants Program,UGP)获得 100 万美元赠款,将用于在明年扩展其研究计划并在 Uniswap 生态系统中进行新的治理实验。

注,Other Internet 已于今年夏天完成对 Uniswap 链下治理和 Discord 社区的分析。[2021/11/25 7:10:00]

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

如何保证智能合约的正确呢?这跟保证程序的正确性是一样的问题。只有懂得如何写出干净简单的代码,进行严密的思考,才能写出正确的智能合约。关于如何写出干净,简单,严密可靠的代码,你可以参考我之前的一些文章。

实力派 | 范瑞彬:FISCO BCOS的设计逻辑主要从 5个方面出发:在今日“金色实力派”线上访谈中,针对海创链CEO张弢提出的“微众银行联合金链盟开源工作组研发并开源的FISCO BCOS的设计逻辑是什么?”的问题,微众银行分布式商业科技发展部副总经理、区块链负责人范瑞彬表示,FISCO BCOS在设计上主要从5方面出发考量:1、安全。全方位的安全防护(覆盖网络、主机、存储、应用等),要避免短板和破窗。同时针对联盟链的场景,专门支持了准入机制,CA认证、密钥管理等关键能力。2、隐私保护。完整支持了国密算法体系(包括SM1、SM2、SM3、SM4等)。同时支持了权限管理、群签名、环签名、同态加密、零知识证明等隐私保护功能。3、性能。在工信部信通院的评测中单链TPS超2w,而且还支持了并行计算和分布式存储,包括多链、跨链、热点账户、多群组等一整套完整的解决方案,具备灵活高效的平行扩展能力。4、易用,提供开源的中间件平台,让使用者更便利的学习上手、开发、调试、部署、运营、监控、审计等。5、可靠,架构设计上要达到金融级水准的高可靠性。除了架构设计本身保证可靠,通过开源,更多人可以使用,促进更多的应用落地,用实践来检验和加速推动FISCO BCOS的成熟可靠。[2019/12/18]

做智能合约验证的工作也许能圈到钱,然而却是非常枯燥而没有成就感的。为此我拒绝了好几个有关区块链的合作项目。虽然我对区块链的其它一些想法是感兴趣的,我对智能合约的正确性验证一点都不看好。——垠神,智能合约和形式验证

怎么样,这一套听下来,是不是很像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,

声音 | BM:从 EOS 回到 ETH 就像从光纤回到了拨号一样:据 IMEOS 报道,BM 昨夜在推特发了两条推文,分别表达了 EOS 的领先和 DPOS 的优势

1.用户回馈使用 EOS 几个月后重新使用 ETH 就像是从光纤回到了拨号一样。一旦你在 EOS 上,你永远都不想在回去。

当计算或算法发生巨大突破时,工作证明就变得完全中心化...无论技术发展如何,DPOS 都会一直保持去中心化。你可以轻松分叉 DPOS,但创建新的抗性工作证明非常困难。[2019/4/15]

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年后的今天,世界已经发生了如此多的深刻的变化了。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

链链资讯

[0:6ms0-3:698ms