[rpc] Expose crosslinks in RPCs that return block headers (#3158)

pull/3179/head
Janet Liang 5 years ago committed by Leo Chen
parent 13d7aab650
commit 1ed4827688
  1. 38
      internal/hmyapi/apiv1/types.go
  2. 38
      internal/hmyapi/apiv2/types.go

@ -6,15 +6,16 @@ import (
"strings"
"time"
staking "github.com/harmony-one/harmony/staking/types"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
ethtypes "github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/rlp"
"github.com/harmony-one/harmony/block"
"github.com/harmony-one/harmony/core/types"
internal_common "github.com/harmony-one/harmony/internal/common"
"github.com/harmony-one/harmony/numeric"
"github.com/harmony-one/harmony/shard"
staking "github.com/harmony-one/harmony/staking/types"
)
// RPCTransaction represents a transaction that will serialize to the RPC representation of a transaction
@ -70,16 +71,17 @@ type RPCCXReceipt struct {
// HeaderInformation represents the latest consensus information
type HeaderInformation struct {
BlockHash common.Hash `json:"blockHash"`
BlockNumber uint64 `json:"blockNumber"`
ShardID uint32 `json:"shardID"`
Leader string `json:"leader"`
ViewID uint64 `json:"viewID"`
Epoch uint64 `json:"epoch"`
Timestamp string `json:"timestamp"`
UnixTime uint64 `json:"unixtime"`
LastCommitSig string `json:"lastCommitSig"`
LastCommitBitmap string `json:"lastCommitBitmap"`
BlockHash common.Hash `json:"blockHash"`
BlockNumber uint64 `json:"blockNumber"`
ShardID uint32 `json:"shardID"`
Leader string `json:"leader"`
ViewID uint64 `json:"viewID"`
Epoch uint64 `json:"epoch"`
Timestamp string `json:"timestamp"`
UnixTime uint64 `json:"unixtime"`
LastCommitSig string `json:"lastCommitSig"`
LastCommitBitmap string `json:"lastCommitBitmap"`
CrossLinks *types.CrossLinks `json:"crossLinks,omitempty"`
}
// RPCDelegation represents a particular delegation to a validator
@ -120,8 +122,18 @@ func newHeaderInformation(header *block.Header) *HeaderInformation {
if err != nil {
bechAddr = header.Coinbase().Hex()
}
result.Leader = bechAddr
if header.ShardID() == shard.BeaconChainShardID {
decodedCrossLinks := &types.CrossLinks{}
err = rlp.DecodeBytes(header.CrossLinks(), decodedCrossLinks)
if err != nil {
result.CrossLinks = &types.CrossLinks{}
} else {
result.CrossLinks = decodedCrossLinks
}
}
return result
}

@ -6,15 +6,16 @@ import (
"strings"
"time"
staking "github.com/harmony-one/harmony/staking/types"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
ethtypes "github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/rlp"
"github.com/harmony-one/harmony/block"
"github.com/harmony-one/harmony/core/types"
internal_common "github.com/harmony-one/harmony/internal/common"
"github.com/harmony-one/harmony/numeric"
"github.com/harmony-one/harmony/shard"
staking "github.com/harmony-one/harmony/staking/types"
)
// RPCTransaction represents a transaction that will serialize to the RPC representation of a transaction
@ -70,16 +71,17 @@ type RPCCXReceipt struct {
// HeaderInformation represents the latest consensus information
type HeaderInformation struct {
BlockHash common.Hash `json:"blockHash"`
BlockNumber uint64 `json:"blockNumber"`
ShardID uint32 `json:"shardID"`
Leader string `json:"leader"`
ViewID uint64 `json:"viewID"`
Epoch uint64 `json:"epoch"`
Timestamp string `json:"timestamp"`
UnixTime uint64 `json:"unixtime"`
LastCommitSig string `json:"lastCommitSig"`
LastCommitBitmap string `json:"lastCommitBitmap"`
BlockHash common.Hash `json:"blockHash"`
BlockNumber uint64 `json:"blockNumber"`
ShardID uint32 `json:"shardID"`
Leader string `json:"leader"`
ViewID uint64 `json:"viewID"`
Epoch uint64 `json:"epoch"`
Timestamp string `json:"timestamp"`
UnixTime uint64 `json:"unixtime"`
LastCommitSig string `json:"lastCommitSig"`
LastCommitBitmap string `json:"lastCommitBitmap"`
CrossLinks *types.CrossLinks `json:"crossLinks,omitempty"`
}
// RPCDelegation represents a particular delegation to a validator
@ -120,8 +122,18 @@ func newHeaderInformation(header *block.Header) *HeaderInformation {
if err != nil {
bechAddr = header.Coinbase().Hex()
}
result.Leader = bechAddr
if header.ShardID() == shard.BeaconChainShardID {
decodedCrossLinks := &types.CrossLinks{}
err = rlp.DecodeBytes(header.CrossLinks(), decodedCrossLinks)
if err != nil {
result.CrossLinks = &types.CrossLinks{}
} else {
result.CrossLinks = decodedCrossLinks
}
}
return result
}

Loading…
Cancel
Save