Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
我们将介绍一个使用EOS智能合约构建hello World的例子。9 \" u' b; i0 {) c: ^2 ~' {
一般环境设置通过上一篇文章已经说明,这方面的问题大家可以看本博客上一篇文章,本文引用了官方EOS在Git上的示例。
( }* ]) ^( |( X: h运行nodeos
  v- h3 D+ l8 R' K5 u1 k7 I5 O5 q要通过Hello World日志进行验证,请使用contracts-console选项运行它。
( r+ O2 j6 s2 Y* `" Hnodeos --contracts-console
" A2 q6 m- F- ~) E生成智能合约* b# L$ A% t+ \  h$ G0 W
让我们尝试通过一个不同的新的终端上(除了nodeos的终端之外)访问EOS目录,创建一个名为Hello的文件夹。命令如下:& u( w4 l: w* `
$ cd eos/ ^1 e- |, S/ h$ e" s5 B$ o6 Y
$ cd mkdir hello0 Q) w3 ^; i) {0 F
$ cd hello3 F% K9 ^4 G9 v$ b1 j
然后,创建hello.cpp文件并复制下面的示例。Hello合约继承了EOS.IO提供的合约,并具有打印出用户名Hello的功能。
3 \) C7 b6 w2 y编译代码
1 K6 g/ X; v3 S7 V# m! f对于第一个命令,让我们用WebAssembly编译代码。编译时,可能会提示警告(但我们可以忽略它)。对于第二个命令,让我们创建ABI。3 |4 y4 a) b" Y0 x/ b5 u
9 t/ Q" G1 e/ m1 W, y. ]* X
# Compile webaassembly
  o* s: U& O$ Y, M9 y/ u* F6 M* teosiocpp -o hello.wast hello.cpp' F9 f, u" i4 ?4 A0 X4 R
# Creating abi; L: a8 ]# x! L' w! t2 ^& H
eosiocpp -g hello.abi hello.cpp( E1 h9 _! z4 t* c
帐户创建和合约发布4 J1 i: p6 V4 A* D9 ^4 H
创建一个名为Hello.Code的帐户。我们将进一步使用这个帐户发布Hello合约。
% j. v( Z1 }$ x  ^: K3 ~+ X/ Z用cleos set contract ${account} ${path} -p ${permmition}命令发布合约。7 k9 n  D4 u' _* I
$ cleos create account eosio hello.code EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT
6 H8 r0 [$ v  P! ~4 {, N9 t; bexecuted transaction: e6847fc85c7733dd70a9ff27c2cad98ea0b50fb6c80c2b0c7ea1bf64f9917916  200 bytes  225 us) q9 a, r0 Y2 ~  w, r, p% O
#         eosio
6 Y" d5 R7 \+ }调用函数5 r2 q$ Q% L* D; s
让我们调用hello类的hi函数。它可以用下面的命令来完成:
& M3 {' y3 R  D0 |6 rcleos push action ${contract_name} ${function} ${[argument]} -p ${permission}
; T- r" {- C9 I$ o$ y: y" ~在下面的示例中,hello.code合约中的用户帐户调用hi函数。# c* @4 Y4 X8 X. G$ {/ k( }
$ cleos push action hello.code hi '["user"]' -p user
& x7 f( B* R7 m8 p' Jexecuted transaction: d7932d1ee61ab6b0fed1f9e20d4a2e2607b029763aeaf1daea4ed718d2885797  104 bytes  500 us
2 D" H/ X: Y5 _) U) g#    hello.code
; X1 s$ e  O2 h; i) V% {8 S结果
& C. {, C' j9 `( Q, [1 c% h  g在nodeos终端中执行交易的块中添加了以下输出。hello是名为hi函数的用户的名字。- {8 R1 q5 g) N( @4 e) N
2703777ms thread-0 apply_context.cpp:28 print_debug ]
! Y  [. y+ w5 ~$ t5 C[(hello.code,hi)->hello.code]: CONSOLE OUTPUT BEGIN =====================
3 ~( C( U( _# k( z- GHello, user  d. O6 U1 V! I8 @( e
[(hello.code,hi)->hello.code]: CONSOLE OUTPUT END =====================
0 M( Q& B' A' v授权运行请求' x# D4 Q9 }% P+ k9 R  U
替换为包含授权请求调用hi函数。
8 ]" M/ ~1 {4 |! u' R3 ~; `

2 d  o: v2 p) e4 i& ?5 ]结果
9 ~! F8 g4 k3 o% P! w1 c当我们试图用一个未经授权的帐户调用它时,会出现一个错误(如下)。使用授权帐户,它正常输出无错误。
: C5 {  `; X7 V( Y# S: U
! C' e4 r3 N6 }- R" v- E0 G
# Authorized
! _; V, \$ c9 _+ _$ cleos push action hello.code hi '["tester"]' -p user9 S# V: r0 n( q0 J
Error 3090004: missing required authority% ]# U3 N% l5 w. `
# Unauthorized" e2 ?2 g# s2 M- I
$ cleos push action hello.code hi '["tester"]' -p tester5 `% u6 N5 z$ O4 g! }! Y
executed transaction: 16a34c27c7d162dc3940358197306df619911fb930cbddd6d208125a770886f4  104 bytes  243 us0 a" \5 d2 E! W
#    hello.code
4 _7 K; i4 @$ v# b' D可以在nodeos的块中按如下方式打印日志:
$ o, M- b* d# K" [8 N4 k" P9 q2525788ms thread-0   http_plugin.cpp:405           handle_exception     ] FC Exception encountered while processing chain.push_transaction
) i  \9 B& A* U$ P9 m+ _2525788ms thread-0   http_plugin.cpp:406           handle_exception     ] Exception Details: 3090004 missing_auth_exception: missing required authority
# w6 J" P+ P7 t6 |/ A- R' tmissing authority of tester {"account":"tester"}
, b' T7 t- S: p7 pthread-0  apply_context.cpp:132 require_authorization {"_pending_console_output.str()":""}
9 ?* _- f7 E* n* Y; j+ Y/ \thread-0  apply_context.cpp:62 exec_one
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

蓝天天使2017 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    10