原 EOS智能合约开发入门
链客,专为开发者而生,有问必答!
此文章来自区块链技术社区,未经允许拒绝转载。
EOS智能合约的开发需要使用llvm和abigen来生成abi文件。 为此eos提供了一个 名为eosiocpp的工具。 在这篇文章中,我们介绍如何使用这个工具来开发、部署并调用 一个EOS版本的hello world智能合约。
这篇文章的代码是在CentOS完成的,但在EOS支持的其他linux发行版上应该也没有问题。 如果你同时也对以太坊开发感兴趣,可以 访问我们的入门级的以太坊教程 以及更进阶的以太坊电商实战教程。
智能合约撰写
首先,编写一个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智能合约的基本模板。 我们现在将逐步分析上面编写的代码。
#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智能合约的开发。
相关文章:

python安装虚拟环境virtualenv
虚拟环境 虚拟环境是一个将不同项目所需求的依赖分别放在独立的地方的一个工具,它给这些工程创建虚拟的Python环境。它解决了“项目X依赖于版本1.x,而项目Y需要项目4.x”的两难问题,而且使你的全局site-packages目录保持干净和可管理。 比如&…

可变分区存储管理实验报告总结_操作系统实验报告-可变分区存储管理方式的内存分配回收...
一.实验目的(1)深入了解可变分区存储管理方式的内存分配回收的实现。二.实验内容编写程序完成可变分区存储管理方式的内存分配回收,要求有内存空间分配表,并采用最优适应算法完成内存的分配与回收。三.实验原理在可变分…

ubuntu/linuxmint如何添加和删除PPA源
【添加】 1、sudo add-apt-repository ppa:user/ppa-name 2、sudo apt-get update (然后再安装软件sudo apt-get install <package-name>或更新软件sudo apt-get upgrade) 【删除】 1、cd /etc/apt/source.list.d/ 2、sudo rm <ppa-name> 转载于:https://www.cnblo…

了解EOS看这一篇就够了一、团队二、技术三、项目进度四、争议和风险五、展望
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 无论是混迹于币圈、链圈还是矿圈,对BTC(比特币)、ETH(以太坊)、EOS这三大主流币一定不会…

qt 多个模型如何显示在表格中_Qt MOOC系列教程 第五章第四节:QML中的C++模型
我们已经多次讨论过如何创建自己的模型来表示QML中的数据,并且在上一节中我们看到了QStandardItemModel的基本示例。通常,出于性能和功能方面的原因,需要从一开始就要实现自己的模型。QAbstactItemModel类为项目模型类提供了抽象接口…

ubuntu终端基础命令
1. 启动终端的快捷键: ctr alt t2. 终端字体放大: ctrshift3. 终端字体放大: ctr-4. ls : 查看当前目录的文件信息 4.1 ls 路径: 查看指定目录的信息 4.1. pwd: 查看目录所在的路径5. touch: 创建文件 5.1 touch 1.txt 2.txt 创建多个文件6. mkdir: 创建…

