链客,专为开发者而生,有问必答!linux
此文章来自区块链技术社区,未经容许拒绝转载。web
EOS智能合约的开发须要使用llvm和abigen来生成abi文件。 为此eos提供了一个 名为eosiocpp的工具。 在这篇文章中,咱们介绍如何使用这个工具来开发、部署并调用 一个EOS版本的hello world智能合约。vim
这篇文章的代码是在CentOS完成的,但在EOS支持的其余linux发行版上应该也没有问题。 若是你同时也对以太坊开发感兴趣,能够 访问咱们的入门级的以太坊教程 以及更进阶的以太坊电商实战教程。centos
智能合约撰写
首先,编写一个ahello.cpp文件 - EOS的合约开发使用C++语言:app
将如下内容插入到ahello.cpp文件中:函数
using namespace eosio;工具
class hello : public eosio::contract {
public:区块链
using contract::contract;
/// @abi action测试
void hi( account_name user ) { print( "Hello, World", name{user} ); }
};this
EOSIO_ABI( hello, (hi) )
接下来,编译并建立一个wast(web程序集)文件和一个abi文件。
智能合约的部署与交互
在部署合约以前,咱们须要建立测试用的钱包、密钥和账户。
首先,使用EOS客户端cleos建立一个名为scuser钱包,EOS使用钱包管理密钥:
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建立一个密钥对:
Private key: 5KZzUHNFNvf------------------------------vuF5z7d29uAUbsdn
Public key: EOS63ndkvF-----------------------9ZVcByP9nfZcwMLzbMpn
而后将密钥保存在以前建立的钱包scuser中:
还须要建立一个额外的帐户进行测试:
Private key: 5JbriTGYsnrpNDvL------------------LgniHVgyTnS5ommxo
Public key: EOS8XZoG2248Gu42-------------ps7JoW8tdHQwCsV
而后使用wallet子命令把这第二个密钥也存入钱包:
接下来,使用create account子命令建立一个帐户eosio —— 你须要使用帐户与EOS区块链交互:
如今使用set contract子命令部署智能合约:
Reading WAST/WASM from /home/centos/sc/ahello/ahello.wasm...
Using already assembled WASM...
Publishing contract...
executed transaction: 053a4883d9c191c2754656544dd045da17bd869250af13a00284a613eed3d23b 1792 bytes 601 us
warning: transaction executed locally, but may not be confirmed by the network yet
合约部署成功后,使用push action子命令来执行合约方法hi:
executed transaction: 9ed2894aef0f476687ad893ed16594588cc7a813c524d4b8497ba9f50793b151 104 bytes 330 us
Hello, World user1
warning: transaction executed locally, but may not be confirmed by the network yet
你应该能够看到相似下图的结果:
代码分析
以上示例代码是EOS智能合约的基本模板。 咱们如今将逐步分析上面编写的代码。
上述代码引入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智能合约的开发。