|
|
|
@ -110,7 +110,6 @@ type RetestethAPI struct { |
|
|
|
|
genesisHash common.Hash |
|
|
|
|
engine *NoRewardEngine |
|
|
|
|
blockchain *core.BlockChain |
|
|
|
|
blockNumber uint64 |
|
|
|
|
txMap map[common.Address]map[uint64]*types.Transaction // Sender -> Nonce -> Transaction
|
|
|
|
|
txSenders map[common.Address]struct{} // Set of transaction senders
|
|
|
|
|
blockInterval uint64 |
|
|
|
@ -411,7 +410,6 @@ func (api *RetestethAPI) SetChainParams(ctx context.Context, chainParams ChainPa |
|
|
|
|
api.engine = engine |
|
|
|
|
api.blockchain = blockchain |
|
|
|
|
api.db = state.NewDatabase(api.ethDb) |
|
|
|
|
api.blockNumber = 0 |
|
|
|
|
api.txMap = make(map[common.Address]map[uint64]*types.Transaction) |
|
|
|
|
api.txSenders = make(map[common.Address]struct{}) |
|
|
|
|
api.blockInterval = 0 |
|
|
|
@ -424,7 +422,7 @@ func (api *RetestethAPI) SendRawTransaction(ctx context.Context, rawTx hexutil.B |
|
|
|
|
// Return nil is not by mistake - some tests include sending transaction where gasLimit overflows uint64
|
|
|
|
|
return common.Hash{}, nil |
|
|
|
|
} |
|
|
|
|
signer := types.MakeSigner(api.chainConfig, big.NewInt(int64(api.blockNumber))) |
|
|
|
|
signer := types.MakeSigner(api.chainConfig, big.NewInt(int64(api.currentNumber()))) |
|
|
|
|
sender, err := types.Sender(signer, tx) |
|
|
|
|
if err != nil { |
|
|
|
|
return common.Hash{}, err |
|
|
|
@ -450,9 +448,17 @@ func (api *RetestethAPI) MineBlocks(ctx context.Context, number uint64) (bool, e |
|
|
|
|
return true, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (api *RetestethAPI) currentNumber() uint64 { |
|
|
|
|
if current := api.blockchain.CurrentBlock(); current != nil { |
|
|
|
|
return current.NumberU64() |
|
|
|
|
} |
|
|
|
|
return 0 |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (api *RetestethAPI) mineBlock() error { |
|
|
|
|
parentHash := rawdb.ReadCanonicalHash(api.ethDb, api.blockNumber) |
|
|
|
|
parent := rawdb.ReadBlock(api.ethDb, parentHash, api.blockNumber) |
|
|
|
|
number := api.currentNumber() |
|
|
|
|
parentHash := rawdb.ReadCanonicalHash(api.ethDb, number) |
|
|
|
|
parent := rawdb.ReadBlock(api.ethDb, parentHash, number) |
|
|
|
|
var timestamp uint64 |
|
|
|
|
if api.blockInterval == 0 { |
|
|
|
|
timestamp = uint64(time.Now().Unix()) |
|
|
|
@ -462,7 +468,7 @@ func (api *RetestethAPI) mineBlock() error { |
|
|
|
|
gasLimit := core.CalcGasLimit(parent, 9223372036854775807, 9223372036854775807) |
|
|
|
|
header := &types.Header{ |
|
|
|
|
ParentHash: parent.Hash(), |
|
|
|
|
Number: big.NewInt(int64(api.blockNumber + 1)), |
|
|
|
|
Number: big.NewInt(int64(number + 1)), |
|
|
|
|
GasLimit: gasLimit, |
|
|
|
|
Extra: api.extraData, |
|
|
|
|
Time: timestamp, |
|
|
|
@ -548,8 +554,7 @@ func (api *RetestethAPI) importBlock(block *types.Block) error { |
|
|
|
|
if _, err := api.blockchain.InsertChain([]*types.Block{block}); err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
api.blockNumber = block.NumberU64() |
|
|
|
|
fmt.Printf("Imported block %d\n", block.NumberU64()) |
|
|
|
|
fmt.Printf("Imported block %d, head is %d\n", block.NumberU64(), api.currentNumber()) |
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -574,7 +579,6 @@ func (api *RetestethAPI) RewindToBlock(ctx context.Context, newHead uint64) (boo |
|
|
|
|
if err := api.blockchain.SetHead(newHead); err != nil { |
|
|
|
|
return false, err |
|
|
|
|
} |
|
|
|
|
api.blockNumber = newHead |
|
|
|
|
return true, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -594,8 +598,7 @@ func (api *RetestethAPI) GetLogHash(ctx context.Context, txHash common.Hash) (co |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (api *RetestethAPI) BlockNumber(ctx context.Context) (uint64, error) { |
|
|
|
|
//fmt.Printf("BlockNumber, response: %d\n", api.blockNumber)
|
|
|
|
|
return api.blockNumber, nil |
|
|
|
|
return api.currentNumber(), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (api *RetestethAPI) GetBlockByNumber(ctx context.Context, blockNr math.HexOrDecimal64, fullTx bool) (map[string]interface{}, error) { |
|
|
|
|