智能合约的编译与ABI
假设写了一个智能合约,比如:store.sol。
希望在此合约部署到以太坊后,用golang来调用此合约相应的方法等。
此时我们可以根据store.sol来生成一个.go文件,此.go文件将包含我们的Go应用程序中和智能合约进行交互的所有可用方法。
那如何由.sol文件,生成.go文件呢?网络上很多教程,只要如下命令行一步即可实现
abigen --sol --pkg=store --out=store.go
或者两步走,先生成abi和bin,再根据abi和bin生成.go文件
solc --abi --bin store.solabigen --abi=store.abi --bin=store.bin --pkg=store --out=store.go
但是这方法,只是适用于简单的智能合约。
如果我们的智能合约比较复杂,import了其它的第三方文件,或者第三方智能合约,比如以下的合约,就需要其它方法了。
// Copyright joey network contributors
// SPDX-License-Identifier: (Apache-2.0 AND CC-BY-4.0)
// Code is Apache-2.0 and docs are CC-BY-4.0pragma solidity ^0.8.0;import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
首先,在项目root路径下,新建node_modules目录,在项目root路径执行如下命令,下载所需的第三方文件
npm install @openzeppelin/contracts-upgradeablenpm install @openzeppelin/contracts
这样,就会把依赖的第三方文件下载到项目root路径下的node_modules目录(本例子是用node包来管理的,如果不是,原理也是按项目结构,把依赖按照下载到相应目录)
然后,首先生成abi和bin,注意:solc要求版本比较高,0.8.0不支持,我使用的是0.8.13
solc --include-path ./node_modules/ --base-path . --optimize --bin --abi --overwrite -o ./ store.sol
然后,再根据abi和bin生成.go文件
abigen --abi=store.abi --bin=store.bin --pkg=store --type=Store --out=store.go
注意:--type=Store,指定了生成的.go文件中的合约struct的名字;如果没有--type参数,合约struct的名字缺省就是--pkg的值。
智能合约的编译与ABI相关推荐
- NEO智能合约反编译工具
2019独角兽企业重金招聘Python工程师标准>>> 0x00 前言 下拉最后看演示效果.项目地址 本来这应该是一个很和谐的感恩节假期,本来我可以很悠闲的写完所有作业然后随便看点论 ...
- 数字商品指南系列第三篇:编写智能合约并编译部署
文章目录 前言 警告 完善项目结构 编写合约代码 编译合约 部署合约 总结 捐赠渠道 前言 智能合约为数字藏品提供技术支持,它可以定义数字藏品的简称.全称.发行数量.铸造方法.版权税等等,所有关于数字 ...
- 以太坊智能合约函数参数ABI编码,动态类型string编码,函数参数的ABI编码, 含c++代码
官方文档讲得不全也不是很清楚,特别是动态类型string.这里补充. 以太坊的智能合约ABI编码,官方文档和说明:https://solidity.readthedocs.io/en/v0.6.8/a ...
- 区块链: 编译发布智能合约
什么是智能合约?? 智能合约与平时的代码其实没有什么区别,只是运行于一个以太坊这样的分布式平台上而已.这个运行的平台,赋予了这些代码不可变,确定性,分布式和可自校验状态等特点.代码运行过程中状态的存储 ...
- EOS智能合约编译部署
跟随大家学习编程语言一样,每次都会首先写一段代码,打印"hello,wrold".通过对EOS的学习,今天将编译一个简单的hello智能合约部署到EOS私有链上. 1.EOS智能合 ...
- 代币转账_手把手教你从源代码开始搭建多节点以太坊私链(五)部署智能合约及代币发行...
一.安装以太坊合约编译环境 安装solc 智能合约代码的编译可以通过第三方平台或者软件.不过,为了安全起见,还是搭建自己的编译器比较好.(But be aware that if the compil ...
- 区块链安全-以太坊智能合约静态分析
概述 目前,以太坊智能合约的安全事件频发,从The DAO事件到最近的Fomo3D奖池被盗,每次安全问题的破坏力都是巨大的,如何正确防范智能合约的安全漏洞成了当务之急.本文主要讲解了如何通过对智能合约 ...
- Foundry教程:ERC-20代币智能合约从编写到部署全流程开发
概述 如果你想获得更好的阅读体验,请前往我的博客 本博客的内容主要分为以下四部分: 一是Foundry的介绍与安装,主要介绍为什么选择Foundry进行智能合约开发和安装过程中的各种官方文档中未提及的 ...
- 智能合约安全(一):以太坊机制及安全问题
在本系列中,我们将对以太坊现有的安全问题和前沿的各类型漏洞挖掘方法进行综述.本文是本系列的第一篇文章,主要介绍以太坊的机制和存在的安全问题的分类. 01 什么是以太坊智能合约? 以太坊智能合约基于区块 ...
最新文章
- spring Batch实现数据库大数据量读写
- 《数学建模:基于R》一一2.2 方差分析
- mysql -- 预处理语句
- Vue为v-html中标签添加CSS样式
- Bzoj1312 / POJ3155 Neerc2006 Hard Life
- HTTPClient系统学习
- UIview需要知道的一些事情:setNeedsDisplay、setNeedsLayout
- 工作总结12:封装组件
- stl 优先队列(堆)
- ASP.NET MVC下基于异常处理的完整解决方案
- python是什么专业学的-什么样的人适合学Python,应该怎么学?
- 配置Pylint for Python3.5
- [转]EntityFramework Core技术线路(EF7已经更名为EF Core,并于2016年6月底发布)
- python评委打分代码_使用python实现男神女神颜值打分系统(推荐)
- Axure产品设计软件视频教程大全
- 中国人工智能发展的现状
- 交换机连接路由器计算机联网,交换机上连接路由器_连上路由器(交换器)后部分电脑无法上网的解决方法_交换机上接路由器...
- 千呼万唤始出来,犹抱琵琶半遮面,揭开ArrayList的扩容机制的神秘面纱
- [HNOI2018]毒瘤
- NBA球员出手位置分布图