"transaction type not supported" 尝试使用 Go-Ethereum、Solidity、Go 部署简单合约时。在 Remix 中不会发生
"transaction type not supported" When trying to deploy a simple contract using Go-Ethereum, Solidity, Go. Doesn't happen in Remix
每当我尝试部署我的智能合约进行测试时,我都会收到一条错误消息,指出“不支持交易类型”。下面是源代码。我正在尝试使用 abigen 的 Go 绑定部署我的简单智能合约。
版本:
go1.16.7
Solidity 0.8.9+commit.e5eed63a.Darwin.appleclang
Solidity 源代码。我已经在 Remix 中对此进行了测试,并且每次都有效:
contract SendMSG {
function Send(address sendTo, bytes calldata message) public {
OtherContract other = OtherContract(sendTo);
other.send(message);
}
}
这是我正在使用的合约忽略语法错误,因为它可能是匿名化时的人为错误。
然后我 运行 这一行来开发 abi 绑定并将它们放在正确的位置。我可以确认这是有效的,因为始终会创建 go 文件:
abigen --sol ../../contracts/Contract.sol --pkg Contract --out Contract.go
去代码。我相信应该不会有任何问题。我正在使用模拟 backend/blockchain 进行测试:
package Contract
import (
"testing"
"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/common"
"math/big"
)
// Test inbox contract gets deployed correctly
func TestMain(t *testing.T) {
//Setup simulated block chain
key, _ := crypto.GenerateKey()
auth := bind.NewKeyedTransactor(key)
alloc := make(core.GenesisAlloc)
alloc[auth.From] = core.GenesisAccount{Balance: big.NewInt(133700000)}
gasLimit := 300000
sim := backends.NewSimulatedBackend(alloc, gasLimit)
//Deploy contract
address, _, _, err := DeploySameBindings(
auth,
sim,
)
// commit all pending transactions
blockchain.Commit()
if err != nil {
t.Fatalf("Failed to deploy the contract: %v", err)
}
}
总是,它给出相同的错误,“不支持的交易类型”。我知道错误来源 [GitHub] 所在的行。从那里,也许我没有设置付款机制?但是我看到的所有教程都不包括一个,如果有人可以提供有关如何执行此操作的指南。
谢谢。
这很愚蠢。
Geth 更新了他们的代码,但没有任何教程,所以对于任何希望 运行 模拟背景的人来说,答案如下:
您必须手动设置 gas 价格。在定义客户端后进行此操作并进行身份验证修复它。
gasPrice, err := client.SuggestGasPrice(context.Background())
auth.GasPrice=gasPrice
每当我尝试部署我的智能合约进行测试时,我都会收到一条错误消息,指出“不支持交易类型”。下面是源代码。我正在尝试使用 abigen 的 Go 绑定部署我的简单智能合约。
版本:
go1.16.7
Solidity 0.8.9+commit.e5eed63a.Darwin.appleclang
Solidity 源代码。我已经在 Remix 中对此进行了测试,并且每次都有效:
contract SendMSG {
function Send(address sendTo, bytes calldata message) public {
OtherContract other = OtherContract(sendTo);
other.send(message);
}
}
这是我正在使用的合约忽略语法错误,因为它可能是匿名化时的人为错误。
然后我 运行 这一行来开发 abi 绑定并将它们放在正确的位置。我可以确认这是有效的,因为始终会创建 go 文件:
abigen --sol ../../contracts/Contract.sol --pkg Contract --out Contract.go
去代码。我相信应该不会有任何问题。我正在使用模拟 backend/blockchain 进行测试:
package Contract
import (
"testing"
"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/common"
"math/big"
)
// Test inbox contract gets deployed correctly
func TestMain(t *testing.T) {
//Setup simulated block chain
key, _ := crypto.GenerateKey()
auth := bind.NewKeyedTransactor(key)
alloc := make(core.GenesisAlloc)
alloc[auth.From] = core.GenesisAccount{Balance: big.NewInt(133700000)}
gasLimit := 300000
sim := backends.NewSimulatedBackend(alloc, gasLimit)
//Deploy contract
address, _, _, err := DeploySameBindings(
auth,
sim,
)
// commit all pending transactions
blockchain.Commit()
if err != nil {
t.Fatalf("Failed to deploy the contract: %v", err)
}
}
总是,它给出相同的错误,“不支持的交易类型”。我知道错误来源 [GitHub] 所在的行。从那里,也许我没有设置付款机制?但是我看到的所有教程都不包括一个,如果有人可以提供有关如何执行此操作的指南。
谢谢。
这很愚蠢。
Geth 更新了他们的代码,但没有任何教程,所以对于任何希望 运行 模拟背景的人来说,答案如下:
您必须手动设置 gas 价格。在定义客户端后进行此操作并进行身份验证修复它。
gasPrice, err := client.SuggestGasPrice(context.Background())
auth.GasPrice=gasPrice