package backends_test import ( "context" "math/big" "testing" ethereum "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" ) func TestSimulatedBackend(t *testing.T) { var gasLimit uint64 = 8000029 key, _ := crypto.GenerateKey() // nolint: gosec auth := bind.NewKeyedTransactor(key) genAlloc := make(core.GenesisAlloc) genAlloc[auth.From] = core.GenesisAccount{Balance: big.NewInt(9223372036854775807)} sim := backends.NewSimulatedBackend(genAlloc, gasLimit) // should return an error if the tx is not found txHash := common.HexToHash("2") _, isPending, err := sim.TransactionByHash(context.Background(), txHash) if isPending { t.Fatal("transaction should not be pending") } if err != ethereum.NotFound { t.Fatalf("err should be `ethereum.NotFound` but received %v", err) } // generate a transaction and confirm you can retrieve it code := `6060604052600a8060106000396000f360606040526008565b00` var gas uint64 = 3000000 tx := types.NewContractCreation(0, big.NewInt(0), gas, big.NewInt(1), common.FromHex(code)) tx, _ = types.SignTx(tx, types.HomesteadSigner{}, key) err = sim.SendTransaction(context.Background(), tx) if err != nil { t.Fatal("error sending transaction") } txHash = tx.Hash() _, isPending, err = sim.TransactionByHash(context.Background(), txHash) if err != nil { t.Fatalf("error getting transaction with hash: %v", txHash.String()) } if !isPending { t.Fatal("transaction should have pending status") } sim.Commit() tx, isPending, err = sim.TransactionByHash(context.Background(), txHash) if err != nil { t.Fatalf("error getting transaction with hash: %v", txHash.String()) } if isPending { t.Fatal("transaction should not have pending status") } }