返回顶部
首页 > 资讯 > 后端开发 > GO >go语言区块链学习调用智能合约
  • 838
分享到

go语言区块链学习调用智能合约

2024-04-02 19:04:59 838人浏览 安东尼
摘要

目录1. 获取abi文件合约的接口2. 安装abigen工具3. remix连接私有链4. 合约部署5. 初始化私有链节点创世块6. 合约部署7. 调用1. 获取abi文件 合约的接

1. 获取abi文件

合约的接口

在remix工具中编译合约后,会有一个abi,复制

在这里插入图片描述

然后新建一个xx.abi文件,把赋值的粘贴到里面

在这里插入图片描述

注意:代码变了,重新编译后abi也会变,所以一定要用最新的abi

也可以通过solc生成abi:

solc --bin test.sol -o test.abi

2. 安装abigen工具

用来生成Go文件,

下载文件:GitHub地址

在这里插入图片描述

在这里插入图片描述

找到这个main.go文件,进行go build,生成abigen.exe文件。

在这里插入图片描述

然后放在bin目录下的这里

在这里插入图片描述

然后就可以在这里验证了

在这里插入图片描述

使用abigen工具生成go文件


abigen --abi xx.abi --pkg packagename --type structname --out xx.go

abi 文件在 remix 部署时可以得到pkg 指定输出文件的包名,也就是package 名称type 指定合约结构体名称out 指定输出go文件名称

在这里插入图片描述

3. remix连接私有链

geth启动私链,要指定rpccorsdomain *,不然在remix中是连接不上的。

在这里插入图片描述

选择WEB3 Provider方式,默认连接私有链8545端口

在这里插入图片描述

但是可以看到我们这里是没有account的

在这里插入图片描述

所以我们可以创建一个account

在这里插入图片描述

创建了两个之后

在这里插入图片描述

就可以在这里看见了。

4. 合约部署

1.连接私有链:选择Web3 Provider,默认端口号时8545,如果geth启动的rpc端口号不一致,改成一致

2.部署合约

可能会出现下面几种错误,依此列出解决办法
1 .Error: authentication needed: passWord or unlock:这种报错解下账户即可
账户解锁:personal.unlockAccount(“账户地址”)

在这里插入图片描述

unlock一下就行了

在这里插入图片描述

2 .Returned error: exceeds block gas limit:出现这种错误就看块号的gaslimit,部署时改成一直
获取块号:eth.blockNumber
根据块号获取详细信息:eth.getBlock(0) 会看到gasLimit的值,在部署时的gaslimit不能大于这个

在这里插入图片描述

在这里插入图片描述

3 .Returned error: insufficient funds for gas * price + value:部署合约需要手续费,得赚取,通过挖矿

在这里插入图片描述

没钱, 要挖矿赚钱。

在这里插入图片描述

开启指定线程数挖矿:miner.start(1)

停止挖矿:miner.stop()

检查是否在挖矿:eth.mining true:在挖矿,false:不在挖矿

获取账户地址数组:eth.accounts

获取挖矿地址:eth.coinbase 默认第一个创建的账户

查看第一个账户余额:eth.getBalance(eth.accounts[0])

获取指定账户的余额:eth.getBalance(“账户地址”)

在这里插入图片描述

5. 初始化私有链节点创世块

新建一个genesis.JSON文件,内容如下


{
    "config":{
        "chainId":15,
        "homesteadBlock":0,
        "eip155Block":0,
        "eip158Block":0
    },
    "coinbase":"0x0000000000000000000000000000000000000000",
    "difficulty":"0x40000",
    "extraData":"",
    "gasLimit":"0xffffffff",
    "nonce":"0x0000000000000042",
    "mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",
    "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",
    "timestamp":"0x00",
    "alloc":{

    }
}

含义:

coinbase:挖矿账户地址,随便填,后面可以设置,一般默认第一个创建的用户

difficulty: 设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度

gasLimit: 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,填最大即可。

nonce: nonce就是一个64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊的Yellow paper

mixhash:与nonce配合用于挖矿,由上一个区块的一部分生成的hash。

parentHash: 上一个区块的hash值,因为是创世块,所以这个值是0extraData:

