mirror of
https://gitlab.com/pulsechaincom/erigon-pulse.git
synced 2024-12-22 03:30:37 +00:00
436493350e
1. changes sentinel to use an http-like interface 2. moves hexutil, crypto/blake2b, metrics packages to erigon-lib
87 lines
2.3 KiB
Go
87 lines
2.3 KiB
Go
package jsonrpc
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"github.com/ledgerwatch/erigon-lib/common/hexutil"
|
|
|
|
"github.com/ledgerwatch/erigon-lib/common"
|
|
"github.com/ledgerwatch/erigon-lib/kv"
|
|
|
|
"github.com/ledgerwatch/erigon/core/rawdb"
|
|
"github.com/ledgerwatch/erigon/core/types"
|
|
"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
|
|
}
|
|
|
|
return api.getBlockDetailsImpl(ctx, tx, b, number, senders)
|
|
}
|
|
|
|
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
|
|
}
|
|
number := rpc.BlockNumber(b.Number().Int64())
|
|
|
|
return api.getBlockDetailsImpl(ctx, tx, b, number, senders)
|
|
}
|
|
|
|
func (api *OtterscanAPIImpl) getBlockDetailsImpl(ctx context.Context, tx kv.Tx, b *types.Block, number rpc.BlockNumber, senders []common.Address) (map[string]interface{}, error) {
|
|
chainConfig, err := api.chainConfig(tx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
getBlockRes, err := delegateGetBlockByNumber(tx, b, number, false)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
getIssuanceRes, err := delegateIssuance(tx, b, chainConfig)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
receipts, err := api.getReceipts(ctx, tx, chainConfig, b, senders)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("getReceipts error: %v", err)
|
|
}
|
|
feesRes, err := delegateBlockFees(ctx, tx, b, senders, chainConfig, receipts)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
response := map[string]interface{}{}
|
|
response["block"] = getBlockRes
|
|
response["issuance"] = getIssuanceRes
|
|
response["totalFees"] = hexutil.Uint64(feesRes)
|
|
return response, nil
|
|
}
|