本篇内容主要讲解“在CentOS中怎么怎么实现EOS智能合约”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“在CentOS中怎么怎么实现EOS智能合约”吧!
EOS智能合约的开发需要使用llvm
和abigen
来生成abi
文件。 为此eos提供了一个 名为eosiocpp
的工具。 在这篇文章中,我们介绍如何使用这个工具来开发、部署并调用 一个EOS版本的hello world
智能合约。
首先,编写一个ahello.cpp文件 - EOS的合约开发使用C++语言:
# mkdir /home/centos/sc/ahello # cd /home/centos/sc/ahello # vim ahello.cpp
将以下内容插入到ahello.cpp文件中:
#include <eosiolib/eosio.hpp> #include <eosiolib/print.hpp> 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 scuser Creating wallet: scuser Save password to use in the future to unlock this wallet. Without password imported keys will not be retrievable. "PW5JzRwAUN-----------------------------nAuCRWvHx4XnMPmGf9Kz "
接下来同样使用cleos
创建一个密钥对:
# cleos create key Private key: 5KZzUHNFNvf------------------------------vuF5z7d29uAUbsdn Public key: EOS63ndkvF-----------------------9ZVcByP9nfZcwMLzbMpn
然后将密钥保存在之前创建的钱包scuser
中:
# cleos wallet import -n scuser 5KZzUHNFNvf---------------------d29uAUbsdn
还需要创建一个额外的账户进行测试:
# cleos create key Private key: 5JbriTGYsnrpNDvL------------------LgniHVgyTnS5ommxo Public 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/ahello Reading 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 scuser executed transaction: 9ed2894aef0f476687ad893ed16594588cc7a813c524d4b8497ba9f50793b151 104 bytes 330 us # scuser <= scuser::hi {"user":"user1"} >> Hello, World user1 warning: transaction executed locally, but may not be confirmed by the network yet
你应该可以看到类似下图的结果:
以上示例代码是EOS智能合约的基本模板。 我们现在将逐步分析上面编写的代码。
#include <eosiolib/eosio.hpp> #include <eosiolib/print.hpp>
上述代码引入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()
函数的宏。
到此,相信大家对“在CentOS中怎么怎么实现EOS智能合约”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。