Skip to content

Commit

Permalink
Implemented GetHeaderByNumber and GetHeaderByHash (#149)
Browse files Browse the repository at this point in the history
* implemented methods: eth_getHeaderByNumber
eth_getHeaderByHash.

* The following methods were created: eth_createAccessList, eth_coinbase, eth_getBlockReceipts, txpool_ContentFrom

* fix lint

* CR fix, part 1

* CR fix, part 2

* lint fix

* created UTs for methods: eth_createAccessList, eth_getBlockReceipts, txpool_ContentFrom

* e2e test for eth_getBlockReceipts

* e2e remove

* CR fix

* Remove dummy comment

* CR fix

* lint fix

* CR fix  and new tests e2e have been added

* Address comments

* Minor simplification

* Minor changes in eth_getBlockReceipts

* e2e test fix and cr fix

* lint fix

* e2e

---------

Co-authored-by: Stefan Negovanović <[email protected]>
  • Loading branch information
novosandara and Stefan-Ethernal authored Mar 27, 2024
1 parent c282887 commit c8b4771
Show file tree
Hide file tree
Showing 40 changed files with 751 additions and 45 deletions.
4 changes: 3 additions & 1 deletion e2e-polybft/e2e/bridge_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,12 +74,13 @@ func TestE2E_Bridge_RootchainTokensTransfers(t *testing.T) {
framework.WithBridge(),
framework.WithSecretsCallback(func(addrs []types.Address, tcc *framework.TestClusterConfig) {
for i := 0; i < len(addrs); i++ {
tcc.StakeAmounts = append(tcc.StakeAmounts, ethgo.Ether(10))
// premine receivers, so that they are able to do withdrawals
tcc.StakeAmounts = append(tcc.StakeAmounts, ethgo.Ether(10))
}

tcc.Premine = append(tcc.Premine, receivers...)
}))

defer cluster.Stop()

cluster.WaitForReady(t)
Expand Down Expand Up @@ -1345,6 +1346,7 @@ func TestE2E_Bridge_NonMintableERC20Token_WithPremine(t *testing.T) {
checkBalancesFn(types.Address(rewardWalletKey.Address()), bigZero, command.DefaultPremineBalance, true)

validatorsExpectedBalance := new(big.Int).Sub(command.DefaultPremineBalance, command.DefaultStake)

for _, server := range cluster.Servers {
validatorAccount, err := validatorHelper.GetAccountFromDir(server.DataDir())
require.NoError(t, err)
Expand Down
1 change: 1 addition & 0 deletions e2e-polybft/e2e/consensus_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -398,6 +398,7 @@ func TestE2E_Consensus_MintableERC20NativeToken(t *testing.T) {
config.Premine = append(config.Premine, fmt.Sprintf("%s:%d", addr, initValidatorsBalance))
config.StakeAmounts = append(config.StakeAmounts, new(big.Int).Set(initValidatorsBalance))
validatorsAddrs[i] = addr

initialTotalSupply.Add(initialTotalSupply, initValidatorsBalance)
}
}))
Expand Down
36 changes: 35 additions & 1 deletion e2e-polybft/e2e/jsonrpc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,7 @@ func TestE2E_JsonRPC(t *testing.T) {
Value: newBalance,
})
require.NoError(t, err)

txPrice := gasPrice * estimatedGas
// subtract gasPrice * estimatedGas from the balance and transfer the rest to the other account
// in order to leave no funds on the account
Expand Down Expand Up @@ -413,11 +414,44 @@ func TestE2E_JsonRPC(t *testing.T) {
require.NotEqual(t, ethTxn.From, ethgo.ZeroAddress)
})

t.Run("eth_getHeaderByNumber", func(t *testing.T) {
key1, err := crypto.GenerateECDSAKey()
require.NoError(t, err)

txn := cluster.Transfer(t, senderKey, key1.Address(), one)
require.NoError(t, txn.Wait())
require.True(t, txn.Succeed())
txReceipt := txn.Receipt()

var header types.Header
err = jsonRPC.Call("eth_getHeaderByNumber", &header, ethgo.BlockNumber(txReceipt.BlockNumber))
require.NoError(t, err)

require.Equal(t, txReceipt.BlockNumber, header.Number)
require.Equal(t, txReceipt.BlockHash, ethgo.Hash(header.Hash))
})

