"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