js中操作数组的一些方法
增 push 在数组的末尾添加一个或多个元素,并返回新的长度。 array.push(1,2,3.........) unshift 在数组的开头添加一个或多个元素,并返回新的长度。 array.unshift(1,2,3......) splice 在制定位置添加一个活多个元素,splice(s…

a标签怎么传参_jsp页面中怎么利用a标签的href进行传递参数以及需要注意的地方...
jsp页面中:这是正确写法。需要注意的地方:1、传递的参数是数字2、传递的参数是字符串注意多了个单引号后台直接用request.getParameter("productIdStr"); 接收就可以了。此处也有要注意的地方:接收后要进行判空,否则会报…

转】windows下使用批处理脚本实现多个版本的JDK切换
原博文出自于: http://www.cnblogs.com/xdp-gacl/p/5209386.html 感谢! 一.JDK版本切换批处理脚本 我们平时在window上做开发的时候,可能需要同时开发两个甚至多个项目,有时不同的项目对JDK的版本要求有区别,这时候…

mysql引擎介绍
1.myisam存储引擎:不支持事务,也不支持外键,优势是访问速度快,对事务完整性没有要求或者以select,insert为主的应用基本上可以用这个引擎来创建表。 2.innodb存储引擎:innodb引擎提供了具有提交,…

为什么2100万个BTC发行总量少了0.0231?
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 许多人只是听说比特币的总数为2100万个,但不知道这个数字的准确来源。实际上,2100万个只是一个近似数,精确的数…

Navicat连接数据库成功,新建查询时提示错误“Cannot create file ……”
Navicat连接数据库成功,新建查询时提示错误“Cannot create file ……” 原因:编辑连接{高级}<设置位置>被修改,该oci.dll不正确 解决方案:删除该连接信息,重新新建。编辑连接{高级}<设置位置>会自动生成,…

[深入React] 2.综述
在开始本教程前,请先查看官方示例:https://github.com/facebook/react/archive/master.zip 里的 examples 目录。 学习react是一个循序渐进的过程,虽然它概念较少,但在思想上和jQuery相差甚远。我在学的时候也是边开发边查官方文档…

element select 自动展开_原生js 让select下拉框自动展开 可用size 属性来代替展开动作...
找遍全网都没一个比较好的例子!!!什么获得焦点事件,或者添加一个点击事件都不能使下拉框自动展开最后用标签的siz属性定义和用法size 属性规定下拉列表中可见选项的数目。如果 size 属性的值大于 1,但是小于列表中选项…

一文看懂怎样用 Python 创建比特币交易
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 比特币价格的上上下下,始终撩动着每一个人无比关切的小心脏。从去年初的 800 美元左右,飞涨到去年底到 19783.21 美元最高点…

[转]mysql 数据类型
原文地址:https://github.com/jaywcjlove/handbook/blob/master/MySQL/MySQL%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B.md MySQL数据类型 数字类型 整数: tinyint、smallint、mediumint、int、bigint浮点数: float、double、real、decimal日期和时间: date、time、datetime、times…

dev treeview控件_在Winform开发框架中使用DevExpress的TreeList和TreeListLookupEdit控件
DevExpress提供的树形列表控件TreeList和树形下拉列表控件TreeListLookupEdit都是非常强大的一个控件,它和我们传统Winform的TreeView控件使用上有所不同,我一般在Winform开发中根据情况混合使用这些控件,不过整体来看,基于DevExp…

util包下的Date与sql包下的Date之间的转换
Java中的时间类型 java.sql包下给出三个与数据库相关的日期时间类型,分别是: Date:表示日期,只有年月日,没有时分秒。会丢失时间; Time:表示时间,只有时分秒,没有年月日。…

【MySQL解惑笔记】忘记MySQL数据库密码
破解MySQL密码 一、MySQL5.7.5之前 只要有系统root密码就可以破解: [roothost-131 ~]# vim /etc/my.cnf //在配置文件中加入如下内容 [mysqld] skip-grant-tables[roothost-131 ~]# systemctl restart mysqld //重启…

接口自动化测试框架
现在市面上做接口测试的工具很多,比如Postman,soapUI, JMeter, Python unittest等等,各种不同的测试工具拥有不同的特色。但市面上的接口测试工具都存在一个问题就是无法完全吻合的去适用没一个项目,比如数据的处理,加…

arcpy实现空间查询_布隆过滤!Python实现亿级数据集中元素快速查找
前段时间在做数据碰撞分析时,遇到一个在数亿级的int型数据集中查找30万个特定int值是否存在的需求,当时尝试了几种方式通过分片,然后做增量分析HashMap这两种方式第一种太慢,即使后面进一步实现了分布式计算,可仍然无法…

比特币如何实现—《区块链历史链条》2
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 11比特币为什么还没有挖完 比特币系统靠调节难度系数保证比特币不被太快挖完。每10分钟,全网矿工共同计算一道难题,竞争记账…
centos7 系统下搭建 lnmp 环境
目录 目录概述准备工作开始编译安装1. 安装 Nginx1. 解压2. 环境准备3. 编译过程4. Nginx 服务2. 安装 MySQL1. 解压2. 环境准备3. 安装 CMake 编译器:4. 编译过程5. 初始化数据库6. MySQL 服务3. 安装 PHP1. 安装依赖包2. 编译安装3. 配置 PHP4. 整合 LNMP1 编辑 N…

dp uva1218
题目链接 一共有三种状态: 1、d[u][0]:u是服务器,每个子结点可以是也可以不是。 2、d[u][1]:u不是服务器,但u的父亲是,u的子结点都不是服务器。 3、d[u][2]:u和u的父亲都不是服务器,…

浏览器安全检查己通过_百度主动推送三项合一功能
百度主动推送三项合一功能作者:68喜功能模块:搜索关键词记录推送熊掌号当天推送熊掌号历史推送普通主动推送*///错误显示屏蔽error_reporting(E_ERROR | E_WARNING | E_PARSE);require ./common.inc.php; //引入公用函数$starid 1; //初始ID 开$limit…

EOS账户权限
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 账户和权限 钱包 账户 授权和权限 其他 默认账户配置(单个签名) 多签名账户和自定义权限 帐户是存储在区块链中的人类可读标识符。 每个交易都根据…

怎样在表格中选出同一类_3分钟教会你如何将不同表格中的数据关联在一起
原标题: 3分钟教会你如何将不同表格中的数据关联在一起版权声明:本文为博主原创文章,未经博主允许不得转载。智能输入超级表格 微视频关键词: 智能输入 关联不同表格 逻辑输入「超级表格微视频」第六期提升效率、 增强免疫力&…

矢量图面层和线层相交得到相交后的线层文件(gis相交)
目的:将arcgis里的面层和线层相交(重叠)部分的线单独生成一个shp文件,用于道路路网密度计算等。注意:进行相交运算后生成的是线要素文件,相当于把面线相交部分的线单独拿了出来。操作例子:将图示的面层和线层相交处理。…

区块链3.0:拥抱EOS
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 EOS是当下最火的区块链技术,被社会广泛看好为下一代区块链3.0。不同于以太坊的学习,EOS的主语言是C,本文作为EO…

python3.9.0 print_关于 Python 3.9,那些你不知道的事
原标题:关于 Python 3.9,那些你不知道的事作者 | Ayushi Rawat编译 | 高卫华题图 | 视觉中国Python一直在满足社区需求,并且将成为未来使用最多的语言。Python的下一个版本带来了更快速的进程释放,性能的提升,简便的新…