这次向大家介绍 eosio.token 智能合约的最后一个文件 —— abi文件。ABI 全称 Application Binary Interface,中文名“应用程序二进制接口”,顾名思义是一个接口文件,描述了智能合约与上层应用之间的数据交换格式。abi 文件格式类似 JSON,具备很好的可读性,有利于智能合约工程师与上层应用工程师之间的工作衔接。
eosio.token.abi 文件地址: https://github.com/EOSIO/eos/blob/master/contracts/eosio.token/eosio.token.abi

EOS 智能合约 abi 文件由 5 部分组成:

{
    "types":[...],              //定义类型的别名
    "structs":[...],            //各个类型的数据结构
    "actions":[...],            //智能合约的 action
    "tables":[...],             //数据结构体
    "ricardian_clauses":[...]   //李嘉图条款

}

注:JSON 格式不支持注释,上面的双斜线大家理解就好。
我们将按照 actions -> structs -> tables -> structs -> types -> ricardian_clauses 的顺序了解 EOS 智能合约 abi 的开发方法。

actions

action 部分的作用是声明智能合约有哪些可以调用的 action。如下所示。

 "actions": [{"name": "transfer","type": "transfer","ricardian_contract": ""},{"name": "issue","type": "issue","ricardian_contract": ""}, {"name": "create","type": "create","ricardian_contract": ""}]

其中每一项的 name 就是 action 的名字,type 用来在 structs 中查找数据结构。ricardian_contract 是李嘉图合约,刚刚被加入到 EOS 智能合约中,官方还没有进一步说明。

structs

刚才的只声明了三个 action 的名称,我们还要在 structs 里声明各个 action 需要传入的参数,如下所示。

 "structs": [{"name": "transfer","base": "","fields": [{"name":"from", "type":"account_name"},{"name":"to", "type":"account_name"},{"name":"quantity", "type":"asset"},{"name":"memo", "type":"string"}]},{"name": "create","base": "","fields": [{"name":"issuer", "type":"account_name"},{"name":"maximum_supply", "type":"asset"},{"name":"can_freeze", "type":"uint8"},{"name":"can_recall", "type":"uint8"},{"name":"can_whitelist", "type":"uint8"}]},{"name": "issue","base": "","fields": [{"name":"to", "type":"account_name"},{"name":"quantity", "type":"asset"},{"name":"memo", "type":"string"}]}]

EOS 系统会根据 actions 部分中声明的 type ,在 structs 部分寻找对应的数据结构,每个数据结构的 fields 中,会列出每个参数的名称和类型。

tables

tables 列出了 智能合约中需要建立的数据表名称,以及数据表中所储存的结构体名称。

 "tables": [{"name": "accounts","type": "account","index_type": "i64","key_names" : ["currency"],"key_types" : ["uint64"]},{"name": "stat","type": "currency_stats","index_type": "i64","key_names" : ["currency"],"key_types" : ["uint64"]}]

其中的 type 就是数据表中所储存的结构体名称。

structs

为什么又回到 structs 了呢,因为不光是 action 里的项目需要在 structs 里列出详细的数据结构,tables 中的项目也需要。

 "structs": [{"name": "account","base": "","fields": [{"name":"balance", "type":"asset"},{"name":"frozen", "type":"uint8"},{"name":"whitelist", "type":"uint8"}]},{"name": "currency_stats","base": "","fields": [{"name":"supply", "type":"asset"},{"name":"max_supply", "type":"asset"},{"name":"issuer", "type":"account_name"},{"name":"can_freeze", "type":"uint8"},{"name":"can_recall", "type":"uint8"},{"name":"can_whitelist", "type":"uint8"},{"name":"is_frozen", "type":"uint8"},{"name":"enforce_whitelist", "type":"uint8"}]}]

types

types 部分用来建立类型的别名,比如你想给 account_name 类型建立一个别名:

"types": [{"new_type_name": "account_name","type": "name"}]

这样在这个 abi 文件里就可以用 name 来代替 account_name了。

ricardian_clauses

有关李嘉图条款的部分 EOS 官方还在开发中。

转自:https://blog.csdn.net/yuanfangyuan_block/article/details/80403329

