Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
我们将介绍一个使用EOS智能合约构建hello World的例子。
( m$ f; A( B6 C. |# S, y一般环境设置通过上一篇文章已经说明,这方面的问题大家可以看本博客上一篇文章,本文引用了官方EOS在Git上的示例。6 U6 p8 f" y' D  T+ u
运行nodeos; X% P( a! s+ j. b2 R. B/ o5 F6 G
要通过Hello World日志进行验证,请使用contracts-console选项运行它。6 G4 s8 \, p, G
nodeos --contracts-console
0 k9 O0 ?0 |4 K0 r* h5 O: F2 h生成智能合约- m+ ?. J9 q* R4 l
让我们尝试通过一个不同的新的终端上(除了nodeos的终端之外)访问EOS目录,创建一个名为Hello的文件夹。命令如下:1 {8 Q! Q3 t* h9 ^4 r6 |' f* k
$ cd eos
) Q6 \6 x2 i4 g& U$ cd mkdir hello
) n( V# c* `5 h. V* d$ cd hello
7 B! R( `( ?- T& o& I. H然后,创建hello.cpp文件并复制下面的示例。Hello合约继承了EOS.IO提供的合约,并具有打印出用户名Hello的功能。
: C) V8 }0 D/ Y编译代码
0 R9 [7 c: Z/ A" d对于第一个命令,让我们用WebAssembly编译代码。编译时,可能会提示警告(但我们可以忽略它)。对于第二个命令,让我们创建ABI。
3 U/ H1 {3 Y! i5 B

' a8 D" q" f. @0 a  x# Compile webaassembly* a2 @/ r8 a3 }2 [/ O
eosiocpp -o hello.wast hello.cpp" O! h) i/ W- z$ u' S
# Creating abi
% n- s/ N, l' x  B: Deosiocpp -g hello.abi hello.cpp
" }: _$ o: V) l# B帐户创建和合约发布$ B+ j# X" r$ R+ A
创建一个名为Hello.Code的帐户。我们将进一步使用这个帐户发布Hello合约。( }7 S) R: O" ?. e$ n) P
用cleos set contract ${account} ${path} -p ${permmition}命令发布合约。
6 C0 M* E, p0 F9 |6 D4 D$ cleos create account eosio hello.code EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT# W- ?- o. |# m& {( m- I- U
executed transaction: e6847fc85c7733dd70a9ff27c2cad98ea0b50fb6c80c2b0c7ea1bf64f9917916  200 bytes  225 us% r/ o$ [3 ?* e) S( d
#         eosio 4 o& o2 z" `' m0 z& V- I: H
调用函数6 @! J1 ~, v$ j
让我们调用hello类的hi函数。它可以用下面的命令来完成:
$ @4 ]5 N5 D: ]2 U) V  Pcleos push action ${contract_name} ${function} ${[argument]} -p ${permission}
' `0 x- v3 H9 x6 Q4 O# Z& I在下面的示例中,hello.code合约中的用户帐户调用hi函数。/ W- Q0 r0 r, t  y
$ cleos push action hello.code hi '["user"]' -p user
# V4 P( |& M! c4 p5 S& G5 N5 y: Gexecuted transaction: d7932d1ee61ab6b0fed1f9e20d4a2e2607b029763aeaf1daea4ed718d2885797  104 bytes  500 us
; @0 X3 W5 r  ~& z5 g5 ]/ f* ~#    hello.code , e, C9 Q6 M, o' N0 R0 j3 l
结果
& l8 H/ D1 Z5 a- @+ o在nodeos终端中执行交易的块中添加了以下输出。hello是名为hi函数的用户的名字。
& o7 o4 ?1 `' Y4 l  C$ `, P2703777ms thread-0 apply_context.cpp:28 print_debug ], k  }$ E! y; K' N4 @8 d  c
[(hello.code,hi)->hello.code]: CONSOLE OUTPUT BEGIN =====================( ^; |9 Q* d' @  m
Hello, user
/ I& g! {( J4 ~. Z( A[(hello.code,hi)->hello.code]: CONSOLE OUTPUT END =====================  m0 C9 Q+ R6 |
授权运行请求. A3 J7 {) x& H
替换为包含授权请求调用hi函数。
. f( }0 e, F8 V6 t* }! N+ O+ w
$ u3 K% p; H& W
结果) q0 b; ~8 F( V1 i
当我们试图用一个未经授权的帐户调用它时,会出现一个错误(如下)。使用授权帐户,它正常输出无错误。2 D6 U2 d1 A# f1 V6 I, o" w0 V4 q
+ A7 \- f/ L2 ^- q+ S
# Authorized
, `5 `6 |4 o' b1 {$ cleos push action hello.code hi '["tester"]' -p user' w+ P6 n0 ]7 ~
Error 3090004: missing required authority8 X0 v4 r0 T3 F% i. d
# Unauthorized
4 }  N" X* ~' }" J$ cleos push action hello.code hi '["tester"]' -p tester
( _1 \$ d; n1 ~" `# D8 P8 gexecuted transaction: 16a34c27c7d162dc3940358197306df619911fb930cbddd6d208125a770886f4  104 bytes  243 us
/ N% l, h+ |* g9 ^1 G#    hello.code - F$ v0 e& i  [& ^
可以在nodeos的块中按如下方式打印日志:/ n; P. b6 v% o: j3 ?1 C, H0 W: L$ E
2525788ms thread-0   http_plugin.cpp:405           handle_exception     ] FC Exception encountered while processing chain.push_transaction
# T* M& ^& M; L7 ?0 \+ F5 n2525788ms thread-0   http_plugin.cpp:406           handle_exception     ] Exception Details: 3090004 missing_auth_exception: missing required authority
% g! n" r+ ?7 m' b' [) emissing authority of tester {"account":"tester"}
% ~1 a) e1 \( W* C5 ^thread-0  apply_context.cpp:132 require_authorization {"_pending_console_output.str()":""}
$ ]. T1 u( i+ R$ Cthread-0  apply_context.cpp:62 exec_one
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

蓝天天使2017 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    10