2017-08-01
User Activated Hard Fork
Block Size Limit to 8MB | Removal of RBF
2017-11-13
cw-144 algorithm
With rapid price, and thereby hash, fluctuations, particularly in relation to BTC, an algorithm change was necessary to ensure more reliable blocktimes.
2018-05-15
Block Size Limit to 32MB | Extra Opcodes (including OP_CAT)
OP_CAT, OP_SPLIT, OP_AND, OP_OR, OP_XOR, OP_DIV, OP_MOD, OP_NUM2BIN, OP_BIN2NUM
In 2010 and 2011 the discovery of serious bugs prompted the deactivation of many opcodes in the Bitcoin script language. Rather than simply re-enable the opcodes, the functionality that they provide has been re-examined and in some cases the opcodes have been re-designed or new opcodes have been added to address specific issues.
2018-11-15
OP_CHECKDATASIG & OP_CHECKDATASIGVERIFY | Canonical Transaction Ordering (“CTOR”)
OP_CHECKDATASIG and OP_CHECKDATASIGVERIFY check whether a signature is valid with respect to a message and a public key.
OP_CHECKDATASIG permits data to be imported into a script, and have its validity checked against some signing authority such as an "Oracle."
With the exception of the coinbase transaction, transactions within a block MUST be sorted in numerically ascending order of the transaction id, interpreted as 256-bit little endian integers. The coinbase transaction MUST be the first transaction in a block.
Context:
All nodes already have all the transactions in the mempool. When a block is found, it is sending all transactions to all nodes a second time. This delays block propagation and block validation. In order to improve this, Compact/Xthin(er) utilize shorter transaction IDs to minimize the data needing to be sent a second time when a block is found. Graphene takes this a step further by utilizing bloom filters to check which transactions are in which block. However, the bloom filters only allow knowledge of what transactions go into the block, not in what order. The ordering data makes up 80% of the data in a graphene block. By utilizing canonical ordering, 85% of the block data no longer needs to be sent, allowing for 7x faster block propagation and validation.
CTOR also enables better parallelization which enables far better scaling with technology. An additional benefit of faster block propagation and validation is the mitigation of selfish mining (where miners that find the first block have an advantage over others for the time it takes their nodes to receive and validate the recently found block).
2019-05-15
Schnorr Signatures
Schnorr signatures have some slightly improved properties over the ECDSA signatures currently used in bitcoin:
2019-11-15
Schnorr for Multisig | MINIMALDATAINSCRIPT
OP_CHECKMULTISIG(VERIFY) upgraded to accept Schnorr signatures in a way that increases verification efficiency and is compatible with batch verification.
MINIMALDATA flag, which restricts malleability vectors, has been active at the mempool layer of most nodes but not at the consensus layer. The upgrade converts the existing MINIMALDATA rules to consensus.
2020-05-15
OP_REVERSEBYTES | SigChecks
OP_REVERSEBYTES reverses the bytes of the stackitem.
Although partly effective, there are well known issues with SigOps, which mainly stem from the fact that SigOps are judged by parsing scripts, rather than executing them. Bitcoin splits scripts into two transactions (the scriptPubKey of the transaction that creates a coin, and the scriptSig of the transaction that spends it), yet the actual CPU work of verifying a transaction solely happens in the spending transaction, and this leads to some paradoxical situations: a transaction/block that contains high SigOps might involve very little CPU work, and conversely a transaction with low SigOps may require very high CPU work.
The essential idea of SigChecks is to count actual executed signature check operations solely in the spending transaction.
2020-11-15
Difficulty Adjustment Algorithm Change: ASERT (aserti3-2d DAA)
The DAA introduced in November 2017 exhibited susceptibility to a daily periodic difficulty oscillation stemming directly from the simple moving average design of the algorithm. The periodic difficulty oscillations incentivized switch mining and disincentivized steady hashrate mining.
The oscillations in difficulty and hashrate have resulted in a daily pattern of long confirmation times followed by bursts of rapid blocks. Average confirmation time of transactions are significantly increased as few transactions are included in the rapidly mined blocks.
ASERT does not exhibit the above-mentioned oscillations and has a range of other attractive qualities such as robustness against singularities without a need for additional rules, and absence of accumulation of rounding/approximation error.
2021-05-15
Enabling Transactions with Multiple OP_RETURNs | Removal of Unconfirmed Transaction Chain Limit
Multiple OP_RETURNs enable developers to use OP_RETURN in a manner that justifies its core benefit - experimentation of new features/protocol updates without breaking existing systems or stressing the block chain with extraneous UTXOs. This is still subject to the existing 223 byte limit.
When a transaction is first transmitted on the Bitcoin Cash network, it is considered “unconfirmed” until it is “mined” into a block. These transactions that are not yet mined are also referred to as “zero-conf” transactions. Transactions are dependent upon other transactions, such that they are chained together; the value allocated by one transaction is then spent by a subsequent transaction.
Until this upgrade, the Bitcoin Cash network only permitted transactions to be chained together 50 times before a block must include them. Transactions exceeding the 50th were often ignored by the network, despite being valid. Once a transaction is submitted to the network, it cannot be revoked. This situation, when encountered, can be extremely difficult to remedy with today’s available tools and simultaneously creates an unnecessary amount of complexity when being accounted for by network and applications developers.
The limit is now removed.
2022-05-15
Addition of Introspection Op-codes | Bigger Integers & OP_MUL Re-enabling
Since the introduction of OP_CHECKDATASIG, it has been possible to implement practical Bitcoin Cash covenants – contracts which validate properties of the transaction in which the contract funds are spent.
Covenants enable a wide range of new innovation, but the strategy by which they were implemented was extremely inefficient: most of a transaction’s content must be duplicated for each input which utilizes a covenant. In practice, this doubles or triples the size of even the simplest covenant transactions, and advanced covenant applications quickly exceed VM limits. This severely limited the extent of BCH covenant development and usage.
This upgrade adds a set of new virtual machine (VM) operations which enable BCH contracts to efficiently access details about the current transaction like output values, recipients, and more – without increasing transaction validation costs.
BCH virtual machine (VM) math operations were limited to signed 32-bit integers, preventing contracts from operating on values larger than 2147483647. Workarounds which allow contracts to emulate higher-precision math are often impractical, difficult to secure, and significantly increase transaction fees.
This unusually-low limit on arithmetic operations has been present since the earliest Bitcoin release to avoid standardizing a strategy for overflow handling (though 64-bit math was always used internally). Since the development of covenants, this unusual overflow-handling strategy has become a source of contract vulnerabilities and a barrier to real-world applications. Few remaining computing environments operate using 32-bit integers, and this limit has never been relevant to worst-case transaction validation performance.
This upgrade expands the integer range allowed in BCH contracts (from 32-bit to 64-bit numbers) and re-enables the multiplication opcode.
2023-05-15
P2SH32 | Restrict Transaction Version | Minimum Transaction Size | Native Layer 1, UTXO, Miner-validated Tokens
Increases cryptographic security of existing P2SH feature by enabling a 32-byte variant of it.
Restrict Transaction Version:Tightens enforcement of allowed transaction version field values by making it a consensus rule instead of the network relay rule that is currently in force.
Making allowed values part of consensus specification enables its use in tracking future consensus specification upgrades. This would make it easier to roll-out future hard-fork upgrades in a non-breaking and backwards-compatible way for non-node software.
Reduces the current consensus minimum transaction size of 100 bytes down to a minimum size of 65 bytes. This more relaxed 65-byte minimum size, like the previous 100-byte minimum size, applies to both coinbase and non-coinbase transactions uniformly.
Bitcoin Cash contracts lacked primitives for issuing messages that can be verified by other contracts, preventing the development of decentralized application ecosystems on Bitcoin Cash. This upgrade introduced Byte-String Commitments and Numeric Commitments.
(Existing) Contract-Issued Commitments
In the context of the Bitcoin Cash virtual machine (VM), a commitment can be defined as an irrevocable message that was provably issued by a particular entity. Two forms of commitments were already available to Bitcoin Cash contracts:
Each of these commitment types require the presence of a trusted private key. Because contracts cannot themselves hold a private key, any use case that requires a contract to issue a verifiable message must necessarily rely on trusted entities to provide signatures. This limitation prevented Bitcoin Cash contracts from offering or using decentralized oracles – multiparty consensus systems that produce verifiable messages upon which other contracts can act.
By providing a commitment primitive that can be used directly by contracts, the Bitcoin Cash contract system can support advanced, decentralized applications without increasing transaction or block validation costs.
Byte-String Commitments (“Non-Fungible Tokens” or “NFTs”)
The most general type of contract-issued commitment is a simple string of bytes. This type can be used to commit to any type of contract state: certifications of ownership, authorizations, credit, debt, contract-internal time or epoch, vote counts, receipts (e.g. to support refunds or future redemption), etc. Identities may commit to state within a hash structure (e.g. a merkle tree), or – to reduce transaction sizes – as a raw byte string (e.g. public keys, static numbers, boolean values).
Numeric Commitments (“Fungible Tokens” or “FTs”)
The BitcoinCash virtual machine (VM) supports two primary data types in VM bytecode evaluation: byte strings and numbers. Given the existence of a primitive allowing contracts to commit to byte strings, another commitment primitive can be inferred: numeric commitments.
Numeric commitments are a specialization of byte-string commitments – they are commitments with numeric values which can be divided and merged in the same way as the Bitcoin Cash currency. With numeric commitments, contracts can efficiently represent fractional parts of abstract concepts – shares, pegged assets, bonds, loans, options, tickets, loyalty points, voting outcomes, etc.
While many use cases for numeric commitments can be emulated with only byte-string commitments, a numeric primitive enables many contracts to reduce or offload state management altogether (e.g. shareholder voting), simplifying contract audits and reducing transaction sizes.
2024-05-15
Adaptive Blocksize Limit Algorithm
Needing to coordinate manual increases to BitcoinCash's blocksize limit incurs a meta cost on all network participants. The need to regularly come to agreement makes the network vulnerable to social attacks, as had occured on Bitcoin Core from its early history.
To reduce Bitcoin Cash's social attack surface and save on meta costs for all network participants, ABLA automatically adjusts the blocksize limit after each block, based on the exponentially weighted moving average size of previous blocks.
The algorithm preserves the existing 32 MB limit as the floor "stand-by" value, and any increase by the algorithm can be thought of as a bonus on top of that, sustained by actual transaction load.
[Tentative for November Lock-In]
2025-05-15
Targeted Virtual Machine Limits + BigInts
Bitcoin Cash's virtual machine (VM) limits have been re-targeted to enable more advanced contracts, reduce transaction sizes, and reduce full node compute requirements.
More advanced contracts:
The 201 opcode limit and 520-byte, Pay-to-Script-Hash (P2SH) contract length limit each raise the cost of developing Bitcoin Cash products by requiring contract authors to remove important features or otherwise complicate products with harder-to-audit, multi-input systems. Replacing these limits reduces the cost of contract development and security audits.
Larger stack items:
Re-targeted limits enable new post-quantum cryptographic applications, stronger escrow and settlement strategies, larger hash preimages, more practical zero-knowledge proofs, homomorphic encryption, and other important developments for the future security and competitiveness of Bitcoin Cash.
Simpler, easier-to-audit, high-precision math:
Lowers the cost of developing, maintaining, and auditing contract systems relying on high-precision math: automated market makers, decentralized exchanges, decentralized stablecoins, collateralized loan protocols, cross-chain and sidechain bridges, and other decentralized financial applications. By allowing Bitcoin Cash to offer contracts maximum-efficiency, native math operations, this proposal would significantly reduce transaction sizes, block space usage, and node CPU utilization vs. existing emulated-math solutions.
Zero-Confirmation Escrows (ZCEs) are contracts which enable instant, incentive-secure payments on Bitcoin Cash. They’re particularly useful in point-of-sale, ATM, and vending applications where payers have no prior or ongoing relationship with the payee.
More InfoThis proposal includes two new BCH virtual machine (VM) operations, OP_BEGIN and OP_UNTIL , which enable a variety of loop constructions in BCH contracts without increasing the processing or memory requirements of the VM.
More InfoThis proposal defines a method for nodes to generate, distribute, validate, and consume UTXO snapshots via the BCH P2P network. These snapshots allow for new peers to synchronize to the current state of the network without processing the entire blockchain block-by-block.
More InfoThis proposal is a small change to transactions in order to allow us to move from 8 digits dividing a whole Bitcoin Cash to add several more.
More InfoThis proposal could offer fast sub-block confirmations (10 seconds for a sub-block) without negative impact to orphan rates that plain block time reduction would incur.
More InfoA discussion thread of what should be prioritized next on the Bitcoin Cash network!
More Info
Graphics by CM_Works
Modifications by _minisatoshi