在CentOS中怎么怎么实现EOS智能合约

免费建站   2024年05月03日 14:24  

本篇内容主要讲解“在CentOS中怎么怎么实现EOS智能合约”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“在CentOS中怎么怎么实现EOS智能合约”吧!

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

智能合约撰写

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

#mkdir/home//sc/ahello#cd/home//sc/ahello#vimahello.cpp

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

#include<eosiolib/eosio.hpp>#include<eosiolib/print.hpp>usingnamespaceeosio;classhello:publiceosio::contract{public:usingcontract::contract;///@abiactionvoidhi(account_nameuser){print("Hello,World",name{user});}};EOSIO_ABI(hello,(hi))

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

#eosiocpp-oahello.wastahello.cpp#eosiocpp-gahello.abiahello.cpp智能合约的部署与交互

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

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

#cleoswalletcreate-nscuserCreatingwallet:scuserSavepasswordtouseinthefuturetounlockthiswallet.Withoutpasswordimportedkeyswillnotberetrievable."PW5JzRwAUN-----------------------------nAuCRWvHx4XnMPmGf9Kz"

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

#cleoscreatekeyPrivatekey:5KZzUHNFNvf------------------------------vuF5z7d29uAUbsdnPublickey:63ndkvF-----------------------9ZVcByP9nfZcwMLzbMpn

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

#cleoswalletimport-nscuser5KZzUHNFNvf---------------------d29uAUbsdn

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

#cleoscreatekeyPrivatekey:5JbriTGYsnrpNDvL------------------LgniHVgyTnS5ommxoPublickey:EOS8XZoG2248Gu42-------------ps7JoW8tdHQwCsV

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

#cleoswalletimport-nscuser5JbriTGYsnrpND----------HVgyTnS5ommxo

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

#./cleoscreateaccounteosioscuserEOS63ndkvF---------cByP9nfZcwMLzbMpnEOS8XZo-------wJnieps7JoW8tdHQwCsV

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

#cleossetcontractscuser/home/centos/sc/ahelloReadingWAST/WASMfrom/home/centos/sc/ahello/ahello.wasm...UsingalreadyassembledWASM...Publishingcontract...executedtransaction:053a4883d9c191c2754656544dd045da17bd869250af13a00284a613eed3d23b1792bytes601us#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:transactionexecutedlocally,butmaynotbeconfirmedbythenetworkyet

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

#cleospushactionscuserhi'["user1"]'-pscuserexecutedtransaction:9ed2894aef0f476687ad893ed16594588cc7a813c524d4b8497ba9f50793b151104bytes330us#scuser<=scuser::hi{"user":"user1"}>>Hello,Worlduser1warning:transactionexecutedlocally,butmaynotbeconfirmedbythenetworkyet

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

代码分析

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

#include<eosiolib/eosio.hpp>#include<eosiolib/print.hpp>

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

usingnamespaceeosio;

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

classhello:publiceosio::contract{

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

public:usingcontract::contract;///@abiaction

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

voidhi(account_nameuser){print("Hello,World",name{user});}};EOSIO_ABI(hello,(hi))

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

到此,相信大家对“在CentOS中怎么怎么实现EOS智能合约”有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

域名注册
购买VPS主机

您或许对下面这些文章有兴趣:                    本月吐槽辛苦排行榜

看贴要回贴有N种理由!看帖不回贴的后果你懂得的!


评论内容 (*必填):
(Ctrl + Enter提交)   

部落快速搜索栏

各类专题梳理

网站导航栏

X
返回顶部