Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
我们将介绍一个使用EOS智能合约构建hello World的例子。
7 U, Q; x' z" B2 _4 O1 T一般环境设置通过上一篇文章已经说明,这方面的问题大家可以看本博客上一篇文章,本文引用了官方EOS在Git上的示例。" Q+ s" J, E9 W3 O, z% m
运行nodeos
+ q5 V3 \" \8 O& Q, L  K# e3 x要通过Hello World日志进行验证,请使用contracts-console选项运行它。
+ J; ?+ ^. Q3 enodeos --contracts-console
* J  A2 R% ~* M9 |* K: P生成智能合约. w" K% }" }  Y/ h
让我们尝试通过一个不同的新的终端上(除了nodeos的终端之外)访问EOS目录,创建一个名为Hello的文件夹。命令如下:2 P  h3 q' f% }( D
$ cd eos3 E) I% t- {7 I  r4 n: V8 h
$ cd mkdir hello
! F8 S1 A% B1 o. ]$ cd hello
$ D6 y2 U) {" a" B& u9 ]3 }然后,创建hello.cpp文件并复制下面的示例。Hello合约继承了EOS.IO提供的合约,并具有打印出用户名Hello的功能。
6 B, V: _; X( W( U! H, G. X编译代码! Y8 A: ?) l9 k  {; X" u4 u
对于第一个命令,让我们用WebAssembly编译代码。编译时,可能会提示警告(但我们可以忽略它)。对于第二个命令,让我们创建ABI。5 ?$ B: _: f$ S% f

, a6 O; E, p4 a$ g3 |* ~# Compile webaassembly
2 N, W6 ^1 p- X8 D' j9 _' Y* Eeosiocpp -o hello.wast hello.cpp$ }. f, P$ }5 \$ P. J; B; @6 f  ~5 c. b
# Creating abi
, o+ o1 P, _# G* l1 ieosiocpp -g hello.abi hello.cpp
8 }& @' X& U- b7 q  E5 M6 e% r帐户创建和合约发布+ o) i1 \5 o( O, S; ~) }' E) w- x
创建一个名为Hello.Code的帐户。我们将进一步使用这个帐户发布Hello合约。2 ~4 \( J; {8 D+ r, X" k0 m
用cleos set contract ${account} ${path} -p ${permmition}命令发布合约。$ Q+ l$ {  t5 I( P* S+ b; x" J
$ cleos create account eosio hello.code EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT, h* {. H0 ^6 A
executed transaction: e6847fc85c7733dd70a9ff27c2cad98ea0b50fb6c80c2b0c7ea1bf64f9917916  200 bytes  225 us
5 [8 Z7 a6 v* L" k$ Y/ o5 i#         eosio + R/ R9 R* ~) q) Q+ ^' k8 M- L
调用函数
7 `* C1 |! V8 R: o9 G6 Q7 z0 J2 h让我们调用hello类的hi函数。它可以用下面的命令来完成:! R1 n% o" o1 v- q+ Q
cleos push action ${contract_name} ${function} ${[argument]} -p ${permission}
. i, Y1 Y8 N+ b" A) D在下面的示例中,hello.code合约中的用户帐户调用hi函数。
, ]- z7 h9 W& n. w' T$ cleos push action hello.code hi '["user"]' -p user
1 m! }# a7 Z  G+ ^7 mexecuted transaction: d7932d1ee61ab6b0fed1f9e20d4a2e2607b029763aeaf1daea4ed718d2885797  104 bytes  500 us
- B; ^" [( ?# Z+ O; Q#    hello.code * o# O' R1 g- f' ?4 }- O# N$ Y8 I
结果; z% C5 V9 B, M+ C" ]/ [( V
在nodeos终端中执行交易的块中添加了以下输出。hello是名为hi函数的用户的名字。; F  _" N$ T: j5 o+ v6 J9 U9 ]
2703777ms thread-0 apply_context.cpp:28 print_debug ]. z/ O) a( ]# c& L0 \1 W( a& k
[(hello.code,hi)->hello.code]: CONSOLE OUTPUT BEGIN =====================$ G* h3 D& |6 o' c" W
Hello, user
1 N  I  b1 X3 B- H[(hello.code,hi)->hello.code]: CONSOLE OUTPUT END =====================
0 b6 y4 q; V" r) Q2 Q  Y7 J授权运行请求5 z" j3 I1 y& W! a8 Z+ G. h
替换为包含授权请求调用hi函数。
% ^# Y" ]$ ]7 X( t2 P6 `+ }

+ l9 ~8 m& U: b: R& |# Y+ A结果
4 h. f. e% g& @9 v6 W当我们试图用一个未经授权的帐户调用它时,会出现一个错误(如下)。使用授权帐户,它正常输出无错误。! f) S& q( Z6 L" i% P& B  K) g
% C9 O0 j2 P% E: H, D# ?) n- b
# Authorized
: i# v8 N8 {! o6 l/ L: Z- m$ cleos push action hello.code hi '["tester"]' -p user
! E0 f  G. _3 ?Error 3090004: missing required authority' F% C2 X# C' J8 o- X& L
# Unauthorized
+ x) l3 m7 L: Q3 F$ cleos push action hello.code hi '["tester"]' -p tester
! V# e7 I) \; u! @& Wexecuted transaction: 16a34c27c7d162dc3940358197306df619911fb930cbddd6d208125a770886f4  104 bytes  243 us
: Q* M, ]0 \0 a$ G#    hello.code
3 v# H+ {! q8 S" S& J可以在nodeos的块中按如下方式打印日志:! X1 O) \! t- R# }
2525788ms thread-0   http_plugin.cpp:405           handle_exception     ] FC Exception encountered while processing chain.push_transaction
  r  o" a; H% J" v+ o2525788ms thread-0   http_plugin.cpp:406           handle_exception     ] Exception Details: 3090004 missing_auth_exception: missing required authority
+ x. P/ b* s. B# y1 I! B* zmissing authority of tester {"account":"tester"}) P8 Y( M2 ]' r7 L! k& I( q
thread-0  apply_context.cpp:132 require_authorization {"_pending_console_output.str()":""}" w% b( _$ ]! m9 O* U' J! V
thread-0  apply_context.cpp:62 exec_one
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

蓝天天使2017 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    10