博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EOS区块链平台智能合约示例HelloWorld
阅读量:7094 次
发布时间:2019-06-28

本文共 3348 字,大约阅读时间需要 11 分钟。

hot3.png

我们将介绍一个使用EOS智能合约构建hello World的例子。

一般环境设置通过上一篇文章已经说明,这方面的问题大家可以看本博客上一篇文章,本文引用了。

运行nodeos

要通过Hello World日志进行验证,请使用contracts-console选项运行它。

nodeos --contracts-console

<!--more-->

生成智能合约

让我们尝试通过一个不同的新的终端上(除了nodeos的终端之外)访问EOS目录,创建一个名为Hello的文件夹。命令如下:

$ cd eos$ cd mkdir hello$ cd hello

然后,创建hello.cpp文件并复制下面的示例。Hello合约继承了EOS.IO提供的合约,并具有打印出用户名Hello的功能。

编译代码

  • 对于第一个命令,让我们用WebAssembly编译代码。编译时,可能会提示警告(但我们可以忽略它)。
  • 对于第二个命令,让我们创建ABI。
# Compile webaassemblyeosiocpp -o hello.wast hello.cpp# Creating abieosiocpp -g hello.abi hello.cpp

帐户创建和合约发布

创建一个名为Hello.Code的帐户。我们将进一步使用这个帐户发布Hello合约。

cleos set contract ${account} ${path} -p ${permmition}命令发布合约。

$ cleos create account eosio hello.code EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWTexecuted transaction: e6847fc85c7733dd70a9ff27c2cad98ea0b50fb6c80c2b0c7ea1bf64f9917916  200 bytes  225 us#         eosio <= eosio::newaccount            {"creator":"eosio","name":"hello.code","owner":{"threshold":1,"keys":[{"key":"EOS8QMGRoRPZ4uf3w8WACc...$ cleos set contract hello.code ../hello -p hello.codeReading WAST/WASM from ../hello/hello.wasm...Using already assembled WASM...Publishing contract...executed transaction: 7e1b070382188677e70cf4b87e8fbe02c072f10063983ffc1d8259b127d8fea7  1800 bytes  723 us#         eosio <= eosio::setcode               {"account":"hello.code","vmtype":0,"vmversion":0,"code":"0061736d01000000013b0c60027f7e006000017e600...#         eosio <= eosio::setabi                {"account":"hello.code","abi":"0e656f73696f3a3a6162692f312e30000102686900010475736572046e616d6501000...

调用函数

让我们调用hello类的hi函数。它可以用下面的命令来完成:

cleos push action ${contract_name} ${function} ${[argument]} -p ${permission}

在下面的示例中,hello.code合约中的用户帐户调用hi函数。

$ cleos push action hello.code hi '["user"]' -p userexecuted transaction: d7932d1ee61ab6b0fed1f9e20d4a2e2607b029763aeaf1daea4ed718d2885797  104 bytes  500 us#    hello.code <= hello.code::hi               {"user":"user"}

结果

nodeos终端中执行交易的块中添加了以下输出。hello是名为hi函数的用户的名字。

2703777ms thread-0 apply_context.cpp:28 print_debug ][(hello.code,hi)->hello.code]: CONSOLE OUTPUT BEGIN =====================Hello, user[(hello.code,hi)->hello.code]: CONSOLE OUTPUT END =====================

授权运行请求

  • 替换为包含授权请求调用hi函数。

结果

  • 当我们试图用一个未经授权的帐户调用它时,会出现一个错误(如下)。
  • 使用授权帐户,它正常输出无错误。
# Authorized$ cleos push action hello.code hi '["tester"]' -p userError 3090004: missing required authority# Unauthorized$ cleos push action hello.code hi '["tester"]' -p testerexecuted transaction: 16a34c27c7d162dc3940358197306df619911fb930cbddd6d208125a770886f4  104 bytes  243 us#    hello.code <= hello.code::hi               {"user":"tester"}

可以在nodeos的块中按如下方式打印日志:

2525788ms thread-0   http_plugin.cpp:405           handle_exception     ] FC Exception encountered while processing chain.push_transaction2525788ms thread-0   http_plugin.cpp:406           handle_exception     ] Exception Details: 3090004 missing_auth_exception: missing required authoritymissing authority of tester {"account":"tester"}thread-0  apply_context.cpp:132 require_authorization {"_pending_console_output.str()":""}thread-0  apply_context.cpp:62 exec_one

另:《EOS智能合约与DApp开发入门》教程已经上线,爱学习等不及的可以抓紧体验一下:

本教程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用react和EOS的各知识点完成一个便签DApp的开发。

原文:

转载于:https://my.oschina.net/u/2275217/blog/1861571

你可能感兴趣的文章
Thrall’s Dream 第四届山东省省赛 (直接暴力DFS)
查看>>
IE8浏览器阻止下载文件
查看>>
Hadoop Streaming框架使用(二)
查看>>
【ros depthimage_to_laser kinect2】
查看>>
【数据结构】【平衡树】treap
查看>>
Jenkins持续部署-Windows环境持续部署探究1
查看>>
linux压缩和解压缩命令1
查看>>
PHP json_decode()解析失败 返回NULL 错误是4
查看>>
velocity模板引擎学习(1)
查看>>
[Leetcode]26. Remove Duplicates from Sorted Array
查看>>
Oracle 函数length和lengthb的区别
查看>>
网站升级2.0回滚机制
查看>>
centos6.9 网络配置,防火墙,复制虚拟机20180127
查看>>
h3c防火墙的设置过程
查看>>
KMP + 求最小循环节 --- HUST 1010 - The Minimum Length
查看>>
<从优秀到卓越>读书笔记
查看>>
Python3 序列解包
查看>>
C/C++ —语言判断数字或字符的函数总结
查看>>
ParentalControl-SteadyState
查看>>
设计模式 — 结构型模式 适配器模式
查看>>