资讯专栏INFORMATION COLUMN

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

philadelphia / 3451人阅读

摘要:文件地址智能合约文件由部分组成定义类型的别名各个类型的数据结构智能合约的数据结构体李嘉图条款注格式不支持注释,上面的双斜线大家理解就好。是李嘉图合约,刚刚被加入到智能合约中,官方还没有进一步说明。

详解 EOS 智能合约的 abi 文件

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

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 官方还在开发中。


相关文章和视频推荐

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

圆方圆学院汇集大批区块链名师,打造精品的区块链技术课程。 在各大平台都长期有优质免费公开课,欢迎报名收看。
公开课地址:https://ke.qq.com/course/345101

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/24418.html

相关文章

  • 晓笛EOS智能合约案例解析(1)

    摘要:构造函数为空,参数为智能合约账户名。每个智能合约类都要继承类类构造函数创建代币函数声明函数,这个函数用来新建一种代币,并输入代币的各种属性,同时函数也是一个。 详解 EOS 智能合约的 hpp 文件 为了帮助大家熟悉 EOS 智能合约,EOS 官方提供了一个代币(资产)智能合约 Demo —— eosio.token。eosio.token 智能合约目前还不是特别完善,个别功能还没有完...

    forsigner 评论0 收藏0
  • 晓笛EOS 智能合约案例解析(2)

    摘要:相关文章和视频推荐许晓笛智能合约案例解析许晓笛智能合约案例解析圆方圆学院汇集大批区块链名师,打造精品的区块链技术课程。 详解 EOS 智能合约的 cpp 文件 之前的文章介绍了 eosio.token 智能合约的 hpp 文件,这次向大家介绍 eosio.token.cpp 文件,cpp 文件即 C++ 代码文件,智能合约所有的业务逻辑内容都是在 cpp 文件中实现的。 eosio.t...

    mengbo 评论0 收藏0
  • 晓笛】49行代码就能发币?而且EOS连例子都给你了

    摘要:相关文章和视频推荐许晓笛智能合约案例解析圆方圆学院汇集大批区块链名师,打造精品的区块链技术课程。 Daniel Larimer 在他的博客介绍了EOS新的智能合约架构(EOS团队的开发速度实在是太吓人,根本追不上)。他给出了最简单的一个新币种的智能合约代码,仅有49行就能完成一个新币种的开发,一个新的爱息欧就诞生了。让我们一步一步实现吧。 首先实现私有成员,建立一个 account 结...

    Freeman 评论0 收藏0
  • 晓笛】深入理解 EOS 账户权限映射

    摘要:为了解决这个问题,采取了三步用户账户自定义分级权限。用户权限与智能合约之间的映射。图中不难看出,权限是账户最高权限,可以执行权限。如果没有发现任何符合的映射,会直接检查本次执行是否满足了权限,若不足,会检查。 到底什么叫智能合约? 名词解释:本篇文章出现很多 Action 和 Active,Action (动作)为 EOS 中账户可以接受的动作,也就是别人可以对你做什么;Active ...

    zacklee 评论0 收藏0
  • 晓笛EOS 新增的 WebAssembly 解释器,是什么鬼?

    摘要:对于很多没有中间语言的字节码的编程语言来说,根本不存在解释执行与编译执行的选项,比如传统只能编译执行,直接将代码编译成为可执行的二进制机器码,我们电脑上文件就是编译的成果。 Daniel Larimer 在最近的博客中透露,EOS 新增了官方的 WebAssembly 解释器,用来解释执行 WebAssembly 智能合约,加上之前的编译执行,EOS 智能合约有了两种执行方式。 对于很...

    SunZhaopeng 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<