使用Go语言和以太坊智能合约交互

2023-11-12

尽管最近遇到了些麻烦,但以太坊仍然是区块链领域内智能合约的最大参与者,这似乎不会很快改变。

在我看来,技术本身具有很大的潜力,是从学术的角度看很有意思,但正如上面提到的问题和之前的许多问题是区块链技术方面的,智能合约,特别是具有Solidity的以太坊生态系统还是不太成熟的,并没有为prime-time和生产用例做好准备。

然而,这是一个学习和了解这项技术的好时机,并且当它达到严格应用程序的可接受成熟度前,需要做好准备。

在我之前关于Solidity的帖子中,我创建了一个带有简单的Winner-Takes-All Crowdfunding合约的小应用程序。在这篇文章中,我们将用到其中的contract.sol,看看我们是否可以使用Go部署它并与之交互。

为什么是go?好问题,go语言是令人惊讶的而且使用最广泛的以太坊客户端使用go写的,这意味着有一个很好的生态系统使用已经转为具有很好的功能,如代码生成和可重复使用的助手和智能合约互动的共享库。

在这个例子中,我们将不使用真实的区块链作为部署目标,而是使用由go-ethereum,所以我们可以安全地测试并没有花费任何金钱实验提供的SimulatedBackend。

智能合约本身非常简单:我不会详细介绍它的功能或工作方式,因为已经涵盖了这一点。可以说,合约部署有3个参数:

  • 项目的最低入场费。
  • 提交新项目的截止日期。
  • 支持项目的截止日期。

然后,在第一阶段,可以使用名称和网址提交项目,其中至少包含交易的最低费用。在第二阶段,可以通过将以太发送到合约中的地址来支持项目。

但是,在这篇文章中,我们将重点关注:

  • 部署合约
  • 从合约中读取数据
  • 与合约互动(交易)
  • 通过地址实例化已部署的合约

我们将在Go和70行代码中完成所有操作。让我们开始吧!

代码示例

为了能够跟踪,你需要一些东西。首先也是最重要的是,你需要solc Solidity编译器。

然后,只需获取go-ethereum并构建它:

go get github.com/ethereum/go-ethereum
cd $GOPATH/src/github.com/ethereum/go-ethereum/
make
make devtools

好吧,使用solc和geth devtools,我们可以从生成contract.sol文件的Go版本开始,该文件包含我们的智能合约:

abigen --sol=Contract.sol --pkg=main --out=contract.go

生成的代码看这里

如你所见,我们有部署和实例化合约的方法,以及所有公共合约方法到Go的映射。

下一步是将合约部署到模拟后端。

为此,需要进行一些设置。如上所述,为了简单起见,我们将使用SimulatedBackend作为我们的目标区块链,但在本文的最后,将有一个关于如何使用testnet甚至真正的以太坊区块链进行此操作的简短部分。

使用go-ethereum的一些依赖关系,我们可以开始设置:

