博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EOS区块链智能合约开发
阅读量:5927 次
发布时间:2019-06-19

本文共 3376 字,大约阅读时间需要 11 分钟。

hot3.png

EOS智能合约开发需要使用llvmabigen来生成abi文件, 为此eos提供了一个名为eosiocpp的工具。 在这篇文章中,我们介绍如何使用这个工具来开发、部署并调用一个EOS版本的hello world智能合约。

如果你希望马上学习EOS智能合约的开发,可以访问这个,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发、部署与交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。

智能合约撰写

首先,编写一个ahello.cpp文件 - EOS的合约开发使用C++语言:

# mkdir /home/centos/sc/ahello# cd /home/centos/sc/ahello# vim ahello.cpp

将以下内容插入到ahello.cpp文件中:

#include 
#include
using namespace eosio;class hello : public eosio::contract { public: using contract::contract;/// @abi action void hi( account_name user ) { print( "Hello, World", name{user} ); }};EOSIO_ABI( hello, (hi) )

接下来,编译并创建一个wast(web程序集)文件和一个abi文件。

# eosiocpp -o ahello.wast ahello.cpp# eosiocpp -g ahello.abi ahello.cpp

智能合约的部署与交互

在部署合约之前,我们需要创建测试用的钱包、密钥和帐户。

首先,使用EOS客户端cleos创建一个名为scuser钱包,EOS使用钱包管理密钥:

# cleos wallet create -n scuserCreating wallet: scuserSave password to use in the future to unlock this wallet.Without password imported keys will not be retrievable."PW5JzRwAUN-----------------------------nAuCRWvHx4XnMPmGf9Kz "

接下来同样使用cleos创建一个密钥对:

# cleos create keyPrivate key: 5KZzUHNFNvf------------------------------vuF5z7d29uAUbsdnPublic key: EOS63ndkvF-----------------------9ZVcByP9nfZcwMLzbMpn

然后将密钥保存在之前创建的钱包scuser中:

# cleos wallet import -n scuser 5KZzUHNFNvf---------------------d29uAUbsdn

还需要创建一个额外的账户进行测试:

# cleos create keyPrivate key: 5JbriTGYsnrpNDvL------------------LgniHVgyTnS5ommxoPublic key: EOS8XZoG2248Gu42-------------ps7JoW8tdHQwCsV

然后使用wallet子命令把这第二个密钥也存入钱包:

# cleos wallet import -n scuser 5JbriTGYsnrpND----------HVgyTnS5ommxo

接下来,使用create account子命令创建一个账户eosio —— 你需要使用账户与EOS区块链交互:

#./cleos create account eosio scuser EOS63ndkvF---------cByP9nfZcwMLzbMpn EOS8XZo-------wJnieps7JoW8tdHQwCsV

现在使用set contract子命令部署智能合约:

# cleos set contract scuser /home/centos/sc/ahelloReading WAST/WASM from /home/centos/sc/ahello/ahello.wasm...Using already assembled WASM...Publishing contract...executed transaction: 053a4883d9c191c2754656544dd045da17bd869250af13a00284a613eed3d23b  1792 bytes  601 us#         eosio <= eosio::setcode               {"account":"scuser","vmtype":0,"vmversion":0,"code":"0061736d01000000013b0c60027f7e006000017e60027e7...#         eosio <= eosio::setabi                {"account":"scuser","abi":{"types":[],"structs":[{"name":"hi","base":"","fields":[{"name":"user","ty...warning: transaction executed locally, but may not be confirmed by the network yet

合约部署成功后,使用push action子命令来执行合约方法hi

# cleos push action scuser hi '["user1"]' -p scuserexecuted transaction: 9ed2894aef0f476687ad893ed16594588cc7a813c524d4b8497ba9f50793b151  104 bytes  330 us#        scuser <= scuser::hi                   {"user":"user1"}>> Hello, World user1warning: transaction executed locally, but may not be confirmed by the network yet

你应该可以看到类似下图的结果:

eos hello world

代码分析

以上示例代码是EOS智能合约的基本模板。 我们现在将逐步分析上面编写的代码。

#include 
#include

上述代码引入eos智能合约的头文件。

using namespace eosio;

上述代码使用eosio作为默认命名空间,因此在后续代码中可以直接使用诸如 account_name之类的数据类型。

class hello:public eosio :: contract {

创建一个hello类,继承自eosio预置的contract。

public:using contract::contract;/// @abi action

这显示了指定操作时在区块链中实际执行的功能。

void hi( account_name user ) {         print( "Hello, World", name{user} );      }};EOSIO_ABI( hello, (hi) )

EOSIO_ABI是一个包含以前版本中的apply()函数的宏。

在这篇文章中,我们介绍了如何编写一个EOS版本的Hellow World智能合约,希望有助于你初步了解EOS智能合约的开发。

原文链接:

转载于:https://my.oschina.net/u/3794778/blog/2988994

你可能感兴趣的文章
微信小程序之登录
查看>>
你不知道的JavaScript(二)
查看>>
weui-react项目实战新心得
查看>>
浮点数一些设计原理
查看>>
Ethereum-EIPs
查看>>
「读懂源码系列2」我从 lodash 源码中学到的几个知识点
查看>>
SAP的SqlAnyWhere中数据库日志文件删除后如何新建
查看>>
Amazon Alexa 新里程碑: 50000 个功能、 20000 种设备、 3500 个品牌
查看>>
JavaScript 学习提升
查看>>
限流算法(记录cyc大佬的专栏)
查看>>
买台电脑,不行!去旅游一下,不行!论程序员怎么实现财务自由!
查看>>
JavaScript 精粹 基础 进阶(5)数组
查看>>
ThreadPoolExecutor
查看>>
JS的原型链和继承
查看>>
Vue源码解析之数组变异
查看>>
CAS原理分析及ABA问题详解
查看>>
关于自增id 你可能还不知道
查看>>
阿里开源HTML5小游戏开发框架Hilo实战教程
查看>>
Scylla——开源免费的优秀代理 IP 池:自动验证、JSON API、基于 React 的 Web UI、Docker 支持...
查看>>
CSS属性总结之background
查看>>