timestamp: 设置创世块的时间戳

alloc: 用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。

cmd进入到存放json文件的路径


geth -datadir "fanone" init genesis.json

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

6. 合约部署

部署时候需要支付手续费

Http://ethscan.hubwiz.com/

7. 调用

github.com/ethereum/go-ethereum v1.10.0


package main
import (
    "github.com/ethereum/go-ethereum/ethclient"
    "github.com/ethereum/go-ethereum/common"
    "eth_block/utils/contract/abi"
    "fmt"
    "github.com/ethereum/go-ethereum/accounts/abi/bind"
)
func main() {
    // 连接rpc
    client,err := ethclient.Dial("http://127.0.0.1:8545")
    // 定义要操作合约的账户地址
    addr := "0x29794ab2ed6c47faff7ebdd6dcdd71a263e25460"
    // 将字符串地址转为common.Address
    common_addr := common.HexToAddress(addr)
    if err != nil {
        panic("连接以太坊合约出错")
    }
    // 创建合约对象
    contract_obj,err11 := contract.NewTestAddress(common_addr,client)
    if err11 !=nil {
        panic("创建合约对象出错")
    }
    fmt.Println(contract_obj.TestAddressCaller) // Caller访问函数
    fmt.Println(contract_obj.TestAddressTransactor) // Transactor 有函数
    fmt.Println(contract_obj.TestAddressFilterer)  // 没什么作用
}

以上就是go语言区块链学习调用智能合约的详细内容,更多关于go语言区块链调用智能合约的资料请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: go语言区块链学习调用智能合约

