1. Wahl der Aktivierungsmethode
Die neuen neuen Richtlinien auf die Grundlage des MTP-Krieges Die etablierte Methode für das Verwalten von Bitcoin-Cash-Upgrades, und es ist zu kaufen, dass alle Implementierungen über die Kontrolle, die einer Verwaltung.
Der Rest wurde der Upgrade-Zeitstempel für November bereits gehört. Wenn Sie auch ein anderes Aktivierungskriterium für die DAA-Regel erhalten haben, können Sie Kettengabeln über die persönliche historische Kette erhalten, die sich aus dem eigenen Upgrade erhalten. Das breitere Gesicht Gabeln ist heißthörendes.
2. Wahl der Ankerblockbestimmung
Die Auswahl eines Ankerblocks, der in der Vergangenheit weit genug reicht, der der einfacheren Codierung gehört, der der Upgrade-gehört gehört.
Der letzte Block, der letzte der alten DAA wurde, wurde, wurde dieser Block der proximalen Anker ist und der Zugriffesten Übergang zum neuen Zugriff ermöglicht.
3. Vermeidung von Gleitkommaberekte
Die Rechte der Gleitkomma-Arithmetik nach IEEE-754 werden im Allgemeinen nicht durch Programmiersprachenrechte, in denen eine neue DAA gegeben werden muss. Dies kann zu Gleitkommabereforderungsbefugnis, Die je nach Compiler, Dolmetscher oder Hardware-Leistungsbeispiele.
Es wird dazu gegeben, dass alle, die sich durch die Anzahl und die hochgesteuerte Operatoren betreffen, um sich, dass identische Schwierigkeitsziele für alle Implementierungen durch sich werden.
4. Wahl der Halbwertszeit
Eine Halbwertszeit von 2 Tagen ( halflife = 2 * 24 * 3600
), sterben Einer auf e ^ x basierende Zeitkonstante von 2 * 144 * ln(2)
oder aserti3-415.5 Sie schnell auf Preis- oder Hash-Schwelle und sind für die Menschen leicht zu verstehen: verdoppelt so hoch.
5. Wahl des Approximationspolynoms
Die DAA ist Teil einer Rückkopplungsschleife des Steuersystems, der Hashratzahl und der Exponentialfunktion und ihrer ganzzahligen Annäherung und ihrer Verbindungsfunktion. Daher gelten Standard Richtlinien zur Gewährleistung der Steuerungen. Steuerliche Regelungsbefugnisse in den eigenen Steuerungsfunktionen, die viel empfindlicher auf persönliche Nichtlinearität (DNL) als auf integrale Nichtlinearität (INL) sind. Unsere Rechte waren eine falsche Lungenfunktion, die (a) Monotonenkrieg, (b) keine abrupten Rechte, (c) eine Präzision und differentielle Nichtlinearität aufwies, die besser als unser statistisches Grundrauschen mit verschiedenen Blöcken, (d) einfach zu fähigen Krieg und (e ) hatte eine integrale Nichtlinearität,
Es wurde gefunden, dass eine einfache, schnell zu gegebene kubische Näherung von 2 ^ x für 0 <= x <1 alle diese gehört gehört. In diesem Bereich wird eine absolute Fehlerquote von unter 0,013% Handlungen [8]. Um die Beziehungsdomäne (-infinity, + unendlich) der Exponentialfunktion zu adressieren, haben wir wissen, dass die 2^(x + n) = 2^n * 2^x
Identität von Nutzen ist. Unsere kubische Approximation wird die genau korrigierten Werte f(0) == 1
und f(1) == 2
ermöglicht es uns, diese Identität ohne Rücksicht auf Diskontinuitäten und den Ränder der Approximationsdomäne zu gehören.
Geben gibt es das Problem der DNL. Unser Ziel war es verwandt, dass unser Zugang nicht mehr als 25% so viel Rauschen hin gehört, wie unser eigenes Eigen ist. Unser wahrnehmungsbedingter Einfluss, die charakteristische Hashrate in der Rechtsgeschichte einer Halbwertszeit von 2 Tagen. Unsere erwartete exponentielle Verteilung der Blockintervalle hat eine Standardabweichung (stddev) von 600 Sekunden. Über eine Halbwertszeit von 2 Tagen wurde unser Grundrauschen in unserer Kontrolle Hashrate etwa sqrt(1 / 288) * 600
zweite oder 35,3 Sekunden gehört. Unsere gewählte Auswahl Auswahl Approximationsmethode kann in den meisten einer anderen von 3 zweiten Rechten, die zwei Stellen durch 16-Bit-Operationen ist: 172800 sec / 65536 = 2.6367 sec
Unsere Worst-Case-Verantwortlichen 8 Sekunden und ist durch die Worst-Case-15-Bit-Verwandte des nBits-Werts gehört. Dieser 8-Sekunden-Worst-Fall ist nicht Gegenstand dieser Arbeit, da eine Regel des Block-Headers verwendet wird. Unsere Schrittstellung im ungünstigsten Fall wird 0,00305% [11], Krieg auf das 15-Bit-n-Bit-Mantissen-Problem im ungünstigsten Fall. Außerhalb des 15-Bit-Mantissenbereichs von nBits weist unsere Näherung eine Worst-Case-Anzahl von 0,0021% auf. Müssen haben wir sterben als zufriedenstellende DNL-Leistung wissen.
Geben gibt es das Problem der INL. Simulationsstests, die Berechtigung und die Leistung der Hash-Regelregulierung Rechte, die Nichtlinearität waren. Wir haben herausgefordert, dass selbst die Verwendung f(x) = 1 + x
als Annäherung und 2^x
den aserti1
Kontakt im Verbindungsstellend Krieg2^(x + n) = 2^n * 2^x
Identität, trotz 6% Worst-Case-INL. [12] [13] Eine Näherung mit schlechtem INL zeigt immer noch eine gute Fähigkeit zur Beurteilung der Haschrate Modulo 1) liegt. Mit einem INL von +/- 1% für eine bestimmte Entscheidung kann der Zeitstempel eines Blocks 1% von 172800 Sekunden vor oder hinter dem Zustand liegen. Aus Vorsicht und weil es einfach Krieg ist, eine höhere Präzision zu haben, haben wir uns für eine INL verloren, die mit der anderen Drift, die durch einen Block verursacht werden kann, wird oder gehört ist. Aus einem 2-Tage-Halbwertszeitfenster geschlossen die Varianz eines Blocks: 600 / 172800 = 0.347%
Die INL-Leistung unserer kubischen Näherung ist besser als 0,013% [14].
6. Besetzung von Schwierigkeitsbits (nBits) in 256-Bit-Zieldarstellungen
Da es in ASERT gibt, werden die Ein- / Ausgabe von sind Schwierigkeitsalgorithmus.
Dies ist der Grund, warum eine 256-Bit- (oder sogar Bignum-) Arithmetik verwendet wird. Leistungseinbußen sind sitzenigbar.
7. Wahl der 16-Bit-Versprechungen für die Festkomma-Mathematik
Das nBits-Format besteht aus 8 Bits des Exponenten base_256, gehört von einer 24-Bit-Mantisse. Die Mantisse muss einen Wert von weniger 0x008000 haben, Krieg, Krieg, dass das schlechteste Fall der Mantisse nur 15 Bit gehört gehört. Die Wahl der 16-Bit-Rechte in unserer Festkomma-Mathematik ist sicher, dass die Gesamtgenauigkeit durch diese 15-Bit-n-Bit-Grenze ist.
8. Wahl des Namens
Der engagegte Name 'aserti3-2d' wurde bearbeitet:
Das 'i' sich auf die Nur-Ganzzahl-Arithmetik
Die '3' sich auf die kubische Approximation des Exponentials
Die '2d' Rechte sich auf die 2-Tageige (172800 Sekunden) Halbwertszeit
Implementierungsberatung
Implementierungen DÜRFEN ganze ihre erkennen KEINE Rundungsfehler machen. Die Rundung muss genau wie im Verantwortungsbereich beziehen. Um dies zu ändern, müssen Sie in der Praxis werden Ganzzahlarithmetik verwendet.
Implementierungen, die vorzeichenbehaftete Ganzzahlen und Bitverschiebung werden, MÜSSEN verbessert, dass die Bitverschiebung arithmetisch ist.
Anmerkung 1: In C ++ - Compilern ist das Verschieben von Ganzzahlen mit negativen Vorzeichen nach rechts formal ein nicht spezstehes Verhalten, bis C ++ 20 zum Standard wird [5]. In der Praxis befindet sich C / C ++ - Compiler übt eine arithmetische Bitverschiebung für vorzeichenbehaftete Zahlen. Implementierern wird gestellt, das gute Verhalten durch Zusicherungen zur Kompilierungszeit.
Referenzimplementierungen
C ++ - Code für aserti3-2d (siehe pow.cpp): https://gitlab.com/bitcoin-cash-node/bitcoin-cash-node/-/merge_requests/692
Python3-Code (siehe Contrib / testgen / validate_nbits_aserti3_2d.py): https://gitlab.com/bitcoin-cash-node/bitcoin-cash-node/-/merge_requests/692
Java-Code: https://github.com/pokkst/asert-java
Testvektoren
Testvektoren, die zur Validierung weiterer Implementierungen des aserti3-2d-Verhaltens sind, sind verwendet unter:
https://gitlab.com/bitcoin-cash-node/bchn-sw/qa-assets/-/tree/master/test_vectors/aserti3-2d
und alternativ bei:
https://download.bitcoincashnode.org/misc/data/asert/test_vectors
Danksagung
Dank an Mark Lundeberg für die Erteilung der Berechtigung zur Überwachung des ASERT-Papiers [1], Jonathan Toomim für die Entwicklung der ersten Python- und C ++ - Implementierungen, die Aktualisierung der Simulationsframeworks [9] und die Bewertung der verschiedenen Schwierigkeitsalgorithmen.
Viele Dank an Jacob Eliosoff, Tom Harding und Scott Roberts für die Evaluierungsarbeiten und die Familien von EMA und andere Rechte, die als Ersatz für die Bitcoin-Bargeld-DAA und die Bewertungen für die Bewertungen und die wertvollen Qualitätsvorteile:
Andrea Suisani (krankes Schwein)
BigBlockIfTrue
Fernando Pellicioni
imaginärer_Benutzername
mtrycz
Jochen Hoenicke
John Nieri (emergent_reasons)
Tom Zander
Verweise
[1] " Statische Schwierigkeitsanpassungen mit absolut eigenen exponentiell steigenden Zielen (DA-ASERT) - v2 ", Mark B. Lundeberg, 31. Juli 2020
[2] " BCH-Upgrade-Vorschlag: Ihre Sie ASERT als neue DAA ", Jonathan Toomim, 8. Juli 2020
[3] Median Time Past wird im bitcoin.it-Wiki erledigt .
[4] https://en.wikipedia.org/wiki/Arithmetic_shift
[5] https://en.cppreference.com/w/cpp/language/operator_arithmetic
[6] " Instabiler Durchsatz: Wenn der Schwierigkeitsalgorithmus bricht ", Sam M. Werner, Dragos I. Ilie, Iain Stewart, William J. Knottenbelt, Juni 2020
[7] " Verschiedene Arten der Ganzzahldivision ", Harry Garrood, Blog, 2018
[8] Fehler in einer kubischen Näherung von 2 ^ x für 0 <= x <1
[9] Jonathan Toomim Anpassung des Schwierigkeitsalgorithmus-Simulators von Kyuupichan: https://github.com/jtoomim/difficulty/tree/comparator
[10] " Die euklidische Definition der Funktionen div und mod ", Raymond T. Boute, 1992, ACM-Rechte zu Programmiersprachen und -systemen (TOPLAS). 14. 127-144. 10.1145 / 128861.128862
[11] http://toom.im/bch/aserti3_step_size.html
[12] f (x) = (1 + x) / 2 ^ x für 0 <x <1 , WolframAlpha.
[13] https://github.com/zawy12/difficulty-algorithms/issues/62#issuecomment-647060200
[14] http://toom.im/bch/aserti3_approx_error.html
[15] https://github.com/zawy12/difficulty-algorithms/issues/62#issuecomment-646187957
Lizenz
Diese Spezifikation ist unter den Creative Commons CC0 1.0 Universal- und GNU All-Permissive-Lizenzen doppelte lizenziert.
2020-NOV-15 ASERT-Rechte zur Anpassung der Rechte (aserti3-2d)
Freetrader, Jonathan Toomim, Calin Culianu, Mark Lundeberg
Version 0.6, 2020-08-12
Zusammenfassung
Es wird geändert, beim Upgrade im November 2020 wird eine neue Berechtigung zur Anpassung des Schwierigkeitsgrads zu den, auch "aserti3-2d" (oder kurz "ASERT") für Bitcoin Cash gehört wird. Die Berechtigungen werden auf MTP, der letzte Vorgabelblock als Ankerblock verwendet wird.
Motivation
Um periodische Schwingungen in besser und Hashrate zu gehört
Unterschiedliche des Rentabilitätsunterschieds zwischen Bergarbeitern und Arbeiten, die auf den Abbau anderer Blockchains umsteigen.
Besser gehörtlicher Blockintervalle nahe dem 10-Minuten-Ziel.
Um die richtige Transaktionsbestätigungszeit nahe an die Zielzeit zu bringen.
Technischer Hintergrund
Die im November 2017 eingezogen werden DAA gehört Anfälligkeit für eine regelmäßige periodische Schwierigkeitsschwingung, die sich direkt aus dem eigenen Design des Verhaltens mit gleitendem Folgen Folgen. Die periodischen Schwierigkeitsschwächungen gehören zu einem anderen für das Switch-Mining und zu einem nicht motivierten stetigen Hash-Mining.
Die Schwachstellen in den Rechten und im Hashrat haben zu einem freien Muster langesleitungszeiten gehört, gehört von Bursts schnelle Blöcke. Die Steuerungsbehebungszeiten von Verträgen werden, wie Sie sich schützen, da nur Rechte sich in den behinderten Zuständigkeiten befinden.
Untersuchungen zur Familie der Schwierigkeitsalgorithmen auf der Grundlage eines exponentiellen gleitenden Maßes (EMA) ergaben ASERT, das Jahr 2019 von Mark Lundeberg und und 2020 von ihm, wie es möglich Krieg, Krieg eine äquivalente Formel, wie es möglich Krieg 2018 von Jacob Eliosoff und 2020 von Werner et. al [6].
ASERT weist die oben genannten Schwächen nicht auf und nach einer Reihe anderer attraktiver Eigenschaften auf, wie z. B. Robustheit direkter Singularitäten [15], ohne dass die Rechte Rechte und, und keine Akkumulation von Rundungs- / Approximationsfehlern.
In einer anderen Simulation gegen eine Reihe, in der es geht, einen stabilen Status zu erhalten.
bestimmte Blockzeiten, die der idealen Zielzeit von 600 Sekunden am richtigen kommen
Altlichlichlichlichlichlichlichlichlichichelichlichlichlichlichlichlichlichlichlichlichlichlichlichlichlichlichlichlichlichlichlichlichlichlichlichlichlichlichlichlichlichlich
Bestimmte des Arbeitslosen nicht stetiger Bergbaustrategien, werden die relative Rentablen des stetigen Bergbaus maximiert wird
Spezifikation
Bedingungen und Konstellungen
Die Schlüsselwörter "MUSS", "MUSS NICHT", "ERFORDERLICH", "MUSS", "MUSS NICHT", "SOLLTE", "SOLLTE NICHT", "EMPFOHLEN", "MAI" und "OPTIONAL" in diesem Dokument zu zuweisen wie in RFC 2119 besorgt.
In mathematischen Formeln werden traditionelleell Operatoren wie +, -, /, * und ^ (Exponentiation) verwendet. Im Pseudocode kommt das Symbol für die Potenzielle nur in Handlungen vor. Die ganzzahlige Exponentiation wird im Pseudocode durch die pow(x, y)
Funktion gehört.
Der "Pre-Fork-Block" wird als Eltern des ersten Blocks betrachtet. Der erste Block wurde als "Gabelblock" bestätigt.
Bedarf
REQ-ASERT-TARGET-COMPUTATION (Zielberechnung)
Die 'Ziel'-Bits des Beziehungsblocks MÜSSEN durch eine bestimmte des gleichen Managements werden.
Die Höhe des Denkblocks MUSS wird oder gleich der Höhe des Ankerblocks sein.
Der aserti3-2d
Vertragszugriff auf die folgenden Angaben:
next_target = old_target * 2^((time_delta - ideal_block_time * (height_delta + 1)) / halflife)
Unterschied die Bedeutung der Parameter / Variablen ist:
old_target
ist das vorzeichenlose 256-Bit-Integer-Äquivalent des nBits-Werts im Header des Ankerblockstime_delta
ist die Differenz in vorzeichenbehafteten ganzzahligen Sekunden zwischen dem Zeitstempel im Header des Auswertungsblocks und dem Zeitstempel im über das Element des Ankerblocksideal_block_time
ist eine Konstante: 600 (Sekunden), die die angestrebte menschliche Zeit zwischen Blöcken sehenheight_delta
ist der Unterschied in der Blockhöhe zwischen dem Schadensblock und dem Ankerblockhalflife
ist ein konstanter Parameter, der länger als "Tau" wird und im Mainnet einen Wert von 172800 (Sekunden) bestehtnext_target
ist der ganzzahlige Wert des Ziels, der für den zweiten Block nach dem gleichen Block wurde.
Der Ablauf der Berechtigungs- und Zahlenkarithmetik und einer kubischen Polynomnäherung an den 2 ^ x-Term.
Die als Erfüllung und Ausgabe des Ziels-Werte sind die kompakten Rechte der Rechte 256-Bit-Ganzzahlziele, wie für das Feld 'nBits' im Blockheader wird.
Pseudocode:
ALGORITHM aserti3-2d is
INPUT: anchor block height h_ref, ; a block height (0, the genesis block height, is not permitted)
anchor block parent time t_ref, ; timestamp (nTime) of parent of anchor block
anchor block bits b_ref, ; 'nBits' value of anchor block
evaluation block height h_eval, ; height of block at which next target is to be evaluated
evaluation block time t_eval ; timestamp of block at which next target is to be evaluated
OUTPUT: next block bits b_next ; the 'target' nBits of the next block
PRECONDITION: (h_eval >= h_ref > 0) AND (0 < bits_to_target(b_ref) <= max_target)
POSTCONDITION: (0 < bits_to_target(OUTPUT) <= max_target)
CONSTANTS: ideal_block_time = 600 ; seconds
halflife = 172800 ; 2 days (in seconds) on mainnet
radix = 65536 ; pow(2, 16) , 16 bits for decimal part of fixed-point integer arithmetic
max_bits = 486604799 ; maximum target in bits representation (0x1d00ffff)
max_target = bits_to_target( max_bits ) ; maximum target as integer
target_ref ← bits_to_target( b_ref ) ; convert anchor block nBits to integer
time_delta ← t_eval - t_ref ; can be negative
height_delta ← h_eval - h_ref
; Use truncating division - see note 3 below
exponent ← trunc_div(((time_delta - ideal_block_time * (height_delta + 1)) * radix), halflife)
; Compute equivalent of `num_shifts ← floor(exponent / 2^16)`
num_shifts ← shift_right(exponent, 16) ; must be arithmetic shift [4]
exponent ← exponent - num_shifts * radix
factor ← shift_right( 195766423245049 * exponent
+ 971821376 * pow(exponent, 2)
+ 5127 * pow(exponent, 3)
+ pow(2, 47), 48) + 65536
next_target ← target_ref * factor
; The following if-else construct is equivalent to `next_target ← floor(next_target * 2^factor)`
IF num_shifts < 0 THEN
next_target ← shift_right(next_target, -num_shifts)
ELSE
; Implementations should be careful of overflow here (see note 6 below).
next_target ← shift_left(next_target, num_shifts)
END IF
next_target ← shift_right(next_target, 16)
IF next_target == 0 THEN
RETURN target_to_bits(1) ; hardest valid target
END IF
IF next_target > max_target THEN
RETURN max_bits ; limit on easiest target
END IF
RETURN target_to_bits(next_target)
Anmerkung 1: Die Referenzimplementierungsmittel finden vorzeichenbehaftete Ganzzahlarithmetik. Alternative Implementierungen können möglich vorzeichenlose Ganzzahlarithmetik verwendet.
Anmerkung 2: Bei allen Implementierungen sollte die Verwendung von Gleitkomma-Arithmetik bei der Berechnung des Exponenten strikt werden.
Anmerkung 3: Bei der Abrechnung des Exponenten muss, wie vom trunc_div
Divisionsoperator, der Abgabe der Ganzzahldivision [7, 10] verwendet werden, deren Ergebnis ein vorzeichenbehafteter Ganzzahlwert sein soll. Sprachen wie Python, bei denen die Standardverteilung die Unterteilung des Stockwerks verwendet wird, muss die eine Redewendung wie int(a / b)
die von (a // b)
.
Anmerkung 4: Die ganzzahlige Potenz x
der Potenz von y
wird im Pseudocode durch die pow(x, y)
Funktion wird.
Anmerkung 5: Die Komfortfunktionen bits_to_target()
und target_to_bits()
sind davonbehindert, für die Umwandlung zwischen kompakten NBITS und vorzeichenlosem 256-Bit - Ganzzahl - Darstellung von Targets zur Verfügung stehen. Beispiele für Funktionsfunktionen sind in den C ++ - und Python3-Referenzimplementierungsfunktionen, die wissen sind.
Hinweis 6: Wenn ein Integer-Typ mit einer anderen Breite verwendet wird next_target
, shift_left
kann dies zu einer Überlaufausnahme oder zum Stillen Verwerfen der beswerten Wertigen Bits erhalten werden. Implementieren Sie die Verantwortung für die Wahrnehmung der Wahrnehmung und des Verhaltens einer Kontrolle mit der Begrenzung der Breite. Dies Sie, dass, wenn das Ergebnis ein dieser Punkt ist, radix * max_target
dann max_bits
kann sofort sofort werden.
Anmerkung 7: Die falsche polynomnäherung factor
muss mit einer 64-Bit-Ganzzahlarithmetik ohne Vorzeichen oder besser werden werden. Es wird eine signierte 64 - Bit - Integer - Überlauf. Da der Exponent vorzeichenbehaftet ist, muss er in einer vorzeichenlose 64-Bit-Ganzzahlzahl werden. In Sprachen wie Java, in denen lange immer signiert ist, muss eine vorzeichenlose Verschiebung >>> 48
verwendet werden, um durch 2 ^ 48 zu teilen.
REQ-ASERT-ACTIVATION (Aktivierungsmethode)
Der ASERT-negative MUSS mit dem Standard-Netzwerk-Upgrade-Mechanismus MTP (Median-Time-Past) [3] wird.
REQ-ASERT-ANCHOR-BLOCK (Ankerblock)
ASERT Wählen Sie die Auswahl eines Ankerblocks, um Ihre Zielberechnungen zu Interessen.
Der erste Block mit einem MTP, der erste / gleich der Aktivierungszeit für das Upgrade ist, MUSS als Ankerblock für nachträgliche ASERT-Funktionen werden.
Dies bedeutet dem letzten Block, der von den DAA-Regeln für ASERT abgebaut wurde.
Anmerkung 1: Der Ankerblock ist der Block, seine Höhe und Ziel als 'absolute' Basis für das richtige Ziel von ASERT verwendet werden. Der Zeitstempel des überentwickelten Ankerblocks wird verwendet.
Hinweis 2: Die Höhe, das Zeitstempel und die nBits dieser Blöcke sind vor dem Upgrade nicht bekannt. Implementierungen MÜSSEN unterscheiden halb des Upgrades dynamisch Handlungen. Wenn das Netzwerk-Upgrade durch die Ketten-Kettenarbeit oder einen Prüfpunkt konsolidiert wurde, können Implementierungen einfach die eigene Höhe, nBits und den zugehörigen Zeitstempel dieses Ankerblocks fest codieren. Implementierungen KÖNNEN auch andere äquivalente Darstellungen hart codieren, z. B. einen nBits-Wert und einen Zeitversatz vom Genesis-Block.
REQ-ASERT-TESTNET-DIFF-RESET (Testnet-Schwierigkeits-Reset)
Im Testnetz MUSS eine andere Regel besteht sein: Jeder Block mit einem Zeitstempel, der mehr als 1200 Sekunden nach dem Zeitstempel Wadengabeneil liegt, MUSS einen nBits-Wert von max_bits
( 0x1d00ffff
) wird.
REQ-ASERT-TESTNET-HALBLEBEN
Auf testnet MUSS ein `halflife
Wert von 3600 (Sekunden) verwendet werden.
REQ-ASERT-TESTNET-AKTIVIERUNG
Die Aktivierungsparameter für testnet MÜSSEN mit denen für mainnet Überwachungs sein.
Begründung und Kommentar zu Berechtigten
1. Wahl der Aktivierungsmethode
Die neuen neuen Richtlinien auf die Grundlage des MTP-Krieges Die etablierte Methode für das Verwalten von Bitcoin-Cash-Upgrades, und es ist zu kaufen, dass alle Implementierungen über die Kontrolle, die einer Verwaltung.
Der Rest wurde der Upgrade-Zeitstempel für November bereits gehört. Wenn Sie auch ein anderes Aktivierungskriterium für die DAA-Regel erhalten haben, können Sie Kettengabeln über die persönliche historische Kette erhalten, die sich aus dem eigenen Upgrade erhalten. Das breitere Gesicht Gabeln ist heißthörendes.
2. Wahl der Ankerblockbestimmung
Die Auswahl eines Ankerblocks, der in der Vergangenheit weit genug reicht, der der einfacheren Codierung gehört, der der Upgrade-gehört gehört.
Der letzte Block, der letzte der alten DAA wurde, wurde, wurde dieser Block der proximalen Anker ist und der Zugriffesten Übergang zum neuen Zugriff ermöglicht.
3. Vermeidung von Gleitkommaberekte
Die Rechte der Gleitkomma-Arithmetik nach IEEE-754 werden im Allgemeinen nicht durch Programmiersprachenrechte, in denen eine neue DAA gegeben werden muss. Dies kann zu Gleitkommabereforderungsbefugnis, Die je nach Compiler, Dolmetscher oder Hardware-Leistungsbeispiele.
Es wird dazu gegeben, dass alle, die sich durch die Anzahl und die hochgesteuerte Operatoren betreffen, um sich, dass identische Schwierigkeitsziele für alle Implementierungen durch sich werden.
4. Wahl der Halbwertszeit
Eine Halbwertszeit von 2 Tagen ( halflife = 2 * 24 * 3600
), sterben Einer auf e ^ x basierende Zeitkonstante von 2 * 144 * ln(2)
oder aserti3-415.5 Sie schnell auf Preis- oder Hash-Schwelle und sind für die Menschen leicht zu verstehen: verdoppelt so hoch.
5. Wahl des Approximationspolynoms
Die DAA ist Teil einer Rückkopplungsschleife des Steuersystems, der Hashratzahl und der Exponentialfunktion und ihrer ganzzahligen Annäherung und ihrer Verbindungsfunktion. Daher gelten Standard Richtlinien zur Gewährleistung der Steuerungen. Steuerliche Regelungsbefugnisse in den eigenen Steuerungsfunktionen, die viel empfindlicher auf persönliche Nichtlinearität (DNL) als auf integrale Nichtlinearität (INL) sind. Unsere Rechte waren eine falsche Lungenfunktion, die (a) Monotonenkrieg, (b) keine abrupten Rechte, (c) eine Präzision und differentielle Nichtlinearität aufwies, die besser als unser statistisches Grundrauschen mit verschiedenen Blöcken, (d) einfach zu fähigen Krieg und (e ) hatte eine integrale Nichtlinearität,
Es wurde gefunden, dass eine einfache, schnell zu gegebene kubische Näherung von 2 ^ x für 0 <= x <1 alle diese gehört gehört. In diesem Bereich wird eine absolute Fehlerquote von unter 0,013% Handlungen [8]. Um die Beziehungsdomäne (-infinity, + unendlich) der Exponentialfunktion zu adressieren, haben wir wissen, dass die 2^(x + n) = 2^n * 2^x
Identität von Nutzen ist. Unsere kubische Approximation wird die genau korrigierten Werte f(0) == 1
und f(1) == 2
ermöglicht es uns, diese Identität ohne Rücksicht auf Diskontinuitäten und den Ränder der Approximationsdomäne zu gehören.
Geben gibt es das Problem der DNL. Unser Ziel war es verwandt, dass unser Zugang nicht mehr als 25% so viel Rauschen hin gehört, wie unser eigenes Eigen ist. Unser wahrnehmungsbedingter Einfluss, die charakteristische Hashrate in der Rechtsgeschichte einer Halbwertszeit von 2 Tagen. Unsere erwartete exponentielle Verteilung der Blockintervalle hat eine Standardabweichung (stddev) von 600 Sekunden. Über eine Halbwertszeit von 2 Tagen wurde unser Grundrauschen in unserer Kontrolle Hashrate etwa sqrt(1 / 288) * 600
zweite oder 35,3 Sekunden gehört. Unsere gewählte Auswahl Auswahl Auswahl Annäherungsmethode kann in den anderen einer anderen von 3 zweiten Rechten, die zwei Stellen durch 16-Bit-Operationen ist: 172800 sec / 65536 = 2.6367 sec
Unsere Worst-Case-Verantwortlichen 8 Sekunden und ist durch die Worst-Case-15-Bit-Verwandte des nBits-Werts gehört. Dieser 8-Sekunden-Worst-Fall ist nicht Gegenstand dieser Arbeit, da eine Regel des Block-Headers verwendet wird. Unsere Schrittstellung im ungünstigsten Fall wird 0,00305% [11], Krieg auf das 15-Bit-n-Bit-Mantissen-Problem im ungünstigsten Fall. Außerhalb des 15-Bit-Mantissenbereichs von nBits weist unsere Näherung eine Worst-Case-Anzahl von 0,0021% auf. Müssen haben wir sterben als zufriedenstellende DNL-Leistung wissen.
Geben gibt es das Problem der INL. Simulationsstests, die die Berechtigung und die Leistung der Hash-Regelregulierung Rechte, die Nichtlinearität waren. Wir haben herausgefordert, dass selbst die Verwendung f(x) = 1 + x
als Annäherung und 2^x
den aserti1
Kontakt im Verbindungsstellend Krieg2^(x + n) = 2^n * 2^x
Identität, trotz 6% Worst-Case-INL. [12] [13] Eine Näherung mit schlechtem INL zeigt immer noch eine gute Fähigkeit zur Beurteilung der Haschrate, gibt sich für eine bestimmte Beziehung der Haschrate eine bestimmte Drift auf, je mehr, wo in der Domäne [0, 1) unser Exponent ( Modulo 1) liegt. Mit einem INL von +/- 1% für eine bestimmte Entscheidung kann der Zeitstempel eines Blocks 1% von 172800 Sekunden vor oder hinter dem Zustand liegen. Aus Vorsicht und weil es einfach Krieg ist, eine höhere Präzision zu haben, haben wir uns für eine INL verloren, die mit der anderen Drift, die durch einen Block verursacht werden kann, wird oder gehört ist. Aus einem 2-Tage-Halbwertszeitfenster geschlossen die Varianz eines Blocks: 600 / 172800 = 0.347%
Die INL-Leistung unserer kubischen Näherung ist besser als 0,013% [14].
6. Besetzung von Schwierigkeitsbits (nBits) in 256-Bit-Zieldarstellungen
Da es in ASERT gibt, werden die Ein- / Ausgabe von sind Schwierigkeitsalgorithmus.
Dies ist der Grund, warum eine 256-Bit- (oder sogar Bignum-) Arithmetik verwendet wird. Leistungseinbußen sind sitzenigbar.
7. Wahl der 16-Bit-Versprechungen für die Festkomma-Mathematik
Das nBits-Format besteht aus 8 Bits des Exponenten base_256, gehört von einer 24-Bit-Mantisse. Die Mantisse muss einen Wert von weniger 0x008000 haben, Krieg, Krieg, dass das schlechteste Fall der Mantisse nur 15 Bit gehört gehört. Die Wahl der 16-Bit-Rechte in unserer Festkomma-Mathematik ist sicher, dass die Gesamtgenauigkeit durch diese 15-Bit-n-Bit-Grenze ist.
8. Wahl des Namens
Der engagegte Name 'aserti3-2d' wurde bearbeitet:
Das 'i' sich auf die Nur-Ganzzahl-Arithmetik
Die '3' sich auf die kubische Approximation des Exponentials
Die '2d' Rechte sich auf die 2-Tageige (172800 Sekunden) Halbwertszeit
Implementierungsberatung
Implementierungen DÜRFEN ganze ihre erkennen KEINE Rundungsfehler machen. Die Rundung muss genau wie im Verantwortungsbereich beziehen. Um dies zu ändern, müssen Sie in der Praxis werden Ganzzahlarithmetik verwendet.
Implementierungen, die vorzeichenbehaftete Ganzzahlen und Bitverschiebung werden, MÜSSEN verbessert, dass die Bitverschiebung arithmetisch ist.
Anmerkung 1: In C ++ - Compilern ist das Verschieben von Ganzzahlen mit negativen Vorzeichen nach rechts formal ein nicht spezstehes Verhalten, bis C ++ 20 zum Standard wird [5]. In der Praxis befindet sich C / C ++ - Compiler übt eine arithmetische Bitverschiebung für vorzeichenbehaftete Zahlen. Implementierern wird gestellt, das gute Verhalten durch Zusicherungen zur Kompilierungszeit.
Referenzimplementierungen
C ++ - Code für aserti3-2d (siehe pow.cpp): https://gitlab.com/bitcoin-cash-node/bitcoin-cash-node/-/merge_requests/692
Python3-Code (siehe Contrib / testgen / validate_nbits_aserti3_2d.py): https://gitlab.com/bitcoin-cash-node/bitcoin-cash-node/-/merge_requests/692
Java-Code: https://github.com/pokkst/asert-java
Testvektoren
Testvektoren, die zur Validierung weiterer Implementierungen des aserti3-2d-Verhaltens sind, sind verwendet unter:
https://gitlab.com/bitcoin-cash-node/bchn-sw/qa-assets/-/tree/master/test_vectors/aserti3-2d
und alternativ bei:
https://download.bitcoincashnode.org/misc/data/asert/test_vectors
Danksagung
Dank an Mark Lundeberg für die Erteilung der Berechtigung zur Überwachung des ASERT-Papiers [1], Jonathan Toomim für die Entwicklung der ersten Python- und C ++ - Implementierungen, die Aktualisierung der Simulationsframeworks [9] und die Bewertung der verschiedenen Schwierigkeitsalgorithmen.
Viele Dank an Jacob Eliosoff, Tom Harding und Scott Roberts für die Evaluierungsarbeiten und die Familien von EMA und andere Rechte, die als Ersatz für die Bitcoin-Bargeld-DAA, und die folgenden Punkte für die Bewertung und die wertvollen Qualitätsvorteile:
Andrea Suisani (krankes Schwein)
BigBlockIfTrue
Fernando Pellicioni
imaginärer_Benutzername
mtrycz
Jochen Hoenicke
John Nieri (emergent_reasons)
Tom Zander
Verweise
[1] " Statische Schwierigkeitsanpassungen mit absolut eigenen exponentiell steigenden Zielen (DA-ASERT) - v2 ", Mark B. Lundeberg, 31. Juli 2020
[2] " BCH-Upgrade-Vorschlag: Ihre Sie ASERT als neue DAA ", Jonathan Toomim, 8. Juli 2020
[3] Median Time Past wird im bitcoin.it-Wiki erledigt .
[4] https://en.wikipedia.org/wiki/Arithmetic_shift
[5] https://en.cppreference.com/w/cpp/language/operator_arithmetic
[6] " Instabiler Durchsatz: Wenn der Schwierigkeitsalgorithmus bricht ", Sam M. Werner, Dragos I. Ilie, Iain Stewart, William J. Knottenbelt, Juni 2020
[7] " Verschiedene Arten der Ganzzahldivision ", Harry Garrood, Blog, 2018
[8] Fehler in einer kubischen Näherung von 2 ^ x für 0 <= x <1
[9] Jonathan Toomim Anpassung des Schwierigkeitsalgorithmus-Simulators von Kyuupichan: https://github.com/jtoomim/difficulty/tree/comparator
[10] " Die euklidische Definition der Funktionen div und mod ", Raymond T. Boute, 1992, ACM-Rechte zu Programmiersprachen und -systemen (TOPLAS). 14. 127-144. 10.1145 / 128861.128862
[11] http://toom.im/bch/aserti3_step_size.html
[12] f (x) = (1 + x) / 2 ^ x für 0 <x <1 , WolframAlpha.
[13] https://github.com/zawy12/difficulty-algorithms/issues/62#issuecomment-647060200
[14] http://toom.im/bch/aserti3_approx_error.html
[15] https://github.com/zawy12/difficulty-algorithms/issues/62#issuecomment-646187957
Lizenz
Diese Spezifikation ist unter den Creative Commons CC0 1.0 Universal- und GNU All-Permissive-Lizenzen doppelte lizenziert.
1. Wahl der Aktivierungsmethode
Die neuen neuen Richtlinien auf die Grundlage des MTP-Krieges Die etablierte Methode für das Verwalten von Bitcoin-Cash-Upgrades, und es ist zu kaufen, dass alle Implementierungen über die Kontrolle, die einer Verwaltung.
Der Rest wurde der Upgrade-Zeitstempel für November bereits gehört. Wenn Sie auch ein anderes Aktivierungskriterium für die DAA-Regel erhalten haben, können Sie Kettengabeln über die persönliche historische Kette erhalten, die sich aus dem eigenen Upgrade erhalten. Das breitere Gesicht Gabeln ist heißthörendes.
2. Wahl der Ankerblockbestimmung
Die Auswahl eines Ankerblocks, der in der Vergangenheit weit genug reicht, der der einfacheren Codierung gehört, der der Upgrade-gehört gehört.
Der letzte Block, der letzte der alten DAA wurde, wurde, wurde dieser Block der proximalen Anker ist und der Zugriffesten Übergang zum neuen Zugriff ermöglicht.
3. Vermeidung von Gleitkommaberekte
Die Rechte der Gleitkomma-Arithmetik nach IEEE-754 werden im Allgemeinen nicht durch Programmiersprachenrechte, in denen eine neue DAA gegeben werden muss. Dies kann zu Gleitkommabereforderungsbefugnis, Die je nach Compiler, Dolmetscher oder Hardware-Leistungsbeispiele.
Es wird dazu gegeben, dass alle, die sich durch die Anzahl und die hochgesteuerte Operatoren betreffen, um sich, dass identische Schwierigkeitsziele für alle Implementierungen durch sich werden.
4. Wahl der Halbwertszeit
Eine Halbwertszeit von 2 Tagen ( halflife = 2 * 24 * 3600
), sterben Einer auf e ^ x basierende Zeitkonstante von 2 * 144 * ln(2)
oder aserti3-415.5 Sie schnell auf Preis- oder Hash-Schwelle und sind für die Menschen leicht zu verstehen: Alle zwei Tage vor dem Verlust wird der Zeitstempel eines Blocks verdoppelt so hoch.
5. Wahl des Approximationspolynoms
Die DAA ist Teil einer Rückkopplungsschleife des Steuersystems, der Hashratzahl und der Exponentialfunktion und ihrer ganzzahligen Annäherung und ihrer Verbindungsfunktion. Daher gelten Standard Richtlinien zur Gewährleistung der Steuerungen. Steuerliche Regelungsbefugnisse in den eigenen Steuerungsfunktionen, die viel empfindlicher auf persönliche Nichtlinearität (DNL) als auf integrale Nichtlinearität (INL) sind. Unsere Rechte waren eine falsche Lungenfunktion, die (a) Monotonenkrieg, (b) keine abrupten Rechte, (c) eine Präzision und differentielle Nichtlinearität aufwies, die besser als unser statistisches Grundrauschen mit verschiedenen Blöcken, (d) einfach zu fähigen Krieg und (e ) hatte eine integrale Nichtlinearität,
Es wurde gefunden, dass eine einfache, schnell zu gegebene kubische Näherung von 2 ^ x für 0 <= x <1 alle diese gehört gehört. In diesem Bereich wird eine absolute Fehlerquote von unter 0,013% Handlungen [8]. Um die Beziehungsdomäne (-infinity, + unendlich) der Exponentialfunktion zu adressieren, haben wir wissen, dass die 2^(x + n) = 2^n * 2^x
Identität von Nutzen ist. Unsere kubische Approximation wird die genau korrigierten Werte f(0) == 1
und f(1) == 2
ermöglicht es uns, diese Identität ohne Rücksicht auf Diskontinuitäten und den Ränder der Approximationsdomäne zu gehören.
Geben gibt es das Problem der DNL. Unser Ziel war es verwandt, dass unser Zugang nicht mehr als 25% so viel Rauschen hin gehört, wie unser eigenes Eigen ist. Unser wahrnehmungsbedingter Einfluss, die charakteristische Hashrate in der Rechtsgeschichte einer Halbwertszeit von 2 Tagen. Unsere erwartete exponentielle Verteilung der Blockintervalle hat eine Standardabweichung (stddev) von 600 Sekunden. Über eine Halbwertszeit von 2 Tagen wurde unser Grundrauschen in unserer Kontrolle Hashrate etwa sqrt(1 / 288) * 600
zweite oder 35,3 Sekunden gehört. Unsere gewählte Auswahl Auswahl Auswahl Annäherungsmethode kann in den anderen einer anderen von 3 zweiten Rechten, die zwei Stellen durch 16-Bit-Operationen ist: 172800 sec / 65536 = 2.6367 sec
Unsere Worst-Case-Verantwortlichen 8 Sekunden und ist durch die Worst-Case-15-Bit-Verwandte des nBits-Werts gehört. Dieser 8-Sekunden-Worst-Fall ist nicht Gegenstand dieser Arbeit, da eine Regel des Block-Headers verwendet wird. Unsere Schrittstellung im ungünstigsten Fall wird 0,00305% [11], Krieg auf das 15-Bit-n-Bit-Mantissen-Problem im ungünstigsten Fall. Außerhalb des 15-Bit-Mantissenbereichs von nBits weist unsere Näherung eine Worst-Case-Anzahl von 0,0021% auf. Müssen haben wir sterben als zufriedenstellende DNL-Leistung wissen.
Geben gibt es das Problem der INL. Simulationsstests, die die Berechtigung und die Leistung der Hash-Regelregulierung Rechte, die Nichtlinearität waren. Wir haben herausgefordert, dass selbst die Verwendung f(x) = 1 + x
als Annäherung und 2^x
den aserti1
Kontakt im Verbindungsstellend Krieg2^(x + n) = 2^n * 2^x
Identität, trotz 6% Worst-Case-INL. [12] [13] Eine Näherung mit schlechtem INL zeigt immer noch eine gute Fähigkeit zur Beurteilung der Haschrate, gibt sich für eine bestimmte Beziehung der Haschrate eine bestimmte Drift auf, je mehr, wo in der Domäne [0, 1) unser Exponent ( Modulo 1) liegt. Mit einem INL von +/- 1% für eine bestimmte Entscheidung kann der Zeitstempel eines Blocks 1% von 172800 Sekunden vor oder hinter dem Zustand liegen. Aus Vorsicht und weil es einfach Krieg ist, eine höhere Präzision zu haben, haben wir uns für eine INL verloren, die mit der anderen Drift, die durch einen Block verursacht werden kann, wird oder gehört ist. Aus einem 2-Tage-Halbwertszeitfenster geschlossen die Varianz eines Blocks: 600 / 172800 = 0.347%
Die INL-Leistung unserer kubischen Näherung ist besser als 0,013% [14].
6. Besetzung von Schwierigkeitsbits (nBits) in 256-Bit-Zieldarstellungen
Da es in ASERT gibt, werden die Ein- / Ausgabe von sind Schwierigkeitsalgorithmus.
Dies ist der Grund, warum eine 256-Bit- (oder sogar Bignum-) Arithmetik verwendet wird. Leistungseinbußen sind sitzenigbar.
7. Wahl der 16-Bit-Versprechungen für die Festkomma-Mathematik
Das nBits-Format besteht aus 8 Bits des Exponenten base_256, gehört von einer 24-Bit-Mantisse. Die Mantisse muss einen Wert von weniger 0x008000 haben, Krieg, Krieg, dass das schlechteste Fall der Mantisse nur 15 Bit gehört gehört. Die Wahl der 16-Bit-Rechte in unserer Festkomma-Mathematik ist sicher, dass die Gesamtgenauigkeit durch diese 15-Bit-n-Bit-Grenze ist.
8. Wahl des Namens
Der engagegte Name 'aserti3-2d' wurde bearbeitet:
Das 'i' sich auf die Nur-Ganzzahl-Arithmetik
Die '3' sich auf die kubische Approximation des Exponentials
Die '2d' Rechte sich auf die 2-Tageige (172800 Sekunden) Halbwertszeit
Implementierungsberatung
Implementierungen DÜRFEN ganze ihre erkennen KEINE Rundungsfehler machen. Die Rundung muss genau wie im Verantwortungsbereich beziehen. Um dies zu ändern, müssen Sie in der Praxis werden werden Ganzzahlarithmetik verwendet.
Implementierungen, die vorzeichenbehaftete Ganzzahlen und Bitverschiebung werden, MÜSSEN verbessert, dass die Bitverschiebung arithmetisch ist.
Anmerkung 1: In C ++ - Compilern ist das Verschieben von Ganzzahlen mit negativen Vorzeichen nach rechts formal ein nicht spezstehes Verhalten, bis C ++ 20 zum Standard wird [5]. In der Praxis befindet sich C / C ++ - Compiler übt eine arithmetische Bitverschiebung für vorzeichenbehaftete Zahlen. Implementierern wird gestellt, das gute Verhalten durch Zusicherungen zur Kompilierungszeit.
Referenzimplementierungen
C ++ - Code für aserti3-2d (siehe pow.cpp): https://gitlab.com/bitcoin-cash-node/bitcoin-cash-node/-/merge_requests/692
Python3-Code (siehe Contrib / testgen / validate_nbits_aserti3_2d.py): https://gitlab.com/bitcoin-cash-node/bitcoin-cash-node/-/merge_requests/692
Java-Code: https://github.com/pokkst/asert-java
Testvektoren
Testvektoren, die zur Validierung weiterer Implementierungen des aserti3-2d-Verhaltens sind, sind verwendet unter:
https://gitlab.com/bitcoin-cash-node/bchn-sw/qa-assets/-/tree/master/test_vectors/aserti3-2d
und alternativ bei:
https://download.bitcoincashnode.org/misc/data/asert/test_vectors
Danksagung
Dank an Mark Lundeberg für die Erteilung der Berechtigung zur Überwachung des ASERT-Papiers [1], Jonathan Toomim für die Entwicklung der ersten Python- und C ++ - Implementierungen, die Aktualisierung der Simulationsframeworks [9] und die Bewertung der verschiedenen Schwierigkeitsalgorithmen.
Viele Dank an Jacob Eliosoff, Tom Harding und Scott Roberts für die Evaluierungsarbeiten und die Familien von EMA und andere Rechte, die als Ersatz für die Bitcoin-Bargeld-DAA und die Aussagen für die Bewertung und die wertvollen Qualitätsvorteile:
Andrea Suisani (krankes Schwein)
BigBlockIfTrue
Fernando Pellicioni
imaginärer_Benutzername
mtrycz
Jochen Hoenicke
John Nieri (emergent_reasons)
Tom Zander
Verweise
[1] " Statische Schwierigkeitsanpassungen mit absolut eigenen exponentiell steigenden Zielen (DA-ASERT) - v2 ", Mark B. Lundeberg, 31. Juli 2020
[2] BCH-Upgrade-Vorschlag: Ihre Sie ASERT als neue DAA ", Jonathan Toomim, 8. Juli 2020
[3] Median Time Past wird im bitcoin.it-Wiki erledigt .
[4] https://en.wikipedia.org/wiki/Arithmetic_shift
[5] https://en.cppreference.com/w/cpp/language/operator_arithmetic
[6] " Instabiler Durchsatz: Wenn der Schwierigkeitsalgorithmus bricht ", Sam M. Werner, Dragos I. Ilie, Iain Stewart, William J. Knottenbelt, Juni 2020
[7] " Verschiedene Arten der Ganzzahldivision ", Harry Garrood, Blog, 2018
[8] Fehler in einer kubischen Näherung von 2 ^ x für 0 <= x <1
[9] Jonathan Toomim Anpassung des Schwierigkeitsalgorithmus-Simulators von Kyuupichan: https://github.com/jtoomim/difficulty/tree/comparator
[10] " Die euklidische Definition der Funktionen div und mod ", Raymond T. Boute, 1992, ACM-Rechte zu Programmiersprachen und -systemen (TOPLAS). 14. 127-144. 10.1145 / 128861.128862
[11] http://toom.im/bch/aserti3_step_size.html
[12] f (x) = (1 + x) / 2 ^ x für 0 <x <1 , WolframAlpha.
[13] https://github.com/zawy12/difficulty-algorithms/issues/62#issuecomment-647060200
[14] http://toom.im/bch/aserti3_approx_error.html
[15] https://github.com/zawy12/difficulty-algorithms/issues/62#issuecomment-646187957
Lizenz
Diese Spezifikation ist unter den Creative Commons CC0 1.0 Universal- und GNU All-Permissive-Lizenzen doppelte lizenziert.
1. Wahl der Aktivierungsmethode
Die neuen neuen Richtlinien auf die Grundlage des MTP-Krieges Die etablierte Methode für das Verwalten von Bitcoin-Cash-Upgrades, und es ist zu kaufen, dass alle Implementierungen über die Kontrolle, die einer Verwaltung.
Der Rest wurde der Upgrade-Zeitstempel für November bereits gehört. Wenn Sie auch ein anderes Aktivierungskriterium für die DAA-Regel erhalten haben, können Sie Kettengabeln über die persönliche historische Kette erhalten, die sich aus dem eigenen Upgrade erhalten. Das breitere Gesicht Gabeln ist heißthörendes.
2. Wahl der Ankerblockbestimmung
Die Auswahl eines Ankerblocks, der in der Vergangenheit weit genug reicht, der der einfacheren Codierung gehört, der der Upgrade-gehört gehört.
Der letzte Block, der letzte der alten DAA wurde, wurde, wurde dieser Block der proximalen Anker ist und der Zugriffesten Übergang zum neuen Zugriff ermöglicht.
3. Vermeidung von Gleitkommaberekte
Die Rechte der Gleitkomma-Arithmetik nach IEEE-754 werden im Allgemeinen nicht durch Programmiersprachenrechte, in denen eine neue DAA gegeben werden muss. Dies kann zu Gleitkommabereforderungsbefugnis, Die je nach Compiler, Dolmetscher oder Hardware-Leistungsbeispiele.
Es wird dazu gegeben, dass alle, die sich durch die Anzahl und die hochgesteuerte Operatoren betreffen, um sich, dass identische Schwierigkeitsziele für alle Implementierungen durch sich werden.
4. Wahl der Halbwertszeit
Eine Halbwertszeit von 2 Tagen ( halflife = 2 * 24 * 3600
), sterben Einer auf e ^ x basierende Zeitkonstante von 2 * 144 * ln(2)
oder aserti3-415.5 Sie schnell auf Preis- oder Hash-Schwelle und sind für die Menschen leicht zu verstehen: Alle zwei Tage vor dem Verlust wird der Zeitstempel eines Blocks verdoppelt so hoch.
5. Wahl des Approximationspolynoms
Die DAA ist Teil einer Rückkopplungsschleife des Steuersystems, der Hashratzahl und der Exponentialfunktion und ihrer ganzzahligen Annäherung und ihrer Verbindungsfunktion. Daher gelten Standard Richtlinien zur Gewährleistung der Steuerungen. Steuerliche Regelungsbefugnisse in den eigenen Steuerungsfunktionen, die viel empfindlicher auf persönliche Nichtlinearität (DNL) als auf integrale Nichtlinearität (INL) sind. Unsere Rechte waren eine falsche Lungenfunktion, die (a) Monotonenkrieg, (b) keine abrupten Rechte, (c) eine Präzision und differentielle Nichtlinearität aufwies, die besser als unser statistisches Grundrauschen mit verschiedenen Blöcken, (d) einfach zu fähigen Krieg und (e ) hatte eine integrale Nichtlinearität,
Es wurde gefunden, dass eine einfache, schnell zu gegebene kubische Näherung von 2 ^ x für 0 <= x <1 alle diese gehört gehört. In diesem Bereich wird eine absolute Fehlerquote von unter 0,013% Handlungen [8]. Um die Beziehungsdomäne (-infinity, + unendlich) der Exponentialfunktion zu adressieren, haben wir wissen, dass die 2^(x + n) = 2^n * 2^x
Identität von Nutzen ist. Unsere kubische Annäherung wird die genau korrigierten Werte f(0) == 1
und f(1) == 2
ermöglicht es uns, diese Identität ohne Rücksicht auf Diskontinuitäten und den Ränder der Approximationsdomäne zu gehören.
Geben gibt es das Problem der DNL. Unser Ziel war es verwandt, dass unser Zugang nicht mehr als 25% so viel Rauschen hin gehört, wie unser eigenes Eigen ist. Unser wahrnehmungsbedingter Einfluss, die charakteristische Hashrate in der Rechtsgeschichte einer Halbwertszeit von 2 Tagen. Unsere erwartete exponentielle Verteilung der Blockintervalle hat eine Standardabweichung (stddev) von 600 Sekunden. Über eine Halbwertszeit von 2 Tagen wurde unser Grundrauschen in unserer Kontrolle Hashrate etwa sqrt(1 / 288) * 600
zweite oder 35,3 Sekunden gehört. Unsere gewählte Auswahl Auswahl Auswahl Annäherungsmethode kann in den anderen einer anderen von 3 zweiten Rechten, die zwei Stellen durch 16-Bit-Operationen ist: 172800 sec / 65536 = 2.6367 sec
Unsere Worst-Case-Verantwortlichen 8 Sekunden und ist durch die Worst-Case-15-Bit-Verwandte des nBits-Werts gehört. Dieser 8-Sekunden-Worst-Fall ist nicht Gegenstand dieser Arbeit, da eine Regel des Block-Headers verwendet wird. Unsere Schrittstellung im ungünstigsten Fall wird 0,00305% [11], Krieg auf das 15-Bit-n-Bit-Mantissen-Problem im ungünstigsten Fall. Außerhalb des 15-Bit-Mantissenbereichs von nBits weist unsere Näherung eine Worst-Case-Anzahl von 0,0021% auf. Müssen haben wir sterben als zufriedenstellende DNL-Leistung wissen.
Geben gibt es das Problem der INL. Simulationsstests, die die Berechtigung und die Leistung der Hash-Regelregulierung Rechte, die Nichtlinearität waren. Wir haben herausgefordert, dass selbst die Verwendung f(x) = 1 + x
als Annäherung und 2^x
den aserti1
Kontakt im Verbindungsstellend Krieg2^(x + n) = 2^n * 2^x
Identität, trotz 6% Worst-Case-INL. [12] [13] Eine Näherung mit schlechtem INL zeigt immer noch eine gute Fähigkeit zur Beurteilung der Haschrate Modulo 1) liegt. Mit einem INL von +/- 1% für eine bestimmte Entscheidung kann der Zeitstempel eines Blocks 1% von 172800 Sekunden vor oder hinter dem Zustand liegen. Aus Vorsicht und weil es einfach Krieg ist, eine höhere Präzision zu haben, haben wir uns für eine INL verloren, die mit der anderen Drift, die durch einen Block verursacht werden kann, wird oder gehört ist. Aus einem 2-Tage-Halbwertszeitfenster geschlossen die Varianz eines Blocks: 600 / 172800 = 0.347%
Die INL-Leistung unserer kubischen Näherung ist besser als 0,013% [14].
6. Besetzung von Schwierigkeitsbits (nBits) in 256-Bit-Zieldarstellungen
Da es in ASERT gibt, werden die Ein- / Ausgabe von sind Schwierigkeitsalgorithmus.
Dies ist der Grund, warum eine 256-Bit- (oder sogar Bignum-) Arithmetik verwendet wird. Leistungseinbußen sind sitzenigbar.
7. Wahl der 16-Bit-Versprechungen für die Festkomma-Mathematik
Das nBits-Format besteht aus 8 Bits des Exponenten base_256, gehört von einer 24-Bit-Mantisse. Die Mantisse muss einen Wert von weniger 0x008000 haben, Krieg, Krieg, dass das schlechteste Fall der Mantisse nur 15 Bit gehört gehört. Die Wahl der 16-Bit-Rechte in unserer Festkomma-Mathematik ist sicher, dass die Gesamtgenauigkeit durch diese 15-Bit-n-Bit-Grenze ist.
8. Wahl des Namens
Der engagegte Name 'aserti3-2d' wurde bearbeitet:
Das 'i' sich auf die Nur-Ganzzahl-Arithmetik
Die '3' sich auf die kubische Approximation des Exponentials
Die '2d' Rechte sich auf die 2-Tageige (172800 Sekunden) Halbwertszeit
Implementierungsberatung
Implementierungen DÜRFEN ganze ihre erkennen KEINE Rundungsfehler machen. Die Rundung muss genau wie im Verantwortungsbereich beziehen. Um dies zu ändern, müssen Sie in der Praxis werden Ganzzahlarithmetik verwendet.
Implementierungen, die vorzeichenbehaftete Ganzzahlen und Bitverschiebung werden, MÜSSEN verbessert, dass die Bitverschiebung arithmetisch ist.
Anmerkung 1: In C ++ - Compilern ist das Verschieben von Ganzzahlen mit negativen Vorzeichen nach rechts formal ein nicht spezstehes Verhalten, bis C ++ 20 zum Standard wird [5]. In der Praxis befindet sich C / C ++ - Compiler übt eine arithmetische Bitverschiebung für vorzeichenbehaftete Zahlen. Implementierern wird gestellt, das gute Verhalten durch Zusicherungen zur Kompilierungszeit.
Referenzimplementierungen
C ++ - Code für aserti3-2d (siehe pow.cpp): https://gitlab.com/bitcoin-cash-node/bitcoin-cash-node/-/merge_requests/692
Python3-Code (siehe Contrib / testgen / validate_nbits_aserti3_2d.py): https://gitlab.com/bitcoin-cash-node/bitcoin-cash-node/-/merge_requests/692
Java-Code: https://github.com/pokkst/asert-java
Testvektoren
Testvektoren, die zur Validierung weiterer Implementierungen des aserti3-2d-Verhaltens sind, sind verwendet unter:
https://gitlab.com/bitcoin-cash-node/bchn-sw/qa-assets/-/tree/master/test_vectors/aserti3-2d
und alternativ bei:
https://download.bitcoincashnode.org/misc/data/asert/test_vectors
Danksagung
Dank an Mark Lundeberg für die Erteilung der Berechtigung zur Überwachung des ASERT-Papiers [1], Jonathan Toomim für die Entwicklung der ersten Python- und C ++ - Implementierungen, die Aktualisierung der Simulationsframeworks [9] und die Bewertung der verschiedenen Schwierigkeitsalgorithmen.
Viele Dank an Jacob Eliosoff, Tom Harding und Scott Roberts für die Evaluierungsarbeiten und die Familien von EMA und andere Rechte, die als Ersatz für die Bitcoin-Bargeld-DAA und die Bewertungen für die Bewertungen und die wertvollen Qualitätsvorteile:
Andrea Suisani (krankes Schwein)
BigBlockIfTrue
Fernando Pellicioni
imaginärer_Benutzername
mtrycz
Jochen Hoenicke
John Nieri (emergent_reasons)
Tom Zander
Verweise
[1] " Statische Schwierigkeitsanpassungen mit absolut eigenen exponentiell steigenden Zielen (DA-ASERT) - v2 ", Mark B. Lundeberg, 31. Juli 2020
[2] " BCH-Upgrade-Vorschlag: Ihre Sie ASERT als neue DAA ", Jonathan Toomim, 8. Juli 2020
[3] Median Time Past wird im bitcoin.it-Wiki erledigt .
[4] https://en.wikipedia.org/wiki/Arithmetic_shift
[5] https://en.cppreference.com/w/cpp/language/operator_arithmetic
[6] " Instabiler Durchsatz: Wenn der Schwierigkeitsalgorithmus bricht ", Sam M. Werner, Dragos I. Ilie, Iain Stewart, William J. Knottenbelt, Juni 2020
[7] " Verschiedene Arten der Ganzzahldivision ", Harry Garrood, Blog, 2018
[8] Fehler in einer kubischen Näherung von 2 ^ x für 0 <= x <1
[9] Jonathan Toomim Anpassung des Schwierigkeitsalgorithmus-Simulators von Kyuupichan: https://github.com/jtoomim/difficulty/tree/comparator
[10] " Die euklidische Definition der Funktionen div und mod ", Raymond T. Boute, 1992, ACM-Rechte zu Programmiersprachen und -systemen (TOPLAS). 14. 127-144. 10.1145 / 128861.128862
[11] http://toom.im/bch/aserti3_step_size.html
[12] f (x) = (1 + x) / 2 ^ x für 0 <x <1 , WolframAlpha.
[13] https://github.com/zawy12/difficulty-algorithms/issues/62#issuecomment-647060200
[14] http://toom.im/bch/aserti3_approx_error.html
[15] https://github.com/zawy12/difficulty-algorithms/issues/62#issuecomment-646187957
Lizenz
Diese Spezifikation ist unter den Creative Commons CC0 1.0 Universal- und GNU All-Permissive-Lizenzen doppelte lizenziert.
1. Wahl der Aktivierungsmethode
Die neuen neuen Richtlinien auf die Grundlage des MTP-Krieges Die etablierte Methode für das Verwalten von Bitcoin-Cash-Upgrades, und es ist zu kaufen, dass alle Implementierungen über die Kontrolle, die einer Verwaltung.
Der Rest wurde der Upgrade-Zeitstempel für November bereits gehört. Wenn Sie auch ein anderes Aktivierungskriterium für die DAA-Regel erhalten haben, können Sie Kettengabeln über die persönliche historische Kette erhalten, die sich aus dem eigenen Upgrade erhalten. Das breitere Gesicht Gabeln ist heißthörendes.
2. Wahl der Ankerblockbestimmung
Die Auswahl eines Ankerblocks, der in der Vergangenheit weit genug reicht, der der einfacheren Codierung gehört, der der Upgrade-gehört gehört.
Der letzte Block, der letzte der alten DAA wurde, wurde, wurde dieser Block der proximalen Anker ist und der Zugriffesten Übergang zum neuen Zugriff ermöglicht.
3. Vermeidung von Gleitkommaberekte
Die Rechte der Gleitkomma-Arithmetik nach IEEE-754 werden im Allgemeinen nicht durch Programmiersprachenrechte, in denen eine neue DAA gegeben werden muss. Dies kann zu Gleitkommabereforderungsbefugnis, Die je nach Compiler, Dolmetscher oder Hardware-Leistungsbeispiele.
Es wird dazu gegeben, dass alle, die sich durch die Anzahl und die hochgesteuerte Operatoren betreffen, um sich, dass identische Schwierigkeitsziele für alle Implementierungen durch sich werden.
4. Wahl der Halbwertszeit
Eine Halbwertszeit von 2 Tagen ( halflife = 2 * 24 * 3600
), sterben Einer auf e ^ x basierende Zeitkonstante von 2 * 144 * ln(2)
oder aserti3-415.5 Sie schnell auf Preis- oder Hash-Schwelle und sind für die Menschen leicht zu verstehen: verdoppelt so hoch.
5. Wahl des Approximationspolynoms
Die DAA ist Teil einer Rückkopplungsschleife des Steuersystems, der Hashratzahl und der Exponentialfunktion und ihrer ganzzahligen Annäherung und ihrer Verbindungsfunktion. Daher gelten Standard Richtlinien zur Gewährleistung der Steuerungen. Steuerliche Regelungsbefugnisse in den eigenen Steuerungsfunktionen, die viel empfindlicher auf persönliche Nichtlinearität (DNL) als auf integrale Nichtlinearität (INL) sind. Unsere Rechte waren eine falsche Lungenfunktion, die (a) Monotonenkrieg, (b) keine abrupten Rechte, (c) eine Präzision und differentielle Nichtlinearität aufwies, die besser als unser statistisches Grundrauschen mit verschiedenen Blöcken, (d) einfach zu fähigen Krieg und (e ) hatte eine integrale Nichtlinearität,
Es wurde gefunden, dass eine einfache, schnell zu gegebene kubische Näherung von 2 ^ x für 0 <= x <1 alle diese gehört gehört. In diesem Bereich wird eine absolute Fehlerquote von unter 0,013% Handlungen [8]. Um die Beziehungsdomäne (-infinity, + unendlich) der Exponentialfunktion zu adressieren, haben wir wissen, dass die 2^(x + n) = 2^n * 2^x
Identität von Nutzen ist. Unsere kubische Annäherung wird die genau korrigierten Werte f(0) == 1
und f(1) == 2
ermöglicht es uns, diese Identität ohne Rücksicht auf Diskontinuitäten und den Ränder der Approximationsdomäne zu gehören.
Geben gibt es das Problem der DNL. Unser Ziel war es verwandt, dass unser Zugang nicht mehr als 25% so viel Rauschen hin gehört, wie unser eigenes Eigen ist. Unser wahrnehmungsbedingter Einfluss, die charakteristische Hashrate in der Rechtsgeschichte einer Halbwertszeit von 2 Tagen. Unsere erwartete exponentielle Verteilung der Blockintervalle hat eine Standardabweichung (stddev) von 600 Sekunden. Über eine Halbwertszeit von 2 Tagen wurde unser Grundrauschen in unserer Kontrolle Hashrate etwa sqrt(1 / 288) * 600
zweite oder 35,3 Sekunden gehört. Unsere gewählte Auswahl Auswahl Auswahl Annäherungsmethode kann in den anderen einer anderen von 3 zweiten Rechten, die zwei Stellen durch 16-Bit-Operationen ist: 172800 sec / 65536 = 2.6367 sec
Unsere Worst-Case-Verantwortlichen 8 Sekunden und ist durch die Worst-Case-15-Bit-Verwandte des nBits-Werts gehört. Dieser 8-Sekunden-Worst-Fall ist nicht Gegenstand dieser Arbeit, da eine Regel des Block-Headers verwendet wird. Unsere Schrittstellung im ungünstigsten Fall wird 0,00305% [11], Krieg auf das 15-Bit-n-Bit-Mantissen-Problem im ungünstigsten Fall. Außerhalb des 15-Bit-Mantissenbereichs von nBits weist unsere Näherung eine Worst-Case-Anzahl von 0,0021% auf. Müssen haben wir sterben als zufriedenstellende DNL-Leistung wissen.
Geben gibt es das Problem der INL. Simulationsstests, die Berechtigung und die Leistung der Hash-Regelregulierung Rechte, die Nichtlinearität waren. Wir haben herausgefordert, dass selbst die Verwendung f(x) = 1 + x
als Annäherung und 2^x
den aserti1
Kontakt im Verbindungsstellend Krieg2^(x + n) = 2^n * 2^x
Identität, trotz 6% Worst-Case-INL. [12] [13] Eine Näherung mit schlechtem INL zeigt immer noch eine gute Fähigkeit zur Beurteilung der Haschrate Modulo 1) liegt. Mit einem INL von +/- 1% für eine bestimmte Entscheidung kann der Zeitstempel eines Blocks 1% von 172800 Sekunden vor oder hinter dem Zustand liegen. Aus Vorsicht und weil es einfach Krieg ist, eine höhere Präzision zu haben, haben wir uns für eine INL verloren, die mit der anderen Drift, die durch einen Block verursacht werden kann, wird oder gehört ist. Aus einem 2-Tage-Halbwertszeitfenster geschlossen die Varianz eines Blocks: 600 / 172800 = 0.347%
Die INL-Leistung unserer kubischen Näherung ist besser als 0,013% [14].
6. Besetzung von Schwierigkeitsbits (nBits) in 256-Bit-Zieldarstellungen
Da es in ASERT gibt, werden die Ein- / Ausgabe von sind Schwierigkeitsalgorithmus.
Dies ist der Grund, warum eine 256-Bit- (oder sogar Bignum-) Arithmetik verwendet wird. Leistungseinbußen sind sitzenigbar.
7. Wahl der 16-Bit-Versprechungen für die Festkomma-Mathematik
Das nBits-Format besteht aus 8 Bits des Exponenten base_256, gehört von einer 24-Bit-Mantisse. Die Mantisse muss einen Wert von weniger 0x008000 haben, Krieg, Krieg, dass das schlechteste Fall der Mantisse nur 15 Bit gehört gehört. Die Wahl der 16-Bit-Rechte in unserer Festkomma-Mathematik ist sicher, dass die Gesamtgenauigkeit durch diese 15-Bit-n-Bit-Grenze ist.
8. Wahl des Namens
Der engagegte Name 'aserti3-2d' wurde bearbeitet:
Das 'i' sich auf die Nur-Ganzzahl-Arithmetik
Die '3' sich auf die kubische Approximation des Exponentials
Die '2d' Rechte sich auf die 2-Tageige (172800 Sekunden) Halbwertszeit
Implementierungsberatung
Implementierungen DÜRFEN ganze ihre erkennen KEINE Rundungsfehler machen. Die Rundung muss genau wie im Verantwortungsbereich beziehen. Um dies zu ändern, müssen Sie in der Praxis werden Ganzzahlarithmetik verwendet.
Implementierungen, die vorzeichenbehaftete Ganzzahlen und Bitverschiebung werden, MÜSSEN verbessert, dass die Bitverschiebung arithmetisch ist.
Anmerkung 1: In C ++ - Compilern ist das Verschieben von Ganzzahlen mit negativen Vorzeichen nach rechts formal ein nicht spezstehes Verhalten, bis C ++ 20 zum Standard wird [5]. In der Praxis befindet sich C / C ++ - Compiler übt eine arithmetische Bitverschiebung für vorzeichenbehaftete Zahlen. Implementierern wird gestellt, das gute Verhalten durch Zusicherungen zur Kompilierungszeit.
Referenzimplementierungen
C ++ - Code für aserti3-2d (siehe pow.cpp): https://gitlab.com/bitcoin-cash-node/bitcoin-cash-node/-/merge_requests/692
Python3-Code (siehe Contrib / testgen / validate_nbits_aserti3_2d.py): https://gitlab.com/bitcoin-cash-node/bitcoin-cash-node/-/merge_requests/692
Java-Code: https://github.com/pokkst/asert-java
Testvektoren
Testvektoren, die zur Validierung weiterer Implementierungen des aserti3-2d-Verhaltens sind, sind verwendet unter:
https://gitlab.com/bitcoin-cash-node/bchn-sw/qa-assets/-/tree/master/test_vectors/aserti3-2d
und alternativ bei:
https://download.bitcoincashnode.org/misc/data/asert/test_vectors
Danksagung
Dank an Mark Lundeberg für die Erteilung der Berechtigung zur Überwachung des ASERT-Papiers [1], Jonathan Toomim für die Entwicklung der ersten Python- und C ++ - Implementierungen, die Aktualisierung der Simulationsframeworks [9] und die Bewertung der verschiedenen Schwierigkeitsalgorithmen.
Viele Dank an Jacob Eliosoff, Tom Harding und Scott Roberts für die Evaluierungsarbeiten und die Familien von EMA und andere Rechte, die als Ersatz für die Bitcoin-Bargeld-DAA und die Bewertungen für die Bewertungen und die wertvollen Qualitätsvorteile:
Andrea Suisani (krankes Schwein)
BigBlockIfTrue
Fernando Pellicioni
imaginärer_Benutzername
mtrycz
Jochen Hoenicke
John Nieri (emergent_reasons)
Tom Zander
Verweise
[1] " Statische Schwierigkeitsanpassungen mit absolut eigenen exponentiell steigenden Zielen (DA-ASERT) - v2 ", Mark B. Lundeberg, 31. Juli 2020
[2] " BCH-Upgrade-Vorschlag: Ihre Sie ASERT als neue DAA ", Jonathan Toomim, 8. Juli 2020
[3] Median Time Past wird im bitcoin.it-Wiki erledigt .
[4] https://en.wikipedia.org/wiki/Arithmetic_shift
[5] https://en.cppreference.com/w/cpp/language/operator_arithmetic
[6] " Instabiler Durchsatz: Wenn der Schwierigkeitsalgorithmus bricht ", Sam M. Werner, Dragos I. Ilie, Iain Stewart, William J. Knottenbelt, Juni 2020
[7] " Verschiedene Arten der Ganzzahldivision ", Harry Garrood, Blog, 2018
[8] Fehler in einer kubischen Näherung von 2 ^ x für 0 <= x <1
[9] Jonathan Toomim Anpassung des Schwierigkeitsalgorithmus-Simulators von Kyuupichan: https://github.com/jtoomim/difficulty/tree/comparator
[10] " Die euklidische Definition der Funktionen div und mod ", Raymond T. Boute, 1992, ACM-Rechte zu Programmiersprachen und -systemen (TOPLAS). 14. 127-144. 10.1145 / 128861.128862
[11] http://toom.im/bch/aserti3_step_size.html
[12] f (x) = (1 + x) / 2 ^ x für 0 <x <1 , WolframAlpha.
[13] https://github.com/zawy12/difficulty-algorithms/issues/62#issuecomment-647060200
[14] http://toom.im/bch/aserti3_approx_error.html
[15] https://github.com/zawy12/difficulty-algorithms/issues/62#issuecomment-646187957
Lizenz
Diese Spezifikation ist unter den Creative Commons CC0 1.0 Universal- und GNU All-Permissive-Lizenzen doppelte lizenziert.
bitcoincash:qqwk9vcyv7mrexvz52njql60kfcgjjyspsey8xtgx4