EOS柚子区块链平台构建HelloWorld智能合约

hubwiz · · 1223 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

我们将介绍一个使用EOS智能合约构建`hello World`的例子。 一般环境设置通过上一篇文章已经说明,这方面的问题大家可以看本博客上一篇文章,本文引用了[官方EOS在Git上的示例](https://github.com/eosio/eos/wiki/Tutorial-Hello-World-Contract)。 ### 运行nodeos 要通过Hello World日志进行验证,请使用`contracts-console`选项运行它。 ``` nodeos --contracts-console ``` ### 生成智能合约 让我们尝试通过一个不同的新的终端上(除了`nodeos`的终端之外)访问EOS目录,创建一个名为Hello的文件夹。命令如下: ``` $ cd eos $ cd mkdir hello $ cd hello ``` 然后,创建`hello.cpp`文件并复制下面的示例。Hello合约继承了EOS.IO提供的合约,并具有打印出用户名`Hello`的功能。 ### 编译代码 - 对于第一个命令,让我们用`WebAssembly`编译代码。编译时,可能会提示警告(但我们可以忽略它)。 - 对于第二个命令,让我们创建ABI。 ``` # Compile webaassembly eosiocpp -o hello.wast hello.cpp # Creating abi eosiocpp -g hello.abi hello.cpp ``` ### 帐户创建和合约发布 创建一个名为`Hello.Code`的帐户。我们将进一步使用这个帐户发布Hello合约。 用`cleos set contract ${account} ${path} -p ${permmition}`命令发布合约。 ``` $ cleos create account eosio hello.code EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT executed 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.code Reading 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 user executed 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 user Error 3090004: missing required authority # Unauthorized $ cleos push action hello.code hi '["tester"]' -p tester executed 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_transaction 2525788ms thread-0 http_plugin.cpp:406 handle_exception ] Exception Details: 3090004 missing_auth_exception: missing required authority missing 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教程](http://xc.hubwiz.com/course/5b52c0a2c02e6b6a59171ded?affid=723studygolang) 本教程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用react和EOS的各知识点完成一个便签DApp的开发。 原文:[http://blog.hubwiz.com/2018/07/23/EOS-SmartContracts-hello/](http://blog.hubwiz.com/2018/07/23/EOS-SmartContracts-hello/)

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1223 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传