Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
我们将介绍一个使用EOS智能合约构建hello World的例子。
% i( s$ B- `  d( }  I. m" O一般环境设置通过上一篇文章已经说明,这方面的问题大家可以看本博客上一篇文章,本文引用了官方EOS在Git上的示例。, F* k; Z+ J: h: C
运行nodeos9 Z. e) ?4 y1 j  C6 z
要通过Hello World日志进行验证,请使用contracts-console选项运行它。
% ^& q& O; w+ w' u1 lnodeos --contracts-console
, g) K: W2 G* K2 x生成智能合约, z9 E' E& N6 F- G# D& P
让我们尝试通过一个不同的新的终端上(除了nodeos的终端之外)访问EOS目录,创建一个名为Hello的文件夹。命令如下:3 r7 r, }2 F  _9 P6 W3 r" ^6 i
$ cd eos
+ @* }' `7 C. R: d$ cd mkdir hello
) e) G8 L! X* @) K! e" \- r! f$ cd hello: g$ d! q3 s0 i" Y
然后,创建hello.cpp文件并复制下面的示例。Hello合约继承了EOS.IO提供的合约,并具有打印出用户名Hello的功能。
: w* N  [5 q0 @编译代码2 _# o. [/ D! I* R
对于第一个命令,让我们用WebAssembly编译代码。编译时,可能会提示警告(但我们可以忽略它)。对于第二个命令,让我们创建ABI。
8 j/ ^& ]6 J5 i% L
0 ?* x9 H7 u5 L" B- a, n! D
# Compile webaassembly0 W" l$ W: H# H0 M
eosiocpp -o hello.wast hello.cpp
$ i; F& Z* I1 w  d% C4 ?# Creating abi' ]2 y3 W# K+ n6 t* K
eosiocpp -g hello.abi hello.cpp: `$ K# f; T# k$ ~" c) `
帐户创建和合约发布& y; A5 o* [% q1 R1 l$ w# g
创建一个名为Hello.Code的帐户。我们将进一步使用这个帐户发布Hello合约。+ B7 O: f* l3 G, c
用cleos set contract ${account} ${path} -p ${permmition}命令发布合约。8 X9 C* v% J7 ^: C- Z
$ cleos create account eosio hello.code EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT
7 S$ P( L( E/ E. Q2 c8 Wexecuted transaction: e6847fc85c7733dd70a9ff27c2cad98ea0b50fb6c80c2b0c7ea1bf64f9917916  200 bytes  225 us+ v, w9 e5 F, A6 B
#         eosio
$ O) ]4 O1 W5 {. L: Z# C调用函数: W0 G- |9 ~* V( f
让我们调用hello类的hi函数。它可以用下面的命令来完成:- ]0 M6 g4 A+ R/ G9 n: w
cleos push action ${contract_name} ${function} ${[argument]} -p ${permission}
1 p$ i3 O: _. e- M/ n; y: J/ N在下面的示例中,hello.code合约中的用户帐户调用hi函数。% M, P3 V' f0 Z  B  j# ?
$ cleos push action hello.code hi '["user"]' -p user
) a0 d! l3 q' m3 @$ \executed transaction: d7932d1ee61ab6b0fed1f9e20d4a2e2607b029763aeaf1daea4ed718d2885797  104 bytes  500 us
: W, l5 o2 ]- ?8 j#    hello.code ; K' ?8 V2 K; ]$ S- ]4 ?- @
结果
: A+ n& H7 Y3 e8 r( t% p" E在nodeos终端中执行交易的块中添加了以下输出。hello是名为hi函数的用户的名字。
" w& S+ r7 Z" A" y  }2703777ms thread-0 apply_context.cpp:28 print_debug ]
+ \- l# a9 r2 Y' o7 m# g[(hello.code,hi)->hello.code]: CONSOLE OUTPUT BEGIN =====================
- G! s9 [4 s+ q7 f8 N7 A8 |Hello, user
. e8 A3 w/ h4 A6 J[(hello.code,hi)->hello.code]: CONSOLE OUTPUT END =====================6 H3 c. j. p5 b+ B) {* n
授权运行请求- `6 Y4 E" l3 o2 Y$ A" k; m
替换为包含授权请求调用hi函数。/ M' V5 S/ v3 v% G1 q- x+ n/ v6 h
7 |9 ]$ a, ?$ e% q) r( n1 W0 Q  x
结果! v, i, k9 D( G# e; @7 K& [( J, E
当我们试图用一个未经授权的帐户调用它时,会出现一个错误(如下)。使用授权帐户,它正常输出无错误。
; C3 X* X) a% E$ j8 b( z- K1 r
2 Z: ]9 D& P6 S' A. K
# Authorized
$ {& J6 t. C2 ]& D. H" z; ^: J$ cleos push action hello.code hi '["tester"]' -p user
, _2 ^. f# C* q+ ?1 @Error 3090004: missing required authority
) q9 s1 Y! G. Y! D4 N# Unauthorized
* O3 H& ?, V5 t& u9 \- N/ e$ cleos push action hello.code hi '["tester"]' -p tester' K7 D6 }3 L7 K  c5 q- Q
executed transaction: 16a34c27c7d162dc3940358197306df619911fb930cbddd6d208125a770886f4  104 bytes  243 us+ j8 `* I6 P  q& I! i9 {
#    hello.code " {! B# Y& R' S% z
可以在nodeos的块中按如下方式打印日志:! Y8 l3 [+ h, D
2525788ms thread-0   http_plugin.cpp:405           handle_exception     ] FC Exception encountered while processing chain.push_transaction/ L5 t& A; @2 m% Y8 [) B
2525788ms thread-0   http_plugin.cpp:406           handle_exception     ] Exception Details: 3090004 missing_auth_exception: missing required authority
/ E% J; p5 `, a4 k6 E& |' `5 rmissing authority of tester {"account":"tester"}9 z+ _: D/ L) Q0 H2 I/ ^7 I
thread-0  apply_context.cpp:132 require_authorization {"_pending_console_output.str()":""}
2 T% C% v; q/ Fthread-0  apply_context.cpp:62 exec_one
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

蓝天天使2017 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    10