Citat:
Ursprungligen postat av
suomifin555
6. Vad är skillnaden på en hard fork och en soft fork? Var ligger riskerna med det enda/det andra?
Bråket och den allt tråkigare tonen har gjort att jag för egen del intresserar mig mindre för problemet. Jag är endast intresserad av tekniken så jag nöjer mig med att försöka bidra med den sista frågan.
Det råder så mycket missförstånd och slarv runt detta i massor av artiklar man läser, även från annars rätt bra källor, vilket är tråkigt.
Jag gör ett försök att reda ut detta i grunden.
Blockkedjan består av ett ständigt växande antal block som länkas ihop genom att varje block refererar till förgående i kedjan. Ett block består av ett antal transaktioner.
Den här kedjan skall endast bestå av en gren hela tiden, men det kommer uppstå temporära förgreningar lite då och då, när miners oberoende (och ovetande) av varandra skapar nya block som de föreslår som "nästa gällande" block i kedjan. Eftersom det blir olika fördröjningar innan hela nätverket vet om att två olika förgreningar existerar, så kommer miners ibland även att bygga vidare med nya block på olika förgreningar som kan växa vidare i flera steg innan nätverket i sin helhet noterat detta.
Systemet är dock designat för att hantera detta genom att helt enkelt välja den längsta kedjan (egentligen den med högst total difficulty eller mest jobb nedlagt) och förkasta kortare förgreningar. Eftersom alla noder jobbar enligt samma strikta regler kommer till sist konsensus uppnås om vilken den "riktiga" kedjan är.
Det här är precis vad en soft fork innebär, dvs en tillfällig förgrening som nätverket klarar av att reda ut på egen hand.
När man uppgraderar programvaran och förändrar regler så kommer man att ha nya (uppgraderade) och gamla (icke uppgraderade) noder som arbetar tillsammans i nätverket.
Beroende på hur reglerna har förändrats så kommer konsensus mellan dessa noder lite förenklat att brytas på 2 olika sätt. De två olika regelfallen är:
1. En ny regel bryter mot den gamla regeln.
2. En ny regel bryter inte mot den gamla, men har hårdare krav.
I första fallet så kommer gamla noder endast att acceptera förgreningar med nya block som följer de gamla reglerna, medans de nya noderna endast accepterar förgreningar med nya block som följer de nya reglerna. De kommer konsekvent förkasta varandras förgreningar och konsensus kan aldrig uppnås. En permanent förgrening, eller hard fork, har uppstått. Nätverket kan inte längre själv på egen hand reda ut problemet förrän i princip alla noder har uppgraderats.
I det andra fallet så kommer gamla noder att acceptera både förgreningar med gamla block (som följer gamla regler) och förgreningar med nya block (som följer nya men även gamla regler), medans de nya endast accepterar förgreningar med nya block. I det här läget så kan alltså de gamla och nya noderna nå konsensus om att förgreningen med endast nya block är den riktiga. De nya noderna därför att de anser den gamla grenen ogiltig, medans de gamla noderna ser 2 giltiga förgreningar men där den nya förgreningen kommer växa snabbare än den gamla om bara tillräckligt många har uppgraderat. Även med svag majoritet så växer den nya förgreningen snabbare. Vi får alltså en temporär förgrening, soft fork, som hanteras på precis samma sätt som när miners råkar skapa dem enligt ovan.