BCH-Upgrade-Vorschlag: Ihre Sie ASERT als neue DAA
Abstrakt
Der aktuelle BCH-Schwierigkeitsanpassungsalgorithmus (DAA) ermöglicht es einem Switch Miner, einem großen Gewinn aus Minern mit konstanter Hashrate zu ziehen. Dies wirkt sich stark negativ auf das Mining mit konstanter Hashrate aus, führt das Switch-Mining und führt zu Schwächen in Schwierigkeitsgrad und Hashrate. In meiner Testsimulation liegt der Gestohlene Gewinn in der Größenordnung von 6% Umsatzverlust durch konstante Hashrate-Miner für die aktuelle DAA, aber nur etwa 0,35% bis 0,65% für die EMA-DAA-Familie. Ich schlage einen möglichen EMA-Typ gehört ASERT vor , damit BCH im eigenen Protokoll-Upgrade vom November 2020 wird, und stelle welche zu diesem auch als nicht gehört Beispiel-C ++ - gehört bereit.
Warum die DAA ein Problem ist
Der aktuelle BCH-Schwierigkeitsanpassungsalgorithmus - bekannt als cw-144
, da der Verwaltung auf Kettenbemessungen - hat ein Problem: Er ist Lieben für Schwingungen. This Schwingung ist das Plan Ergebnis des current BCH-DAA unter verwendung Einer einfachen gleitenden Durchschnitt und in Wird frühere Arbeiten ausführlich beschrieben. Es war cw-144
bereits im Oktober 2017 ein bekanntes Problem, bevor es im Mainnet wurde.
( Wenn Sie mit dieser Schwingung bereits vorhanden sind, z. B. wenn Sie mein Video vom 27. Februar 2020 gesehen haben , können Sie diesen Abschnitt überspringen und zur Überschrift Stabile DAAs springen.)
Es gibt einige Gründe, warum dieser Fehler und das damit verbundene Problemproblematik sind:
Es ist die Tatsache, dass Transaktionsbestätigungszeiten um den Faktor 2x, wenn sich 90% der Hashrate rational sind.
Es gehört dazu, dass die Kette gehört zum Stillstand kommt, wenn sich 100% der Hashrate rational verhält.
Es ist wahr, dass alle wahrhaftig egoistisch sind. Egoistische Bergbau-Anhaltspunkte Block-Reorgs, Rechte das Vertrauen der Öffentlichkeit in der Block-Kette und Machen mit mit doppelten Lern praktikabler.
Es führt Bergleute verwirkt, dass sie BCH unterscheiden loyal sind.
Es ist eine kleine Solo-Bergleute, die nicht über die technologischen Raffinesse Richtlinien, um Strategien zur Umschaltung von Hashraten zu automatisieren. und
Es ermöglicht fähwillige Strategien, mit denen ein Bergmann die Schwingungen und die Rechte auf die Umschalten zu geben, zu ändern, seine Hashrate selbst auf gepumpte Weise umschaltet oder die Zeitstempel der von ihm verwandauten Blöcke manipuliert.
Kurz gesagt, die Schwingung zu ändern, cw-144
gehört die letzten 144 Blöcke, um die Hashrate zu viel. Wenn ein Block mit einem hohen Hashrat das SMA-Fenster wird, können Sie die Rechte um die Rechte Rechte, wie ein neuer Block, der im Fenster eintritt, ihn gehört. Blöcke, die Fenster verlassen, die eigenen, die Rechte stark in einer Richtung, die Bergleute gehören anregt, die Hashrate des abgenommenen Blocks zu sich. Ich nenne diesen Effekt "Hashrate-Echos". Bedenken haben diese Echos kein zufriedenwilliges Miner-Verhalten. Sie sind das Ergebnis des Ergebnisses von Bergleuten, die Rechte Rechte Bürger der DAA folgen.
Diese Hash-Oszillationen haben einen Zeitraum von etwa 1,05 Tagen, welche sie in den schwierigen Schwierigkeitsgraden oder Hashrate-Diagrammen haben, aber in diesen interaktiven Diagrammen gesehen sind wichtig.
Diese Hashrate-Echos treten nach cw-144
dem DAA im November 2017 in BCH auf. Zu diesem Zeitpunkt, den die Oszillationsamplitude etwa 1 EH / s, die Anzahl der Rechte-Hash-Rate, die Zweifache des Mindest-Mindestbetrags:
Die von BME-Bergbau-Pools haben diese Echos um den 1. Oktober 2019 geändert . Die Schwingungsamplitude gehört 11 EH / s mit Befugnissen Spitzen bei 4x bis 8x des Arbeits Minimums. Unterschiedliche Klischees Extreme um den 20. Januar 2020 und den größten Teil des April 2020 gehört.
Diese Schwächen der Hashrate müssen und werden durch die Bergbauschwierigkeiten verursacht. Diese Schwierigkeitsschwäche beziehen sich auf die Amplitude von 10%, Krieg verbunden, dass die Bergleute die Wahrnehmung Zeit mit Verlust (im Vergleich zum Bergbau von BTC) abbauen.
Diese Schwächungsbedenken sterben die Benutzererfahrung. Die Bursts mit jedem Hashrat sind kurz; Die Dürreperioden da langen sind lang. Die folgenden Folgen werden zu den Dürreperioden, die zu den gleichen Poisson-Block-Verträgen gehören. Dieser Effekt ist in diesem interaktiven Diagramm der Konfigurationszeiten zu sehen. Die Konfigurationszeiten haben sich in der letzten Zeit gleichheitschtert. Sie haben seit September 2019 vertraute 15 Minuten und im Januar 2020 einen Höchststand von 28 Minuten.
Im September-Oktober 2017 haben Kyuupichan und einige andere Entwickler die Software-Suite "Schwierigkeitsgrad" geschrieben , um diese Schwierigkeitsschwächen und das Umschalten der Hashrate mit verschiedenen DAAs zu simulieren. Im Februar 2020 wird ich diese Suite um eine grafische browserbedingte Rechte ( Code ; langsame Online-Version ). Diese Rechte Rechteigenen, die mit dem cw-144
Anspruch dieser Oszillationen ohne Schadenwilliges Miner-Verhalten werden. Alles, was gehört wurde, um sie zu hören, cw-144
ist, dass die Bergleute die Münze (BCH oder BTC) abbauen, die zu einem Zustand Zustand am rentabelsten ist.
Die wahrnehmungsbedingten auch, dass die schwaltungsbedingten
cw-*
Fehlerwellen sind. Die Schwächungen sind in allen anderen dercw
Familie vorhanden, wenn Bergleute rationalen Anreizen folgen, mit Verträgen und Folgenen Schwächen fürcw
soziale Mitwirkungen, z. B.cw-144
ist schlechter alscw-576
), aber die Schwächen sind in allen anderen guten DAA-Familienhaften von der Bedeutungsbehaltung.
Die Tatsache, dass Switch-Bergleute 5 bis 20% mehr verdienen können als Bergleute mit konstanter Personalabteilung, ist ein Fehler. Dieser Fehler ist das Ergebnis der eintägigen Resonanz und der Tendenz zur Schwingung. Wir können den Zugriff für Switch Mining um etwa 90% bis 95% beziehen, entschädigen wir für einen anderen DAA-Status, einen für einen anderen der EMA-Familie.
Stabile DAAs
Die Instanzen des gleichen gleitenden Mittel (SMA) basierenden Managements
cw-144
werden durch den Einfluss eines Blocks auf die gleichen verursacht, die abrupten Enden, wenn der Block das 144-Block-Fenster wird. Diese Instanzen können sich ändern, entschädigen den Einfluss eines Blocks mit der Zeit langsam verblasst. Wenn der Einfluss von über 144 Blöcken linear abgenommen, sieht die Instanz. Dies ist die Funktion deslwma
Vertrags (linear gewichteter gleitender Steuern) sowie des zugehörigen Gewichtsetewt
Zeit von Tom Harding. Eine andere Möglichkeit besteht darin, den Einfluss mit der Zeit exponentiell verblassen zu lassen, z. B. mit einer Zeitkonstante von 144 Blöcken. Dies ist, war die EMA-Berührungsfamilie tut. Diese Familie besteht aus vielen Personen, wie die von Jacob Eliosoffema-1d
undsimpexp-1d
Tom Hardingwtema
und Mark Lundebergs Richtlinienasert
.Unter Diesem stabilen DAAs identifizieren sie vier Wichtigste Kandidaten Algorithmen:
asert
,wtema
,lwma
, undwt
. Alle vier Konflikte HaBen in meinen guten guten Ergebnissen Sie Sie Sie und in den Behinderungen von zawy12 gute ergebnisse . Nachfolgend finden Sie eine Tabelle mit Daten zu einem vollständigen Simulationslauf für alle vier Abwicklungsalgorithmen sowiecw
als Referenz bei drei verschiedenen Einstellungen für die Funktionsfähigkeit, die ein Tag gehört.cw-144
), 2 Tage oder 4 Tage. Die Tabelle wird die Berechtigungszeit für die in der zweiten Spalte. Diese Zahl sollte ideal sein, so dass wie möglich sein. In den Spalten "Gierig" bis "Stetig" zeigt die Tabelle die relative Rentablenbildung Bergbaustrategien (im Vergleich zum Bergbau-BTC). In der letzten Spalte zeigen die Tabelle den Vorteil, der durch den Wechsel von der schlechtesten Bergbaustrategie zur besten Bergbaustrategie wird werden kann. Diese Zahl sollte ideal sein, so nahe wie möglich bei 0% liegen.
Die Unterschiede in der Leistung der Hashratregulierung zwischen diesen vier Optionen in Simulationen waren gering. Es schien oft einen kleinen Vorteil für die EMA-basierten Algorithmen ( wtema
und asert
) zu geben, aber die Vorteile waren klein genug, dass wir der Ansicht waren, dass die Wahl aufgrund anderer Aspekte wie der Komplexität der Implementierung getroffen werden sollte. Beide lwma
und wt
erfordern das Abtasten jedes Blockheaders in ihren Fenstern (z. B. 288 Blöcke), um die Schwierigkeit des nächsten Blocks zu berechnen, während die EMA-Familie im Allgemeinen nur das Abtasten von zwei Blockheadern erfordert, sodass sich unsere Aufmerksamkeit auf die EMA-Familie konzentrierte.
Unsere Aufmerksamkeit konzentrierte sich dann auf die Bestimmung des zu verwendenden EMA-Algorithmus. Die interessantesten zu sein schien wtema
und asert
.
WTEMA und ASERT
Die beiden EMAs, die als die besten Kandidaten erschienen, waren wtema
und asert
. Der wtema
Algorithmus wurde von dgenr8 (Tom Harding) am oder vor dem 1. Januar 2018 erstellt . Es ist eine außergewöhnlich einfache Nur-Ganzzahl-EMA, die auf dem folgenden Pseudocode basiert:
next_target = prior_target / (IDEAL_BLOCK_TIME * alpha_recip)
next_target *= block_time + IDEAL_BLOCK_TIME * (alpha_recip - 1)
In abstrakten Begriffen wird gehört, um wie viel das "Ziel" des Blocks (der Kehrwert der Steuern) wird, um 600-Sekunden-Blöcke zu gehört, wenn das letzte Blockintervall perfekt für die Hashrate isthalten soll. Dann wird es ein gewichteten Durchschnitt zwischen diesem Wert und dem Ziel des letzten Blocks durch, wird 1/alpha_recip
als Gewichtungskoeffizient verwendet wird. Dies macht wtema
eine rekursiv definierte Funktion und ein klassisches Beispiel für ein verbessertes IIR-Filter erste Ordnung , das eine einzelne RC-Filter enthält. Lassen Sie sich selbst nicht von der Berechtigung hören: Es funktioniert besser als ein komplexes PID-Reglersystem , auch mit einem Bruchteil der Kenntnisse.
Der asert
Wert wurde von Mark Lundeberg am oder vor dem Februar 2020 entwickelt , wurde eine von Äquivalente Formel auch 2018 von Jacob Eliosoff beeinflusst wurde, wurde ohne Mark Lundebergs wertvolle Analyse und wurde 2020 von Werner et. al am Imperial College London . asert
wird durch Ihre Formeln Rechte:
target_timestamp = (height + 1 - activation_height)*IDEAL_BLOCK_TIME
next_target = target_at_activation * 2^((last_timestamp − target_timestamp)/tau)
Hinweis: ^
Bezeichnet die Gleitkomma-Potenzielle, nicht die Ganzzahl XOR.
asert
steht für absolut steht exponentiell steigende Ziele. In abstrakten Begriffen wird asert
ein idealer Blockkrieg. Für jede tau
zweite für die Hälfte eines Blocks wurde der Schwierigkeitsgrad des zweiten Blocks um den Faktor 2 geändert. Angemessene Werte von tau
können einige Stunden bis einige Wochen gehören. Wie wtema
, asert
‚s - Code und Mathematik ist einfach und und nur von zwei Blöcken. Im gleichen zu wtema
, asert
gehört zu dem nur auf dem letzten Block und die Entstehungsgeschichte Block oder den Gabelblock asert
wurde festgestellt. Dies vermeidet die rekursive Definition, sterben wtema
Hut. Für weitere Informationen, asert
die ich Mark Lundebergs prägnantes Einführungspapier .
Die beiden gehören sind funktional gehört, wenn die Blockintervalle nahe am Normalen liegen und sich nur an den Extremen befinden.
wtema und asert sind für kleine Blocklösungszeiten, die äquivalent sind. In beiden Richtungen wird asert eine zukünftigee Leistung auf. Es gibt eine problematische Zeit der x-Achse mit großen negativen Lösungszeiten mit wtema, aber nicht asert. Große positive Lösungsbefehle gehören dazu, dass die Rechte durch Aertwerden werden. Bildnachweis: dgenr8
Die Debatte zwischen den beiden, die sich auf vier Themen zu konzentrieren :
Ganzzahlige Näherungen - werden
wtema
alsasert
, daasert
eine explizite Exponentialfunktion verwendet wird, aber in beiden besteht möglichSingularität und negative Löslichkeiten - problematisch
wtema
, aber nichtasert
, wie in der sozialen Grafik (Quelle: dgenr8 ).wtema
Dies ist ein Wert zu sein (zB>-0.5 * 144 * 600 sec
fürwtema-144
)Mathematische und theoretische Eleganz - gut mit beiden, aber besser für
asert
Akkumulation von Rundungs- / Approximationsfehlern - verloren
wtema
, aber verloren seinasert
absolutes Natur nicht vorhanden
Die Hauptprobleme finden # 1 und # 2 zu sein . Die Ursache ganzzahliger Näherungen von 2 ^ x macht asert
die Wahrnehmung. Die richtige, vor große negative Lösungszeiten zu schützen, wird zu wtema
tun. Wir haben uns nicht entschieden, dass es besser ist, ein paar Codezahlen zur Schwierigkeitsberechnungsfunktion selbst zu haben, als andere zu regeln, zu haben und zu haben, zu haben asert
.
Es ist wichtig, Gleitkommacode nicht in Bitcoin-Konformitätsregeln, da C und C ++ im Allgemeinen nicht IEEE 754-Kompatibel sind und verschiedene Compiler und Hardware bei Gleitkommabere gehört nicht gehört können. Wir brauchen auch eine ganzzahlige Näherung. Wir haben uns dann verschiedene Approximationsimplementierungen führen.
Die von mir gewählte Methode gehört zu der 2^x = 2 * 2^(x-1)
Identität, um die 2^x
Annäherung und den 0 <= x < 1
Bereich zu gehört. Wenn dies stirbt, ist es, dass asert
es nicht erledigt ist, wenn es geht und wenn es sich um eine Annäherung 2^x ~= 1 + x
handelt. Aber wir haben es viel besser gemacht, auch wir haben es getan. Ich habe für Mark Lundebergs kubische Annäherung von 2^x
für 0 <= x < 1
. Diese Annäherung gehört eine Fehlerquote unter 0,013%.
Die aktuelle DAA cw-144
führt den schlechtesten aller mit großem Abstand getesteten Algorithmen aus. Die beste DAA in diesem Test benötigte asert-576
nur 51%, um die durchschnittliche Transaktion zu bestätigen, und reduzierte den Anreiz für Switch Mining um 94,4% im Vergleich zu cw-144
. Alle Algorithmen außer cw sind bei einer bestimmten Reaktionseinstellung in ihrer Leistung eng zusammengeballt. Der Leistungsvorteil für die längste Reaktionszeit (576 Blöcke, 4 Tage) war im Vergleich zur mittleren Einstellung gering.
Die Unterschiede in der Leistung der Hashratregulierung zwischen diesen vier Optionen in Simulationen waren gering. Es schien oft einen kleinen Vorteil für die EMA-basierten Algorithmen ( wtema
und asert
) zu geben, aber die Vorteile waren klein genug, dass wir der Ansicht waren, dass die Wahl aufgrund anderer Aspekte wie der Komplexität der Implementierung getroffen werden sollte. Beide lwma
und wt
erfordern das Abtasten jedes Blockheaders in ihren Fenstern (z. B. 288 Blöcke), um die Schwierigkeit des nächsten Blocks zu berechnen, während die EMA-Familie im Allgemeinen nur das Abtasten von zwei Blockheadern erfordert, sodass sich unsere Aufmerksamkeit auf die EMA-Familie konzentrierte.
Unsere Aufmerksamkeit konzentrierte sich dann auf die Bestimmung des zu verwendenden EMA-Algorithmus. Die interessantesten zu sein schien wtema
und asert
.
WTEMA und ASERT
Die beiden EMAs, die als die besten Kandidaten erschienen, waren wtema
und asert
. Der wtema
Algorithmus wurde von dgenr8 (Tom Harding) am oder vor dem 1. Januar 2018 erstellt . Es ist eine außergewöhnlich einfache Nur-Ganzzahl-EMA, die auf dem folgenden Pseudocode basiert:
next_target = prior_target / (IDEAL_BLOCK_TIME * alpha_recip)
next_target *= block_time + IDEAL_BLOCK_TIME * (alpha_recip - 1)
In abstrakten Begriffen wird zunächst geschätzt, um wie viel das "Ziel" des Blocks (der Kehrwert der Schwierigkeit) geändert werden sollte, um 600-Sekunden-Blöcke zu erreichen, wenn das letzte Blockintervall perfekt für die Hashrate repräsentativ wäre. Dann führt es einen gewichteten Durchschnitt zwischen diesem Wert und dem Ziel des letzten Blocks durch, wobei es 1/alpha_recip
als Gewichtungskoeffizient verwendet wird. Dies macht wtema
eine rekursiv definierte Funktion und ein klassisches Beispiel für ein einfaches IIR-Filter erster Ordnung , das einem elektronischen RC-Filter entspricht. Lassen Sie sich jedoch nicht von der Einfachheit täuschen: Es funktioniert genauso gut wie ein komplexes PID-Reglersystem , jedoch mit einem Bruchteil der Komplexität.
Der asert
Algorithmus wurde größtenteils von Mark Lundeberg am oder vor Februar 2020 entwickelt , obwohl eine äquivalente Formel auch 2018 von Jacob Eliosoff unabhängig entdeckt wurde, jedoch ohne Mark Lundebergs detaillierte Analyse, und erneut 2020 von Werner et. al am Imperial College London . asert
wird durch folgende Formeln definiert:
target_timestamp = (height + 1 - activation_height)*IDEAL_BLOCK_TIME
next_target = target_at_activation * 2^((last_timestamp − target_timestamp)/tau)
Hinweis: ^
Bezeichnet die Gleitkomma-Potenzierung, nicht die Ganzzahl XOR.
asert
steht für absolut geplante exponentiell steigende Ziele. In abstrakten Begriffen wird asert
ein idealer Blockzeitplan definiert und die Schwierigkeit jedes Blocks exponentiell festgelegt, basierend darauf, wie weit vor oder hinter diesem Zeitplan der übergeordnete Block war. Für jede tau
Sekunde vor dem Zeitplan eines Blocks steigt der Schwierigkeitsgrad des nächsten Blocks um den Faktor 2. Angemessene Werte von tau
können einige Stunden bis einige Wochen betragen. Wie wtema
, asert
‚s - Code und Mathematik ist einfach, und hängt nur von zwei Blöcken. Im Gegensatz zu wtema
, asert
hängt bei dem nur auf dem letzten Block und die Entstehungsgeschichte Block oder den Gabelblock asert
wurde aktiviert. Dies vermeidet die rekursive Definition, die wtema
hat. Für weitere Informationen asert
empfehle ich Mark Lundeberg'sprägnantes Einführungspapier .
Die beiden Algorithmen sind funktional nahezu identisch, wenn die Blockintervalle ziemlich nahe am Normalen liegen und sich nur an den Extremen unterscheiden.
wtema und asert sind für kleine Blocklösungszeiten ungefähr gleichwertig, weichen jedoch für längere Lösungszeiten voneinander ab. In beiden Richtungen weist asert eine überlegene Leistung auf. Es gibt eine problematische Kreuzung der x-Achse mit großen negativen Lösungszeiten mit wtema, aber nicht asert. Große positive Löslichkeiten führen dazu, dass die Schwierigkeit durch Aert verringert wird. Bildnachweis: dgenr8
Die Debatte zwischen den beiden Algorithmen schien sich auf vier Themen zu konzentrieren :
Ganzzahlige Näherungen - einfacher
wtema
alsasert
, daasert
eine explizite Exponentialfunktion verwendet wird, aber in beiden Fällen möglichSingularität und negative Löslichkeiten - problematisch
wtema
, aber nichtasert
, wie in der obigen Grafik gezeigt (Quelle: dgenr8 ).wtema
benötigt wahrscheinlich Regeln, die die Löslichkeit einschränken, um größer als ein Wert zu sein (zB>-0.5 * 144 * 600 sec
fürwtema-144
)Mathematische und theoretische Eleganz - gut mit beiden, aber besser für
asert
Akkumulation von Rundungs- / Approximationsfehlern - bescheiden
wtema
, aberasert
aufgrund seiner absoluten Natur nicht vorhanden
Die Hauptprobleme schienen # 1 und # 2 zu sein . Die Notwendigkeit ganzzahliger Näherungen von 2 ^ x macht asert
die Komplexität komplexer. Die Notwendigkeit, vor großen negativen Lösungszeiten zu schützen, wird wtema
komplexer. Letztendlich haben wir beschlossen, dass es besser ist, ein paar Codezeilen zur Schwierigkeitsberechnungsfunktion selbst hinzuzufügen, als andere Konsensregeln hinzuzufügen oder zu ändern, um große negative Lösungszeiten zu verbieten, und haben uns daher entschlossen asert
.
Es ist wichtig, Gleitkommacode nicht in Bitcoin-Konsensregeln aufzunehmen, da C und C ++ im Allgemeinen nicht IEEE 754-kompatibel sind und verschiedene Compiler und Hardware bei Gleitkommaberechnungen nicht übereinstimmen können. Wir brauchen also eine ganzzahlige Näherung. Wir haben uns dann verschiedene Approximationsimplementierungen angesehen.
Die von mir gewählte Methode basiert auf der 2^x = 2 * 2^(x-1)
Identität, um die 2^x
Annäherung an den 0 <= x < 1
Bereich zu verschieben. Sobald dies geschehen ist, asert
wird es bemerkenswert unempfindlich gegenüber verbleibenden Fehlern, und selbst eine so einfache Annäherung 2^x ~= 1 + x
funktioniert ziemlich gut. Aber wir könnten es viel besser machen, also haben wir es gemacht. Nachdem ich einige Ansätze getestet habe, entscheide ich mich schließlich für Mark Lundebergs kubische Approximation von 2^x
for 0 <= x < 1
. Diese Annäherung hält eine Fehlerquote unter 0,013% aufrecht.
Der Fehler für Mark Lundebergs 2 ^ x-Näherung liegt zwischen -0,010% und + 0,013%.
Hier ist ein noch nicht getestetes Beispiel für eine C ++ - Implementierung des aserti3
Algorithmus , und hier ist eine gut getestete Python3-Implementierung vonaserti3
. Die Leistung spiegelt die wahre asert
sehr genau wider . Das Testen der C ++ - Implementierung sollte bald folgen.
Die wichtigste konkurrierende Approximationsoption war die exp_int_approx()
Implementierung von Jacob Eliosoff , bei der ein Algorithmus aus dem Stapelüberlauf verwendet wird , um eine willkürliche Genauigkeit zu erzielen, jedoch auf Kosten der Verwendung einer for
Schleife und einer undurchsichtigeren Mathematik und eines undurchsichtigeren Codes.
Ich habe eine Halbwertszeit von 2 Tagen gewählt ( tau = 2*24*60*60
entspricht einer Reaktionseinstellung von 2*144/ln(2)
oder aserti3-415.5
aufgrund eines Unterschieds in den Exponentialbasen), da dies innerhalb des Wertebereichs zu liegen scheint, der in der Simulation nahezu optimal funktioniert und gleichzeitig für den Menschen leicht zu verstehen und zu verstehen ist diskutieren - für alle 2 Tage vor dem Zeitplan verdoppelt sich der Schwierigkeitsgrad eines Blocks. Ich betrachte eine Halbwertszeit von 1 Tag (aserti3-207.75
) auch akzeptabel sein. Ich empfehle, nicht unter 207,75 oder höher als 576 zu gehen.
Aktivierung
Da die asert
Berechnung von der Höhe und dem Schwierigkeitsgrad des Gabelblocks abhängt, ist die Implementierung wesentlich einfacher und einfacher, wenn die Aktivierung auf einer vorgegebenen Blockhöhe und nicht auf einer vorgegebenen Medianzeit (MTP) erfolgt. Wenn der letztere Ansatz verwendet wird, muss der neue asert
Code nach dem Verzweigen die Blockchain nach dem ersten Block durchsuchen, dessen MTP die Gabelzeit überschritten hat, und die Höhe und Schwierigkeit aus dem Header dieses Blocks extrahieren. Wenn dagegen eine Gabelhöhe verwendet wird, muss der asert
Algorithmus nur die Blockchain nach der Schwierigkeit in der bekannten Höhe durchsuchen - eine erheblich einfachere Operation. Obwohl eine MTP-basierte Aktivierung von asert
möglich ist, glaube ich, dass es insgesamt einfacher und besser sein wird, diese Aktivierung stattdessen basierend auf der Blockhöhe durchzuführen.
Bitcoin ABC hat die Tradition, dem Code im Voraus eine Giftpille hinzuzufügen, um veraltete Versionen seiner Software bei einem vorgegebenen MTP zu entfernen. Wenn zur Aktivierung eine Gabelhöhe verwendet wird asert
, asert
stimmen die Aktivierung der Giftpille und die Aktivierung nicht genau überein. Dies führt wahrscheinlich zu zwei technischen Hartgabeln in schneller Folge und nicht zu einer einzigen Dreiwegegabel. Dies ist ein kleiner Nachteil bei der Verwendung einer Gabelhöhenaktivierung. Aber selbst wenn die Giftpille nicht perfekt zusammenfällt, wird sie dennoch ihren Zweck erfüllen: Sie wird Einzelpersonen davon abhalten, weiterhin veraltete Software auszuführen.
Ich glaube, dass der (möglicherweise dauerhaft) einfachere Code einer höhenbasierten Aktivierung von asert
das Problem der zeitlichen Nichtübereinstimmung überwiegt, daher habe ich in meiner Beispiel-C ++ - Implementierung eine höhenbasierte Aktivierung verwendet . Ich bin damit einverstanden, dass dies geändert wird, wenn eine Mehrheit der BCH-Entwicklergemeinschaft anderer Meinung ist.
Testnet
Es gilt die Standardregel für 20-Minuten-Testnetze: Ein Block kann mit Schwierigkeit 1 abgebaut werden, wenn sein Zeitstempel mindestens 20 Minuten vor dem vorherigen Block liegt. Da die asert
Schwierigkeitsanpassungen eher auf der Zeit als auf der Blockhöhe basieren, funktioniert die "Timewarp" -Technik zum Zurücksetzen der Schwierigkeit im Testnetz (durch wiederholtes Vorwärtsspringen des Zeitstempels, um die durchschnittliche Kettenarbeit über das letzte Schwierigkeitsanpassungsintervall zu senken) nicht. Aus diesem Grund lassen sich Testnet-Schwierigkeiten nach dieser Änderung langsamer beheben als zuvor, und Testnet-Benutzer können einige Tage lang mit 20-Minuten-Blöcken stecken bleiben, nachdem ein ASIC-Miner Testnet verlassen hat. Dies könnte durch Reduzierung dertau
Wert auf testnet, aber die Kosten für diese Änderung wären, dass testnet dem Mainnet weniger genau ähnelt. Entwickler, die häufig Testnet verwenden, sollten diskutieren, welchen Ansatz sie bevorzugen.
Anschläge
Wir haben uns einige verschiedene Arten von Angriffen angesehen aserti3
und bisher mit bestehenden Konsensregeln und Nicht-ABC / BCHN-Knotenrichtlinien in fast allen Szenarien eine aserti3
Outperformance erzielt cw-144
. Es gibt nur wenige, die besorgniserregend erscheinen. Alle bisher identifizierten Angriffe sind von geringer Größe (normalerweise kleiner als andere bekannte und vorhandene Angriffsvektoren) und / oder können durch Änderungen der Richtlinien für kleine Knoten leicht abgeschwächt werden.
Die Angriffsszenarien, die von erheblicher Bedeutung sind, sind alle diejenigen, vor denen die aktuelle DAA durch die Verwendung eines Median-of-Three-Vorfilters schützt . Die aktuelle DAA verwendet den mittleren Zeitstempel der letzten drei Blöcke sowie den mittleren Zeitstempel der Blöcke 144, 145 und 146 vor. Dieser Median-of-Three-Vorfilter fügt der DAA in den meisten Szenarien effektiv 1 Block Verzögerung hinzu, wodurch verhindert wird, dass Schwierigkeiten bei einem 2-Block-Reorg-Angriff ausgenutzt werden, wie sie in den meisten bekannten egoistischen Mining-Strategien verwendet werden. Dieser zusätzliche Verzögerungsblock führt jedoch auch zu Oszillationsproblemen in den meisten DAAs, die noch nicht oszillierend sind, einschließlich EMAs. Daher raten zawy12 und ich dringend von der Verwendung von Median-Vorfiltern ab. Dies erfordert zwei Arten von 2-Block-Angriffen, die besondere Aufmerksamkeit erfordern.
Das untere Diagramm zeigt die Schwierigkeitsregulierungsleistung für eine normale EMA-DAA wie wtema. Das obere Diagramm zeigt denselben DAA, jedoch mit einer Verzögerung von 1 Block. Diese Verzögerung erzeugt eine Instabilität und Schwingung mit einer Periode von 2 Blöcken und ist eine Katastrophe. Bildnachweis: zawy12
Der erste Angriff ist egoistischer Bergbau ohne Schwingungen. In diesem Szenario kann ein egoistischer Bergmann A
einen Block A1
mit einem künstlich frühen Zeitstempel erstellen - beispielsweise einer Lösungszeit von 1 Sekunde -, was die Schwierigkeit des nächsten Blocks A2
um 0,24% erhöht . Dies kann dazu führen, dass die Kette A2
etwas mehr Kettenarbeit hat als B2
und dass Knoten bevorzugt A2
werden, B2
selbst wenn B2
sie zuerst gesehen wurden. Bitcoin ABC und BCHN haben bereits Knotenrichtlinienregeln , die diesen Angriff blockieren, Bitcoin Unlimited jedochund die meisten anderen Knoten nicht. Um dieses Problem zu beheben, empfehlen wir, dass alle verbleibenden Knoten der zuerst gesehenen Regel für Blöcke eine Hysterese hinzufügen: Knoten sollten Ketten nur wechseln, wenn die Arbeit der neuen Kette die der ersten um einen wesentlichen Schwellenwert überschreitet, z. B. 10% oder 50% der Kettenarbeit eines Blocks .
Der zweite Angriff ist der FTL-Angriff (Future Time Limit). Bei diesem Angriff erstellt ein Bergmann einen Block mit dem auf die FTL gesetzten Zeitstempel ( derzeit 7200 Sekunden in der Zukunft gemäß den Richtlinien der meisten BCH-Knoten), um den Schwierigkeitsgrad einer geheimen Kette zu verringern. Anschließend werden so viele Blöcke wie möglich bis zum Schwierigkeitsgrad abgebaut an dieser Kette kehrt zum Normalzustand zurück. Dieser Angriff kann unter bestimmten (aber nicht allen) Umständen etwas effektiver sein asert
als cw
unter, da asert
die Schwierigkeit nach einem einzelnen Block und nicht nach zwei für reagiert cw
. Dieser Effekt wird durch die Verwendung einer langsameren Reaktionseinstellung ( aserti3-2d
etwa 1/4 so reaktionsschnell wie cw-144
) weitgehend gemindert , kann jedoch besser durch einfaches Verringern der FTL behoben werden.
Die Senkung der FTL scheint eine einfache Verbesserung zu sein. Viele Altcoins haben die FTL ohne beobachtete negative Konsequenzen gesenkt. In der modernen Welt von NTP und GPS ist es einfach, die Systemuhren innerhalb von 0,1 Sekunden synchron zu halten. Es gibt also keinen Grund, Fehler von bis zu 7.200 Sekunden ohne Bestrafung zuzulassen. Selbst in der interplanetaren Zukunft der Menschheit wird eine FTL von 600 Sekunden keine Probleme für das Bitcoin-Protokoll verursachen, da Blöcke, in denen der Zeitstempel die Veröffentlichungszeit widerspiegelt, dazu führen, dass Blöcke mit alten empfangen werdenZeitstempel auf anderen Planeten, keine zukünftigen Zeitstempel. In ferner Zukunft müssen wir möglicherweise die FTL überdenken, sobald der Bitcoin-Abbau für Fahrzeuge mit relativistischen Geschwindigkeiten beginnt. Bis dahin empfehle ich jedoch, den Wert auf 600 Sekunden oder weniger zu senken. Darüber hinaus muss bei jeder Reduzierung der FTL die DEFAULT_MAX_TIME_ADJUSTMENT- Grenze, inwieweit die Peer-Zeit von der Ortszeit abweichen kann (die "Peer-Time-Revert-Regel", wie zawy12 sie nennt), entsprechend angepasst werden.
Dies ist keine erschöpfende Diskussion möglicher Angriffe, sondern lediglich eine Einführung in die bekannten besorgniserregenden Angriffe. Die Diskussion einiger anderer Angriffsszenarien finden Sie in zawy12s EMA for BCH (Teil 2) und Hash Attack Examples Github Issue Threads.
Fazit
Die aktuelle DAA cw-144
verursacht BCH viele Probleme. Wir sollten es reparieren. Ein Wechsel zu einem EMA- oder LWMA-Algorithmus würde diese Probleme beheben. Der aserti3-2d
Algorithmus scheint insgesamt weit überlegen zu sein cw-144
, und ich glaube, er ist die beste Option, die wir haben.
Ein guter DAA sollte die folgenden Eigenschaften in grober Reihenfolge der Wichtigkeit haben:
Es sollte stabil und nicht anfällig für Schwingungen sein.
Die Bestätigungszeiten sollten niedrig gehalten werden.
Es sollte die Anreize für Bergleute niedrig halten, Hashrate-Spielereien durchzuführen.
Es sollte die Anreize für Bergleute niedrig halten, Zeitstempel-Manipulations-Spielereien durchzuführen.
Es sollte die Anreize für Bergleute, selbstsüchtige Bergbau-Spielereien durchzuführen, gering halten.
Aufgrund von Nr. 3 , Nr. 4 und Nr. 5 sollten ehrliche Bergbaustrategien mit konstantem Hashrat ein nahezu optimales Einkommen erzielen.
Die Kette sollte sich nach plötzlichen Änderungen der Hashrate und / oder des Wechselkurses schnell erholen.
Das durchschnittliche Blockintervall sollte nahe am Ziel gehalten werden (z. B. 600 Sekunden).
Der Algorithmus sollte mathematisch einfach und elegant sein.
Der Algorithmus sollte leicht zu verstehen und zu analysieren sein.
Der Algorithmus sollte leicht und einfach zu implementieren sein. und
Der Algorithmus sollte wenige oder keine Kanten- und Eckfälle haben.
In diesem Artikel habe ich einige Beweise geliefert, die aserti3-2d
wahrscheinlich die meisten oder alle dieser Anforderungen erfüllen. Ich ermutige die BCH - Entwickler - Community, und die BCH - Gemeinschaft als Ganze, für Szenarien , in denen zu suchen , die aserti3-2d
diese Kriterien nicht erfüllt, und zu vergleichen , aserti3-2d
um cw-144
und alle anderen Kandidaten DAAs in diesen Szenarien.
bitcoincash:qqwk9vcyv7mrexvz52njql60kfcgjjyspsey8xtgx4