EOS智能合约案例解析(下)相关推荐

  1. 【许晓笛】 EOS智能合约案例解析(1)

    详解 EOS 智能合约的 hpp 文件 为了帮助大家熟悉 EOS 智能合约,EOS 官方提供了一个代币(资产)智能合约 Demo -- eosio.token.eosio.token 智能合约目前还不 ...

  2. 【许晓笛】 EOS 智能合约案例解析(2)

    详解 EOS 智能合约的 cpp 文件 之前的文章介绍了 eosio.token 智能合约的 hpp 文件,这次向大家介绍 eosio.token.cpp 文件,cpp 文件即 C++ 代码文件,智能 ...

  3. 【许晓笛】 EOS智能合约案例解析(1) 1

    详解 EOS 智能合约的 hpp 文件 为了帮助大家熟悉 EOS 智能合约,EOS 官方提供了一个代币(资产)智能合约 Demo -- eosio.token.eosio.token 智能合约目前还不 ...

  4. 【许晓笛】EOS 智能合约案例解析(2)

    详解 EOS 智能合约的 cpp 文件 之前的文章介绍了 eosio.token 智能合约的 hpp 文件,这次向大家介绍 eosio.token.cpp 文件,cpp 文件即 C++ 代码文件,智能 ...

  5. 【许晓笛】EOS智能合约案例解析(1)

    为了帮助大家熟悉 EOS 智能合约,EOS 官方提供了一个代币(资产)智能合约 Demo -- eosio.token.eosio.token 智能合约目前还不是特别完善,个别功能还没有完成.但这个示 ...

  6. c++ eos智能合约开发_EOS开发完全解析(六):手摸手实现第一个EOS智能合约——Hello EOS...

    一.概述 EOS智能合约由C++编写,所以真正商业开发的时候,肯定是需要全面学习C++语法的,通过最近爆出的越来越多的合约漏洞我们就知道问题的严重性了.可以毫不客气的说,写智能合约要比写以往任何代码都 ...

  7. EOS智能合约授权限制和数据存储

    EOS智能合约授权限制和数据存储 在EOS合约中,调用合约需要来自账户的授权,同时还要指定需要调用的动作.当然,有的合约并不是所有账户都可以调用的,这就需要用到授权限制.接下来我们就来看看如何限制合约 ...

  8. c++ eos智能合约开发_十分钟教你开发EOS智能合约

    EOS环境搭建和启动节点 下面从EOS入门的环境搭建.编译运行一个智能合约.发送一些Aigsen,给大家做一些展示,希望能让非技术人员也有一些收获. 首先下载EOS环境搭建和启动节点.这一步其实还是比 ...

  9. 十分钟教你开发EOS智能合约

    十分钟教你开发EOS智能合约 在CSDN.柏链道捷(PDJ Education).HelloEOS.中关村区块链产业联盟主办的「EOS入门及最新技术解读」专场沙龙上,柏链道捷(PDJ Educatio ...

最新文章

  1. mysql 百度bae乱码 php,[PHP]如何在百度(BAE)和新浪(SAE)的云平台使用PHP连接MySQL并返...
  2. bitmap文件格式分析
  3. 顺序表的基本操作实验报告_INDIRECT函数从入门到进阶之相同顺序跨表引用
  4. 第三章用sql语句操作数据
  5. java背景图片加上组件_关于 java swing组件加背景图片的问题
  6. 北航|北京航空航天大学|介绍|简介
  7. 美国发布“几乎无法入侵”的国家量子互联网蓝图,计划十年内出原型
  8. MAVEN(一)中的Scope
  9. 曲线在三维空间的旋转计算以及Matlab实例实现
  10. 学习平面设计有哪些前途
  11. 作为一个程序员,如何保持优秀
  12. 绕过安卓SSL验证证书的常见四种方式
  13. html怎样设置图片的圆角矩形,css怎么画圆角矩形?
  14. 华为光纤交换机zone配置
  15. tdm的应用计算机,2021计算机考研备考知识:TDM时分复用技术
  16. 解决Win系统cad激活安装失败问题,AutoCad 2022 中文/英文正式详细安装教程
  17. 离线安装金蝶Apusic中间件
  18. 题解:NOIP2013-货车运输
  19. GTA5美化MOD了,这套MOD真的绝了……?
  20. 广东电网携手华为,为“数字电网”建设提供有力支撑

热门文章

  1. 树莓派读取usb摄像头
  2. NCCloud OpenAPI扩展开发
  3. 点击网页上的联系我们弹出QQ对话框的实现
  4. Oracle 设置 sort au,oracle数据库拼音排序及NLS_SORT配备[转]
  5. 2023新年倒计时(付源码)
  6. linux_防火墙的安装
  7. 启天M4300设置BIOS开机启动密码
  8. 基于Apriori算法的菜品组合挖掘
  9. 简易DIV垂直居中阴影层笼罩JS实现
  10. [git可视化软件]gitkraken6.5.1 免费版不能正常使用的解决办法