EOS柚子区块链平台构建HelloWorld智能合约
蓝天天使2017
发表于 2022-11-12 13:43:43
136
0
0
一般环境设置通过上一篇文章已经说明,这方面的问题大家可以看本博客上一篇文章,本文引用了官方EOS在Git上的示例。2 l1 d% O+ {( z9 y! `8 y
运行nodeos
要通过Hello World日志进行验证,请使用contracts-console选项运行它。
nodeos --contracts-console. b, Q/ W; j3 f! R
生成智能合约
让我们尝试通过一个不同的新的终端上(除了nodeos的终端之外)访问EOS目录,创建一个名为Hello的文件夹。命令如下:
$ cd eos
$ cd mkdir hello+ ~9 b n9 {5 B( _
$ cd hello
然后,创建hello.cpp文件并复制下面的示例。Hello合约继承了EOS.IO提供的合约,并具有打印出用户名Hello的功能。
编译代码
对于第一个命令,让我们用WebAssembly编译代码。编译时,可能会提示警告(但我们可以忽略它)。对于第二个命令,让我们创建ABI。* a0 q6 Q% ~4 ]. k3 B: o
: S; R1 s0 i1 _; f, d0 r. g0 D" y3 Y
# Compile webaassembly
eosiocpp -o hello.wast hello.cpp
# Creating abi
eosiocpp -g hello.abi hello.cpp
帐户创建和合约发布
创建一个名为Hello.Code的帐户。我们将进一步使用这个帐户发布Hello合约。. X0 \& a2 E: |- p
用cleos set contract ${account} ${path} -p ${permmition}命令发布合约。, K$ M4 t; ~$ [- G
$ cleos create account eosio hello.code EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT( @7 ?# i0 H( v6 Y! _
executed transaction: e6847fc85c7733dd70a9ff27c2cad98ea0b50fb6c80c2b0c7ea1bf64f9917916 200 bytes 225 us0 ^4 S$ X3 Z& z! ~
# eosio
调用函数+ n7 y' v/ _% u$ S- X
让我们调用hello类的hi函数。它可以用下面的命令来完成:) ?' r. ?% z; [
cleos push action ${contract_name} ${function} ${[argument]} -p ${permission}% t0 f% u0 w. m/ v$ z6 [( V
在下面的示例中,hello.code合约中的用户帐户调用hi函数。
$ cleos push action hello.code hi '["user"]' -p user
executed transaction: d7932d1ee61ab6b0fed1f9e20d4a2e2607b029763aeaf1daea4ed718d2885797 104 bytes 500 us, ~/ ~% }3 p k) u# K9 S* C
# hello.code ! ]6 ~, f4 Y/ H) c( E# S
结果% x- m8 B I, q3 Z
在nodeos终端中执行交易的块中添加了以下输出。hello是名为hi函数的用户的名字。
2703777ms thread-0 apply_context.cpp:28 print_debug ]& I' S& D K' U9 {) \/ p
[(hello.code,hi)->hello.code]: CONSOLE OUTPUT BEGIN =====================) s: L z6 Q! d
Hello, user* L5 K5 \( \9 I. F; {
[(hello.code,hi)->hello.code]: CONSOLE OUTPUT END =====================# D4 p7 a9 H. \ p5 X7 F+ I3 o
授权运行请求
替换为包含授权请求调用hi函数。% X' n7 p2 L; y' D
" a; u% [8 e* h. z7 F
结果
当我们试图用一个未经授权的帐户调用它时,会出现一个错误(如下)。使用授权帐户,它正常输出无错误。
/ b( o' {% H4 _ L& E8 Y2 o8 a- K
# Authorized# O1 b4 j( j: W4 ]$ V& {
$ cleos push action hello.code hi '["tester"]' -p user/ E3 r( J3 }) J. r9 u; H4 m
Error 3090004: missing required authority
# Unauthorized E3 X* t- K M r: n( a Q* C' I
$ cleos push action hello.code hi '["tester"]' -p tester$ e! i& p$ u0 {+ K
executed transaction: 16a34c27c7d162dc3940358197306df619911fb930cbddd6d208125a770886f4 104 bytes 243 us7 j J$ p$ o6 Z! k/ G0 b
# hello.code 3 T( O8 g7 E; b
可以在nodeos的块中按如下方式打印日志:! C T- z* V7 H c
2525788ms thread-0 http_plugin.cpp:405 handle_exception ] FC Exception encountered while processing chain.push_transaction
2525788ms thread-0 http_plugin.cpp:406 handle_exception ] Exception Details: 3090004 missing_auth_exception: missing required authority2 j( S& m: t1 G/ _; i7 b& Q' ]+ Z/ I
missing authority of tester {"account":"tester"}9 s9 U0 L5 W: k9 z/ l( |
thread-0 apply_context.cpp:132 require_authorization {"_pending_console_output.str()":""}6 Z) U1 U& w8 I
thread-0 apply_context.cpp:62 exec_one
成为第一个吐槽的人