第6课 用SI编写"Hello World"智能合约,开启EOS之旅

论坛 期权论坛 区块链     
笔名辉哥   2018-11-20 23:29   4884   0
            
1,摘要【本文目标】
通过本文实践,能够使用SI(Source Insight)编辑EOS的智能合约代码,并通过编译,执行来测试"Hello World"代码。
【前置条件】
1) 已完成了EOS编译,编译测试成功;
2) 钱包,账号已创建完毕;
钱包名字: duncanwang
打开密码: "PW5K8vabia4Gba7Tos8wVH6XFc7bKYcR9uTfuaPqcNsPyg2HduFou"
钱包已导入系统密钥对: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV :5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
已创建账号: wangdenghui
【说明】这个钱包,账号为测试使用,学习者创建自己的账号资源即可。
【技术收获】
1)Source Insight的安装和使用
2)最简EOS智能合约写作
3) 合约代码的编译和执行
2,实践内容[h1]2.1  Source Insight的安装和配置[/h1][h3]1)source insight 介绍[/h3]EOSIO的智能合约代码采用C++编程语言完成,目前有多款编辑器或者集成IDE环境例如Visual Studio 2017/ Source Insight / Visual Studio Code / UtraEdit等多款 软件支持。对通信背景的人来说,大家特别习惯使用 Source Insight,其关联查看功能确实比其他软件更方便。


Source Insight是如今最好用的语言编辑器之一,支持几乎所有的语言, 如C、C++、ASM、PAS、ASP、HTML,PHP,JSON,Python等常见的,也可以通过导入配置文件的方式支持GO语言(下载地址:https://www.sourceinsight.com/download/),
还支持自己定义关键字,Source Insight提供了可快速访问源代码和源信息的功能。
[h3]2)Source Insight安装[/h3]参考《三步完成Source Insight 4.0 破解安装》完成Source Insight版本下载和安装。
[h3]3) Source Insight配置[/h3]如果要使Source Insight支持Go语言和ABI文件的参考,让字体和背景颜色更适合眼睛,需要做一定的配置。


不愿意自己配置的同学,可以加入知识星球后下载该配置文件,在菜单"Options/Load Configuration"导入"wangdenghui SI 配置.xml"文件,即可快速完成配置工作。
[h1]2.2  编写最简智能合约程序[/h1][h3]1)建立工程[/h3]菜单Project / New Project创建一个命名为Hello的工程。

[h3]2)菜单File / New 创建一个"Hello.cpp"的文件[/h3]
[h3]3)编写程序[/h3]创建文件后,输入最简程序的内容。本文不解释C++语法和内容,我们的目标是先跑通代码。
  1. #include #include using namespace eosio;class hello : public eosio::contract {  public:      using contract::contract;      /// @abi action       void hi( std::string strContent ) {         print( "Hello ", strContent);      }};EOSIO_ABI( hello, (hi) )
复制代码
[h1]2.3  编译和部署运行[/h1][h3]1)Hello.cpp文件上传到EOS编译环境目录下[/h3]
[h3]2)编译合约[/h3]eosiocpp -o表示在该目录下产生一个hello的智能合约代码。
eosiocpp -o hello.wast hello.cpp
操作输出,增加了hello.wast文件:
  1. duncanwang@duncanwang:~/eos/build/contracts/hello$ eosiocpp -o hello.wast hello.cppduncanwang@duncanwang:~/eos/build/contracts/hello$ lsCMakeLists.txt  hello.cpp  hello.hi_rc.md  hello_rc.md  hello.wasm  hello.wast
复制代码
eosiocpp -g hello.abi hello.cpp
输出结果:
  1. duncanwang@duncanwang:~/eos/build/contracts/hello$ eosiocpp -g hello.abi hello.cppGenerated hello.abi ...
复制代码
eosiocpp -g产生"hello.abi"文件。
ABI(Application Binary Interface): 应用程序二进制接口 描述了应用程序和操作系统之间,一个应用和它的库之间,或者应用的组成部分之间的低接口。ABI涵盖了各种细节,如:
  • 数据类型的大小、布局和对齐;
  • 调用约定(控制着函数的参数如何传送以及如何接受返回值),例如,是所有的参数都通过栈传递,还是部分参数通过寄存器传递;哪个寄存器用于哪个函数参数;通过栈传递的第一个函数参数是最先push到栈上还是最后;
  • 系统调用的编码和一个应用如何向操作系统进行系统调用;
  • 以及在一个完整的操作系统ABI中[目标文件的二进制格式、程序库等等。[sup] [1][/sup]
    ABI不同于API ,API定义了源代码和库之间的接口,因此同样的代码可以在支持这个API的任何系统中编译 ,然而ABI允许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行。 ABI掩盖了各种细节。
[h1]2.4  部署智能合约[/h1]
cleos set contract wangdenghui ../hello -p wangdenghui
  1. duncanwang@duncanwang:~/eos/build/contracts/hello$ cleos set contract wangdenghui ../hello -p wangdenghuiReading WAST/WASM from ../hello/hello.wasm...Using already assembled WASM...Publishing contract...executed transaction: 79830b81c90a22ab42b427ac70ff0c764441d92ea128999712e3376ae6b2460d  4168 bytes  741 us#         eosio > "Hello World!"
  2. [code]duncanwang@duncanwang:~/eos/build/contracts/hello$ cleos push action wangdenghui hi '["World!"]' -p wangdenghuiexecuted transaction: d10de21ee792c4997ae697e5db00ad571cfd67c374e9e9fcb741a2a7046c9e49  104 bytes  830 us#   wangdenghui > Hello World!warning: transaction executed locally, but may not be confirmed by the network yet
复制代码
【问题】
合约执行并没有输出"hello, World!的内容"
[code]duncanwang@duncanwang:~/eos/build/contracts/hello$ cleos push action wangdenghui hi '["wangdenghui"]' -p wangdenghuiexecuted transaction: 51ff4e32f556cedfc1a36f79a156a4dce7a5f93aa9037c83e149164189f57ea1  104 bytes  658 us#   wangdenghui
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:37
帖子:47
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP