温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
  • 忘记密码?
登录注册×
获取短信验证码
其他方式登录
点击 登录注册 即表示同意 《亿速云用户服务条款》
  • 服务器
  • 数据库
  • 开发技术
  • 网络安全
  • 互联网科技
登 录 注册有礼
最新更新 网站标签 地图导航
产品
  • 首页 > 
  • 教程 > 
  • 互联网科技 > 
  • 以太坊智能合约ABI怎么获取

以太坊智能合约ABI怎么获取

发布时间:2021-12-29 14:16:12 来源:亿速云 阅读:2375 作者:iii 栏目: 互联网科技

本篇内容介绍了“以太坊智能合约ABI怎么获取”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

以太坊智能合约ABI怎么获取

ABI(Application Binary Interface)

如果理解 API 就很容易了解 ABI。简单来说,API 是程序与程序间互动的接口。这个接口包含程序提供外界存取所需的 functions、variables 等。ABI 也是程序间互动的接口,但程序是被编译后的 binary code。所以同样的接口,但传递的是 binary 格式的信息。所以 ABI 就要描述如何 decode/encode 程序间传递的 binary 信息。下图以 Linux 为例,描述 Linux 中 API、ABI 和程序的关系。

以太坊智能合约ABI怎么获取

编译和部署智能合约

在 Ethereum 智能合约可以被大家使用前,必须先被部署到区块链上。

从智能合约的代码到使用智能合约,大概包含几个步骤:

  1. 编写智能合约的代码(一般是用 Solidity 写)

  2. 编译智能合约的代码变成可在 EVM 上执行的 bytecode(binary code)。同时可以通过编译取得智能合约的 ABI

  3. 部署智能合约,实际上是把 bytecode 存储在链上(通过一个transaction),并取得一个专属于这个合约的地址

  4. 如果要写个程序调用这个智能合约,就要把信息发送到这个合约的地址(一样的也是通过一个 transaction)。Ethereum 节点会根据输入的信息,选择要执行合约中的哪一个 function 和要输入的参数

而要如何知道這这个智能合约提供哪些 function 以及应该要传入什么样的参数呢?这些信息就是记录在智能合约的 ABI!

Ethereum 智能合约 ABI

Ethereum 智能合约 ABI 用一个 array 表示,其中会包含数个用 JSON 格式表示的 Function 或 Event。根据最新的 Solidity 文件:

Function

共有 7 个参数:

  1. name:a string,function 名称

  2. type:a string,"function", "constructor", or "fallback"

  3. inputs:an array,function 输入的参数,包含:

    • name:a string,参数名

    • type:a string,参数的 data type(e.g. uint256)

    • components:an array,如果输入的参数是 tuple(struct) type 才会有这个参数。描述 struct 中包含的参数类型

  4. outputs:an array,function 的返回值,和 inputs 使用相同表示方式。如果沒有返回值可忽略,值为 []

  5. payabletrue,function 是否可收 Ether,预设为 false

  6. constanttrue,function 是否会改写区块链状态,反之为 false

  7. stateMutability:a string,其值可能为以下其中之一:"pure"(不会读写区块链状态)、"view"(只读不写区块链状态)、"payable" and "nonpayable"(会改区块链状态,且如可收 Ether 为 "payable",反之为 "nonpayable")

仔细看会发现 payable 和 constant 这两个参数所描述的內容,似乎已包含在 stateMutability 中。

事实也确实是这样的,在 Solidity v0.4.16 中把 constant 这个修饰function 的 key words 分成: view(neither reads from nor writes to the state)和 pure(does not modify the state),并从 v0.4.17 开始 Type Checker 会强制检查。constant 改为只用来修饰不能被修改的 variable。并在 ABI 中加入 stateMutability 这个参数统一表示,payable 和 constant 目前保留是为了向后兼容。这个改动详细的內容和讨论可参考: https://github.com/ethereum/solidity/issues/992

Event

共有 4 个参数:

  1. name: a string,event 的名称

  2. type: a string,always "event"

  3. inputs: an array,输入参数,包含:

    • name: a string,参数名称

    • type: a string,参数的 data type(e.g. uint256)

    • components: an array,如果输入参数是 tuple(struct) type 才会有这个参数。描述 struct 中包含的信息类型

    • indexedtrue,如果这个参数被定义为 indexed ,反之为 false

  4. anonymoustrue,如果 event 被定义为 anonymous

更新智能合约状态需要发送 transaction,transaction 需要等待验证,所以更新合约状态是非同步的,无法马上取得返回值。使用 Event 可以在状态更新成功后,将相关信息记录到 Log,并让监听这个 Event 的 DApp 或任何应用这个接口的程序收到通知。每笔 transaction 都有对应的 Log。

所以简单来说,Event 可用來:1. 取得 function 更新合约状态的返回值 2. 也可作为合约另外的存储空间。

Event 的参数分为:有 indexed,和其他没有 indexed 的。有 indexed 的参数可以使用 filter,例如同一个 Event,我可以选择只监听从特定 address 发出来的交易。每笔 Log 的信息同样分为两个部分:Topics(长度最多为 4 的 array) 和 Data。有 indexed 的参数会存储存在 Log 的 Topics,其他的存在 Data。如果定义为 anonymous,就不会产生以下示例中的 Topics[0],其值为 Event signature 的 hash,作为這個 Event 的 ID。

