作者 | Second State

责编 | 乔治

出品 | 区块链大本营(blockchain_camp)

Libra 火了,火得一塌糊涂。

一个原因是其被争相讨论的「建立一套简单的、无国界的货币和为数十亿人服务的金融基础设施」光荣使命。朋友圈刷屏、社群刷屏,线上线下专家 PK、xx 论剑,支持、质疑、反对,「Libra 太牛了」、「Libra 被吹得太牛了」。

另一个原因,伴随其出生的 Move 语言也是一大亮点。不管 Libra 的「光荣使命」是否可以实现,但在另一阵地,在 GitHub Trending 榜单上,基于 Rust 语言搭建却又发布 Move 语言的 Libra 确实是实实在在地火了,不知不觉就冲上了 GitHub 日活第2名......

图片来源:https://github.com/trending?since=daily

那么问题来了,你认为 Libra最大的亮点是什么?

可以说,Libra 也许是目前为止本年度区块链领域最受期待、最多讨论的新闻了。

根据 Libra 白皮书描述的「建立去中心化的全球货币」的目标,该项目有着非常野心勃勃的加密经济学设计管理规则,同时其联盟中的合作伙伴也非常重磅

包括 VISA、ebay 和 Coinbase 在内的29个首批合作伙伴

Libra 区块链是一个去中心化的可编程的数据库,其被设计成用于支持一个波动性低的加密货币,它能作为有效的交换媒介服务世界上几十亿人。

— — Libra 白皮书

但作为技术人员,我们对于其运用区块链技术的方式最感兴趣。

为什么 Libra 项目要求有自己的一条区块链呢?对于应用程序开发者来说机会在哪里?对于企业以及传统的 IT 公司而言,从中可以得到哪些推断?我们将分三篇文章来讨论这几个问题。

1、Libra 应用程序开发方法;

2、深度解析 Libra 项目的核心应用;

3、如何基于 Libra 开发一款应用程序?

本文为系列文章第一部分,一起来看吧。

智能合约先行

Libra 项目中最引人瞩目的设计功能之一,就是其智能合约先行的策略。就算是像以太坊这样的智能合约平台,智能合约的执行仅仅是一种交易的类型。以太坊原生操作仍然是币(coin)的交易。而 Libra 不同。智能合约是 Libra 上的一等公民。

通过 Libra Core 内部组件写智能合约的流程

Libra 区块链本身是用 Rust 编写的,但是 Libra 上的应用程序是使用新的编程语言 Move 来编写。所有来自外部的区块链互动都由 Move 程序来处理,在 Libra 上,即便是一个币的转账,也是由 Move 程序来处理的。每一个 Libra 节点都会运行一个虚拟机。虚拟机执行程序,并且记录共识达成后的结果。笔者认为智能合约先行的方式能够让 Libra 项目建立起一个功能多样的基础设施,这也能适用于未来的需要。

为什么使用 Move 编程语言


那么,为什么我们需要一种新的编程语言?是因为安全和性能的要求。Libra 要建造一条新的链,因为目前市场上的区块链解决方案没有办法满足其对性能和安全的要求。

Facebook 和 Libra 想要建立专注于支付和资产数字化的区块链,因此他们创造了 Move 编程语言,内置了对不可更改且不可复制的资产的支持。Move 编程语言是一个用于数字资产管理的 DSL(域名特定语言)。

比特币在加密方面成就非凡,能够在数字世界创建无法复制的东西,有着非常巨大的价值。

— — 艾里克斯米特,谷歌主席

Move 编程语言的名字来自于 Move 本身支持的基础操作器。Move 操作器负责移动资产。Move 消除了原本常见的两步操作:减掉前面一个账户的余额,然后加到另外一个账户。Move 语言将资产与资源放在一等公民的地位。当然,Move 语言也有其他重要的特性,使其在资产管理方面更加安全,更加健壮。

1public deposit(payee: address, to_deposit: Coin) {2let to_deposit_value: u64 = Unpack<Coin>(move(to_deposit));3let coin_ref: &mut Coin = BorrowGlobal<Coin>(move(payee));4let coin_value_ref: &mut u64 = &mut move(coin_ref).value;5let coin_value: u64 = *move(coin_value_ref);6*move(coin_value_ref) = move(coin_value) + move(to_deposit_value);7}public deposit(payee: address, to_deposit: Coin) {2let to_deposit_value: u64 = Unpack<Coin>(move(to_deposit));3let coin_ref: &mut Coin = BorrowGlobal<Coin>(move(payee));4let coin_value_ref: &mut u64 = &mut move(coin_ref).value;5let coin_value: u64 = *move(coin_value_ref);6*move(coin_value_ref) = move(coin_value) + move(to_deposit_value);7}

