美文网首页比特币源码学习笔记
比特币源码阅读(CChain)

比特币源码阅读(CChain)

作者: 坠叶飘香 | 来源:发表于2018-08-07 15:37 被阅读0次

    src/chain.h

    //包含所有的CBlockIndex(一个区块对应一个CBlockIndex)
    //所有区块构建的链
    /** An in-memory indexed chain of blocks. */
    class CChain {
    private:
        std::vector<CBlockIndex*> vChain; //vector是一个能够存放任意类型的动态数组,能够增加和压缩数据
    
    public:
        /** Returns the index entry for the genesis block of this chain, or nullptr if none. */
        CBlockIndex *Genesis() const { //返回创世CBlockIndex
            return vChain.size() > 0 ? vChain[0] : nullptr;
        }
    
        //最后一个CBlockIndex
        /** Returns the index entry for the tip(末梢) of this chain, or nullptr if none. */
        CBlockIndex *Tip() const {
            return vChain.size() > 0 ? vChain[vChain.size() - 1] : nullptr;
        }
    
        //特定高度的CBlockIndex
        /** Returns the index entry at a particular height in this chain, or nullptr if no such height exists. */
        CBlockIndex *operator[](int nHeight) const {
            if (nHeight < 0 || nHeight >= (int)vChain.size())
                return nullptr;
            return vChain[nHeight];
        }
    
        //大小相等;最后一个CBlockIndex相等
        /** Compare two chains efficiently. */
        friend bool operator==(const CChain &a, const CChain &b) {
            return a.vChain.size() == b.vChain.size() &&
                   a.vChain[a.vChain.size() - 1] == b.vChain[b.vChain.size() - 1];
        }
    
        /** Efficiently check whether a block is present in this chain. */
        bool Contains(const CBlockIndex *pindex) const {
            return (*this)[pindex->nHeight] == pindex;
        }
    
        //后续者
        /** Find the successor of a block in this chain, or nullptr if the given index is not found or is the tip. */
        CBlockIndex *Next(const CBlockIndex *pindex) const {
            if (Contains(pindex))
                return (*this)[pindex->nHeight + 1];
            else
                return nullptr;
        }
    
        //最大高度
        /** Return the maximal height in the chain. Is equal to chain.Tip() ? chain.Tip()->nHeight : -1. */
        int Height() const {
            return vChain.size() - 1;
        }
    
        /** Set/initialize a chain with a given tip. */
        void SetTip(CBlockIndex *pindex);
    
        /** Return a CBlockLocator that refers to a block in this chain (by default the tip). */
        CBlockLocator GetLocator(const CBlockIndex *pindex = nullptr) const;
    
        /** Find the last common block between this chain and a block index entry. */
        const CBlockIndex *FindFork(const CBlockIndex *pindex) const;
    
        /** Find the earliest block with timestamp equal or greater than the given. */
        CBlockIndex* FindEarliestAtLeast(int64_t nTime) const;
    };
    

    相关文章

      网友评论

        本文标题:比特币源码阅读(CChain)

        本文链接:https://www.haomeiwen.com/subject/vmkavftx.html