以太坊智能合约ABI怎么获取

event Set(address indexed _from, uint value)

用一个简单的智能合约举个例子

这个智能合约包含:

  • data:一个可修改的 state variable,会自动产生一个只能读取的 data() function

  • set():一个修改 data 值的 function

  • Set():一个在每次修写 data 时记录 Log 的 event

智能合约 Source Code:

pragma solidity ^0.4.20;
contract SimpleStorage {
    uint public data;
    event Set(address indexed _from, uint value);
    function set(uint x) public {
        data = x;
        Set(msg.sender, x);
    }
}

智能合约 ABI:

[{
        "constant": true,
        "inputs": [],
        "name": "data",
        "outputs": [{"name": "","type": "uint256"}],
        "payable": false,
        "stateMutabㄒility": "view",
        "type": "function"
    },
    {
        "anonymous": false,
        "inputs": [{"indexed": true,"name": "_from","type": "address"},{"indexed": false,"name": "value","type": "uint256"}],
        "name": "Set",
        "type": "event"
    },
    {
        "constant": false,
        "inputs": [{"name": "x","type": "uint256"}],
        "name": "set",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
}]

取得 Ethereum 智能合约 ABI

Solidity Compiler

可以用 Solidity Compiler 取得合约 ABI,我使用 JavaScript 版本的 Compiler 为例。

安装:

npm install solc -g

取得合约 ABI:

solcjs simpleStorage.sol --abi

会生成一个 simpleStorage_sol_SimpleStorage.abi 文件,里面就是合约ABI 內容。

也可以取得合约的 binary code:

solcjs your_contract.sol --bin

Remix

同样的使用 Solidity Compiler,也可以用 Remix。在合约的 Details 可以看到完整的 ABI。可以在 Settings 中指定 Compiler 版本。

以太坊智能合约ABI怎么获取

Etherscan

许多知名合约会把合约 source code 放上 Etherscan 做验证,可以同时看到h 合约ABI。

以太坊智能合约ABI怎么获取

另外 Etherscan 提供 API,可用来取得经过验证的合约 ABI。

“以太坊智能合约ABI怎么获取”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节
推荐阅读:
  1. 以太坊众筹智能合约怎么实现
  2. 以太坊智能合约怎么写

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

以太坊 abi
  • 上一篇新闻:
    sar怎么用
  • 下一篇新闻:
    怎么用Visual Studio Code和CLion进行EOS开发

猜你喜欢

  • Heygen算法在智慧城市建设中的交通流量优化应用如何实现
  • 在使用Heygen算法处理海量文本数据时
  • Heygen算法在动态资源分配和调度问题中的表现如何
  • 如何将Heygen算法应用于在线学习系统
  • 使用Heygen算法进行游戏理论分析和策略优化的方法是什么
  • Heygen算法如何处理非结构化数据集中的模式识别
  • 在部署Heygen算法到生产环境时,应该注意哪些性能优化技巧
  • Heygen算法对于改进搜索引擎算法有哪些潜在贡献
  • 如何评估Heygen算法在预测复杂经济模型时的准确性
  • Heygen算法在处理大规模图像数据时内存管理的最佳实践是什么
最新资讯
  • Git中如何设置查看日志的默认格式
  • 如何在Git中清理和整理个人分支与远程分支的关系
  • Git中分支保护规则的设立和管理最佳实践是什么
  • 如何在Git中配置和使用多个SSH密钥
  • Git中如何用图形界面展示分支策略和历史
  • 如何在Git中找出没有遵循团队约定的提交
  • Git中如何回滚到某个标签所指向的提交
  • 如何在Git中利用git-bisect自动化测试来定位引入bug的提交
  • 如何在Git中避免因误操作造成的数据丢失
  • Git中如何利用包含条件语句的.gitconfig提高工作效率
相关推荐
  • 如何部署以太坊智能合约到infura
  • 以太坊智能合约交易及交易费用怎么理解
  • 以太坊智能合约设计模式怎么实现
  • 以太坊智能合约怎么理解
  • 以太坊智能合约开发语言怎么选择
  • 以太坊智能合约的DApp怎么实现
  • 如何通过java打包以太坊智能合约
  • 以太坊DAO股东协会智能合约怎么实现
  • 以太坊智能合约怎么创建
  • Java如何调用以太坊智能合约

相关标签

cabinet availabilit reachability availability databinding TCGAbiolinks capabilities jackson-databind python 升级 教程 api php linux 开发 入门 应用 虚拟机 学习 go
AI

PHP网站源码益阳企业网站设计哪家好大芬至尊标王推荐张掖seo网站优化价格坂田SEO按天收费公司秦皇岛外贸网站设计公司安阳建网站多少钱霍邱网站优化按天扣费哪家好衡水营销型网站建设价格运城百搜标王哪家好信阳网站推广推荐白银seo排名多少钱阜阳网站seo优化运城seo价格迪庆关键词按天计费多少钱大丰网络营销长沙网页设计哪家好郑州外贸网站建设丹竹头网络推广哪家好思茅高端网站设计价格洛阳设计公司网站价格德州SEO按天收费推荐楚雄百姓网标王公司曲靖网站优化哪家好连云港seo网站优化公司湛江至尊标王沈阳模板制作价格红河网站优化软件多少钱湖州百度关键词包年推广公司武汉网站制作设计公司株洲百度标王报价歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化