Move语言
Move是一种新的编程语言,旨在为Libra区块链提供安全且可编程的基础。 Libra区块链中的帐户就是由任意数量的Move resources和Move modules组成的。 提交给Libra区块链的每个交易都使用Move编写的交易脚本来对其逻辑进行编码。
交易脚本通过调用module声明的procedures来更新区块链的全局状态。
Move交易脚本
每个Libra交易都包含一个Move交易脚本,该脚本对验证程序代表客户执行的逻辑进行编码(例如,将Libra从A的帐户转移到B的帐户)。
通过调用一个或多个Move模块的procedures,事务脚本与发布在Libra区块链的全局存储中的Move resources进行交互。
事务脚本并不会在全局状态中存储,并且其他事务脚本也无法调用它。 它是一个一次性程序。
Move modules
Move modules定义了用来更新Libra区块链的全局状态的规则。 modules相当于其他区块链中的智能合约。 它声明了可以在用户帐户下发布的resources类型。 Libra区块链中的每个帐户都是一个容器,用于容纳任意数量的resources和modules。
module主要用来声明结构类型(包括资源,这是一种特殊的结构)和procedures。
Move module的procedures定义了用于创建,访问和销毁其声明的类型的规则。
modules是可重用的。 在一个module中声明的结构类型可以使用在另一个module中声明的结构类型,并且在一个module中声明的可以procedure调用在另一个module中声明的public procedures。 一个module可以调用在其他Move module中声明的procedures。 事务脚本可以调用已发布module的任何public procedures。
最后,Libra用户将能够使用自己的帐户发布modules。
Move resources
Move的主要功能是能够定义自定义资源类型。 资源类型主要对数字资产进行编码。
资源在Libra中随处可见。 它们可以存储为数据结构,可以作为参数传递给过程,可以从过程中返回,等等。
Move type system为资源提供了特殊的安全保证。 Move resources永远不能被复制,重用或丢弃。 资源类型只能由定义该类型的模块创建或销毁。这是由Move虚拟机通过字节码验证来强制进行保证的。 Move虚拟机将拒绝运行尚未通过字节码验证程序的代码。
Libra货币是通过LibraCoin.T的资源类型来实现的。 和其他的资源一样,LibraCoin.T也是一种资源。
写一个Move程序
本节我会介绍怎么使用Move IR来编写事务脚本和模块。IR是即将推出的Move源语言的预览版本(不稳定)。 Move IR是Move字节码上的一个薄语法层,用于测试字节码验证程序和虚拟机,它对开发人员并不特别友好。 它足够高,可以编写人类可读的代码,但是也足够低,可以直接编译为Move字节码。
编写交易脚本
用户通过交易脚本来请求对Libra区块链的全局存储进行更新。几乎所有事务脚本中都会出现两个重要资源:LibraAccount.T和LibraCoin.T资源类型。 LibraAccount是module的名称,而T是该module声明的资源的名称。这是Move中的通用命名约定。module声明的“主要”类型通常称为T。
当我们说用户“在Libra区块链上的地址0xff拥有一个帐户”时,我们的意思是地址0xff拥有LibraAccount.T资源的实例。每个非空地址都有一个LibraAccount.T资源。此资源存储帐户数据,例如序列号,身份验证密钥和余额。要与帐户进行交互的Libra系统的任何部分都必须通过从LibraAccount.T资源中读取数据或调用LibraAccount module的procedures来进行此操作。
帐户余额是LibraCoin.T类型的资源。这是Libra货币的类型。与任何其他Move资源一样,此类型在语言上是一等公民。
LibraCoin.T类型的资源可以存储在程序变量中,在过程之间传递,等等。
// Simple peer-peer payment example.
// Use LibraAccount module published on the blockchain at account address
// 0x0...0 (with 64 zeroes). 0x0 is shorthand that the IR pads out to
// 256 bits (64 digits) by adding leading zeroes.
import 0x0.LibraAccount;
import 0x0.LibraCoin;
main(payee: address, amount: u64) {
// The bytecode (and consequently, the IR) has typed locals. The scope of
// each local is the entire procedure. All local variable declarations must
// be at the beginning of the procedure. Declaration and initialization of
// variables are separate operations, but the bytecode verifier will prevent
// any attempt to use an uninitialized variable.
let coin: LibraCoin.T;
// Acquire a LibraCoin.T resource with value `amount` from the sender's
// account. This will fail if the sender's balance is less than `amount`.
coin = LibraAccount.withdraw_from_sen
Move语言:编程Libra区块链的安全交易与模块开发指南

本文详细介绍了Move语言,一种为Libra区块链设计的编程语言,通过交易脚本和模块定义来管理账户、资源和货币转移。讲解了交易脚本的编写、Moveresources的作用、Movemodules的声明和交互方式,以及如何编写自定义模块。
最低0.47元/天 解锁文章
193

被折叠的 条评论
为什么被折叠?



