|
|
|
@ -792,10 +792,10 @@ func FormatLogs(logs []vm.StructLog) []StructLogRes { |
|
|
|
|
return formatted |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// rpcOutputBlock converts the given block to the RPC output which depends on fullTx. If inclTx is true transactions are
|
|
|
|
|
// RPCMarshalBlock converts the given block to the RPC output which depends on fullTx. If inclTx is true transactions are
|
|
|
|
|
// returned. When fullTx is true the returned block contains full transaction details, otherwise it will only contain
|
|
|
|
|
// transaction hashes.
|
|
|
|
|
func (s *PublicBlockChainAPI) rpcOutputBlock(b *types.Block, inclTx bool, fullTx bool) (map[string]interface{}, error) { |
|
|
|
|
func RPCMarshalBlock(b *types.Block, inclTx bool, fullTx bool) (map[string]interface{}, error) { |
|
|
|
|
head := b.Header() // copies the header once
|
|
|
|
|
fields := map[string]interface{}{ |
|
|
|
|
"number": (*hexutil.Big)(head.Number), |
|
|
|
@ -808,7 +808,6 @@ func (s *PublicBlockChainAPI) rpcOutputBlock(b *types.Block, inclTx bool, fullTx |
|
|
|
|
"stateRoot": head.Root, |
|
|
|
|
"miner": head.Coinbase, |
|
|
|
|
"difficulty": (*hexutil.Big)(head.Difficulty), |
|
|
|
|
"totalDifficulty": (*hexutil.Big)(s.b.GetTd(b.Hash())), |
|
|
|
|
"extraData": hexutil.Bytes(head.Extra), |
|
|
|
|
"size": hexutil.Uint64(b.Size()), |
|
|
|
|
"gasLimit": hexutil.Uint64(head.GasLimit), |
|
|
|
@ -822,17 +821,15 @@ func (s *PublicBlockChainAPI) rpcOutputBlock(b *types.Block, inclTx bool, fullTx |
|
|
|
|
formatTx := func(tx *types.Transaction) (interface{}, error) { |
|
|
|
|
return tx.Hash(), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if fullTx { |
|
|
|
|
formatTx = func(tx *types.Transaction) (interface{}, error) { |
|
|
|
|
return newRPCTransactionFromBlockHash(b, tx.Hash()), nil |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
txs := b.Transactions() |
|
|
|
|
transactions := make([]interface{}, len(txs)) |
|
|
|
|
var err error |
|
|
|
|
for i, tx := range b.Transactions() { |
|
|
|
|
for i, tx := range txs { |
|
|
|
|
if transactions[i], err = formatTx(tx); err != nil { |
|
|
|
|
return nil, err |
|
|
|
|
} |
|
|
|
@ -850,6 +847,17 @@ func (s *PublicBlockChainAPI) rpcOutputBlock(b *types.Block, inclTx bool, fullTx |
|
|
|
|
return fields, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// rpcOutputBlock uses the generalized output filler, then adds the total difficulty field, which requires
|
|
|
|
|
// a `PublicBlockchainAPI`.
|
|
|
|
|
func (s *PublicBlockChainAPI) rpcOutputBlock(b *types.Block, inclTx bool, fullTx bool) (map[string]interface{}, error) { |
|
|
|
|
fields, err := RPCMarshalBlock(b, inclTx, fullTx) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, err |
|
|
|
|
} |
|
|
|
|
fields["totalDifficulty"] = (*hexutil.Big)(s.b.GetTd(b.Hash())) |
|
|
|
|
return fields, err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// RPCTransaction represents a transaction that will serialize to the RPC representation of a transaction
|
|
|
|
|
type RPCTransaction struct { |
|
|
|
|
BlockHash common.Hash `json:"blockHash"` |
|
|
|
|