Libra教程之:运行自定义move modules
简介
因为Libra和Move都是在不断发展的过程,在本文发布的时候,自定义Move modules还不能在testnet上面发布,只能在本地环境发布,下面我们将会看一下到底怎么才能在本地网络上面运行一个自定义Move程序。
创建Move modules
这里,我们创建了一个非常简单的名为MyModule的模块。
该模块具有一个称为id的单一过程,该过程是一个操作coin的恒等过程。 它输入LibraCoin.T资源,最后将其返还给调用程序。 下面提供了此模块的Move IR代码,并将其保存在名为my_module.mvir的文件中。
module MyModule {
import 0x0.LibraCoin;
// The identity function for coins: takes a LibraCoin.T as input and hands it back
public id(c: LibraCoin.T): LibraCoin.T {
return move(c);
}
}
启动本地网络
启动本地网络很简单,需要用到libra仓库下面的libra_swarm包。启动命令如下:
$ cd libra
$ cargo run -p libra_swarm -- -s
上面的命令会创建一个本地网络的Libra区块链(生成节点的创世交易,初始密钥和引导程序配置),并启动一个本地验证节点。
最后它会启动一个Libra cli客户端,如下所示:
usage: <command> <args>
Use the following commands:
account | a
Account operations
query | q
Query operations
transfer | transferb | t | tb
<sender_account_address>|<sender_account_ref_id> <receiver_account_address>|<receiver_account_ref_id> <number_of_coins> [gas_unit_price_in_micro_libras (default=0)] [max_gas_amount_in_micro_libras (default 100000)] Suffix 'b' is for blocking.
Transfer coins (in libra) from account to another.
dev
Local Move development
help | h
Prints this help
quit | q!
Exit this client
Please, input commands:
libra%
接下来我们就可以通过命令行和libra进行交互了。
创建账号并送测试币
之前的文章我们也讲到了怎么创建账号,这里直接列命令:
libra% account create
>> Creating/retrieving next account from wallet
Created/retrieved account #0 address 810abcc08dbed34ea15d7eb261b8001da6a62d72acdbf87714dd243a175f9b62
libra% account mintb 0 100
>> Minting coins
waiting ....transaction is stored!
Finished minting!
我们给账户0创建了100个币。
编译Move Module
在上面我们已经把编辑好的Move module程序保存为my_module.mvir, 我们需要编译它:
libra% dev compile 0 <path to my_module.mvir> module
0表示这个module将使用0账户来发布。
module 表示你你正在编译一个Move module程序。如果你在编译交易脚本,那么将其替换为script .
成功编译模块后,您将在输出中看到以下消息,其中包含编译my_module.mvir生成的字节码文件的路径。
Successfully compiled a program at /var/folders/tq/8gxrrmhx16376zxd5r4h9hhn_x1zq3/T/.tmpigAZCx
发布编译好的Module
使用dev publish来发布上一步编译好的Module:
libra% dev publish 0 /var/folders/tq/8gxrrmhx16376zxd5r4h9hhn_x1zq3/T/.tmpigAZCx
waiting .....transaction is stored!
no events emitted.
Successfully published module
成功执行dev publish命令后,MyModule的字节码将在发送者的帐户下发布。 要使用MyModule中声明的过程和类型,其他事务脚本和模块可以使用import <sender_address> .MyModule将其导入。
在<sender_address>下发布的后续模块不得命名为MyModule。 每个帐户最多可以拥有一个给定名称的模块。 尝试在<sender_address>下发布名为MyModule的第二个模块将导致事务失败。
创建交易脚本
我们编写如下的交易脚本,并将其保存为custom_script.mvir。
import 0x0.LibraAccount;
import 0x0.LibraCoin;
import {{sender}}.MyModule;
main(amount: u64) {
let coin: LibraCoin.T;
coin = LibraAccount.withdraw_from_sender(move(amount));
//calls the id procedure defined in our custom module
LibraAccount.deposit(get_txn_sender(), MyModule.id(move(coin)));
return;
}
这个脚本就是简单的调用了MyModule的id过程。
在此脚本中,执行脚本时,{{sender}}将自动替换为发件人帐户地址。 或者,您可以import完全限定地址:
import 0x810abcc08dbed34ea15d7eb261b8001da6a62d72acdbf87714dd243a175f9b62.MyModule;
编译编译脚本
同样使用dev compile来进行编译:
libra% dev compile 0 <path_to_custom_script.mvir> script
结果如下:
Successfully compiled a program at /var/folders/tq/8gxrrmhx16376zxd5r4h9hhn_x1zq3/T/.tmpDZhL21
执行脚本
使用dev execute 命令来执行脚本。
libra% dev execute 0 /var/folders/tq/8gxrrmhx16376zxd5r4h9hhn_x1zq3/T/.tmpDZhL21 10
waiting .....transaction is stored!
Successfully finished execution
0是发送者的账户index.
/var/folders/tq/8gxrrmhx16376zxd5r4h9hhn_x1zq3/T/.tmpDZhL21是上面编译好的脚本地址。
10 是要调用的币的数量。
这样一个自定义Move module就完成并成功调用了。
更多教程请参考 flydean的博客
Libra教程之:运行自定义move modules的更多相关文章
- Libra教程之:来了,你最爱的Move语言
文章目录 Move语言 Move的核心概念 Move交易脚本 Move modules Move resources 写一个Move程序 编写交易脚本 编写自己的Modules Move语言 Move ...
- Libra教程之:执行Transactions
文章目录 Transactions是什么 Transactions运行的基础条件 Transactions的结构 执行Transactions Transactions是什么 我们讲到了Libra是一 ...
- Libra教程之:Libra协议的关键概念
文章目录 Libra协议 交易和状态 交易详解 账本状态详解 版本数据库 账户 账户地址 Proof 验证节点 存储 Libra协议 Libra协议是Libra区块链的基础,本文主要讲解Libra协议 ...
- Libra教程之:Transaction的生命周期
文章目录 Transaction的生命周期 提交一个Transaction 交易入链的详细过程 接收Transaction 和其他Validators共享这个Transaction 区块Proposi ...
- Libra教程之:Libra testnet使用指南
文章目录 Libra testnet网络 下载和安装Libra 编译Libra client并连接到Testnet网络 创建两个A和B的两个账号 检查libra cli Client是否运行 创建A的 ...
- Libra教程之:move语言的特点和例子
文章目录 move语言的特点 资源优先 灵活性 安全性 可验证性 Move语句初探 点对点支付交易脚本 Currency Module move语言的特点 Libra的目标是打造一个全球话的金融和货币 ...
- Libra教程之:Libra protocol的逻辑数据模型
文章目录 Libra protocol简介 逻辑数据模型 账本状态 交易 账本历史 Libra protocol简介 Libra区块链本质上是一个加密数据库,这个数据库是通过Libra protoco ...
- Libra教程之:数据结构和存储
文章目录 存储的数据结构 账本历史 账本状态 账户 事件 前面的文章我们知道,libra会把所有的数据都存储在账本中.为了方便业务逻辑和数据的校验,这个存储是以特定的数据结构来实现的,这里我们叫做验证 ...
- AppleWatch开发教程之Watch应用对象新增内容介绍以及编写运行代码
AppleWatch开发教程之Watch应用对象新增内容介绍以及编写运行代码 添加Watch应用对象时新增内容介绍 Watch应用对象添加到创建的项目中后,会包含两个部分:Watch App 和 Wa ...
随机推荐
- Vertica的这些事(二)——SQL-Server、Oracle、MySQL和Vertica数据库常用函数对比
SQL Server.Oracle.MySQL和Vertica数据库常用函数对比 Vertica数据库是HP公司新收购的用于BI方面的数据库. 绝对值 S:select abs(-1) value O ...
- 使用IDEA创建SpringBoot项目
SpringBoot学习第一步:搭建基础 IDEA对SpringBoot的项目支持可以说是点击就能完成基础的搭建,方便的不得了, 流程如下 1.左上角File选项,New project,选择Spri ...
- 如何查看网页的header
1.例如打开要爬取的网页:https://www.zhihu.com/explore 2.按下F12,点击Network 3.刷新页面,点击explore 4.选取request headers,us ...
- eclipse报错:problems during content assist
自动提示出错: 解决办法:Windows->preferences->java->editor->content assist->advanced 取消java prop ...
- PTA数据结构与算法题目集(中文) 7-3
PTA数据结构与算法题目集(中文) 7-3 树的同构 给定两棵树T1和T2.如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的.例如图1给出的两棵树就是同构的,因为我们把其中一 ...
- 搭建DHProxy服务器
集群与存储 HAProxy简介 ...
- 并发——深入分析CountDownLatch的实现原理
一.前言 最近在研究java.util.concurrent包下的一些的常用类,之前写了AQS.ReentrantLock.ArrayBlockingQueue以及LinkedBlockingQu ...
- MySQL学习之路5-数据表的常用操作
排序 :order by desc select * from <tablename> order by <字段名> desc:order by默认升序 desc 降序 分组 ...
- 22.3 Extends 构造方法的执行顺序
/** 1.有子父类继承关系的类中,创建父类对象未调用,执行父类无参构造* 2.有子父类继承关系的类中,创建子类对象未调用,执行顺序:默认先调用 父类无参构造---子类无参构造* 在子类的构造方法的第 ...
- <context:component-scan base-package=""> 与 <context:annotation-config 区别
<context:component-scan base-package=""> <context:annotation-config (2012-11-16 2 ...