当前位置: 首页 > news >正文

EOS区块链智能合约开发

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

EOS智能合约开发需要使用llvmabigen来生成abi文件, 为此eos提供了一个名为eosiocpp的工具。 在这篇文章中,我们介绍如何使用这个工具来开发、部署并调用一个EOS版本的hello world智能合约。

如果你希望马上学习EOS智能合约的开发,可以访问这个【EOS智能合约开发教程】,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发、部署与交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。

智能合约撰写

首先,编写一个ahello.cpp文件 - EOS的合约开发使用C++语言:

# mkdir /home/centos/sc/ahello
# cd /home/centos/sc/ahello
# vim ahello.cpp

将以下内容插入到ahello.cpp文件中:

#include <eosiolib/eosio.hpp>

#include <eosiolib/print.hpp>
using namespace eosio;

class hello : public eosio::contract {
  public:
      using contract::contract;

/// @abi action 
      void hi( account_name user ) {
         print( "Hello, World", name{user} );
      }
};

EOSIO_ABI( hello, (hi) )

接下来,编译并创建一个wast(web程序集)文件和一个abi文件。

# eosiocpp -o ahello.wast ahello.cpp

# eosiocpp -g ahello.abi ahello.cpp

智能合约的部署与交互

在部署合约之前,我们需要创建测试用的钱包、密钥和帐户。

首先,使用EOS客户端cleos创建一个名为scuser钱包,EOS使用钱包管理密钥:

# cleos wallet create -n scuser

Creating wallet: scuser
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5JzRwAUN-----------------------------nAuCRWvHx4XnMPmGf9Kz "

接下来同样使用cleos创建一个密钥对:

# cleos create key

Private key: 5KZzUHNFNvf------------------------------vuF5z7d29uAUbsdn
Public key: EOS63ndkvF-----------------------9ZVcByP9nfZcwMLzbMpn

然后将密钥保存在之前创建的钱包scuser中:

# cleos wallet import -n scuser 5KZzUHNFNvf---------------------d29uAUbsdn

还需要创建一个额外的账户进行测试:

# cleos create key

Private key: 5JbriTGYsnrpNDvL------------------LgniHVgyTnS5ommxo
Public key: EOS8XZoG2248Gu42-------------ps7JoW8tdHQwCsV

然后使用wallet子命令把这第二个密钥也存入钱包:

# cleos wallet import -n scuser 5JbriTGYsnrpND----------HVgyTnS5ommxo

接下来,使用create account子命令创建一个账户eosio —— 你需要使用账户与EOS区块链交互:

#./cleos create account eosio scuser EOS63ndkvF---------cByP9nfZcwMLzbMpn EOS8XZo-------wJnieps7JoW8tdHQwCsV

现在使用set contract子命令部署智能合约:

# cleos set contract scuser /home/centos/sc/ahello

Reading WAST/WASM from /home/centos/sc/ahello/ahello.wasm...
Using already assembled WASM...
Publishing contract...
executed transaction: 053a4883d9c191c2754656544dd045da17bd869250af13a00284a613eed3d23b  1792 bytes  601 us
#         eosio <= eosio::setcode               {"account":"scuser","vmtype":0,"vmversion":0,"code":"0061736d01000000013b0c60027f7e006000017e60027e7...
#         eosio <= eosio::setabi                {"account":"scuser","abi":{"types":[],"structs":[{"name":"hi","base":"","fields":[{"name":"user","ty...
warning: transaction executed locally, but may not be confirmed by the network yet

合约部署成功后,使用push action子命令来执行合约方法hi

# cleos push action scuser hi '["user1"]' -p scuser

executed transaction: 9ed2894aef0f476687ad893ed16594588cc7a813c524d4b8497ba9f50793b151  104 bytes  330 us
#        scuser <= scuser::hi                   {"user":"user1"}

>> Hello, World user1
warning: transaction executed locally, but may not be confirmed by the network yet

你应该可以看到类似下图的结果:

eos hello world

代码分析

以上示例代码是EOS智能合约的基本模板。 我们现在将逐步分析上面编写的代码。

#include <eosiolib/eosio.hpp>
#include <eosiolib/print.hpp>

上述代码引入eos智能合约的头文件。

using namespace eosio;

上述代码使用eosio作为默认命名空间,因此在后续代码中可以直接使用诸如 account_name之类的数据类型。

class hello:public eosio :: contract { 

创建一个hello类,继承自eosio预置的contract。

public:
using contract::contract;

/// @abi action

这显示了指定操作时在区块链中实际执行的功能。

      void hi( account_name user ) {
         print( "Hello, World", name{user} );
      }
};

EOSIO_ABI( hello, (hi) )

EOSIO_ABI是一个包含以前版本中的apply()函数的宏。

在这篇文章中,我们介绍了如何编写一个EOS版本的Hellow World智能合约,希望有助于你初步了解EOS智能合约的开发。

原文链接:开发第一个EOS智能合约

转载于:https://my.oschina.net/u/3794778/blog/2988994

相关文章:

  • Oracle 11g:bin目录下3个特效权限的文件:root用户所有者 + s权限
  • 如何使用虚拟机来运行linux,并通过ftp来访问linux服务器(多图详细教学)
  • FaaS 的简单实践
  • 身为极客,一道题测出你究竟有多机智!|活动推荐
  • java web service 写入图片到web/img/
  • 通过调研开源基准测试集,解读大数据的应用现状和开源未来
  • 如何保证以太坊DApp本地存储localStorage的安全性?
  • 数据库做分表查询
  • mount时候遇到mount: /dev/sdd1 写保护,将以只读方式挂载。mount: 未知的文件系统类型“(null)”...
  • 阿里云开发者工具上手体验
  • 5_添加购物车 B+M
  • 阿里云—Gartner 2018 亚太区WAF魔力象限唯一云WAF提供商
  • DES算法,JAVA,遇到的问题
  • 服务器发送数据到另一个服务器上中文出现乱码
  • REST 规范
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • leetcode98. Validate Binary Search Tree
  • Spring核心 Bean的高级装配
  • Vue UI框架库开发介绍
  • WePY 在小程序性能调优上做出的探究
  • 半理解系列--Promise的进化史
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 前嗅ForeSpider采集配置界面介绍
  • 数据可视化之 Sankey 桑基图的实现
  • 新手搭建网站的主要流程
  •  一套莫尔斯电报听写、翻译系统
  • #HarmonyOS:Web组件的使用
  • (003)SlickEdit Unity的补全
  • (14)Hive调优——合并小文件
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (4)logging(日志模块)
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (十六)串口UART
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (一)RocketMQ初步认识
  • (译) 函数式 JS #1:简介
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • *2 echo、printf、mkdir命令的应用
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET NPOI导出Excel详解
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET 发展历程
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .net6 webapi log4net完整配置使用流程
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .NET实现之(自动更新)
  • .sh