【EOS】2.3 深入理解ABI文件

ABI文件,全称为Application Binary Interface,是智能合约的接口描述,基于JSON格式,用于在JSON和二进制格式之间转换用户操作。本文详细介绍了ABI文件的组成部分,包括Types、Actions、Structs和Tables,帮助开发者理解和构建ABI文件,以便于与EOS智能合约进行交互。
摘要由CSDN通过智能技术生成

在前面2.2节部署eos.token合约时,使用的是提供好的ABI文件。

智能合约是附着在账号上的,所以智能合约一定对应着一个账号。

什么是ABI文件?

全称是Application Binary Interface,翻译为中文就是应用程序二进制接口,这个和API有相同的内涵啊,都是接口,接口就意味着可以对外提供服务,但是怎么用需要按照接口指定。

ABI文件是基于JSON格式的描述,描述的内容是:如何将用户的操作在JSON格式和二进制格式之间进行转化

JSON_BINARY

此外,ABI文件还描述如何在数据库状态和JSON格式文件之间进行转换。

简而言之,一旦我们用ABI文件对智能合约进行描述之后,开发者和用户们就能轻而易举的用JSON文件与智能合约交互了。

值得注意的是,ABI文件只是一个交互说明,而不是强制执行,所以,可以向智能合约传递非严格按照ABI文件说明的数据。

构建ABI文件
{
   
   "version": "eosio::abi/1.0",
   "types": [],
   "structs": [],
   "actions": [],
   "tables": [],
   "ricardian_clauses": [],
   "abi_extensions": [],
   "___comment" : ""
}

Types

自定义数据类型需要在ABI文件中进行描述,但是对于EOS.IO的内建类型,无需在ABI文件中说明,之前的helloeos.token合约的ABI文件中,types都是[],因为没有自定义类型。

这里,其实是给类型建立别名:

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

这个示例就是给account_name建立一个笔名,在ABI文件里用name可以代替account_name

Actions

用于声明智能合约有哪些可以调用的action

{
   
  "name": "transfer", 			// 在智能合约中定义的操作
  "type": "transfer", 			// 在structs中声明的数据结构名
  "ricardian_contract": "" 	// 可选参数,开发中
}

name字段表示操作的名字,也是定义的函数名字,type字段用于在structs中查找数据结构,ricardian_contract,待定。nametype一般相同,但不要求相同,即:一般情况下,函数名和结构体名相同,但并不要求相同。

示例:

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

这里是声明了三个操作。

Structs

声明各个action需要传入的参数,系统根据actions部分中声明的type,在structs部分寻找对应的数据结构,也就是说,函数声明部分并没包含具体内容,具体数据需要到structs中寻找。

总体内容如下:

{
   
   "name": "issue",  // 数据结构名
   "base": "", 			// 继承的父结构名
   "fields": []			// 参数数组,包含参数名和类型
}

其中,fields字段中数组元素类型如下:

{
   
	"name":"",
	"type":""
}

注意,这些structs字段里的数据,并非全部是显式声明的,有些对应的是操作的参数。

示例:

 "structs": [{
   
      "name": "transfer",
      "base
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值