当前位置:首页 > 物联网 > 区块链
[导读] Facebook推出Libra项目产生了刷屏级的影响,一时间信息爆炸,观点纷至。关于Libra具体操作模式、落地场景、影响面、如何与监管交互等讨论已经很多。这次,我们想为关注国际区块链发展的开发

Facebook推出Libra项目产生了刷屏级的影响,一时间信息爆炸,观点纷至。关于Libra具体操作模式、落地场景、影响面、如何与监管交互等讨论已经很多。这次,我们想为关注国际区块链发展的开发者、爱好者们带来点不一样的!

百度超级链XUPER致力于国产自研的区块链技术研发,并积极推动区块链的商业化落地。在底层区块链技术上拥有120余篇专利保护,在超级节点、链内并行、立体网络、可插拔共识机制等技术上实现国产自主创新。

保持一直以来对区块链技术关注,百度的研发工程师们发现,Libra采用了一种全新的move语言,其核心是从设计上防止数字资产被复制,降低了出现意外漏洞或安全事件的风险。

Libra白皮书中关于move语言的描述

Libra 区块链的三项决策:

1. 设计和使用 Move 编程语言。

2. 使用拜占庭容错 (BFT) 共识机制。

3. 采用和迭代改善已广泛采用的区块链数据结构。

“Move”是一种新的编程语言,用于在 Libra 区块链中实现自定义交易逻辑和“智能合约”。由于 Libra 的目标是每天 为数十亿人服务,因此 Move 的设计首先考虑到安全性和可靠性。Move 是从迄今为止发生的与智能合约相关的安 全事件中吸取经验而创造的一种编程语言,能从本质上令人更加轻松地编写符合作者意图的代码,从而降低了出现 意外漏洞或安全事件的风险。具体而言,Move 从设计上可防止数字资产被复制。它使得将数字资产限制为与真实资 产具有相同属性的“资源类型”成为现实:每个资源只有唯一的所有者,资源只能花费一次,并限制创建新资源。Move 语言还便于自动验证交易是否满足特定属性,例如,仅更改付款人和收款人帐户余额的付款交易。通过优先实现这 些特性,Move 可帮助保持 Libra 区块链的安全性。通过减轻关键交易代码的开发难度,Move 可以可靠地执行 Libra 生态系统的管理政策,例如对 Libra 货币和验证者节点网络的管理。Move 将加快 Libra 区块链协议以及在此基础上 构建的任何金融创新的演变。我们预计将在一段时间后向开发者开放创建合约的权限,以支持 Move 的演变和验证。

下面进入百度研发工程师带来的move语言介绍

Move是一门强类型的字节码语言,基于栈式虚拟机设计,受Linear Logic类型系统的启发,将资源(数字资产)作为第一等公民,借助所有权转移和最多一次可变引用等规则保证资产安全。名字Move的来历也就自然而然可以理解了。

三个大特点

1. first-class resouces. 用资源表示数字资产是一等公民,然后通过语法借助borrow check等思路在合约编译期间保证资产的不可双花,不可消失,必有归属性;

2. flexibility 通过交易脚本来定义单个交易里面的一次性(不可重用)合约逻辑,交易脚本定义了合约的main函数,可以插入多个module实现复杂逻辑和可重用逻辑。合约的结构原语modules/resources/procedure,类比与面向对象的class/object/method,同时通过module做合约资源的声明周期管理,极大的提升了合约可复用性和安全性。

3. 强类型的字节码,在字节码层面的静态代码检查保证运行时的大多数错误都在编译期间被发现。Move没有动态指派(dynamic dispath),函数调用完全是在编译期间确定,没有什么类似c++的RTTI的机制,这样验证工具可以快速构建调用图验证,borrow check保证资源任何时候只有一个muttable引用,这样写操作就可以被严格检验。保证足够安全。

Move实例介绍

先举个Move写的合约例子:

public main(payee: address, amount: u64) {

let coin: 0x0.Currency.Coin = 0x0.Currency.withdraw_from_sender(copy(amount));

0x0.Currency.deposit(copy(payee), move(coin));

}

合约接受2个参数转账接收人payee和转账金额amount。0x0表示账户地址,Currency表示module, 0x0.Currency.Coin表示资源类型,0x0.Currency.withdraw_from_sender这个procedure(过程)返回一个0x0.Currency.Coin类型的值coin,然后通过deposit这个过程,将coin转移到payee的地址下面去。 借助于linear logic的转移原则, 限制资源(数字资产的)的不可重用(只能转移一次),不可复制(不能copy资源)以及不可丢失(转移之后必有地址接受)。

Move通过一个地址到账户的map来表示global state。如下:

包含3个账户的global state的示意图

在一个账户里面,可以包含多个module或者resouces,但是不能同名,虽然不能同名,但是可以在一个账户里面,同时持有2个地址下面相同类型名的实例。例如:

resource TwoCoins { c1: 0x0.Currency.Coin, c2: 0x0.Currency.Coin })

例如声明一个名叫Coin资源如下:

module Currency {

resource Coin { value: u64 }

// 。..

}

默认情况下,Coin是private的,外部需要通过module暴露的其他接口(实际操作的语义最终也只能是move)才能被访问,并且权限完全由module的创建者控制。

deposit的实现如下:

public deposit(payee: address, to_deposit: Coin) {

let to_deposit_value: u64 = Unpack《Coin》(move(to_deposit));

let coin_ref: &mut Coin = BorrowGlobal《Coin》(move(payee));

let coin_value_ref: &mut u64 = &mut move(coin_ref).value;

let coin_value: u64 = *move(coin_value_ref);

*move(coin_value_ref) = move(coin_value) + move(to_deposit_value);

}

详细解释为:

1. move(to_deposit)将销毁sender的to_deposit这个资源,并且将其存储在一个局部变量to_deposit_value上;

2. 在接受人的空间下面创建一个引用coin_ref,然后创建一个存储coin_ref的value的可变引用coin_value_ref,

3. 取出coin_value_ref的value,将其跟to_deposit_value相加,将结果存回到coin_value_ref。

其中注意的是,Unpack《T》是Move内嵌的用户销毁类型为T的变量,然后返回T的具体字段的值的procedure。BorrowGlobal返回一个Coin的资源的引用。

然后在看下withdraw_from_sender的实现:

public withdraw_from_sender(amount: u64): Coin {

let transacTIon_sender_address: address = GetTxnSenderAddress();

let coin_ref: &mut Coin = BorrowGlobal《Coin》(move(transacTIon_sender_address));

let coin_value_ref: &mut u64 = &mut move(coin_ref).value;

let coin_value: u64 = *move(coin_value_ref);

RejectUnless(copy(coin_value) 》= copy(amount));

*move(coin_value_ref) = move(coin_value) - copy(amount);

let new_coin: Coin = Pack《Coin》(move(amount));

return move(new_coin);

}

几乎是deposit的逆过程,流程如下:

1. 获得转账发起方的地址,然后获得其Coin资源的实际的value, code_value;

2. 从coin_value减去amount个币;

3. 然后条用Pack创建一个新的Coin资源并且传回去。

综上可以看到,BorrowGlobal可以验证account是否有权限获得一个资源的引用(意味着马上要进行修改),然后通过Unpack实际的资源的value然后销毁资源,或者Pack来新建新的资源。然后上面各种语法&mut之类的,建议大家看看rust就好懂了。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