【全网最细】win10环境下go和智能合约交互

这篇具有很好参考价值的文章主要介绍了【全网最细】win10环境下go和智能合约交互。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在网上看了一堆go和智能合约交互的教程,大部分都是抄袭的,一抄二,二抄三。加上现在网络环境不好经常被墙,搞半天搞不完。本试验环境win10,例子参考官方文档。
remix + 测试网 + abigen + golandIDE

第一步写合约

// SPDX-License-Identifier: GPL-3.0

pragma solidity >0.7.0 < 0.9.0;
/**
* @title Storage
* @dev store or retrieve variable value
*/

contract Storage {

	uint256 value;

	function store(uint256 number) public{
		value = number;
	}

	function retrieve() public view returns (uint256){
		return value;
	}

第二步 编译合约加部署

只能合约在线生成,golang,智能合约,交互
选择injected Provider 唤起小狐狸部署
只能合约在线生成,golang,智能合约,交互

第三步 安装go-ethereum

这里网上大部分会让你在github下载,然后让你go build 或者是其他,但是我这边网络就算翻了墙配置好代理也会超时。这里原来实际上是abigen是geth的一个开发工具,go-ethereum就是go语言实现的geth而已,里面会有很多个不同工具,你在仓库的readme就可以看到会有make geth 或者make all
但是我们直接点,直接下安装包安装,更加省心。
地址:https://geth.ethereum.org/downloads/
选windows
只能合约在线生成,golang,智能合约,交互
安装选只能合约在线生成,golang,智能合约,交互
然后会出现一个PATH的报错(可能也没有)这个时候去电脑环境变量把安装地址加入进PATH即可
只能合约在线生成,golang,智能合约,交互
这样就安装好了

第三步通过abi生成go文件

abi获取方法,在remix那复制
只能合约在线生成,golang,智能合约,交互
然后在命令行

abigen --abi Storage.abi --pkg main --type Storage --out Storage.go

这个时候就会生成一个go文件,这里面的参数自己看看就知道啥意思了不解释了。
然后用goland打开这个文件夹

go mod init test
go mod tidy

初始化项目
然后再新建一个go文件来与合约交互

package main

import (
	"fmt"
	"log"

	"github.com/ethereum/go-ethereum/common"
	"github.com/ethereum/go-ethereum/ethclient"
)

func main() {
	// Create an IPC based RPC connection to a remote node
	// NOTE update the path to the ipc file! 
	conn, err := ethclient.Dial("/home/go-ethereum/goerli/geth.ipc")
	if err != nil {
		log.Fatalf("Failed to connect to the Ethereum client: %v", err)
	}
	// Instantiate the contract and display its name
	// NOTE update the deployment address!
	store, err := NewStorage(common.HexToAddress("0x21e6fc92f93c8a1bb41e2be64b4e1f88a54d3576"), conn)
	if err != nil {
		log.Fatalf("Failed to instantiate Storage contract: %v", err)
	}

这里的ethclient.Dial()里面实际上要填一个客户端地址,这里我们去https://infura.io/zh注册申请一个
只能合约在线生成,golang,智能合约,交互
选好对应的测试网络
只能合约在线生成,golang,智能合约,交互NewStorage(common.HexToAddress(“0x21e6fc92f93c8a1bb41e2be64b4e1f88a54d3576”), conn)
填入合约地址,这里就是new一个调用合约的实例,很多方法都封装好,更加容易调用。
然后就可以访问链上合约的数据了。

和合约进行交易

交易和普通查询不同,需要私钥。并且对代码做点改动
代码

package main

import (
	"context"
	"fmt"
	"github.com/ethereum/go-ethereum/accounts/abi/bind"
	"github.com/ethereum/go-ethereum/common"
	"github.com/ethereum/go-ethereum/common/hexutil"
	"github.com/ethereum/go-ethereum/crypto"
	"github.com/ethereum/go-ethereum/ethclient"
	"log"
	"math/big"
)

const key = `json object from keystore`

func main() {
	PrivateKey, _ := crypto.HexToECDSA("你的私钥")

	// Create an IPC based RPC connection to a remote node and instantiate a contract binding
	conn, err := ethclient.Dial("你的节点地址")
	if err != nil {
		log.Fatalf("Failed to connect to the Ethereum client: %v", err)
	}
	store, err := NewStorage(common.HexToAddress("你的合约地址"), conn)
	if err != nil {
		log.Fatalf("Failed to instantiate a Storage contract: %v", err)
	}
	// Create an authorized transactor and call the store function
	nonce, _ := conn.NonceAt(context.Background(), common.HexToAddress("你私钥对应的账户地址"), nil)
	gasPrice, _ := conn.SuggestGasPrice(context.Background())
	//用哪条链,就用那个id
	auth, err := bind.NewKeyedTransactorWithChainID(PrivateKey, big.NewInt(5))
	auth.GasLimit = uint64(300000)
	auth.Nonce = new(big.Int).SetUint64(nonce)
	auth.GasPrice = gasPrice
	if err != nil {
		log.Fatalf("Failed to create authorized transactor: %v", err)
	}
	// Call the store() function
	tx, err := store.Store(auth, big.NewInt(420))
	if err != nil {
		log.Fatalf("Failed to update value: %v", err)
	}
	fmt.Printf("Update pending: 0x%x\n", tx.Hash())

}

核心步骤,获取nonce,获取gasprice,绑定,发交易

还有一种方式是直接通过读abi文件就能发交易,那种的话大概差不多只是写代码没那么简洁。

就这样吧,希望对大家有帮助

参考资料

https://geth.ethereum.org/docs/dapp/native-bindings
https://medium.com/nerd-for-tech/smart-contract-with-golang-d208c92848a9文章来源地址https://www.toymoban.com/news/detail-786405.html

到了这里,关于【全网最细】win10环境下go和智能合约交互的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA GTP全网最细讲解 aurora 8b/10b协议OV5640摄像头视频传输 提供2套工程源码和技术支持

    没玩过GT资源都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。 GT资源是Xilinx系列FPGA的重要卖点,也是做高速接口的基础,不管是PCIE、SATA、MAC等,都需要用到GT资源来做数据高速串化和解串处理,Xilinx不同的FPGA系列拥有不同的GT资源类型,低端

    2024年02月09日
    浏览(36)
  • 在前端页面上应用智能合约实现合约交互例子

    在Remix上编译和部署智能合约,本地使用vscode工具调用智能合约应用于前端界面 win10 Remix VScode Ganache-cli web3 创建新合约 InfoContract.sol 并写入以下内容: 写好合约内容之后,按照ganache-cli连接Metamask钱包里面 步骤 的内容操作。 在remix中进入DeployRun模块,选择Enviroment为Injected W

    2023年04月08日
    浏览(28)
  • go语言操作以太坊智能合约

    操作中要注意版本问题 geth版本、golang版本等 在remix环境中写好合约后,进行编译得到abi文件 简单举例 Hello.sol合约 编译后abi文件(Hello.abi)内容 然后需要一个 abigen工具 可以将abi、bin等编译后的智能合约文件内容生成go代码 abigen可以在geth官网下载geth的时候下载GethTools版本

    2024年02月09日
    浏览(27)
  • win10戴尔电脑安装操作系统遇到的问题MBR分区表只能安装GPT磁盘

    调整启动盘的启动顺序,这里启动U盘为第一顺序。 一般出现 磁盘0和1,说明存在两个盘 ,这里两个盘不是说的是C盘和D盘的问题,而是在物理上实际存在两个盘,比如一个机械盘分为了盘符C盘和D盘,还有另一个固态硬盘,这里的机械盘和固态盘分为磁盘0和磁盘1. 装操作系

    2024年02月04日
    浏览(47)
  • 6.DApp-用Web3实现前端与智能合约的交互

    题记         用Web3实现前端与智能合约的交互,以下是操作流程和代码。 准备ganache环境         文章地址:4.DApp-MetaMask怎么连接本地Ganache-CSDN博客  准备智能合约          文章地址: 2.DApp-编写和运行solidity智能合约-CSDN博客 编写index.html文件          !DOCTYPE htm

    2024年02月08日
    浏览(32)
  • python 之 web3 与智能合约的交互、编译等使用

    一、背景 web3.py是一个用于与以太坊交互的 Python 库。 它常见于去中心化应用程序 (dapps)中,帮助发送交易、与智能合约交互、读取块数据以及各种其他用例。 最初的 API 源自Web3.js Javascript API,但后来不断发展以满足 Python 开发人员的需求和物质享受。 本人在合约审计于模糊

    2024年02月11日
    浏览(28)
  • Java与智能合约交互(Web3j)- write函数

    说在前头 Web3是一种新兴的网络概念,由于某些原因导致我们能够接触到的相关技术知识实在有限,每当我遇见技术瓶颈总是不能找到充足的资料,这也让我萌生了填补这片空白知识的冲动。 “Hello Web3” 这个专栏会尽力将我掌握的web3 知识分享给大家。如果分享的知识能帮助

    2023年04月08日
    浏览(38)
  • 11O 以太坊 ethereum OpenZeppelin : 部署智能合约并与之交互

    • 建立本地区块链 • 部署智能合约 • 从控制台交互 • 以编程方式交互 • 获取合约实例 • 调用合约 • 发送交易 • OpenZeppelin Tutorials 教程 • Contact 联系方式 在开始之前,我们首先需要一个可以部署合约的环境。以太坊区块链(通常称为“主网”,表示“主网络”)需要

    2023年04月08日
    浏览(50)
  • Go调用智能合约(附最新的SEPOLIA FAUCET整理)

    Geth的安装很容易,下载安装即可(需要勾选 develop tools),我安装的是 1.13.10 版本,看其他博客和教程大部分都是版本 7 和 10 ,有些操作没办法照搬 问题:没办法挖矿【 miner.start() 后返回 null , eth_mining 返回 ture ,但实际上并没有挖矿】== 没法去部署合约 解决方法: 设置 –-

    2024年02月20日
    浏览(22)
  • 全网最细RocketMQ源码四:消息存储

    看完上一章之后,有没有很好奇,生产者发送完消息之后,server是如何存储,这一章节就来学习 SendMessageProcessor.processRequest 实际真正的负责存储就是DefaultMessageStore, 不过在讲述DefaultMessageStore的时候,我们是自底往上学,因为DefaultMessageStore比较复杂,从顶往下学容易学乱。先

    2024年01月16日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包