Move 操作器,存款代码


 1public withdraw_from_sender(amount: u64): Coin { 2let transaction_sender_address: address = GetTxnSenderAddress(); 3let coin_ref: &mut Coin = BorrowGlobal<Coin>(move(transaction_sender_address)); 4let coin_value_ref: &mut u64 = &mut move(coin_ref).value; 5let coin_value: u64 = *move(coin_value_ref); 6RejectUnless(copy(coin_value) >= copy(amount)); 7*move(coin_value_ref) = move(coin_value) - copy(amount); 8let new_coin: Coin = Pack<Coin>(move(amount)); 9return move(new_coin);10}public withdraw_from_sender(amount: u64): Coin { 2let transaction_sender_address: address = GetTxnSenderAddress(); 3let coin_ref: &mut Coin = BorrowGlobal<Coin>(move(transaction_sender_address)); 4let coin_value_ref: &mut u64 = &mut move(coin_ref).value; 5let coin_value: u64 = *move(coin_value_ref); 6RejectUnless(copy(coin_value) >= copy(amount)); 7*move(coin_value_ref) = move(coin_value) - copy(amount); 8let new_coin: Coin = Pack<Coin>(move(amount)); 9return move(new_coin);10}

Move 操作器,取款代码


Move 编程语言是静态的,并且由编译器工具来发现错误和潜在的问题。

Move 源代码被编译为由虚拟机执行的静态的 IR (intermediate representation)代码。IR 代码由工具进行检查并验证是否正确。

1public main(payee: address, amount: u64) {2let coin: 0x0.Currency.Coin = 0x0.Currency.withdraw_from_sender(copy(amount));30x0.Currency.deposit(copy(payee), move(coin));4}public main(payee: address, amount: u64) {2let coin: 0x0.Currency.Coin = 0x0.Currency.withdraw_from_sender(copy(amount));30x0.Currency.deposit(copy(payee), move(coin));4}


实际上,目前的 Libra 资料仅仅有 Move IR 代码的案例。Move 源代码的细节,在撰写本文时还未公布。

Move 编程语言和虚拟机是 Libra 项目的关键创新之处,但是 Move 编程语言与传统的 Solidity 和 Vyper 智能合约语言,以及 EVM(以太坊虚拟机)和 WebAssembly 区块链虚拟机相比,所做出的妥协有哪些呢?

牺牲图灵完备性

大多数 DSL 特定语言系统都会就具体的任务进行优化,因此并不适用于广泛意义上的计算。Libra 并未直接表示 Move 编程语言是不是一个图灵完备的体系,但是,Move 专门针对金融交易进行优化,Move 系统可能并不适合用在开发加密货币游戏或博彩。

也就是说,Libra 软件对于大多数企业智能合约用例来说并不合适。但还有其他的方面,Move 编程语言在很大程度上不是智能合约。

Move 程序不是智能合约

Move 程序必须进行编译,并且集成到一个 Libra 节点软件当中,对普通用户来说才是可用的。Libra 区块链如果要支持新的 Move 程序,必须要暂停整条链,并且所有三分之二的验证人节点进行软件升级,才能够支持同样的 Move 程序,这在本质上意味着,每次要添加新的 Move 程序到区块链,都要进行硬分叉,期间伴随着区块链服务暂停。这不是智能合约,而是 chaincode(链码)

智能合约的一个决定性的特点就是它有能力按照要求在区块链在并不需要暂停服务的情况下,通过共识,部署并且执行新代码,这对于企业区块链或者是公链来说非常重要。

  • 公链必须允许任何人在不需要得到授权也不需要暂停服务的情况下部署并执行智能合约代码;

  • 企业级的区块链特别需要使用智能合约来创造自动化的商务决策。比如在不同几方之间,进行担保交易。雇员与合伙人必须能够按照实际需要来修改和部署智能合约,同时不需要暂停整条链。

