type Peer struct {
BasePeer
- mtx sync.RWMutex
- services consensus.ServiceFlag
- bestHeight uint64
- bestHash *bc.Hash
- irreversibleHeight uint64
- irreversibleHash *bc.Hash
- knownTxs *set.Set // Set of transaction hashes known to be known by this peer
- knownBlocks *set.Set // Set of block hashes known to be known by this peer
- knownSignatures *set.Set // Set of block signatures known to be known by this peer
- knownStatus uint64 // Set of chain status known to be known by this peer
- filterAdds *set.Set // Set of addresses that the spv node cares about.
+ mtx sync.RWMutex
+ services consensus.ServiceFlag
+ bestHeight uint64
+ bestHash *bc.Hash
+ justifiedHeight uint64
+ justifiedHash *bc.Hash
+ knownTxs *set.Set // Set of transaction hashes known to be known by this peer
+ knownBlocks *set.Set // Set of block hashes known to be known by this peer
+ knownSignatures *set.Set // Set of block signatures known to be known by this peer
+ knownStatus uint64 // Set of chain status known to be known by this peer
+ filterAdds *set.Set // Set of addresses that the spv node cares about.
}
func newPeer(basePeer BasePeer) *Peer {
return p.bestHeight
}
-func (p *Peer) IrreversibleHeight() uint64 {
+func (p *Peer) JustifiedHeight() uint64 {
p.mtx.RLock()
defer p.mtx.RUnlock()
- return p.irreversibleHeight
+ return p.justifiedHeight
}
func (p *Peer) AddFilterAddress(address []byte) {
}
}
-func (p *Peer) getRelatedTxs(txs []*types.Tx) ([]*types.Tx) {
+func (p *Peer) getRelatedTxs(txs []*types.Tx) []*types.Tx {
var relatedTxs []*types.Tx
for _, tx := range txs {
if p.isRelatedTx(tx) {
return nil
}
-func (p *Peer) SendStatus(bestHeader, irreversibleHeader *types.BlockHeader) error {
- msg := msgs.NewStatusMessage(bestHeader, irreversibleHeader)
+func (p *Peer) SendStatus(bestHeader, justifiedHeader *types.BlockHeader) error {
+ msg := msgs.NewStatusMessage(bestHeader, justifiedHeader)
if ok := p.TrySend(msgs.BlockchainChannel, struct{ msgs.BlockchainMessage }{msg}); !ok {
return errSendStatusMsg
}
p.bestHash = bestHash
}
-func (p *Peer) SetIrreversibleStatus(irreversibleHeight uint64, irreversibleHash *bc.Hash) {
+func (p *Peer) SetJustifiedStatus(justifiedHeight uint64, justifiedHash *bc.Hash) {
p.mtx.Lock()
defer p.mtx.Unlock()
- p.irreversibleHeight = irreversibleHeight
- p.irreversibleHash = irreversibleHash
+ p.justifiedHeight = justifiedHeight
+ p.justifiedHash = justifiedHash
}
type PeerSet struct {
if !p.services.IsEnable(flag) {
continue
}
- if bestPeer == nil || p.bestHeight > bestPeer.bestHeight || (p.bestHeight == bestPeer.bestHeight && p.IsLAN()) {
- bestPeer = p
- }
- }
- return bestPeer
-}
-
-func (ps *PeerSet) BestIrreversiblePeer(flag consensus.ServiceFlag) *Peer {
- ps.mtx.RLock()
- defer ps.mtx.RUnlock()
-
- var bestPeer *Peer
- for _, p := range ps.peers {
- if !p.services.IsEnable(flag) {
- continue
- }
- if bestPeer == nil || p.irreversibleHeight > bestPeer.irreversibleHeight || (p.irreversibleHeight == bestPeer.irreversibleHeight && p.IsLAN()) {
+ if bestPeer == nil || p.JustifiedHeight() > bestPeer.JustifiedHeight() ||
+ (p.JustifiedHeight() == bestPeer.JustifiedHeight() && p.bestHeight > bestPeer.bestHeight) ||
+ (p.JustifiedHeight() == bestPeer.JustifiedHeight() && p.bestHeight == bestPeer.bestHeight && p.IsLAN()) {
bestPeer = p
}
}
return nil
}
-func (ps *PeerSet) BroadcastNewStatus(bestHeader, irreversibleHeader *types.BlockHeader) error {
- msg := msgs.NewStatusMessage(bestHeader, irreversibleHeader)
+func (ps *PeerSet) BroadcastNewStatus(bestHeader, justifiedHeader *types.BlockHeader) error {
+ msg := msgs.NewStatusMessage(bestHeader, justifiedHeader)
peers := ps.peersWithoutNewStatus(bestHeader.Height)
for _, peer := range peers {
if ok := peer.TrySend(msgs.BlockchainChannel, struct{ msgs.BlockchainMessage }{msg}); !ok {
peer.MarkBlock(hash)
}
-func (ps *PeerSet) MarkBlockSignature(peerID string, signature []byte) {
+func (ps *PeerSet) MarkBlockVerification(peerID string, signature []byte) {
peer := ps.GetPeer(peerID)
if peer == nil {
return
peer.SetBestStatus(height, hash)
}
-func (ps *PeerSet) SetIrreversibleStatus(peerID string, height uint64, hash *bc.Hash) {
+func (ps *PeerSet) SetJustifiedStatus(peerID string, height uint64, hash *bc.Hash) {
peer := ps.GetPeer(peerID)
if peer == nil {
return
}
- peer.SetIrreversibleStatus(height, hash)
+ peer.SetJustifiedStatus(height, hash)
}