EOS柚子区块链平台构建HelloWorld智能合约
蓝天天使2017
发表于 2022-11-12 13:43:43
143
0
0
一般环境设置通过上一篇文章已经说明,这方面的问题大家可以看本博客上一篇文章,本文引用了官方EOS在Git上的示例。
运行nodeos% K- D) ^7 M" O
要通过Hello World日志进行验证,请使用contracts-console选项运行它。) ^0 I2 p8 @, G" R/ V
nodeos --contracts-console5 v3 P0 u# h0 W& Y) u% q/ \
生成智能合约! A7 M5 ^5 B( v6 V3 ]
让我们尝试通过一个不同的新的终端上(除了nodeos的终端之外)访问EOS目录,创建一个名为Hello的文件夹。命令如下:
$ cd eos" W0 j! @9 D$ x6 B! v
$ cd mkdir hello
$ cd hello
然后,创建hello.cpp文件并复制下面的示例。Hello合约继承了EOS.IO提供的合约,并具有打印出用户名Hello的功能。6 n/ h8 T+ r. L; h: H
编译代码# G& G7 U! E; R" f9 g! Q
对于第一个命令,让我们用WebAssembly编译代码。编译时,可能会提示警告(但我们可以忽略它)。对于第二个命令,让我们创建ABI。
6 P# y( m% y" E' V' p+ B5 l$ C9 x; {) w
# Compile webaassembly0 y* [) I5 Y' H) u
eosiocpp -o hello.wast hello.cpp
# Creating abi [# b3 {" q' `2 @- w0 l
eosiocpp -g hello.abi hello.cpp5 T+ i- A- v- B$ y1 l! T g$ ^" z
帐户创建和合约发布
创建一个名为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& N# X- F. n4 o) E l7 W Q
# eosio $ }3 z4 m/ u6 P; Q% ]3 a9 A b* ` w
调用函数
让我们调用hello类的hi函数。它可以用下面的命令来完成:' [: l0 X% Z3 e' p2 @
cleos push action ${contract_name} ${function} ${[argument]} -p ${permission}: ~7 x4 B% B2 v# T* z$ _8 F
在下面的示例中,hello.code合约中的用户帐户调用hi函数。
$ cleos push action hello.code hi '["user"]' -p user* p) W! Y4 Y+ a! L* y2 j6 P
executed transaction: d7932d1ee61ab6b0fed1f9e20d4a2e2607b029763aeaf1daea4ed718d2885797 104 bytes 500 us2 W6 s- ^7 s( ?3 o* {
# hello.code * o7 C g7 R( w" z
结果- D% T/ u" M- j% a5 B2 I
在nodeos终端中执行交易的块中添加了以下输出。hello是名为hi函数的用户的名字。
2703777ms thread-0 apply_context.cpp:28 print_debug ] `+ i6 j w6 I% \( b& e
[(hello.code,hi)->hello.code]: CONSOLE OUTPUT BEGIN =====================$ |( k, e6 t% i3 P
Hello, user o' X1 O# ?) @5 I
[(hello.code,hi)->hello.code]: CONSOLE OUTPUT END =====================
授权运行请求
替换为包含授权请求调用hi函数。
4 P) }2 Y& E; ^& W
结果
当我们试图用一个未经授权的帐户调用它时,会出现一个错误(如下)。使用授权帐户,它正常输出无错误。. \( ~2 T; w7 |2 f
3 D" I0 A) _% N- w- ?9 O# W) p
# Authorized
$ cleos push action hello.code hi '["tester"]' -p user
Error 3090004: missing required authority! Y6 C, h8 F! c
# Unauthorized
$ cleos push action hello.code hi '["tester"]' -p tester- m' s, {" H. h5 V/ T* s" }5 f
executed transaction: 16a34c27c7d162dc3940358197306df619911fb930cbddd6d208125a770886f4 104 bytes 243 us# V$ n2 }0 N" Z3 i3 C7 r
# hello.code ' ~6 @$ ^# w; I. c
可以在nodeos的块中按如下方式打印日志:
2525788ms thread-0 http_plugin.cpp:405 handle_exception ] FC Exception encountered while processing chain.push_transaction* o9 l# ]+ W, H( f' G% T8 G
2525788ms thread-0 http_plugin.cpp:406 handle_exception ] Exception Details: 3090004 missing_auth_exception: missing required authority
missing authority of tester {"account":"tester"}+ S0 ~/ P6 n* M8 X# @
thread-0 apply_context.cpp:132 require_authorization {"_pending_console_output.str()":""}
thread-0 apply_context.cpp:62 exec_one
成为第一个吐槽的人