在激活智能合约之后,SBTC将与现存的比特币矿机不兼容?
Closed this issue · 2 comments
YihaoPeng commented
我有一个疑问,在CBlockHeader::SerializationOp()
函数里,只要智能合约激活,区块头就会多出三个成员。此外,CBlockHeader::GetHash()
是直接调用SerializeHash(*this)
来计算哈希值。我没有在任何地方看到计算哈希值时会忽略那三个成员。
这是不是说,智能合约激活后,区块头哈希值的计算需要包含这三个新成员,参与计算哈希值的区块头由80字节变为148字节?
如果确实是这样,智能合约激活后,SBTC将与现在所有的SHA256(比特币)矿机不兼容,因为矿机只能计算固定的80字节的区块头。
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)
Ben002 commented
目前的代码的确会是这样不兼容的情况,因为加上智能合约后,需要在区块头上加上这些字段。我们在考虑另一种方案,预计官方很快就会公布出来。谢谢您的反馈!
Ben002 commented
目前这个问题在新提交的代码中已经解决,谢谢您的指正。