Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
我们将介绍一个使用EOS智能合约构建hello World的例子。
) f- P( `) [4 ^$ _% d' w* y一般环境设置通过上一篇文章已经说明,这方面的问题大家可以看本博客上一篇文章,本文引用了官方EOS在Git上的示例。
3 `* h' k5 J- M* a# e运行nodeos  P. ~2 J7 T$ `$ _
要通过Hello World日志进行验证,请使用contracts-console选项运行它。+ W/ S/ U$ D: c4 n$ _7 p: h+ M$ d
nodeos --contracts-console0 J' ^7 C+ f, q
生成智能合约; G2 y$ a- p: e9 ?
让我们尝试通过一个不同的新的终端上(除了nodeos的终端之外)访问EOS目录,创建一个名为Hello的文件夹。命令如下:
) u0 b  l  Z) s; M$ cd eos& O0 n7 r& A0 X0 f+ k. |2 [
$ cd mkdir hello
0 A* w1 `9 t/ \! D$ cd hello5 w/ d" `5 c' b8 y. K+ o
然后,创建hello.cpp文件并复制下面的示例。Hello合约继承了EOS.IO提供的合约,并具有打印出用户名Hello的功能。# G9 y. x1 R$ M: K6 M# [# j
编译代码  @' g$ `; Z- ^1 ]/ T* Y. V/ O
对于第一个命令,让我们用WebAssembly编译代码。编译时,可能会提示警告(但我们可以忽略它)。对于第二个命令,让我们创建ABI。
' n; G6 t9 M  L" {! \
% s3 f6 i$ V( ], r5 t
# Compile webaassembly+ X* B! C: C/ }9 a9 _& i
eosiocpp -o hello.wast hello.cpp
% B" l# u: f9 m# Creating abi8 T  t: M0 R; @9 S
eosiocpp -g hello.abi hello.cpp6 H2 u! S% `% B! M! I
帐户创建和合约发布
5 B6 g9 y! K) N创建一个名为Hello.Code的帐户。我们将进一步使用这个帐户发布Hello合约。1 f7 f8 c; \: b( `: W0 n
用cleos set contract ${account} ${path} -p ${permmition}命令发布合约。( p: h/ ?; m% B6 s* w& F
$ cleos create account eosio hello.code EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT! w4 e5 o* r2 w+ s' U+ ]
executed transaction: e6847fc85c7733dd70a9ff27c2cad98ea0b50fb6c80c2b0c7ea1bf64f9917916  200 bytes  225 us
, H8 t. j7 d# o#         eosio ) s) O/ h/ p( P/ J4 X
调用函数0 g$ W; D2 ~) h3 l
让我们调用hello类的hi函数。它可以用下面的命令来完成:
" W0 c; q! u. l2 R# J3 Gcleos push action ${contract_name} ${function} ${[argument]} -p ${permission}, e/ Z9 |# o, v' e2 S0 L9 T! D& d
在下面的示例中,hello.code合约中的用户帐户调用hi函数。/ k1 D- k# [8 k% F2 I
$ cleos push action hello.code hi '["user"]' -p user% _" ]5 L" R  D
executed transaction: d7932d1ee61ab6b0fed1f9e20d4a2e2607b029763aeaf1daea4ed718d2885797  104 bytes  500 us% u4 T* j' ?( D5 D/ M/ ~) d8 N
#    hello.code
! Q, R8 o3 s- {' E6 O6 S结果2 ]" a$ l6 ]5 s9 {
在nodeos终端中执行交易的块中添加了以下输出。hello是名为hi函数的用户的名字。
9 n& g2 ^9 a' u4 m# S! g! e6 ?2703777ms thread-0 apply_context.cpp:28 print_debug ]
' W6 e8 ~) e# X1 I% g[(hello.code,hi)->hello.code]: CONSOLE OUTPUT BEGIN =====================2 R' {  s# ?7 b" W+ x) Y& C
Hello, user
: K6 m6 p5 l1 i4 v[(hello.code,hi)->hello.code]: CONSOLE OUTPUT END =====================  ^) M, F( C5 @+ W) O5 ^, D/ q  N# M. `; f
授权运行请求
8 u7 ?* w( x) Y+ F) s) L8 Z替换为包含授权请求调用hi函数。3 P2 }3 R6 f# V: c" l5 a9 G, G9 d2 U

! @0 N/ [1 s3 U( Z+ f结果
! G! ~2 ?0 _- S; j3 Z当我们试图用一个未经授权的帐户调用它时,会出现一个错误(如下)。使用授权帐户,它正常输出无错误。* c8 f# _  S1 |! z. M
; F* r3 w% w8 ~- `+ Q
# Authorized
6 k5 I& t4 @+ z, {. c$ cleos push action hello.code hi '["tester"]' -p user4 w$ t7 I. L% u/ Z1 D
Error 3090004: missing required authority
) H& Y% X/ K: N% `- L8 |: A/ n# Unauthorized
2 ?6 ^  w' r( J! F$ cleos push action hello.code hi '["tester"]' -p tester
# H' j: r* W) {2 p& i$ Wexecuted transaction: 16a34c27c7d162dc3940358197306df619911fb930cbddd6d208125a770886f4  104 bytes  243 us$ C; Q$ n0 n9 J* O2 v# _
#    hello.code
( B2 S1 q+ I1 E可以在nodeos的块中按如下方式打印日志:
- I) D& e- j  X2525788ms thread-0   http_plugin.cpp:405           handle_exception     ] FC Exception encountered while processing chain.push_transaction& r7 Y( p$ i. W- x6 }
2525788ms thread-0   http_plugin.cpp:406           handle_exception     ] Exception Details: 3090004 missing_auth_exception: missing required authority/ Z, O2 b4 |+ \1 P# B3 {
missing authority of tester {"account":"tester"}% p: u& W5 c- ]8 M; @2 }; W8 g
thread-0  apply_context.cpp:132 require_authorization {"_pending_console_output.str()":""}
* q) o3 p+ T; e3 f. jthread-0  apply_context.cpp:62 exec_one
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

蓝天天使2017 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    10