|
|
|
@ -427,21 +427,15 @@ type blockStats struct { |
|
|
|
|
GasLimit *big.Int `json:"gasLimit"` |
|
|
|
|
Diff string `json:"difficulty"` |
|
|
|
|
TotalDiff string `json:"totalDifficulty"` |
|
|
|
|
Txs txStats `json:"transactions"` |
|
|
|
|
Txs []txStats `json:"transactions"` |
|
|
|
|
TxHash common.Hash `json:"transactionsRoot"` |
|
|
|
|
Root common.Hash `json:"stateRoot"` |
|
|
|
|
Uncles uncleStats `json:"uncles"` |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// txStats is a custom wrapper around a transaction array to force serializing
|
|
|
|
|
// empty arrays instead of returning null for them.
|
|
|
|
|
type txStats []*types.Transaction |
|
|
|
|
|
|
|
|
|
func (s txStats) MarshalJSON() ([]byte, error) { |
|
|
|
|
if txs := ([]*types.Transaction)(s); len(txs) > 0 { |
|
|
|
|
return json.Marshal(txs) |
|
|
|
|
} |
|
|
|
|
return []byte("[]"), nil |
|
|
|
|
// txStats is the information to report about individual transactions.
|
|
|
|
|
type txStats struct { |
|
|
|
|
Hash common.Hash `json:"hash"` |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// uncleStats is a custom wrapper around an uncle array to force serializing
|
|
|
|
@ -480,7 +474,7 @@ func (s *Service) assembleBlockStats(block *types.Block) *blockStats { |
|
|
|
|
var ( |
|
|
|
|
header *types.Header |
|
|
|
|
td *big.Int |
|
|
|
|
txs []*types.Transaction |
|
|
|
|
txs []txStats |
|
|
|
|
uncles []*types.Header |
|
|
|
|
) |
|
|
|
|
if s.eth != nil { |
|
|
|
@ -491,7 +485,10 @@ func (s *Service) assembleBlockStats(block *types.Block) *blockStats { |
|
|
|
|
header = block.Header() |
|
|
|
|
td = s.eth.BlockChain().GetTd(header.Hash(), header.Number.Uint64()) |
|
|
|
|
|
|
|
|
|
txs = block.Transactions() |
|
|
|
|
txs = make([]txStats, len(block.Transactions())) |
|
|
|
|
for i, tx := range block.Transactions() { |
|
|
|
|
txs[i].Hash = tx.Hash() |
|
|
|
|
} |
|
|
|
|
uncles = block.Uncles() |
|
|
|
|
} else { |
|
|
|
|
// Light nodes would need on-demand lookups for transactions/uncles, skip
|
|
|
|
@ -501,6 +498,7 @@ func (s *Service) assembleBlockStats(block *types.Block) *blockStats { |
|
|
|
|
header = s.les.BlockChain().CurrentHeader() |
|
|
|
|
} |
|
|
|
|
td = s.les.BlockChain().GetTd(header.Hash(), header.Number.Uint64()) |
|
|
|
|
txs = []txStats{} |
|
|
|
|
} |
|
|
|
|
// Assemble and return the block stats
|
|
|
|
|
author, _ := s.engine.Author(header) |
|
|
|
|