Libra 项目作为一个专注于金融交易的准入式区块链,它的最初的方案,是使用不可更改的 chaincode。这样能够让整个系统更加安全,而且更加稳定,因为所有的 Move 程序都会至少要得到100个验证人节点中的67位的检查和允许。但是 Libra 项目所声称的目标是在接下来五年当中,进化成一条公链。我们相信 Move 架构会与区块链共同进化。

写在最后

在本篇文章中,我们聚焦讨论了 Move 编程语言以及由其驱动的智能合约。当然,Libra 还有其它很有意思的技术创新。比如以下值得关注的点:

  • 以太坊每个节点都维护了一个全球性的数据库,在每个区块更新之后,数据库也会跟着更新;而 Libra 与以太坊不同,Libra 的数据库是基于不同版本的,Libra 的状态数据库在每个交易完成后得到更新。对 Libra 来说,相较交易的概念而言,区块的概念没有那么重要。

  • Libra 区块链最初的性能目标是每秒1000笔交易。很显然,这对于一个全球性的支付企业或者全球性的电商场景而言,已经足够了,因为 VISA 平均 TPS 也仅仅在1700左右。Libra 没有不切实际、不负责任地吹嘘百万 TPS

在接下来的两篇文章中,我们将提供对 Move 程序的深度解读,并向读者展示 Move 语言具体是如何工作的。敬请期待。

拓展资源:

  • Libra 白皮书:

    https://libra.org/en-US/white-paper/

  • Libra GitHub:

    https://github.com/libra/libra

  • Libra 技术白皮书:

    https://developers.libra.org/docs/assets/papers/the-libra-blockchain.pdf

  • Move 语言:

    https://developers.libra.org/docs/assets/papers/libra-move-a-language-with-programmable-resources.pdf

关于作者:

Second State 主要提供针对企业的区块链智能合约解决方案,已获得一线VC投资,目前处于未公开阶段。Second State 正在为业内领先的开源项目做贡献,即将发布第一批产品。

V神:希望更多中国开发者关注以太坊!!

点击图片查阅详情


V神来北京啦!6月29-30日,2019第二届以太坊技术及应用大会将在北京重磅开启,届时V神将携以太坊核心团队与国内外区块链大咖带来众多以太坊开发干货。由于干货过于密集,小伙伴们要做好烧脑的心理准备哦!

大会开幕倒计时 天!

扫码或点击阅读原文,既享优惠购票!

以太坊大会福利社现已全面开放扫码入群即可抢先获得大会一手信息和优惠福利!相关疑问也可入群交流咨询,务必备注“公司+职位+姓名”否则不予通过!!!

推荐阅读:

  • 25岁创立加密城堡, 曾经独角兽创始人社会名流天才黑客是这里的沙发客, 如今却无人问津……

  • 倒计时10天 | 堪称年度中国最具影响力的以太坊技术盛宴,为何不容错过?

  • 第二! 他排中本聪与V神中间, 单靠文字就“打败”了敲代码的程序员!

  • 所有的 iPhone 和高端 Android 设备都被破解了!

  • 真正的博士是如何参加AAAI, ICML, ICLR等AI顶会的?

  • 不要让 Chrome 成为下一个 IE!

  • 这位博士跑赢“地震波”:提前 10 秒预警宜宾地震!

  • 她说:程序员离开电脑就是 “废物” !

猛戳"阅读原文"有惊喜哟

老铁在看了吗??

