以太坊abi

什么是abi

ABI是Application Binary Interface的缩写,字面意思 应用二进制接口,可以通俗的理解为合约的接口说明。当合约被编译后,那么它的abi也就确定了。

我们来看看一个很简单的合约和它的abi

合约代码如下:

1
2
3
4
5
6
7
pragma solidity ^0.4.4; 
contract test {  
    string public a; 
    function modify_a(string val) { 
        a = val; 
    
}    

经过编译之后,它的字节码如下:

1
6060604052341561000c57fe5b5b60e18061001b6000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630dbe671f146044578063efa3b144146067575bfe5b3415604b57fe5b60516098565b6040518082815260200191505060405180910390f35b3415606e57fe5b60826004808035906020019091905050609e565b6040518082815260200191505060405180910390f35b60005481565b60006005820260008190555060005490505b9190505600a165627a7a72305820e7910925075fb58319dd637b47520b821714dd11ad896cb6d8272151aff714690029

abi如下,是json格式的

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
  
    "constant": true, 
    "inputs": [ 
   
    ], 
    "name": "a", 
    "outputs": [ 
      
        "name": "", 
        "type": "uint256" 
      
    ], 
    "payable": false, 
    "type": "function" 
  }, 
  
    "constant": false, 
    "inputs": [ 
      
        "name": "val", 
        "type": "uint256" 
      
    ], 
    "name": "modify_a", 
    "outputs": [ 
      
        "name": "", 
        "type": "uint256" 
      
    ], 
    "payable": false, 
    "type": "function" 
  

可以看到,这是一个json格式的数组,它包含两个对象,每个对象都对应着一个合约方法,这里因为a是public类型的,编译的时候会自动为它生成get()方法,所以这个合约实际是包含两个方法的,我们对方法的参数做一下整理。

>type  方法类型,包括function,constructor,fallback(缺省方法)可以缺省,默认为function

>name  方法名

>inputs  方法参数,它是一个对应数组,数组里的每个对象都是一个参数说明

     name 参数名

     type  参数类型

>outputs  方法返回值,格式和inputs类型一样,如果没有返回值可以缺省

>constant  布尔值,如果为true说明方法不会修改合约的状态变量

>payable  布尔值,标明方法是否可以接受ether

构造方法和缺省方法不能有name和outputs,缺省方法也不能有inputs,向一个没有payable标注的方法发送ether会抛异常。

posted @   人艰不拆_zmc  阅读(411)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2015-03-06 sdut3140 A*B(math)
2015-03-06 sdut3138: N!(计算n!中结尾零的个数)
点击右上角即可分享
微信分享提示