Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
我们将介绍一个使用EOS智能合约构建hello World的例子。; B' y8 X$ A8 L; c
一般环境设置通过上一篇文章已经说明,这方面的问题大家可以看本博客上一篇文章,本文引用了官方EOS在Git上的示例。- o- }3 R) q( ?) O6 i
运行nodeos0 o% f+ E4 L! @7 p2 f
要通过Hello World日志进行验证,请使用contracts-console选项运行它。
9 x( ?- t; C3 p% ^1 H" Anodeos --contracts-console; _6 D5 T& \# F: e
生成智能合约. N0 ~; `% o' h! [3 i' @9 W/ H
让我们尝试通过一个不同的新的终端上(除了nodeos的终端之外)访问EOS目录,创建一个名为Hello的文件夹。命令如下:  M6 F! r7 }) Y0 h2 }7 B. s, h8 g
$ cd eos
- S7 y" l; F  _; b$ cd mkdir hello
, L* C% {. w( ?( I( I0 }* m- {$ cd hello' ]9 n1 l0 V* r4 a
然后,创建hello.cpp文件并复制下面的示例。Hello合约继承了EOS.IO提供的合约,并具有打印出用户名Hello的功能。& i2 S3 p* a; n  ~8 }* k$ B
编译代码
2 G% N* c6 D+ \: f/ N! X) V6 f9 `对于第一个命令,让我们用WebAssembly编译代码。编译时,可能会提示警告(但我们可以忽略它)。对于第二个命令,让我们创建ABI。3 I  j, H, L0 |: E) U& b+ ]
4 y/ o6 N+ [( l6 c8 z- y6 d$ B, B
# Compile webaassembly7 y/ X$ H7 b' T- Z. z
eosiocpp -o hello.wast hello.cpp, c% C" E3 ]4 @9 j' F
# Creating abi/ R* ^0 q; p# e3 j
eosiocpp -g hello.abi hello.cpp. ?& o2 @5 g' |$ i1 R$ Z
帐户创建和合约发布( A9 [6 C! ?; e! g& X
创建一个名为Hello.Code的帐户。我们将进一步使用这个帐户发布Hello合约。
8 O3 k9 r% j1 t# J用cleos set contract ${account} ${path} -p ${permmition}命令发布合约。
  r0 j( H" F, P1 L' i$ j$ cleos create account eosio hello.code EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT2 S* }$ |: s. h/ ^7 i, Q( t9 }! ~
executed transaction: e6847fc85c7733dd70a9ff27c2cad98ea0b50fb6c80c2b0c7ea1bf64f9917916  200 bytes  225 us2 z2 b2 T2 w6 W
#         eosio
% y3 Q5 K& d! T  b* W3 _, B调用函数1 ~* ?7 f/ n' u* p  p$ \5 T
让我们调用hello类的hi函数。它可以用下面的命令来完成:$ |: p& c$ Q/ V7 A
cleos push action ${contract_name} ${function} ${[argument]} -p ${permission}
: R  T6 {( ^/ X- C6 C- E/ {在下面的示例中,hello.code合约中的用户帐户调用hi函数。: M5 d7 i, _1 w/ E
$ cleos push action hello.code hi '["user"]' -p user3 |* p/ y- q, I$ [0 j
executed transaction: d7932d1ee61ab6b0fed1f9e20d4a2e2607b029763aeaf1daea4ed718d2885797  104 bytes  500 us0 ?' R& M( u+ J6 G! D3 h
#    hello.code
0 M- m  ?- T% w  |2 ?& b结果: r5 Q% o% T" b7 i" x0 j/ W2 @: v
在nodeos终端中执行交易的块中添加了以下输出。hello是名为hi函数的用户的名字。: {+ C# V$ g; y6 H. u
2703777ms thread-0 apply_context.cpp:28 print_debug ]2 Z3 H1 S( Y2 P* p* p- q$ f4 \. @
[(hello.code,hi)->hello.code]: CONSOLE OUTPUT BEGIN =====================' P; }7 H& e! q( ]' n: B
Hello, user
# A) C; M7 d, r& F- ?% b[(hello.code,hi)->hello.code]: CONSOLE OUTPUT END =====================; y& S  }6 J5 |/ C7 c
授权运行请求
; }: G0 B# h: u$ j/ `4 @% q替换为包含授权请求调用hi函数。; p' v: r! ]! y4 ^
/ L. @2 Z+ W; q* m' M! B
结果7 q$ q; j# S( }8 z+ o, Y3 I
当我们试图用一个未经授权的帐户调用它时,会出现一个错误(如下)。使用授权帐户,它正常输出无错误。; o% G% T% z* q8 E* u$ ?
  T, C. {3 m6 a8 e
# Authorized
. C, O$ X5 b. [; c1 z. M9 x$ cleos push action hello.code hi '["tester"]' -p user. z3 ?1 x, e5 s' J! D: s
Error 3090004: missing required authority
8 ?8 D6 |2 M; t( ^# Unauthorized* `+ [) ]: A/ P2 y
$ cleos push action hello.code hi '["tester"]' -p tester9 w6 Q/ u6 \- p! q/ N: N# ?
executed transaction: 16a34c27c7d162dc3940358197306df619911fb930cbddd6d208125a770886f4  104 bytes  243 us
2 e! j! U" ]# D% f! z9 \: a#    hello.code 6 n$ H) v" L- O
可以在nodeos的块中按如下方式打印日志:" V5 E' U8 r6 ~
2525788ms thread-0   http_plugin.cpp:405           handle_exception     ] FC Exception encountered while processing chain.push_transaction6 q- W0 j3 k8 g3 _- F( l6 n) W3 T1 J+ S: E
2525788ms thread-0   http_plugin.cpp:406           handle_exception     ] Exception Details: 3090004 missing_auth_exception: missing required authority
9 r- j( a4 k" c  R# kmissing authority of tester {"account":"tester"}
( u! L; L- l" s% @thread-0  apply_context.cpp:132 require_authorization {"_pending_console_output.str()":""}, F- Q+ A6 a! k- O9 D( p
thread-0  apply_context.cpp:62 exec_one
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

蓝天天使2017 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    10