98 lines
2.4 KiB
Go
98 lines
2.4 KiB
Go
|
package commands
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
|
||
|
"github.com/ledgerwatch/erigon/common"
|
||
|
"github.com/ledgerwatch/erigon/common/hexutil"
|
||
|
"github.com/ledgerwatch/erigon/core/rawdb"
|
||
|
"github.com/ledgerwatch/erigon/rpc"
|
||
|
)
|
||
|
|
||
|
func (api *OtterscanAPIImpl) GetBlockDetails(ctx context.Context, number rpc.BlockNumber) (map[string]interface{}, error) {
|
||
|
tx, err := api.db.BeginRo(ctx)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
defer tx.Rollback()
|
||
|
|
||
|
b, senders, err := api.getBlockWithSenders(ctx, number, tx)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
if b == nil {
|
||
|
return nil, nil
|
||
|
}
|
||
|
|
||
|
chainConfig, err := api.chainConfig(tx)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
getBlockRes, err := api.delegateGetBlockByNumber(tx, b, number, false)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
getIssuanceRes, err := api.delegateIssuance(tx, b, chainConfig)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
feesRes, err := api.delegateBlockFees(ctx, tx, b, senders, chainConfig)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
response := map[string]interface{}{}
|
||
|
response["block"] = getBlockRes
|
||
|
response["issuance"] = getIssuanceRes
|
||
|
response["totalFees"] = hexutil.Uint64(feesRes)
|
||
|
return response, nil
|
||
|
}
|
||
|
|
||
|
// TODO: remove duplication with GetBlockDetails
|
||
|
func (api *OtterscanAPIImpl) GetBlockDetailsByHash(ctx context.Context, hash common.Hash) (map[string]interface{}, error) {
|
||
|
tx, err := api.db.BeginRo(ctx)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
defer tx.Rollback()
|
||
|
|
||
|
// b, senders, err := rawdb.ReadBlockByHashWithSenders(tx, hash)
|
||
|
blockNumber := rawdb.ReadHeaderNumber(tx, hash)
|
||
|
if blockNumber == nil {
|
||
|
return nil, fmt.Errorf("couldn't find block number for hash %v", hash.Bytes())
|
||
|
}
|
||
|
b, senders, err := api._blockReader.BlockWithSenders(ctx, tx, hash, *blockNumber)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
if b == nil {
|
||
|
return nil, nil
|
||
|
}
|
||
|
|
||
|
chainConfig, err := api.chainConfig(tx)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
getBlockRes, err := api.delegateGetBlockByNumber(tx, b, rpc.BlockNumber(b.Number().Int64()), false)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
getIssuanceRes, err := api.delegateIssuance(tx, b, chainConfig)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
feesRes, err := api.delegateBlockFees(ctx, tx, b, senders, chainConfig)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
response := map[string]interface{}{}
|
||
|
response["block"] = getBlockRes
|
||
|
response["issuance"] = getIssuanceRes
|
||
|
response["totalFees"] = hexutil.Uint64(feesRes)
|
||
|
return response, nil
|
||
|
}
|