t.Run("eth_getHeaderByHash", func(t *testing.T) {
key1, err := crypto.GenerateECDSAKey()
require.NoError(t, err)

txn := cluster.Transfer(t, senderKey, key1.Address(), one)
require.NoError(t, txn.Wait())
require.True(t, txn.Succeed())
txReceipt := txn.Receipt()

var header types.Header
err = jsonRPC.Call("eth_getHeaderByHash", &header, txReceipt.BlockHash)
require.NoError(t, err)

require.Equal(t, txReceipt.BlockNumber, header.Number)
require.Equal(t, txReceipt.BlockHash, ethgo.Hash(header.Hash))
})

t.Run("debug_traceTransaction", func(t *testing.T) {
key1, err := crypto.GenerateECDSAKey()
require.NoError(t, err)

// Test. We should be able to query the transaction by its hash
txn := cluster.Transfer(t, senderKey, key1.Address(), one)
require.NoError(t, txn.Wait())
require.True(t, txn.Succeed())
Expand Down
3 changes: 3 additions & 0 deletions e2e-polybft/e2e/txpool_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,9 @@ func TestE2E_TxPool_Transfer(t *testing.T) {
if err != nil {
return true
}

t.Logf("Balance %s %s", receiver, balance)

if balance.Uint64() != uint64(sendAmount) {
return false
}
Expand Down Expand Up @@ -295,6 +297,7 @@ func TestE2E_TxPool_BroadcastTransactions(t *testing.T) {
for _, srv := range cluster.Servers {
balance, err := srv.WaitForNonZeroBalance(ethgo.Address(recipient), time.Second*10)
assert.NoError(t, err)

if balance != nil && balance.BitLen() > 0 {
assert.Equal(t, sentAmount, balance)
} else {
Expand Down
3 changes: 3 additions & 0 deletions e2e-polybft/property/property_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,8 +109,11 @@ func TestProperty_DropValidators(t *testing.T) {
// check that block production is stoped
currentBlock, err = activeValidator.JSONRPC().Eth().BlockNumber()
require.NoError(t, err)

oldBlockNumber := currentBlock

time.Sleep(2 * blockTime)

currentBlock, err = activeValidator.JSONRPC().Eth().BlockNumber()
require.NoError(t, err)
require.Equal(t, oldBlockNumber, currentBlock)
Expand Down
2 changes: 2 additions & 0 deletions jsonrpc/codec_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,9 +105,11 @@ func TestBlockNumberOrHash_UnmarshalJSON(t *testing.T) {
assert.Error(t, err)
} else {
assert.NoError(t, err)

if tt.expectedBnh.BlockNumber != nil {
assert.Equal(t, *bnh.BlockNumber, *tt.expectedBnh.BlockNumber)
}

if tt.expectedBnh.BlockHash != nil {
assert.Equal(t, bnh.BlockHash.String(), tt.expectedBnh.BlockHash.String())
}
Expand Down
1 change: 1 addition & 0 deletions jsonrpc/dispatcher.go
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,7 @@ func (d *Dispatcher) handleSubscribe(req Request, conn wsConn) (string, Error) {
if err != nil {
return "", NewInternalError(err.Error())
}

filterID = d.filterManager.NewLogFilter(logQuery, conn)
} else if subscribeMethod == "newPendingTransactions" {
filterID = d.filterManager.NewPendingTxFilter(conn)
Expand Down
4 changes: 4 additions & 0 deletions jsonrpc/dispatcher_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -467,20 +467,24 @@ func TestDispatcherBatchRequest(t *testing.T) {
assert.Equal(t, c.err, resp.Error)
} else {
var batchResp []SuccessResponse

assert.NoError(t, expectBatchJSONResult(res, &batchResp))

if c.name == "leading-whitespace" {
assert.Len(t, batchResp, 4)

for index, resp := range batchResp {
assert.Equal(t, c.batchResponse[index].Error, resp.Error)
}
} else if c.name == "valid-batch-req" {
assert.Len(t, batchResp, 6)

for index, resp := range batchResp {
assert.Equal(t, c.batchResponse[index].Error, resp.Error)
}
} else if c.name == "no-limits" {
assert.Len(t, batchResp, 12)

for index, resp := range batchResp {
assert.Equal(t, c.batchResponse[index].Error, resp.Error)
}
Expand Down
Loading

0 comments on commit c8b4771

Please sign in to comment.