github.com/smartcontractkit/chainlink-testing-framework/libs@v0.0.0-20240227141906-ec710b4eb1a3/docker/test_env/besu_integration_test.go (about) 1 package test_env 2 3 import ( 4 "context" 5 "fmt" 6 "math/big" 7 "testing" 8 9 "github.com/ethereum/go-ethereum" 10 "github.com/ethereum/go-ethereum/common" 11 "github.com/stretchr/testify/require" 12 13 "github.com/smartcontractkit/chainlink-testing-framework/libs/blockchain" 14 "github.com/smartcontractkit/chainlink-testing-framework/libs/logging" 15 "github.com/smartcontractkit/chainlink-testing-framework/libs/utils/testcontext" 16 ) 17 18 func TestEth2WithPrysmAndBesu(t *testing.T) { 19 l := logging.GetTestLogger(t) 20 21 builder := NewEthereumNetworkBuilder() 22 cfg, err := builder. 23 WithConsensusType(ConsensusType_PoS). 24 WithConsensusLayer(ConsensusLayer_Prysm). 25 WithExecutionLayer(ExecutionLayer_Besu). 26 Build() 27 require.NoError(t, err, "Builder validation failed") 28 29 _, eth2, err := cfg.Start() 30 require.NoError(t, err, "Couldn't start PoS network") 31 32 nonEip1559Network := blockchain.SimulatedEVMNetwork 33 nonEip1559Network.Name = "Simulated Besu + Prysm (non-EIP 1559)" 34 nonEip1559Network.GasEstimationBuffer = 10_000_000_000 35 nonEip1559Network.URLs = eth2.PublicWsUrls() 36 clientOne, err := blockchain.ConnectEVMClient(nonEip1559Network, l) 37 require.NoError(t, err, "Couldn't connect to the evm client") 38 39 t.Cleanup(func() { 40 err = clientOne.Close() 41 require.NoError(t, err, "Couldn't close the client") 42 }) 43 44 address := common.HexToAddress("0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1") 45 err = sendAndCompareBalances(testcontext.Get(t), clientOne, address) 46 require.NoError(t, err, fmt.Sprintf("balance wasn't correctly updated when %s network", nonEip1559Network.Name)) 47 48 eip1559Network := blockchain.SimulatedEVMNetwork 49 eip1559Network.Name = "Simulated Besu + Prysm (EIP 1559)" 50 eip1559Network.SupportsEIP1559 = true 51 eip1559Network.URLs = eth2.PublicWsUrls() 52 _, err = blockchain.ConnectEVMClient(eip1559Network, l) 53 require.Error(t, err, "Could connect to the evm client") 54 require.Contains(t, err.Error(), "Method not found", "Besu should not work EIP-1559 yet") 55 } 56 57 func sendAndCompareBalances(ctx context.Context, c blockchain.EVMClient, address common.Address) error { 58 balanceBefore, err := c.BalanceAt(ctx, address) 59 if err != nil { 60 return err 61 } 62 63 toSendEth := big.NewFloat(1) 64 gasEstimations, err := c.EstimateGas(ethereum.CallMsg{ 65 To: &address, 66 }) 67 if err != nil { 68 return err 69 } 70 err = c.Fund(address.Hex(), toSendEth, gasEstimations) 71 if err != nil { 72 return err 73 } 74 75 balanceAfter, err := c.BalanceAt(ctx, address) 76 if err != nil { 77 return err 78 } 79 80 exp := new(big.Int).Exp(big.NewInt(10), big.NewInt(18), nil) 81 toSendEthInt := new(big.Int) 82 _, _ = toSendEth.Int(toSendEthInt) 83 sentInWei := new(big.Int).Mul(toSendEthInt, exp) 84 85 expected := big.NewInt(0).Add(balanceBefore, sentInWei) 86 87 if expected.Cmp(balanceAfter) != 0 { 88 return fmt.Errorf("Balance is incorrect. Expected %s, got %s", expected.String(), balanceAfter.String()) 89 } 90 91 return nil 92 }