本文链接: https://lsjlt.com/news/155896.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • go语言区块链学习调用智能合约
    目录1. 获取abi文件合约的接口2. 安装abigen工具3. remix连接私有链4. 合约部署5. 初始化私有链节点创世块6. 合约部署7. 调用1. 获取abi文件 合约的接...
    99+
    2024-04-02
  • go语言区块链怎么调用智能合约
    本篇内容主要讲解“go语言区块链怎么调用智能合约”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“go语言区块链怎么调用智能合约”吧!1. 获取abi文件合约的接口在remix工具中编译合约后,会有...
    99+
    2023-06-25
  • Go语言开发区块链智能合约的实践指南
    Go语言开发区块链智能合约的实践指南随着区块链技术的不断发展,智能合约作为区块链的核心应用之一,也越来越受到关注。而Go语言作为一门简洁、高效、并发的编程语言,被越来越多的开发者选择作为区块链智能合约的开发语言。本文将为大家提供一份Go语言...
    99+
    2023-11-20
    开发 Go语言 区块链智能合约
  • go语言区块链学习调用以太坊
    目录1. geth 简介1.1 下载地址:1.2 安装:1.3 查看是否安装成功2. geth命令介绍3. geth常用命令3.1 指定数据目录 --datadir3.2 账户相关3...
    99+
    2024-04-02
  • Python在区块链智能合约中的关键作用
    Python因其清晰简洁的语法、丰富的库和广泛的开发者社区而在区块链领域备受推崇。它被广泛用于开发智能合约,这是在区块链上执行的自动执行协议。 智能合约开发 Python提供了许多工具和库,使智能合约的开发变得简单高效。这些工具包括: ...
    99+
    2024-03-13
    Python与区块链
  • Python与区块链:塑造智能合约的未来
    引言 Python是一种流行的多功能编程语言,因其易用性、可扩展性和广泛的库而受到广泛认可。近年来,Python在区块链开发中获得了越来越多的关注,特别是在智能合约开发方面。本文探讨了Python在塑造智能合约未来中的关键作用,重点关注...
    99+
    2024-03-13
    Python与区块链
  • 区块链只能用go语言吗
    不是。区块链是一种编程思想,原则上使用任何一种编程语言都可以实现,比如Solidity、C++、C#、Java、javascript、Go都可以实现区块链的开发;区块链技术涉及的面很广,而编程语言只是一种手段,把设计理念用代码呈现出来,做成...
    99+
    2023-05-14
    区块链 go语言 Golang
  • go语言能不能开发区块链
    本篇内容介绍了“go语言能不能开发区块链”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!可以开发。区块链是一种编程思想,原则上使用任何一种编程...
    99+
    2023-07-04
  • go语言能开发区块链吗
    可以开发。区块链是一种编程思想,原则上使用任何一种编程语言都可以实现,比如go语言、Solidity、C++、C#、Java、javascript都可以实现区块链的开发。Go语言是为了解决分布式计算,而区块链是典型的分布式数据存储系统,因此...
    99+
    2023-05-14
    区块链 go语言 Golang
  • Golang以太坊:区块链智能合约的新生力量
    随着区块链技术的不断发展,越来越多的开发者们加入到区块链生态系统中来。其中,Golang以太坊作为区块链智能合约的新生力量,吸引了越来越多的关注。本文将从以下几个角度,详细介绍Golang以太坊的优势和应用场景。Golang以太坊简介Gol...
    99+
    2023-05-14
  • SAP云平台,区块链,超级账本和智能合约
    前一篇文章《Hyperledger Fabric on SAP Cloud Platform》,我的同事Aviva已经给大家介绍了基于区块链技术的超级账本(Hyperledger)的一些概要知识。Fabric是超级账本5个并行项目中的其中之...
    99+
    2023-06-05
  • 如何利用go语言实现智能合约的功能
    在Go语言中实现智能合约的功能可以使用Solidity库来编写智能合约代码,并使用Go语言编写合约的部署和调用代码。以下是一个简单的...
    99+
    2023-10-12
    Go语言
  • 区块链是不是只能用go语言
    本篇内容介绍了“区块链是不是只能用go语言”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!不是。区块链是一种编程思想,原则上使用任何一种编程语...
    99+
    2023-07-04
  • 揭秘Python区块链开发的秘密武器:智能合约
    区块链技术正以其去中心化、不可篡改和透明的特点颠覆着传统行业。在区块链开发中,智能合约扮演着重要的角色。智能合约是存储在区块链上的代码,它可以自动执行合约中的条款,无需任何第三方介入。智能合约的应用非常广泛,包括数字资产交易、供应链管理...
    99+
    2024-02-23
    区块链 智能合约 以太坊 Solidity
  • 基于Golang的区块链智能合约测试与验证技巧
    在 go 中测试和验证区块链智能合约涉及以下技巧:单元测试:隔离测试智能合约的各个部分。集成测试:模拟区块链环境,测试与依赖项的交互。安全审计:识别和修复安全漏洞。形式验证:保证合约的特...
    99+
    2024-05-10
    区块链 智能合约 git golang 标准库
  • 区块链技术应用场景开发方案,智能合约编写服务
    区块链技术应用场景开发方案,智能合约编写服务BaaS系统是一种新型的云服务,由区块链与云计算紧密结合,在云上搭建区块链技术,可以帮助企业简化运营流程,无需专门建设自己的基础设施,服务购买即用,削减了部署成本。 Baas是怎样的一个...
    99+
    2023-06-04
  • Go语言在人工智能:从机器学习到深度学习
    go语言在人工智能中广泛应用,包括在机器学习和深度学习中。文章介绍了go语言在机器学习中的库,如gonum和scikit-go,并展示了一个使用go语言训练逻辑回归模型的实用案例。此外,...
    99+
    2024-04-08
    人工智能 机器学习 python go语言
  • Spring Boot 整合 Fisco Bcos部署、调用区块链合约的案例
    目录简介主要流程1、合约开发2、合约编译3、Spring Boot配置合约4、合约调用的功能实现5、功能测试5.1、编译SpringBoot工程,生成jar包:5.2、发送到服务器上...
    99+
    2024-04-02
  • 怎么用go语言区块链实战实现简单的区块与区块链
    本篇内容介绍了“怎么用go语言区块链实战实现简单的区块与区块链”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!区块链实战字节字段说明4版本区块...
    99+
    2023-06-25
  • Golang技术在区块链智能合约开发中的优势与实践
    go 技术在区块链智能合约开发中的优势包括:高性能、并发性、丰富库和跨平台性。实战示例展示了如何使用 go 构建投票智能合约,包括设置开发环境、编写智能合约、编译和部署,以及使用 web...
    99+
    2024-05-08
    区块链 go linux golang 区块链技术 区块链开发
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作