EOS柚子区块链平台构建HelloWorld智能合约
蓝天天使2017
发表于 2022-11-12 13:43:43
81
0
0
一般环境设置通过上一篇文章已经说明,这方面的问题大家可以看本博客上一篇文章,本文引用了官方EOS在Git上的示例。2 c2 j. F6 F% o+ e& Z/ H
运行nodeos4 @7 b' r5 ?/ a
要通过Hello World日志进行验证,请使用contracts-console选项运行它。
nodeos --contracts-console, S5 q2 T5 y% B# \* F% [
生成智能合约
让我们尝试通过一个不同的新的终端上(除了nodeos的终端之外)访问EOS目录,创建一个名为Hello的文件夹。命令如下:/ N2 p8 L P: \
$ cd eos" V# H' b% v. }9 t/ v) O! j
$ cd mkdir hello5 s# B/ U- G# u
$ cd hello8 F% F. N: G5 b3 K
然后,创建hello.cpp文件并复制下面的示例。Hello合约继承了EOS.IO提供的合约,并具有打印出用户名Hello的功能。& a7 W9 l; H: p& O
编译代码; x# K) U9 a+ W5 V- U+ \
对于第一个命令,让我们用WebAssembly编译代码。编译时,可能会提示警告(但我们可以忽略它)。对于第二个命令,让我们创建ABI。
$ n$ d S7 O$ V. I
# Compile webaassembly( e) @; t! p& w
eosiocpp -o hello.wast hello.cpp
# Creating abi. E6 T& D+ D+ e, @5 f
eosiocpp -g hello.abi hello.cpp
帐户创建和合约发布
创建一个名为Hello.Code的帐户。我们将进一步使用这个帐户发布Hello合约。/ p0 @3 i2 S' Q1 N3 D9 y, q6 s
用cleos set contract ${account} ${path} -p ${permmition}命令发布合约。
$ cleos create account eosio hello.code EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT$ ]9 P0 j3 T1 n V3 j& a$ z* X3 @( p
executed transaction: e6847fc85c7733dd70a9ff27c2cad98ea0b50fb6c80c2b0c7ea1bf64f9917916 200 bytes 225 us
# eosio Y5 A5 E& R5 F( K
调用函数
让我们调用hello类的hi函数。它可以用下面的命令来完成:
cleos push action ${contract_name} ${function} ${[argument]} -p ${permission}
在下面的示例中,hello.code合约中的用户帐户调用hi函数。# T8 L' Q* c: d2 r
$ cleos push action hello.code hi '["user"]' -p user" @3 L* ?, x9 h, I. J- e9 F
executed transaction: d7932d1ee61ab6b0fed1f9e20d4a2e2607b029763aeaf1daea4ed718d2885797 104 bytes 500 us2 t4 I" L B- X9 l( m
# hello.code
结果0 Z$ f& s( I# a7 r
在nodeos终端中执行交易的块中添加了以下输出。hello是名为hi函数的用户的名字。
2703777ms thread-0 apply_context.cpp:28 print_debug ]
[(hello.code,hi)->hello.code]: CONSOLE OUTPUT BEGIN =====================' C t, N+ `) S% {1 k
Hello, user. j+ u8 n/ C2 ^8 V: f
[(hello.code,hi)->hello.code]: CONSOLE OUTPUT END =====================9 p& x; e8 X+ S6 a3 H) X
授权运行请求) w! v m0 {: r1 [/ |3 f) `. V2 f
替换为包含授权请求调用hi函数。6 @, x9 X) y% o. H
9 D' R C7 l; y% P6 G
结果
当我们试图用一个未经授权的帐户调用它时,会出现一个错误(如下)。使用授权帐户,它正常输出无错误。; @$ T: e; I# C6 f9 I
# Authorized
$ cleos push action hello.code hi '["tester"]' -p user
Error 3090004: missing required authority
# Unauthorized
$ cleos push action hello.code hi '["tester"]' -p tester* A0 k, @; H0 r" o' w! K/ v% w; Z
executed transaction: 16a34c27c7d162dc3940358197306df619911fb930cbddd6d208125a770886f4 104 bytes 243 us
# hello.code ' D* k, J) Y* h, i. u c
可以在nodeos的块中按如下方式打印日志:: ?4 q$ w* C; w8 {" F( z
2525788ms thread-0 http_plugin.cpp:405 handle_exception ] FC Exception encountered while processing chain.push_transaction' w) B/ y J. [% O7 ]% f3 P
2525788ms thread-0 http_plugin.cpp:406 handle_exception ] Exception Details: 3090004 missing_auth_exception: missing required authority4 z& m+ e/ j6 ]& ^
missing authority of tester {"account":"tester"}
thread-0 apply_context.cpp:132 require_authorization {"_pending_console_output.str()":""}
thread-0 apply_context.cpp:62 exec_one
成为第一个吐槽的人