Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
我们将介绍一个使用EOS智能合约构建hello World的例子。! S" B) `$ T3 Z, R" ~# v6 Z
一般环境设置通过上一篇文章已经说明,这方面的问题大家可以看本博客上一篇文章,本文引用了官方EOS在Git上的示例。9 G" O, g1 U' b  |
运行nodeos
3 A7 ~. W* {* Y  z5 L要通过Hello World日志进行验证,请使用contracts-console选项运行它。
2 y. m7 |3 O, ?' Q% unodeos --contracts-console
: |* f+ {+ b/ _$ o生成智能合约+ O; W) Y  _$ F0 E/ O
让我们尝试通过一个不同的新的终端上(除了nodeos的终端之外)访问EOS目录,创建一个名为Hello的文件夹。命令如下:; V6 d6 [. k9 N( R
$ cd eos1 X$ D: `3 z) o! `
$ cd mkdir hello
) h# l* W, ?! }+ D, V$ cd hello! f2 J0 @0 G/ r4 Y
然后,创建hello.cpp文件并复制下面的示例。Hello合约继承了EOS.IO提供的合约,并具有打印出用户名Hello的功能。. o  A5 N3 w% [1 S' E( t# ~
编译代码+ x- L6 B4 u3 l% Y& C1 ?
对于第一个命令,让我们用WebAssembly编译代码。编译时,可能会提示警告(但我们可以忽略它)。对于第二个命令,让我们创建ABI。
) c$ {  o' i1 P8 H! i: z
: D% q0 u: b! k# q8 s: ?
# Compile webaassembly' b; i( Q& {' R5 a1 G, m
eosiocpp -o hello.wast hello.cpp+ L/ W6 w" i! D( Z( m
# Creating abi" `1 O  [. S0 a( [" V5 b
eosiocpp -g hello.abi hello.cpp6 O# s- V& {" e7 j# l) C
帐户创建和合约发布3 i  A( m5 B4 G" u  b  I
创建一个名为Hello.Code的帐户。我们将进一步使用这个帐户发布Hello合约。
& ]% w: v; E0 @8 l; ~' A- J( ~用cleos set contract ${account} ${path} -p ${permmition}命令发布合约。9 C+ \( E6 s' J8 w: C
$ cleos create account eosio hello.code EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT/ y6 V9 s& l, z" e1 P1 @
executed transaction: e6847fc85c7733dd70a9ff27c2cad98ea0b50fb6c80c2b0c7ea1bf64f9917916  200 bytes  225 us) e$ _6 P. t; W( ]1 b: h: w5 O
#         eosio
- A- S; n2 g5 J# |8 C- i* M调用函数
$ \* X! U. K2 y6 n- s让我们调用hello类的hi函数。它可以用下面的命令来完成:$ l; v8 B7 U% E% c; A  E
cleos push action ${contract_name} ${function} ${[argument]} -p ${permission}
2 c# l/ v% ~4 y' ^在下面的示例中,hello.code合约中的用户帐户调用hi函数。& H3 j" g: i4 @4 f2 N; ]
$ cleos push action hello.code hi '["user"]' -p user
- F5 q! q+ V4 A8 ~* ]0 Kexecuted transaction: d7932d1ee61ab6b0fed1f9e20d4a2e2607b029763aeaf1daea4ed718d2885797  104 bytes  500 us
0 g) V" D* r5 K8 J7 S4 W& F#    hello.code
. ~) `8 z& d/ j- ~: O& c" n' u9 t结果
) R# x+ r) K, D- ^& _. t& p; H9 a: o在nodeos终端中执行交易的块中添加了以下输出。hello是名为hi函数的用户的名字。
, s- H8 o; d' _8 j* K2703777ms thread-0 apply_context.cpp:28 print_debug ]
; i0 w/ s0 }+ f. L% V[(hello.code,hi)->hello.code]: CONSOLE OUTPUT BEGIN =====================) u1 A' e) @6 L& J) W+ g$ w6 l
Hello, user
; S; |6 c: E5 k' }; Y0 p" h! G[(hello.code,hi)->hello.code]: CONSOLE OUTPUT END =====================2 d2 m- U3 m# H: y
授权运行请求
9 J4 r5 l8 w# P' S替换为包含授权请求调用hi函数。
2 F" d- E' z6 P9 U. K* @4 P8 M

' i  m* ?2 c. q结果9 R2 B" f' [* }1 `. O+ c1 G* y
当我们试图用一个未经授权的帐户调用它时,会出现一个错误(如下)。使用授权帐户,它正常输出无错误。
8 k1 U- K% g4 ]% I
& |4 a! A& I9 C6 B3 l. y
# Authorized
( F# ^, `' n) _. \  D4 e2 v$ cleos push action hello.code hi '["tester"]' -p user1 H' Z0 {# J2 D- g
Error 3090004: missing required authority
* N. D2 t5 s7 r3 T# Unauthorized
* o- f+ _- E$ A! v& z2 p$ U$ cleos push action hello.code hi '["tester"]' -p tester
) O( _& T& V# G$ n: C3 @0 S6 x7 _executed transaction: 16a34c27c7d162dc3940358197306df619911fb930cbddd6d208125a770886f4  104 bytes  243 us
; h3 I7 V* \( d' W. p#    hello.code 2 ^1 }1 ~( e2 ~3 v1 e
可以在nodeos的块中按如下方式打印日志:3 c' ~2 [9 z8 I! O" e- F
2525788ms thread-0   http_plugin.cpp:405           handle_exception     ] FC Exception encountered while processing chain.push_transaction
* `# Y4 G5 |3 {! |* F2525788ms thread-0   http_plugin.cpp:406           handle_exception     ] Exception Details: 3090004 missing_auth_exception: missing required authority" B' K4 q( _& U) F
missing authority of tester {"account":"tester"}
7 I8 l7 |1 l' w$ k8 tthread-0  apply_context.cpp:132 require_authorization {"_pending_console_output.str()":""}
; y# ^5 u( C* F' O$ j+ {thread-0  apply_context.cpp:62 exec_one
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

蓝天天使2017 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    10