Libra教程之:运行自定义move modules
文章目录
- 简介
- 创建Move modules
- 启动本地网络
- 创建账号并送测试币
- 编译Move Module
- 发布编译好的Module
- 创建交易脚本
- 编译编译脚本
- 执行脚本
简介
因为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 backpublic 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 clientPlease, input commands:libra%
接下来我们就可以通过命令行和libra进行交互了。
创建账号并送测试币
之前的文章我们也讲到了怎么创建账号,这里直接列命令:
libra% account create
>> Creating/retrieving next account from wallet
Created/retrieved account #0 address 810abcc08dbed34ea15d7eb261b8001da6a62d72acdbf87714dd243a175f9b62libra% 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/.tmpigAZCxwaiting .....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 moduleLibraAccount.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就完成并成功调用了。
更多精彩内容且看:
- 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
- Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
- Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新
- java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程
更多教程请参考 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 ...
- JS教程之 ElectronJS 自定义标题栏
先决条件:NodeJS和ElectronJS的一些基础知识 媒体或其他地方可能有一些文章解释了"如何自定义 Electron js 原生窗口的标题栏". 那我为什么要写这篇文章? ...
- Libra教程之:数据结构和存储
文章目录 存储的数据结构 账本历史 账本状态 账户 事件 前面的文章我们知道,libra会把所有的数据都存储在账本中.为了方便业务逻辑和数据的校验,这个存储是以特定的数据结构来实现的,这里我们叫做验证 ...
最新文章
- 查询mysql所有对象_Mysql查看数据库对象(SQL命令总结)
- 表的插入、更新、删除、合并操作_11_更新表的记录
- spring(2)装配Bean
- 【转】刨根究底正则表达式(1):开篇
- Linux设备中的并发控制
- Hibernate中Criteria的完整用法2
- RADIUS服务器的演变过程
- Serializer序列化器
- office2018自动图文集_怎么才算工作里要求的“熟练使用office办公软件”?
- teraterm--一款超好用堪比MobaXterm的远程终端连接软件,能解决shell端tab键等自动补全命令功能的缺失问题
- springmvc+mybatis 无极限树形结构 Mapperxml 映射方法
- 弘辽科技:白象方便面也被野性消费了吗?
- 码支付系统 无授权—个人免签约支付系统二维码收款即时到账源码 –
- 关于TCP/IOCP构架中出现的假死连接解决方案
- OpenCV-文字绘制cv::putText
- 漂亮的梦幻图,可用来做背景图(60张左右)
- Linux之线程Thread小结
- python 函数的返回值类型
- 无线数据服务器,智能电表是如何实现远程抄表的
- html中scc样式背景渐变,连续渐变色和固定比例热图ggplot2