首页 » 网站建设 » phpeos钱包技巧_第6课 用SI编写Hello World智能合约开启EOS之旅

phpeos钱包技巧_第6课 用SI编写Hello World智能合约开启EOS之旅

访客 2024-12-15 0

扫一扫用手机浏览

文章目录 [+]

1,择要

【本文目标】

通过本文实践,能够利用SI(Source Insight)编辑EOS的智能合约代码,并通过编译,实行来测试\"大众Hello World\公众代码。

phpeos钱包技巧_第6课 用SI编写Hello World智能合约开启EOS之旅

【前置条件】

phpeos钱包技巧_第6课 用SI编写Hello World智能合约开启EOS之旅
(图片来自网络侵删)

1) 已完成了EOS编译,编译测试成功;

2) 钱包,账号已创建完毕;

钱包名字: duncanwang

打开密码: \公众PW5K8vabia4Gba7Tos8wVH6XFc7bKYcR9uTfuaPqcNsPyg2HduFou\公众

钱包已导入系统密钥对:EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV :5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3

已创建账号: wangdenghui

【解释】这个钱包,账号为测试利用,学习者创建自己的账号资源即可。

【技能收成】

1)Source Insight的安装和利用

2)最简EOS智能合约写作

3) 合约代码的编译和实行

2,实践内容

2.1 Source Insight的安装和配置

1)source insight 先容

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供应了可快速访问源代码和源信息的功能。

2)Source Insight安装

参考《三步完成Source Insight 4.0 破解安装》完成Source Insight版本下载和安装。

3) Source Insight配置

如果要使Source Insight支持Go措辞和ABI文件的参考,让字体和背景颜色更适宜眼睛,须要做一定的配置。

不愿意自己配置的同学,可以加入知识星球后下载该配置文件,在菜单\"大众Options/Load Configuration\"大众导入\"大众wangdenghui SI 配置.xml\"大众文件,即可快速完成配置事情。

https://t.zsxq.com/ZFaaYVF

2.2 编写最简智能合约程序

1)建立工程

菜单Project / New Project创建一个命名为Hello的工程。

2)菜单File / New 创建一个\公众Hello.cpp\"大众的文件

3)编写程序

创建文件后,输入最简程序的内容。
本文不阐明C++语法和内容,我们的目标是先跑通代码。

#include <eosiolib/eosio.hpp>#include <string>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) )

2.3 编译和支配运行

1)Hello.cpp文件上传到EOS编译环境目录下

2)编译合约

eosiocpp -o表示在该目录下产生一个hello的智能合约代码。

eosiocpp -o hello.wast hello.cpp

操作输出,增加了hello.wast文件:

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

输出结果:

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中[目标文件的二进制格式、程序库等等。
[1]ABI不同于API ,API定义了源代码和库之间的接口,因此同样的代码可以在支持这个API的任何系统中编译 ,然而ABI许可编译好的目标代码在利用兼容ABI的系统中无需改动就能运行。
ABI粉饰了各种细节。

2.4 支配智能合约

cleos set contract wangdenghui ../hello -p wangdenghui

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 <= eosio::setcode {\公众account\"大众:\"大众wangdenghui\"大众,\"大众vmtype\"大众:0,\公众vmversion\"大众:0,\"大众code\"大众:\"大众0061736d01000000013b0c60027f7e006000017e60...# eosio <= eosio::setabi {\"大众account\公众:\"大众wangdenghui\"大众,\"大众abi\"大众:\公众0e656f73696f3a3a6162692f312e30000102686900010475736572046e616d650100...warning: transaction executed locally, but may not be confirmed by the network yet

这个命令序列的结果是,cleos发起一个包含两个操作(actions)的交易(transaction):eosio::setcode和eosio::setabi。

代码定义了合约如何运行,abi描述了参数如何在二进制和json表示之间进行转换。

这个命令末了一个参数是-p wangdenghui。
该参数见告cleos,用wangdenghui账户的active权限签署此操作,便是利用我们先前导入钱包的wangdenghui账户私钥对操作进行署名。

2.5 实行智能合约

cleos push action wangdenghui hi '[\"大众World!\"大众]' -p wangdenghui

输出结果有>> \"大众Hello World!\"大众

duncanwang@duncanwang:~/eos/build/contracts/hello$ cleos push action wangdenghui hi '[\"大众World!\"大众]' -p wangdenghuiexecuted transaction: d10de21ee792c4997ae697e5db00ad571cfd67c374e9e9fcb741a2a7046c9e49 104 bytes 830 us# wangdenghui <= wangdenghui::hi {\"大众strContent\"大众:\"大众World!\"大众}>> Hello World!warning: transaction executed locally, but may not be confirmed by the network yet

【问题】

合约实行并没有输出\"大众hello, World!的内容\"大众

duncanwang@duncanwang:~/eos/build/contracts/hello$ cleos push action wangdenghui hi '[\"大众wangdenghui\公众]' -p wangdenghuiexecuted transaction: 51ff4e32f556cedfc1a36f79a156a4dce7a5f93aa9037c83e149164189f57ea1 104 bytes 658 us# wangdenghui <= wangdenghui::hi {\"大众user\"大众:\"大众wangdenghui\公众}warning: transaction executed locally, but may not be confirmed by the network yet

【办理方法】

如果要在终端现实print的结果,须要在配置文件config.ini中,将contracts-console 设为 true,即:

contracts-console = true

该配置文件的位置在~/.local/share/eosio/nodeos/config,修正后重启节点。

3,参考

1) Hello World合约

2)Go条记 1.3 让SourceInsight支持Golang

4)【许晓笛】怎么看 EOS 的代码最爽?

5)source insight 背景颜色修正 代码字体大小修正 中文注释空格去除

标签:

相关文章

大数据时代下的肿瘤研究,突破与挑战

随着科技的飞速发展,大数据技术逐渐渗透到各个领域,为人类带来了前所未有的便利。在医学领域,大数据的应用为肿瘤研究提供了新的思路和方...

网站建设 2024-12-16 阅读0 评论0