Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
我们将介绍一个使用EOS智能合约构建hello World的例子。
" C% Z6 o8 [. k; h1 I一般环境设置通过上一篇文章已经说明,这方面的问题大家可以看本博客上一篇文章,本文引用了官方EOS在Git上的示例。
6 x" j( ?) |4 d8 i" l运行nodeos
) H1 o! O, W5 a8 |# ~要通过Hello World日志进行验证,请使用contracts-console选项运行它。" @, K7 y% d9 o/ l4 s! C& q
nodeos --contracts-console
! j, K% D/ T9 r; @' ]& o) c: o生成智能合约0 K4 e$ o3 L, h0 ?  y/ Q: b
让我们尝试通过一个不同的新的终端上(除了nodeos的终端之外)访问EOS目录,创建一个名为Hello的文件夹。命令如下:3 i* z& c9 h( Q
$ cd eos
5 u( u0 m8 T5 g& [$ cd mkdir hello
* G8 T( e5 B5 C. R$ cd hello
( J4 d$ H$ X& M+ k然后,创建hello.cpp文件并复制下面的示例。Hello合约继承了EOS.IO提供的合约,并具有打印出用户名Hello的功能。
8 _; R( W% o% H0 [3 U% s% P: i9 W' D编译代码/ R& O6 P: W1 Q* Q7 S
对于第一个命令,让我们用WebAssembly编译代码。编译时,可能会提示警告(但我们可以忽略它)。对于第二个命令,让我们创建ABI。! s* W5 e) {3 n
# K4 _' }, X% U/ f9 Q* E
# Compile webaassembly
; H  ~( q1 d$ T( Z& Seosiocpp -o hello.wast hello.cpp& w" ^) M" U9 Q% F' |; d
# Creating abi3 Q! L& ?( v, r% [7 x
eosiocpp -g hello.abi hello.cpp
; M8 W; Y; \+ w; b帐户创建和合约发布$ M3 i, k, b6 ^
创建一个名为Hello.Code的帐户。我们将进一步使用这个帐户发布Hello合约。2 O5 t, g8 |2 ~+ W
用cleos set contract ${account} ${path} -p ${permmition}命令发布合约。
7 A! H& R4 Q8 R$ cleos create account eosio hello.code EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT
' S4 t3 @  \4 i5 Zexecuted transaction: e6847fc85c7733dd70a9ff27c2cad98ea0b50fb6c80c2b0c7ea1bf64f9917916  200 bytes  225 us* M: ?4 e/ a2 z* F9 s+ _
#         eosio
5 _& X: t2 C+ W调用函数0 Q( m8 P% d( @" M
让我们调用hello类的hi函数。它可以用下面的命令来完成:3 H9 S/ g4 `8 m( H4 s( o
cleos push action ${contract_name} ${function} ${[argument]} -p ${permission}
9 m; }7 a8 m: Z. L在下面的示例中,hello.code合约中的用户帐户调用hi函数。/ N- {6 R+ Z! }7 O* L# X$ Q$ e! X: \
$ cleos push action hello.code hi '["user"]' -p user+ o" f) E/ I# S- p  W& w2 Z
executed transaction: d7932d1ee61ab6b0fed1f9e20d4a2e2607b029763aeaf1daea4ed718d2885797  104 bytes  500 us
% h5 V3 V/ _0 C#    hello.code
' \) I. P& |. |; `  \9 K结果: G( _; g* Q1 _
在nodeos终端中执行交易的块中添加了以下输出。hello是名为hi函数的用户的名字。! L; I; B" `# o! q* V6 H
2703777ms thread-0 apply_context.cpp:28 print_debug ]
% Y, r% P& D4 ^+ A0 ]6 p0 f8 Q: o[(hello.code,hi)->hello.code]: CONSOLE OUTPUT BEGIN =====================
1 D, _' o& T. bHello, user; ]. ?. U3 j9 g, ^
[(hello.code,hi)->hello.code]: CONSOLE OUTPUT END =====================
) e* Z& g$ U1 Q5 _9 U/ O* @授权运行请求. f5 X2 E* k  Q2 Y8 [
替换为包含授权请求调用hi函数。
1 L4 O3 @7 g6 U" n

5 |: h3 O8 C9 ^2 {0 z结果) }& n% p0 B2 i: K2 d2 _) \
当我们试图用一个未经授权的帐户调用它时,会出现一个错误(如下)。使用授权帐户,它正常输出无错误。3 ~. u* K1 m$ g+ j& S9 k  I
) K- x- O, c5 h
# Authorized
8 v0 ]3 U% S8 T* }0 _$ cleos push action hello.code hi '["tester"]' -p user
( k5 c9 J( @/ x0 P, _9 ]4 F; PError 3090004: missing required authority
6 }  F$ ~7 I# H' D" i2 x# Unauthorized
  s5 S$ |  F3 O+ Z) a$ cleos push action hello.code hi '["tester"]' -p tester
  q% a( J: b8 qexecuted transaction: 16a34c27c7d162dc3940358197306df619911fb930cbddd6d208125a770886f4  104 bytes  243 us7 [7 m/ A) c7 ^" `
#    hello.code
7 Z3 p3 n# N2 j* R可以在nodeos的块中按如下方式打印日志:
/ @# G1 |% C, ~/ ~2525788ms thread-0   http_plugin.cpp:405           handle_exception     ] FC Exception encountered while processing chain.push_transaction0 F9 v. X' v1 e
2525788ms thread-0   http_plugin.cpp:406           handle_exception     ] Exception Details: 3090004 missing_auth_exception: missing required authority9 v* b3 e0 w8 R! u5 r; H
missing authority of tester {"account":"tester"}+ W8 A+ H% O4 e8 n$ V. i
thread-0  apply_context.cpp:132 require_authorization {"_pending_console_output.str()":""}
: @  J. [" [9 Q1 L: N' mthread-0  apply_context.cpp:62 exec_one
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

蓝天天使2017 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    10