superbitcoin/SuperBitcoin

在激活智能合约之后,SBTC将与现存的比特币矿机不兼容?

Closed this issue · 2 comments

我有一个疑问,在CBlockHeader::SerializationOp()函数里,只要智能合约激活,区块头就会多出三个成员。此外,CBlockHeader::GetHash()是直接调用SerializeHash(*this)来计算哈希值。我没有在任何地方看到计算哈希值时会忽略那三个成员。

这是不是说,智能合约激活后,区块头哈希值的计算需要包含这三个新成员,参与计算哈希值的区块头由80字节变为148字节?

如果确实是这样,智能合约激活后,SBTC将与现在所有的SHA256(比特币)矿机不兼容,因为矿机只能计算固定的80字节的区块头。

@bille18

class CBlockHeader
{
    inline void SerializationOp(Stream &s, Operation ser_action)
    {
        READWRITE(this->nVersion);
        READWRITE(hashPrevBlock);
        READWRITE(hashMerkleRoot);
        READWRITE(nTime);
        READWRITE(nBits);
        READWRITE(nNonce);
        if (this->nVersion & (((uint32_t)1) << VERSIONBITS_SBTC_CONTRACT))
        {
            READWRITE(nHeight); // sbtc-evm
            READWRITE(hashStateRoot); // sbtc-evm
            READWRITE(hashUTXORoot); // sbtc-evm
        }
    }
}

uint256 CBlockHeader::GetHash() const
{
    return SerializeHash(*this);
}

该 Issue 与以下 Issue 的回复相同:
superbitcoin/superbitcoin-doc#5 (comment)

目前的代码的确会是这样不兼容的情况,因为加上智能合约后,需要在区块头上加上这些字段。我们在考虑另一种方案,预计官方很快就会公布出来。谢谢您的反馈!

目前这个问题在新提交的代码中已经解决,谢谢您的指正。