Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
我们将介绍一个使用EOS智能合约构建hello World的例子。
+ b: p( q) x" u! g7 {! h一般环境设置通过上一篇文章已经说明,这方面的问题大家可以看本博客上一篇文章,本文引用了官方EOS在Git上的示例。
2 p$ Y6 E9 M4 ?- I; w& |运行nodeos' M8 h7 v$ m- ?& D0 K1 k( |
要通过Hello World日志进行验证,请使用contracts-console选项运行它。9 }, l7 X5 n2 u2 L! C
nodeos --contracts-console7 @2 i& {: |5 ^+ K
生成智能合约. f, O+ o1 S! d2 l
让我们尝试通过一个不同的新的终端上(除了nodeos的终端之外)访问EOS目录,创建一个名为Hello的文件夹。命令如下:
8 V6 t- k3 h* p$ W$ cd eos
9 W/ K4 m9 t, p7 s$ cd mkdir hello. r3 L+ O  O- x
$ cd hello4 v* b, V( O2 i: I5 |6 \
然后,创建hello.cpp文件并复制下面的示例。Hello合约继承了EOS.IO提供的合约,并具有打印出用户名Hello的功能。, Q2 H# ]1 ~& X/ m" o6 c* h
编译代码
+ k6 R& l2 T! R) i& T1 \. I对于第一个命令,让我们用WebAssembly编译代码。编译时,可能会提示警告(但我们可以忽略它)。对于第二个命令,让我们创建ABI。
: K) R. N7 t. U7 S9 X3 }: B, w5 t

9 M2 Z( e; |! v5 r0 T( P# Compile webaassembly# n" ]% Q# c: Y2 M2 w( s
eosiocpp -o hello.wast hello.cpp4 ?; B8 `' L3 R1 V$ ^/ {. x
# Creating abi! M1 Z" i5 m% k, j
eosiocpp -g hello.abi hello.cpp
! L! G' ?* t# b2 n帐户创建和合约发布
2 j7 x/ O  e; \  m& j) _' L9 k9 n" b创建一个名为Hello.Code的帐户。我们将进一步使用这个帐户发布Hello合约。  k+ A9 a  ]5 s% V2 F0 V
用cleos set contract ${account} ${path} -p ${permmition}命令发布合约。* d  t, w+ a* e, S5 P
$ cleos create account eosio hello.code EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT
" m) E# f' }1 c4 X7 pexecuted transaction: e6847fc85c7733dd70a9ff27c2cad98ea0b50fb6c80c2b0c7ea1bf64f9917916  200 bytes  225 us7 f$ I/ a6 |2 z2 _$ \/ e
#         eosio 4 B# K3 P0 Y4 B8 h2 ^
调用函数1 C  O; |1 C5 M+ {1 Z! l
让我们调用hello类的hi函数。它可以用下面的命令来完成:7 c" r9 F- p3 c. l
cleos push action ${contract_name} ${function} ${[argument]} -p ${permission}, q6 P: k" i2 s* O0 m3 a' M- P( `
在下面的示例中,hello.code合约中的用户帐户调用hi函数。0 @& B) i5 X: b
$ cleos push action hello.code hi '["user"]' -p user: N, M2 p  d3 t7 i: |1 [( S
executed transaction: d7932d1ee61ab6b0fed1f9e20d4a2e2607b029763aeaf1daea4ed718d2885797  104 bytes  500 us
/ B8 D1 i  C% P  u$ q#    hello.code 9 f% ^: F' t( s: J+ ]
结果
' l( |8 s* e) y* Z9 O: }& h在nodeos终端中执行交易的块中添加了以下输出。hello是名为hi函数的用户的名字。: a4 A5 `  R+ H# H
2703777ms thread-0 apply_context.cpp:28 print_debug ]
! X) M9 y/ w  _2 g9 k# u  i* X& y[(hello.code,hi)->hello.code]: CONSOLE OUTPUT BEGIN =====================0 I  B0 P( n: C
Hello, user
, j. \4 C0 \' j6 E; J! J8 v[(hello.code,hi)->hello.code]: CONSOLE OUTPUT END =====================
4 i1 R0 e* a: X9 |4 ^+ L授权运行请求8 s" l# k# }" `3 z5 j: c
替换为包含授权请求调用hi函数。& b! ~0 Y0 c- t* e' @

* P# O' V' y6 Y1 F+ l" \  l/ l3 n; q" D结果
: R7 x4 |1 K0 C" t$ D, u2 r9 w* T当我们试图用一个未经授权的帐户调用它时,会出现一个错误(如下)。使用授权帐户,它正常输出无错误。
1 e; f2 x' b, r" g  n% K% ~

9 V. [$ M8 O( @% g2 A( K+ @1 a* Z# Authorized) T+ }2 b2 K; i+ ~+ e: r! s
$ cleos push action hello.code hi '["tester"]' -p user
* @2 a9 J& M0 ]0 H7 [: }Error 3090004: missing required authority, S3 j( H; R% e; v: V! X4 W
# Unauthorized
! h/ h2 a, u; ?$ b$ cleos push action hello.code hi '["tester"]' -p tester; Q- U/ u0 v6 U" H
executed transaction: 16a34c27c7d162dc3940358197306df619911fb930cbddd6d208125a770886f4  104 bytes  243 us; P0 `3 D9 b' Q2 m6 m
#    hello.code & B; B. x$ O8 p& T/ R
可以在nodeos的块中按如下方式打印日志:
! f. [5 q' q. W7 m2525788ms thread-0   http_plugin.cpp:405           handle_exception     ] FC Exception encountered while processing chain.push_transaction
; S1 _- ]& r( Q4 e; D* ?2525788ms thread-0   http_plugin.cpp:406           handle_exception     ] Exception Details: 3090004 missing_auth_exception: missing required authority
5 C: U4 d1 e9 c: M# H( u6 o6 Tmissing authority of tester {"account":"tester"}+ }+ L" B& H  M
thread-0  apply_context.cpp:132 require_authorization {"_pending_console_output.str()":""}- p0 P9 p  ?6 L: G; n* I
thread-0  apply_context.cpp:62 exec_one
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

蓝天天使2017 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    10