import(
    "fmt"
    "log"
    "math/big"
    "time"

    "github.com/ethe
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Go语言和以太坊智能合约交互 的相关文章

随机推荐

  • 安装android时遇到的困难

    1 The type org openqa selenium remote http HttpClient Factory cannot be resolv 的解决方法就是更换2 53 0的selenium的jar包 2 在dos中输入an
  • mysql数据库sequence序列表使用记录

    一 需求背景 如何确保一个序列号是按自己定义的规则依次递增 实际项目需求如下 在商户表有商户费率模板号这个字段 我们要求该字段的规则是 ST 当前日期YYYYMMDD 6位序列号 左边不够是用0填补 如 TS20200610000001和T
  • sql中视图视图的作用

    视图是一个虚拟表 其内容由查询定义 同真实的表一样 视图包含一系列带有名称的列和行数据 但是 视图并不在数据库中以存储的数据值集形式存在 行和列数据来自由定义视图的查询所引用的表 并且在引用视图时动态生成 对其中所引用的基础表来说 视图的作
  • 解决OracleOraDb10g_home1TNSListener配置问题

    解决方式一 从客户端连接到服务器 出现了这个错误 ora12541 TNS 没有监听器 于是 在服务器中启动OracleOraHome92TNSListener服务 显示 在本地计算机无法启动OracleOraHome92TNSListen
  • Windows环境下Robot Framework 安装包下载及安装流程

    RobotFramework 32位 安装 一 准备安装包 1 python 2 7 13 msi下载 2 robotframework 3 0 2 tar gz下载 3 robotframework ride 1 3 win32 exe下
  • PicGo + 阿里云图床上传失败解析

    在图片上传失败的时候 直接去看PicGo的配置文件 上传失败就是你配置哪里有问题 因为服务器不可能出问题 你typora的软件也不可能出问题 出问题的就只有PickGo这个中间配置软件了 其实就是一个json 配置文件 里面有需要的各种账户
  • 安装Scala

    前言 本文主要讲解如何在Windows10中安装Scala 并在IDEA中配置Scala的开发环境 Scala作为大数据开发中的常用编程语言 特别是Spark更是直接用Scala开发而来 因此使用Scala进行大数据开发十分必要 下载安装包
  • dos命令弹出对话框---Msg命令详解

    dos命令弹出对话框 Msg命令详解 cmd下执行 在当前用户的桌面弹出一个对话框 显示哈哈二字 并且十秒后自动关闭 usename 是系统环境变量 表当前用户名 msg username time 10 哈哈 表示向局域网中的192 16
  • vscode配置eigen3

    目录 1 头文件包含 2 c cpp properties json 3 CMakeList txt 4 完整代码 1 头文件包含 Eigen 核心部分 include
  • redis info 详解(InsCode AI 创作助手)

    redis info 详解 选项说明 Redis的INFO命令返回了关于Redis服务器的各种信息和统计数据 这些信息可以帮助您监控和管理Redis实例 INFO命令的输出是一个包含多行文本的字符串 包括了各种不同的信息类别 以下是一些常见
  • 字符集与编码

    字符集就是客观世界上存在的各种语言符号 如英语26个字符 汉字 拉丁字符等 编码就是将字符集用二级制表示出来的一种规范 常用字符集有ASCII字符集 GB2312字符集 BIG5字符集 GB18030字符集 Unicode字符集等 ASCI
  • QtCreator生成的exe添加管理员权限

    Qtcreator生成的exe默认是不支持管理员权限的 就是生成的exe图标右下角有一个盾牌的标志 有2种方式可以实现 亲测通过 一 如果你使用的是MSVC编译器 则在pro文件中 添加如下一行 QMAKE LFLAGS MANIFESTU
  • 如何关闭IOS键盘首字母自动大写

    如何关闭IOS键盘首字母自动大写
  • [深度学习实战]基于PyTorch的深度学习实战(上)

    目录 一 前言 二 深度学习框架 PyTorch 2 1 PyTorch介绍 2 2 Python安装详解 2 3 PyTorch安装详解 三 变量 四 求导 五 损失函数 5 1 nn L1Loss 5 2 nn SmoothL1Loss
  • 【C++】中国农业大学C++语言程序设计(上)——算法与控制结构【三】

    老师 阚道宏 算法与控制结构 算法 算法结构 布尔类型 选择语句 循环语句 算法设计与评价 评价 算法与控制结构 算法 算法结构 顺序结构 按顺序执行 选择结构 按条件结构 循环结构 按条件重复执行 布尔类型 布尔类型 true false
  • 为什么打不开_为什么有的微信小程序打不开呢?该怎么解决?

    微信小程序如今已渗透到我们日常生活方方面面 点餐 购物 出行都可能用到 不过有时候却会出现微信小程序打不开的情况 微信小程序打不开怎么解决 微信小程序打不开的原因比较复杂 可能有以下几种情况 1 手机内存不足 手机内存不足时 微信小程序可能
  • 2022年蓝桥杯省赛真题解析(C++B组)

    2022 04 09 我第一次参加蓝桥杯 我想说今年官方为了防止作弊 可谓煞费苦心 直接启用备用卷 难度直接到国赛难度 第一次参加 却让我输的那么彻底 2023 04 05更新了题解 祝各位在4 8能取得一个圆满的成绩 目录 A九进制转十进
  • less学习笔记--27/8/17

    less最新官网 http less bootcss com Less 是一种动态的样式语言 Less扩展了CSS的动态行为 比如说 设置变量 Variables 混合书写模式 mixins 操作 operations 和功能 functi
  • AES加密算法详解(图文解释)

    由于DES加密算法被破解了 3DES加密算法虽然没有被破解 但是3DES算法的加解密效率低 所有现在都使用AES算法 AES加密算法是密码学中的高级加密标准 AES为分组加密法 把明文分成一组一组的 每组长度相等 每次加密一组数据 直到加密
  • 使用Go语言和以太坊智能合约交互

    尽管最近遇到了些麻烦 但以太坊仍然是区块链领域内智能合约的最大参与者 这似乎不会很快改变 在我看来 技术本身具有很大的潜力 是从学术的角度看很有意思 但正如上面提到的问题和之前的许多问题是区块链技术方面的 智能合约 特别是具有Solidit