2020-NOV-15 ASERT-Rechte zur Anpassung der Rechte (aserti3-2d)

3 32
Avatar for krise636
4 years ago

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^xIdentität von Nutzen ist. Unsere kubische Approximation wird die genau korrigierten Werte  f(0) == 1und  f(1) == 2ermö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) * 600zweite 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 + xals Annäherung und  2^xden  aserti1Kontakt im Verbindungsstellend Krieg2^(x + n) = 2^n * 2^xIdentitä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

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-2dVertragszugriff 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 Ankerblocks

  • time_delta ist die Differenz in vorzeichenbehafteten ganzzahligen Sekunden zwischen dem Zeitstempel im Header des Auswertungsblocks und dem Zeitstempel im über das Element des Ankerblocks

  • ideal_block_time ist eine Konstante: 600 (Sekunden), die die angestrebte menschliche Zeit zwischen Blöcken sehen

  • height_delta ist der Unterschied in der Blockhöhe zwischen dem Schadensblock und dem Ankerblock

  • halflife ist ein konstanter Parameter, der länger als "Tau" wird und im Mainnet einen Wert von 172800 (Sekunden) besteht

  • next_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_divDivisionsoperator, 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  xder Potenz von  ywird 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_targetshift_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_targetdann  max_bitskann sofort sofort werden.

Anmerkung 7: Die falsche polynomnäherung  factormuss 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  >>> 48verwendet 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_bits0x1d00ffff) wird.

REQ-ASERT-TESTNET-HALBLEBEN

Auf testnet MUSS ein  `halflifeWert 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^xIdentität von Nutzen ist. Unsere kubische Approximation wird die genau korrigierten Werte  f(0) == 1und  f(1) == 2ermö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) * 600zweite 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 + xals Annäherung und  2^xden  aserti1Kontakt im Verbindungsstellend Krieg2^(x + n) = 2^n * 2^xIdentitä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

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.

Sponsors of krise636
empty
empty
empty

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^xIdentität von Nutzen ist. Unsere kubische Approximation wird die genau korrigierten Werte  f(0) == 1und  f(1) == 2ermö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) * 600zweite 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 + xals Annäherung und  2^xden  aserti1Kontakt im Verbindungsstellend Krieg2^(x + n) = 2^n * 2^xIdentitä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

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^xIdentität von Nutzen ist. Unsere kubische Annäherung wird die genau korrigierten Werte  f(0) == 1und  f(1) == 2ermö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) * 600zweite 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 + xals Annäherung und  2^xden  aserti1Kontakt im Verbindungsstellend Krieg2^(x + n) = 2^n * 2^xIdentitä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

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^xIdentität von Nutzen ist. Unsere kubische Annäherung wird die genau korrigierten Werte  f(0) == 1und  f(1) == 2ermö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) * 600zweite 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 + xals Annäherung und  2^xden  aserti1Kontakt im Verbindungsstellend Krieg2^(x + n) = 2^n * 2^xIdentitä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

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.

https://cash.coin.dance/nodes

3
$ 0.00
Avatar for krise636
4 years ago

Comments

bitcoincash:qqwk9vcyv7mrexvz52njql60kfcgjjyspsey8xtgx4

$ 0.00
4 years ago