A confiscation transaction is identified by the first transaction output being an OP_RETURN output which adopts the confiscation transaction protocol (See https://github.com/bitcoin-sv-specs/protocol/tree/master/updates) and contains a reference to identify the related ConfiscationOrder document. The complete Court order document is not embedded in the OP_RETURN data of the confiscation transaction because not all blockchains support a large payload. For example, the default data carrier size on BTC is 80 bytes.

Highlights of the feature

Introduces support for confiscation transactions, which when explicitly whitelisted can spend consensus frozen TXOs without providing unlocking scripts.
Outputs of a confiscation transaction can only be spent when they mature (CONFISCATION_MATURITY = 1000 blocks), similar to coinbase outputs.
A flag to indicate that an output was created by a confiscation transaction is stored in the UTXO database and block undo files by the 32nd bit in the existing value that stores height + is_coinbase and is serialized as the VARINT data type. If this flag is set to 0, the serialized value is exactly the same as before, which makes it backward compatible. However, if this flag is set to 1, the serialized value cannot be read by the previous versions of the node because it no longer fits in a 32 bit integer as was expected in previous versions. This is detected as a serialization exception, which results in stopping the node.
Downgrading to the previous versions of the node is only possible if all of the following is true:
There are no confiscation transactions in blocks on the active chain.
If there are, these blocks will be incorrectly detected as invalid or the node will not work correctly due to the UTXO database incompatibilities.
There are no whitelisted confiscation transactions in the database.
If there are, their records in the database will result in an incorrect handling of consensus frozen TXOs.
Before downgrading all whitelisted transactions should be removed from the database by calling clearConfiscationWhitelist RPC function.

Comments

Be the first to add a comment