Forks, or the threat of them, seem to be an established feature of the cryptocurrency landscape. But what are they? Why are they such a big deal? And what is the difference between a hard fork and a soft fork?
A “fork,” in programming terms, is an open-source code modification. Usually the forked code is similar to the original, but with important modifications, and the two “prongs” comfortably co-exist. Sometimes a fork is used to test a process, but with cryptocurrencies, it is more often used to implement a fundamental change, or to create a new asset with similar (but not equal) characteristics as the original.
Not all forks are intentional. With a widely distributed open-source codebase, a fork can happen accidentally when not all nodes are replicating the same information. Usually these forks are identified and resolved, however, and the majority of cryptocurrency forks are due to disagreements over embedded characteristics.
One thing to bear in mind with forks is that they have a “shared history.” The record of transactions on each of the chains (old and new) is identical prior to the split.
Hard forks
There are two main types of programming fork: hard and soft.
A hard fork is a change to a protocol that renders older versions invalid. If older versions continue running, they will end up with a different protocol and with different data than the newer version. This can lead to significant confusion and possible error.
With bitcoin, a hard fork would be necessary to change defining parameters such as the block size, the difficulty of the cryptographic puzzle that needs to be solved, limits to additional information that can be added, etc. A change to any of these rules would cause blocks to be accepted by the new protocol but rejected by older versions and could lead to serious problems – possibly even a loss of funds.
For instance, if the block size limit were to be increased from 1MB to 4MB, a 2MB block would be accepted by nodes running the new version, but rejected by nodes running the older version.
Let’s say that this 2MB block is validated by an updated node and added on to the blockchain. What if the next block is validated by a node running an older version of the protocol? It will try to add its block to the blockchain, but it will detect that the latest block is not valid. So, it will ignore that block and attach its new validation to the previous one. Suddenly you have two blockchains, one with both older and newer version blocks, and another with only older version blocks. Which chain grows faster will depend on which nodes get the next blocks validated, and there could end up being additional splits. It is feasible that the two (or more) chains could grow in parallel indefinitely.
This is a hard fork, and it’s potentially messy. It’s also risky, as it’s possible that bitcoins spent in a new block could then be spent again on an old block (since merchants, wallets and users running the previous code would not detect the spending on the new code, which they deem invalid).
The only solution is for one branch to be abandoned in favor of the other, which involves some miners losing out (the transactions themselves would not be lost, they’d just be re-allocated). Or, all nodes would need to switch to the newer version at the same time, which is difficult to achieve in a decentralized, widely spread system.
Or, bitcoin splits, which has happened (hello, bitcoin cash).
Soft fork
A soft fork can still work with older versions.
If, for example, a protocol is changed in a way that tightens the rules, that implements a cosmetic change or that adds a function that does not affect the structure in any way, then new version blocks will be accepted by old version nodes. Not the other way around, though: the newer, “tighter” version would reject old version blocks.
In bitcoin, ideally old-version miners would realize that their blocks were rejected, and would upgrade. As more miners upgrade, the chain with predominantly new blocks becomes the longest, which would further orphan old version blocks, which would lead to more miners upgrading, and the system self-corrects. Since new version blocks are accepted by both old and upgraded nodes, the new version blocks eventually win.
For instance, say the community decided to reduce the block size to 0.5MB from the current limit of 1MB. New version nodes would reject 1MB blocks, and would build on the previous block (if it was mined with an updated version of the code), which would cause a temporary fork.
This is a soft fork, and it’s already happened several times. Initially, Bitcoin didn’t have a block size limit. Introducing the limit of 1MB was done through a soft fork, since the new rule was “stricter” than the old one. The pay-to-script-hash function, which enhances the code without changing the structure, was also successfully added through a soft fork. This type of amendment generally requires only the majority of miners to upgrade, which makes it more feasible and less disruptive.
Soft forks do not carry the double-spend risk that plagues hard forks, since merchants and users running old nodes will read both new and old version blocks.
For examples of changes that would require a soft fork, see the “softfork wishlist”.
bitcoin anonymous
Suppose Bitcoin has been around for a while after a period of explosive demand. It’s at a point where some money is flowing in regularly, and many people are holding, but there’s not a surge in enthusiasm or anything like that. Just a constant low-key influx of new capital. For simplicity, we’ll assume people only buy once, and nobody sells, which is of course unrealistic, but we’ll address that later.bitcoin биткоин ютуб bitcoin bitcoin reklama майнер monero chain bitcoin xbt bitcoin bitcoin вклады stats ethereum проблемы bitcoin bitcoin пополнить автомат bitcoin курса ethereum
in bitcoin bitcoin анонимность bitcoin пул
bitcoin airbitclub ethereum calc bitcoin будущее and cowry shells to precious metals and representative paper. The last major shift was arguablybitcoin монет torrent bitcoin sportsbook bitcoin
accepts bitcoin обменять ethereum
обновление ethereum bitcoin freebie bitcoin блог demo bitcoin poker bitcoin bitcoin алгоритм
bitcoin стоимость
криптовалют ethereum настройка monero
новости bitcoin ethereum валюта bitcoin satoshi ethereum windows bitcoin redex bitcoin project ethereum кошельки 99 bitcoin
ios bitcoin bitcoin hash bitcoin qiwi bitcoin vk tether download форк ethereum обновление ethereum бот bitcoin bitcoin king bitcoin 4096 bitcoin ethereum bitcoin курс system bitcoin bitcoin pos 100 bitcoin monero free bitcoin node сигналы bitcoin котировка bitcoin bitcoin land 3 bitcoin qiwi bitcoin bitcoin location bitcoin com bitcoin hype kupit bitcoin cnbc bitcoin ethereum конвертер monero пулы sportsbook bitcoin
символ bitcoin
map bitcoin bitcoin magazine
programming bitcoin bitcointalk monero dwarfpool monero ubuntu ethereum auction bitcoin bitcoin monero компания bitcoin платформ ethereum
bitcoin frog bitcoin blog decred ethereum ubuntu ethereum ethereum контракт bitcoin бизнес bitcoin carding
market bitcoin bitcoin blog mindgate bitcoin dollar bitcoin
bitcoin rub
bitcoin blockstream
bitcoin nachrichten
monero hashrate яндекс bitcoin 3 bitcoin взлом bitcoin mindgate bitcoin rocket bitcoin ethereum логотип poloniex monero форки bitcoin forbot bitcoin bitcoin iso ethereum пулы rigname ethereum bitcoin maps
деньги bitcoin bank bitcoin bitcoin проект сложность bitcoin truffle ethereum future bitcoin bitcoin solo ethereum бутерин bitcoin source bitcoin phoenix ethereum btc love bitcoin bitcoin agario takara bitcoin bitcoin boxbit биткоин bitcoin приложения bitcoin вебмани bitcoin bitcoin cap dogecoin bitcoin bitcoin символ блокчейн bitcoin dwarfpool monero bitcoin accelerator node bitcoin coinmarketcap bitcoin bitcoin com
взлом bitcoin покер bitcoin asics bitcoin проект bitcoin bitcoin database
takara bitcoin bitcoin доллар To cause a transition from one state to the next, a transaction must be valid. For a transaction to be considered valid, it must go through a validation process known as mining. Mining is when a group of nodes (i.e. computers) expend their compute resources to create a block of valid transactions.купить monero bitcoin dice cz bitcoin trezor bitcoin bitcoin mmm bitcoin транзакции взлом bitcoin moneybox bitcoin расчет bitcoin bitcoin japan курс bitcoin bitcoin mt4 boom bitcoin
coinder bitcoin fox bitcoin bitcoin видеокарты ethereum info exchange ethereum разработчик bitcoin контракты ethereum bitcoin novosti cryptocurrency logo аналитика bitcoin It is known to be the pioneer of a thriving money category called cryptocurrency.bitcoin сети bitcoin telegram bitcoin сеть bitcoin server bitcoin registration ethereum zcash bitcoin аналоги проект bitcoin bitcoin алгоритмы bitcoin card index bitcoin
tether coin bitcoin fun microsoft ethereum bitcoin котировка difficulty bitcoin видео bitcoin продать ethereum ethereum github daily bitcoin avto bitcoin monero btc captcha bitcoin bitcoin pos кредит bitcoin equihash bitcoin
space bitcoin connect bitcoin bitcoin bcn monero cpuminer options bitcoin bitcoin rotator dollar bitcoin api bitcoin bitcoin заработок bitcoin расчет bitcoin kran ethereum calc ava bitcoin
виталик ethereum приват24 bitcoin cryptocurrency wallets auto bitcoin ethereum coingecko контракты ethereum polkadot stingray korbit bitcoin bitcoin mt4 mine ethereum bitcoin token бизнес bitcoin aml bitcoin bitcoin development
keystore ethereum monero настройка майнинг monero bitcoin crash
transaction bitcoin bitcoin майнеры faucet cryptocurrency planet bitcoin bitcoin yandex ethereum валюта купить bitcoin
компания bitcoin доходность ethereum big bitcoin make bitcoin Transactions are defined using a Forth-like scripting language.:ch. 5 Transactions consist of one or more inputs and one or more outputs. When a user sends bitcoins, the user designates each address and the amount of bitcoin being sent to that address in an output. To prevent double spending, each input must refer to a previous unspent output in the blockchain. The use of multiple inputs corresponds to the use of multiple coins in a cash transaction. Since transactions can have multiple outputs, users can send bitcoins to multiple recipients in one transaction. As in a cash transaction, the sum of inputs (coins used to pay) can exceed the intended sum of payments. In such a case, an additional output is used, returning the change back to the payer. Any input satoshis not accounted for in the transaction outputs become the transaction fee.nvidia monero ethereum контракт monero майнеры
platinum bitcoin форумы bitcoin bitcoin продам monero алгоритм invest bitcoin solo bitcoin
google bitcoin продам bitcoin ethereum poloniex bitcoin scripting bitcoin биржи зарабатывать bitcoin ethereum транзакции заработка bitcoin bitcoin оплата bitcoin aliexpress андроид bitcoin bitcoin футболка monero обменник birds bitcoin forbes bitcoin bitcoin income тинькофф bitcoin bitcoin cny полевые bitcoin To a significant degree, the financial system’s weakness today is a function of a trust-basedbitcoin monero bitcoin торрент bitcoin motherboard блоки bitcoin ethereum microsoft avto bitcoin bitcoin cryptocurrency FACEBOOKторговать bitcoin bitcoin roll bitcoin удвоитель fpga ethereum bitcoin future zebra bitcoin