用EOS区块链平台构建一个HelloWorld智能合约

我们将介绍一个使用EOS智能合约构建hello World的例子。

一般环境设置通过上一篇文章已经说明,这方面的问题大家可以看本博客上一篇文章,本文引用了官方EOS在Git上的示例

运行nodeos

要通过Hello World日志进行验证,请使用contracts-console选项运行它。

nodeos --contracts-console

生成智能合约

让我们尝试通过一个不同的新的终端上(除了nodeos的终端之外)访问EOS目录,创建一个名为Hello的文件夹。命令如下:

$ cd eos
$ cd mkdir hello
$ cd hello

然后,创建hello.cpp文件并复制下面的示例。Hello合约继承了EOS.IO提供的合约,并具有打印出用户名Hello的功能。

编译代码

  • 对于第一个命令,让我们用WebAssembly编译代码。编译时,可能会提示警告(但我们可以忽略它)。
  • 对于第二个命令,让我们创建ABI。
# Compile webaassembly
eosiocpp -o hello.wast hello.cpp

# Creating abi
eosiocpp -g hello.abi hello.cpp

帐户创建和合约发布

创建一个名为Hello.Code的帐户。我们将进一步使用这个帐户发布Hello合约。

cleos set contract ${account} ${path} -p ${permmition}命令发布合约。

$ cleos create account eosio hello.code EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT EOS8QMGRoRPZ4uf3w8WACcrg3wKzLtXpCk5Gpia6pdFzSuftLigWT

executed transaction: e6847fc85c7733dd70a9ff27c2cad98ea0b50fb6c80c2b0c7ea1bf64f9917916  200 bytes  225 us

#         eosio <= eosio::newaccount            {"creator":"eosio","name":"hello.code","owner":{"threshold":1,"keys":[{"key":"EOS8QMGRoRPZ4uf3w8WACc...

$ cleos set contract hello.code ../hello -p hello.code

Reading WAST/WASM from ../hello/hello.wasm...

Using already assembled WASM...

Publishing contract...

executed transaction: 7e1b070382188677e70cf4b87e8fbe02c072f10063983ffc1d8259b127d8fea7  1800 bytes  723 us

#         eosio <= eosio::setcode               {"account":"hello.code","vmtype":0,"vmversion":0,"code":"0061736d01000000013b0c60027f7e006000017e600...

#         eosio <= eosio::setabi                {"account":"hello.code","abi":"0e656f73696f3a3a6162692f312e30000102686900010475736572046e616d6501000...

调用函数

让我们调用hello类的hi函数。它可以用下面的命令来完成:

cleos push action contractname c o n t r a c t n a m e {function} [argument]p [ a r g u m e n t ] − p {permission}

在下面的示例中,hello.code合约中的用户帐户调用hi函数。

$ cleos push action hello.code hi '["user"]' -p user

executed transaction: d7932d1ee61ab6b0fed1f9e20d4a2e2607b029763aeaf1daea4ed718d2885797  104 bytes  500 us

#    hello.code <= hello.code::hi               {"user":"user"}

结果

nodeos终端中执行交易的块中添加了以下输出。hello是名为hi函数的用户的名字。

2703777ms thread-0 apply_context.cpp:28 print_debug ]

[(hello.code,hi)->hello.code]: CONSOLE OUTPUT BEGIN =====================

Hello, user

[(hello.code,hi)->hello.code]: CONSOLE OUTPUT END =====================

授权运行请求

  • 替换为包含授权请求调用hi函数。

结果

  • 当我们试图用一个未经授权的帐户调用它时,会出现一个错误(如下)。
  • 使用授权帐户,它正常输出无错误。
# 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

executed transaction: 16a34c27c7d162dc3940358197306df619911fb930cbddd6d208125a770886f4  104 bytes  243 us

#    hello.code <= hello.code::hi               {"user":"tester"}

可以在nodeos的块中按如下方式打印日志:

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 authority

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

另:《EOS智能合约与DApp开发入门》教程已经上线,爱学习等不及的可以抓紧体验一下:

EOS教程

本教程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用react和EOS的各知识点完成一个便签DApp的开发。

原文:http://blog.hubwiz.com/2018/07/23/EOS-SmartContracts-hello/

EOSIO的设计包括: 免费汇率限制交易 低延迟阻止确认(0.5秒) 低开销的拜占庭容错终结 可选的高开销,低延迟BFT终端 由Web Assembly支持的智能合约平台 专为稀疏头灯客户端验证而设计 计划的周期性事务 时间延迟安全 基于角色的权限分级 支持生物识别硬件安全密钥(例如Apple安全飞地) 并行执行上下文自由验证逻辑 区块链间通信 EOSIO允许开人员编写与需求确定性执行的共识算法兼容的业务逻辑。您的用户群可以使用安全的公钥基础结构与此业务逻辑进行交互,为您的业务带来区块链级别的安全性,责任性和可审计性。业务逻辑根据组织的治理结构轻松更新。 EOSIO旨在在没有任何令牌的环境中运行,系统管理员为用户分配可能无限制的资源配额。或者,智能合约可以通过其他方式分配资源配额,例如令牌销售,市场费用或投票。这使得EOSIO非常适合企业和社区驱动的区块链。 根据您的使用情况,可以将EOSIO配置为使用两种不同的Web装配引擎之一Binaryen和WAVM。单个EOSIO区块链可支持高达1,000 TPS,未来版本的EOSIO将提供简化区块链间通信所需的工具,使您的业务能够水平扩展。 EOSIO是在开放源代码MIT许可下布的,按“原样”提供,没有任何明示或暗示的担保。EOSIO软件提供的任何安全性部分取决于它的使用,配置和部署方式。EOSIO建立在许多第三方库上,如Binaryen(Apache许可证)和WAVM(BSD 3-clause),它们也是“按现状”提供的,没有任何形式的保证。在不限制前述内容的一般性的情况下,Block.one不作任何陈述或保证EOSIO或任何第三方库将按预期执行或不会出现错误,错误或错误代码。这两种方式都可能以很大或很小的方式失败,这可能会完全或部分地限制功能或危害计算机系统。如果您使用或实施EOSIO,则自行承担风险。在任何情况下都不会阻止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值