`

比特币基础

 
阅读更多
0.区块结构
Magic no 魔数  总是0xD9B4BEF9  4字节
BlockSize 区块大小        4字节
BlockHeader 区块头                80字节
TransactionCount 交易数量     1-9字节
Transactions 交易

1.区块头一共80字节,uint256是32个字节
class CBlockHeader
{
public:
    // header
    int32_t nVersion;// 版本
    uint256 hashPrevBlock;//前一个区块的hash
    uint256 hashMerkleRoot;// Merkle树根
    uint32_t nTime;// 时间戳
    uint32_t nBits;// POW难度
    uint32_t nNonce;// 要找的随机数
}

//输入一共104字节,static不在结构体内计算
class CTxIn
{
public:
    COutPoint prevout;//上一笔交易输出位置(通过hash定位到交易,通过索引定位到vout) 36字节
    CScript scriptSig;//解密脚本(私钥),对应签名的钥匙 32字节
    uint32_t nSequence;//序列号 4
    CScript prevPubKey;//前一个公钥脚本 32
    //规则1:如果一笔交易中所有的SEQUENCE_FINAL都被赋值了相应的nSequence,那么nLockTime就会被禁用
    static const uint32_t SEQUENCE_FINAL = 0xffffffff;
    //规则2:如果设置了这个变量,那么规则1就失效了
    static const uint32_t SEQUENCE_LOCKTIME_DISABLE_FLAG = (1 << 31);
    //规则3:如果规则1有效并且设置了此变量,那么相对锁定时间就为512秒,否则锁定时间就为1个区块
    static const uint32_t SEQUENCE_LOCKTIME_TYPE_FLAG = (1 << 22);
    //规则4:如果规则1有效,那么这个变量就用来从nSequence计算对应的锁定时间
    static const uint32_t SEQUENCE_LOCKTIME_MASK = 0x0000ffff;
    static const int SEQUENCE_LOCKTIME_GRANULARITY = 9;
};

//输出一共56字节
class CTxOut
{
public:
    CAmount nValue;//输出金额 8
    CScript scriptPubKey;//锁定脚本,提供了地址而生成的锁 32
    int nRounds;//dash:和匿名发送相关 4
    int64_t nUnlockedHeight;//safe:解锁高度 8
};

//交易一共96字节,空vector占28
class CTransactions
{
private:
    const uint256 hash;
public:
    static const int32_t CURRENT_VERSION=SAFE_TX_VERSION_2;
    static const int32_t MAX_STANDARD_VERSION=SAFE_TX_VERSION_2;
    const int32_t nVersion;// 版本
    const std::vector<CTxIn> vin;// 交易输入集合
    const std::vector<CTxOut> vout;// 交易输出集合
    const uint32_t nLockTime;// 锁定高度
};

一笔交易的最大大小是有限制的,比如说100kb
static const unsigned int MAX_STANDARD_TX_SIZE = 100000;

2.分层确定性(HD)密钥创建和传输协议(BIP32),允许从父密钥的层次创建子密钥。使用 HD 协议的钱包称为 HD 钱包

3.在 HD 钱包中,该密钥用于生成子密钥。该密钥可能是私钥或公钥,且密钥的生成可能也需要链编码

4.硬分叉,软分叉,分叉
硬分叉:相当于一次大的升级,端口,魔数什么的都变了,未升级的节点不能共识确认新的区块
软分叉:相当于一次小的升级,可向后兼容,未升级的节点也可以确认新的区块
分叉:同时出了块,然后矿工各种基于这些块向后挖
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics