diff --git a/miner/builder.go b/miner/builder.go index 4e9fe4ec68..1c4a08b9e2 100644 --- a/miner/builder.go +++ b/miner/builder.go @@ -64,6 +64,7 @@ func NewBuilder(config *BuilderConfig, args *BuilderArgs) (*Builder, error) { chainConfig: config.ChainConfig, engine: config.Engine, chain: config.Chain, + txpool: config.EthBackend.TxPool(), } workerParams := &generateParams{ diff --git a/miner/builder_test.go b/miner/builder_test.go index a538086236..3db8b8e47b 100644 --- a/miner/builder_test.go +++ b/miner/builder_test.go @@ -34,7 +34,7 @@ func TestBuilder_AddTxn_Simple(t *testing.T) { require.NoError(t, err) require.True(t, res.Success) require.Len(t, builder.env.receipts, 1) - require.Equal(t, big.NewInt(1000), builder.env.state.GetBalance(testUserAddress)) + require.Equal(t, big.NewInt(1000), builder.env.state.GetBalance(testUserAddress).ToBig()) // we cannot add the same transaction again. Note that by design the // function does not error but returns the SimulateTransactionResult.success = false @@ -42,7 +42,7 @@ func TestBuilder_AddTxn_Simple(t *testing.T) { require.NoError(t, err) require.False(t, res.Success) require.Len(t, builder.env.receipts, 1) - require.Equal(t, big.NewInt(1000), builder.env.state.GetBalance(testUserAddress)) + require.Equal(t, big.NewInt(1000), builder.env.state.GetBalance(testUserAddress).ToBig()) } func TestBuilder_AddTxns_Simple(t *testing.T) { @@ -60,7 +60,7 @@ func TestBuilder_AddTxns_Simple(t *testing.T) { for _, r := range res { require.True(t, r.Success) } - require.Equal(t, big.NewInt(2000), builder.env.state.GetBalance(testUserAddress)) + require.Equal(t, big.NewInt(2000), builder.env.state.GetBalance(testUserAddress).ToBig()) tx3 := backend.newRandomTxWithNonce(2) tx4 := backend.newRandomTxWithNonce(1000) // fails with nonce too high @@ -71,7 +71,7 @@ func TestBuilder_AddTxns_Simple(t *testing.T) { require.True(t, res[0].Success) require.False(t, res[1].Success) require.Len(t, builder.env.txs, 2) - require.Equal(t, big.NewInt(2000), builder.env.state.GetBalance(testUserAddress)) + require.Equal(t, big.NewInt(2000), builder.env.state.GetBalance(testUserAddress).ToBig()) } func TestBuilder_AddBundles_Simple(t *testing.T) { @@ -99,7 +99,7 @@ func TestBuilder_AddBundles_Simple(t *testing.T) { require.Len(t, res, 2) require.True(t, res[0].Success) require.True(t, res[1].Success) - require.Equal(t, big.NewInt(4000), builder.env.state.GetBalance(testUserAddress)) + require.Equal(t, big.NewInt(4000), builder.env.state.GetBalance(testUserAddress).ToBig()) } func TestBuilder_AddBundles_RevertHashes(t *testing.T) { @@ -122,7 +122,7 @@ func TestBuilder_AddBundles_RevertHashes(t *testing.T) { require.Len(t, res[0].SimulateTransactionResults, 2) require.True(t, res[0].SimulateTransactionResults[0].Success) require.False(t, res[0].SimulateTransactionResults[1].Success) - require.Equal(t, big.NewInt(0), builder.env.state.GetBalance(testUserAddress)) + require.True(t, builder.env.state.GetBalance(testUserAddress).IsZero()) bundle.RevertingHashes = []common.Hash{tx2.Hash()} @@ -133,7 +133,7 @@ func TestBuilder_AddBundles_RevertHashes(t *testing.T) { require.Len(t, res[0].SimulateTransactionResults, 2) require.True(t, res[0].SimulateTransactionResults[0].Success) require.False(t, res[0].SimulateTransactionResults[1].Success) - require.Equal(t, big.NewInt(1000), builder.env.state.GetBalance(testUserAddress)) + require.Equal(t, big.NewInt(1000), builder.env.state.GetBalance(testUserAddress).ToBig()) } func TestBuilder_AddBundles_InvalidParams(t *testing.T) { @@ -160,7 +160,7 @@ func TestBuilder_AddBundles_InvalidParams(t *testing.T) { require.False(t, res[0].Success) require.Equal(t, ErrInvalidBlockNumber.Error(), res[0].Error) require.Len(t, res[0].SimulateTransactionResults, 0) - require.Equal(t, big.NewInt(0), builder.env.state.GetBalance(testUserAddress)) + require.True(t, builder.env.state.GetBalance(testUserAddress).IsZero()) bundle = &suavextypes.Bundle{ Txs: []*types.Transaction{tx1, tx2}, @@ -174,7 +174,7 @@ func TestBuilder_AddBundles_InvalidParams(t *testing.T) { require.False(t, res[0].Success) require.Equal(t, ErrExceedsMaxBlock.Error(), res[0].Error) require.Len(t, res[0].SimulateTransactionResults, 0) - require.Equal(t, big.NewInt(0), builder.env.state.GetBalance(testUserAddress)) + require.True(t, builder.env.state.GetBalance(testUserAddress).IsZero()) bundle = &suavextypes.Bundle{ Txs: []*types.Transaction{}, @@ -185,7 +185,7 @@ func TestBuilder_AddBundles_InvalidParams(t *testing.T) { require.False(t, res[0].Success) require.Equal(t, ErrEmptyTxs.Error(), res[0].Error) require.Len(t, res[0].SimulateTransactionResults, 0) - require.Equal(t, big.NewInt(0), builder.env.state.GetBalance(testUserAddress)) + require.True(t, builder.env.state.GetBalance(testUserAddress).IsZero()) } func TestBuilder_FillTransactions(t *testing.T) { @@ -299,12 +299,11 @@ func newMockBuilderConfig(t *testing.T) (*BuilderConfig, *testWorkerBackend) { engine := clique.New(config.Clique, db) w, backend := newTestWorker(t, &config, engine, db, 0) - w.close() bConfig := &BuilderConfig{ ChainConfig: w.chainConfig, Engine: w.engine, - EthBackend: w.eth, + EthBackend: backend, Chain: w.chain, GasCeil: 10000000, } diff --git a/miner/payload_building_test.go b/miner/payload_building_test.go index 1728b9e5bd..c627be5dee 100644 --- a/miner/payload_building_test.go +++ b/miner/payload_building_test.go @@ -110,6 +110,12 @@ func newTestWorkerBackend(t *testing.T, chainConfig *params.ChainConfig, engine Config: chainConfig, Alloc: types.GenesisAlloc{testBankAddress: {Balance: testBankFunds}}, } + + // == SUAVE SPECIFIC == + // Add custom contracts for the genesis + gspec.Alloc[suaveExample1Addr] = core.GenesisAccount{Balance: big.NewInt(0), Code: common.FromHex(suaveExample1Artifact.DeployedBytecode.Object)} + // == END OF SUAVE SPECIFIC == + switch e := engine.(type) { case *clique.Clique: gspec.ExtraData = make([]byte, 32+common.AddressLength+crypto.SignatureLength) @@ -273,3 +279,25 @@ func TestPayloadId(t *testing.T) { ids[id] = i } } + +// --- SUAVE SPECIFIC UTILITIES --- + +const ( + // testCode is the testing contract binary code which will initialises some + // variables in constructor + testCode = "0x60806040527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0060005534801561003457600080fd5b5060fc806100436000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80630c4dae8814603757806398a213cf146053575b600080fd5b603d607e565b6040518082815260200191505060405180910390f35b607c60048036036020811015606757600080fd5b81019080803590602001909291905050506084565b005b60005481565b806000819055507fe9e44f9f7da8c559de847a3232b57364adc0354f15a2cd8dc636d54396f9587a6000546040518082815260200191505060405180910390a15056fea265627a7a723058208ae31d9424f2d0bc2a3da1a5dd659db2d71ec322a17db8f87e19e209e3a1ff4a64736f6c634300050a0032" + + // testGas is the gas required for contract deployment. + testGas = 144109 +) + +func (b *testWorkerBackend) newRandomTx(creation bool) *types.Transaction { + var tx *types.Transaction + gasPrice := big.NewInt(10 * params.InitialBaseFee) + if creation { + tx, _ = types.SignTx(types.NewContractCreation(b.txPool.Nonce(testBankAddress), big.NewInt(0), testGas, gasPrice, common.FromHex(testCode)), types.HomesteadSigner{}, testBankKey) + } else { + tx, _ = types.SignTx(types.NewTransaction(b.txPool.Nonce(testBankAddress), testUserAddress, big.NewInt(1000), params.TxGas, gasPrice, nil), types.HomesteadSigner{}, testBankKey) + } + return tx +} diff --git a/suave/builder/session_manager.go b/suave/builder/session_manager.go index ffdf428fac..7795c1547a 100644 --- a/suave/builder/session_manager.go +++ b/suave/builder/session_manager.go @@ -137,7 +137,7 @@ func (s *SessionManager) NewSession(ctx context.Context, args *api.BuildBlockArg } func (s *SessionManager) getSession(sessionId string, allowOnTheFlySession bool) (*miner.Builder, error) { - if sessionId == "" { + if sessionId == "" && allowOnTheFlySession { return s.newBuilder(&api.BuildBlockArgs{}) } diff --git a/suave/builder/session_manager_test.go b/suave/builder/session_manager_test.go index 1bf6053d03..fd69268b91 100644 --- a/suave/builder/session_manager_test.go +++ b/suave/builder/session_manager_test.go @@ -142,7 +142,8 @@ type testBackend struct { func (tb *testBackend) newTransfer(t *testing.T, to common.Address, amount *big.Int) *types.Transaction { gasPrice := big.NewInt(10 * params.InitialBaseFee) - tx, _ := types.SignTx(types.NewTransaction(tb.pool.Nonce(testBankAddress), to, amount, params.TxGas, gasPrice, nil), types.HomesteadSigner{}, testBankKey) + tx, err := types.SignTx(types.NewTransaction(tb.pool.Nonce(testBankAddress), to, amount, params.TxGas, gasPrice, nil), types.HomesteadSigner{}, testBankKey) + require.NoError(t, err) return tx }