Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
我们将介绍一个使用EOS智能合约构建hello World的例子。
4 i. c9 Z% Y( p0 y$ U2 l一般环境设置通过上一篇文章已经说明,这方面的问题大家可以看本博客上一篇文章,本文引用了官方EOS在Git上的示例。
1 `1 l' Q* b) f& Q7 P运行nodeos) V& v" u. D1 M( W. |2 q
要通过Hello World日志进行验证,请使用contracts-console选项运行它。  e2 a* `% b6 @! c) t
nodeos --contracts-console& p6 o; ^0 U% D' p7 J8 y
生成智能合约+ J! u9 J. }& ?2 w: D- @' k/ b: n
让我们尝试通过一个不同的新的终端上(除了nodeos的终端之外)访问EOS目录,创建一个名为Hello的文件夹。命令如下:9 m* K7 H% u. M6 n
$ cd eos
7 ~0 Y, {2 H" v0 q7 w+ d1 {$ cd mkdir hello
) G: }9 n0 [1 `9 U/ Q$ cd hello) z1 ]; F' y' T. q" b
然后,创建hello.cpp文件并复制下面的示例。Hello合约继承了EOS.IO提供的合约,并具有打印出用户名Hello的功能。
8 E- }  F( z7 c& E- k6 |* r2 M9 m编译代码
; X* ?. e, H7 O. g) o$ w$ h" l对于第一个命令,让我们用WebAssembly编译代码。编译时,可能会提示警告(但我们可以忽略它)。对于第二个命令,让我们创建ABI。1 n! H" B  n) P0 K1 q  i0 z

  z/ X2 ~  q0 r4 L+ {# Compile webaassembly
/ V! Z8 ~, v' c; t* A) q0 S; B* aeosiocpp -o hello.wast hello.cpp1 Z- k3 O, ]# |' C+ ?
# Creating abi0 \' ^$ e1 ]. x  Q  F0 P' v6 h% R
eosiocpp -g hello.abi hello.cpp( @8 w0 G1 w8 b
帐户创建和合约发布
1 S0 r( G9 J+ L' Y( ]创建一个名为Hello.Code的帐户。我们将进一步使用这个帐户发布Hello合约。
5 D3 k  c, n% e. D- r. g用cleos set contract ${account} ${path} -p ${permmition}命令发布合约。
: U% a! J) a2 D) P! E  I7 z# @* k$ cleos create account eosio hello.code EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT
$ O# J$ v; n3 B3 Q& Mexecuted transaction: e6847fc85c7733dd70a9ff27c2cad98ea0b50fb6c80c2b0c7ea1bf64f9917916  200 bytes  225 us# Y8 x) {8 g8 l
#         eosio
3 z! G7 W( X' H/ b8 b) A调用函数
6 h4 ?' L% R2 I6 B3 s* Y让我们调用hello类的hi函数。它可以用下面的命令来完成:
9 }# N, Q3 r' C0 @/ m; v5 _6 G; Zcleos push action ${contract_name} ${function} ${[argument]} -p ${permission}
8 X4 x7 ?) Z+ R; A' q! L- G在下面的示例中,hello.code合约中的用户帐户调用hi函数。  V0 I9 l. {$ A  f; N5 ?
$ cleos push action hello.code hi '["user"]' -p user7 n" g# t8 Q# U& U* K( G/ B. B4 U
executed transaction: d7932d1ee61ab6b0fed1f9e20d4a2e2607b029763aeaf1daea4ed718d2885797  104 bytes  500 us7 P8 P6 G0 X- a8 r/ L& `; B/ @
#    hello.code
. q. D8 J5 H& ^7 U. L4 R1 N2 `" `# R结果+ A% C7 `+ \) k$ I* k* C: `* r7 W
在nodeos终端中执行交易的块中添加了以下输出。hello是名为hi函数的用户的名字。& s' ^/ _% A$ R0 Q: O$ g+ ~4 j; A) o
2703777ms thread-0 apply_context.cpp:28 print_debug ]
' O) _: u6 ]* i6 V8 e+ J[(hello.code,hi)->hello.code]: CONSOLE OUTPUT BEGIN =====================# k' d! O6 y9 [# `7 I
Hello, user' c$ C! l' n: R* P$ I  _( H
[(hello.code,hi)->hello.code]: CONSOLE OUTPUT END =====================- q1 y9 k/ @' ?4 O& ]2 P
授权运行请求, n9 a. R6 O* z( M
替换为包含授权请求调用hi函数。
1 a  P: f5 S6 M: d& e+ @

8 i7 ?8 j& k! k4 ^8 s! A结果
4 T1 i" F5 J4 o; r3 Q8 _9 y当我们试图用一个未经授权的帐户调用它时,会出现一个错误(如下)。使用授权帐户,它正常输出无错误。
! Z# _' c+ l. O0 r) X: V
$ p  l2 P" V5 g# S& r6 Q$ }6 B2 ?
# Authorized6 A( {3 x1 `2 N9 M
$ cleos push action hello.code hi '["tester"]' -p user
. g* r1 I9 O3 Y. ]+ U/ c  yError 3090004: missing required authority
1 a: L# B2 o' T2 E' u# Unauthorized
; M# ^1 F* Y7 T  m! {- p$ cleos push action hello.code hi '["tester"]' -p tester, D# A0 U6 h8 ^8 h3 b# P  R$ K  n
executed transaction: 16a34c27c7d162dc3940358197306df619911fb930cbddd6d208125a770886f4  104 bytes  243 us
1 |/ [  y, W4 }, D#    hello.code : e7 q8 q; S5 n6 R) p
可以在nodeos的块中按如下方式打印日志:
' j1 c  ]/ `) A. y  a( A2525788ms thread-0   http_plugin.cpp:405           handle_exception     ] FC Exception encountered while processing chain.push_transaction* T6 F; i& z. f% p& Y
2525788ms thread-0   http_plugin.cpp:406           handle_exception     ] Exception Details: 3090004 missing_auth_exception: missing required authority
, l3 E( I6 I& ^2 Y, q6 |missing authority of tester {"account":"tester"}9 n! E& c6 w4 U( k  x
thread-0  apply_context.cpp:132 require_authorization {"_pending_console_output.str()":""}; x# c  W. R6 p) M
thread-0  apply_context.cpp:62 exec_one
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

蓝天天使2017 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    10