被 Libra 刷屏的你绝对不知道, 也许这才是它最大的核武器...相关推荐

  1. 有些话不知道怎么说才好

    有些话不知道怎么说才好. 在blog上,msn上,或者Email,老赵一直在回答大家提出的各种问题.虽然自知遗漏不少,但是相信其中的大部分我都是给与回复的--可能质量有高有低,投入有多有少,但是相信老 ...

  2. 在 Libra 刷屏的背后,你必须知道 TA!

    作者 | Second State 责编 | 乔治 出品 | 区块链大本营(blockchain_camp) Libra 火了,火得一塌糊涂. 一个原因是其被争相讨论的「建立一套简单的.无国界的货币和 ...

  3. vb6 打印选项对话框_图纸打印次数太多,不知道哪次才是最新的?用打印戳记区分效果好...

    原创:就说我在开发区 使用AutoCAD从事设计工作的朋友们不知道有没遇到过这种情况: 图纸在反复修改打印的过程中,由于图纸内容高度相似,往往搞不清究竟哪个才是最新版本的图纸了. 这种情况下,细致入微 ...

  4. 已知挖坑记录(不知道什么时候才填)

    挖坑记录 前言 一.区块链安全 1.基于区块回滚的攻击 2. 二.架构设计 1.数据中台方面 2.大数据应用方面 3.云边融合方面 三.自己瞎捣鼓的Relax框架相关 1.消灭Service层 2.消 ...

  5. 5G 浪潮来袭!程序员在风口中有何机遇?

    整理 | 胡巍巍 出品 | CSDN(ID:CSDNnews) 七月流火,上蒸下煮的大暑小暑,是我们奋斗的注脚. 5G牌照发布了,高考榜单揭晓了,白天更长了,但是程序员下班,仍旧见不到夕阳. 程序员的 ...

  6. V神已抵京, 倒计时4天! 6大理由告诉你为什么要参加2019以太坊技术及应用大会...

    出品 | CSDN.灵钛科技 最近,链圈被「V神要来中国」的消息给刷屏了. 根据营长的暗中观察,V神今天已经抵达中国,参加了「2019以太坊技术及应用大会」的6月25-27日的黑客马拉松.同时,也为4 ...

  7. Facebook发的不是币, 而是世界变革的信号弹

    来源 | 陈菜根专栏 作者 | 陈菜根 出品 | 区块链大本营(blockchain_camp) 如你看到的那样,Libra 白皮书刷屏了,这个代表了数字金融的宣言书,一下子穿透了国界.行业和阶层,一 ...

  8. LinkedIn最新报告: 区块链成职位需求增长最快领域, 这些地区对区块链人才渴求度最高……...

    来源 | LinkedIn 责编 | Aholiab 出品 | 区块链大本营(blockchain_camp) 最近,LinkedIn发布了一份过去5年来,亚洲地区需求增长最快的技能的调查报告. 报告 ...

  9. 日记侠:朋友圈一定要刷屏吗?

    你好,我是王刚,行走于网络江湖的"日记侠".每天分享我的思考和经验,希望身边的人可以和我一样天天写日记,今天是王刚日记第550天. 不一定卖产品的才会在朋友圈刷屏! 不卖产品的你可 ...

最新文章

  1. mysql8.0.22 win7_现在还能不能下载到正版WIN 7
  2. 精益与敏捷开发(随笔)
  3. OpenGL着色器将纹理应用于全屏四边形
  4. blob html 预览_本地图片预览+blob使用
  5. 向量外积_解析几何 -向量
  6. (八)深入浅出TCPIP之TCP长连接与短连接详解
  7. 鸿蒙系统联合,跨界联合 华为鸿蒙系统赋能厨电业
  8. hdc mfc 画扇形图_canvas画扇形、饼图
  9. c++rpg黑框游戏_c++实现简单RPG对战游戏的代码.doc
  10. 辞职在家全职炒股需要什么条件?
  11. [Cocos2d-x] init()和onEnter()方法的区别
  12. oracle dblink性能,谈谈Oracle为2019年埋下的雷:Oracle关于DBLINK的预警
  13. php中面向对象静态调用,php面向对象中static静态属性和静态方法的调用_PHP
  14. qq服务器正在升级维护中,建议您稍后再尝试打开.谢谢!,用友通维护锦集
  15. HQChart使用教程70 -通达信语法检测/指标翻译
  16. 前端 英文时间格式转化为中文时间格式
  17. 论文公式编号右对齐_毕业论文详细排版,看这一篇就够了!
  18. linux命令键盘快捷键,如何将Linux命令设置成键盘快捷键
  19. 主编编辑器如何设置我的签名?
  20. 前端工程师未来发展方向

热门文章

  1. const修饰指针的效果
  2. ffmpeg推拉流 视频合成
  3. 二手平台转转通过巧用裂变手段和积分体系,增长套路把人性用到了极致
  4. Java版工程项目管理系统平台+java版企业工程系统源码+助力工程企业实现数字化管理
  5. 爱奇艺PC Web NodeJS中间层实践
  6. Linux常用文件权限命令详解
  7. 苹果承认硬件缺陷,软件APP开发与硬件有关系吗
  8. 电容笔和触控笔有哪些区别?超高性价比电容笔排行
  9. 《软技能--代码之外的生存指南》学习笔记之生产力篇
  10. 生成源代码,这是一个妥协