Was genau macht die "m"-Funktion in den formalen Bloom-Filterspezifikationen?

Auszug aus Seite 6 des gelben Whitepapers:

Geben Sie hier die Bildbeschreibung ein

Die ersten drei Definitionen kann ich nachvollziehen, die vierte ist problematisch. Wie funktioniert die mFunktion eigentlich? Vielleicht bin ich mit formaler Spezifikation nicht allzu vertraut, aber ich bin in diesem [i,i+1]Teil besonders verwirrt. Nimmt es die Bits an Position iund i+1vom Hash, summiert sie und wendet dann Modulo 2048 an?

Antworten (1)

Betrachten Sie die folgende Eingabe

Ethereum gelbes Papier

Betrachten Sie es als Keccak-256Hash gemäß dieser Website:

7f110dc4c0a897ea5187a67e2c3a7db3a43410df8d1754fbdf28351c7e58400f

Die ersten drei Bytepaare einer Keccak-256Eingabezeichenfolge-

{7,f},{f,1},{1,0}

1) {7,f}

11 Bits niedriger Ordnung von jedem der ersten drei Bytepaare , die unter Verwendung dieser Website berechnet werden

00110111011

Sein Dezimaläquivalent, das mithilfe dieser Website berechnet wurde, ist 443. 443 % 2048 = 443

Der Bloom-Filter setzt ein 443-tes Bit einer 2048-Bit-Sequenz.

2) {f,1}

11 Bits niedriger Ordnung von jedem der ersten drei Bytepaare , die unter Verwendung dieser Website berechnet werden

01100110001

Sein Dezimaläquivalent, das mithilfe dieser Website berechnet wird, ist 817. 817 % 2048 = 817

Der Bloom-Filter setzt ein 817-tes Bit der 2048-Bit-Sequenz.

3) {1,0}

00110001001

11 Bits niedriger Ordnung von jedem der ersten drei Bytepaare , die unter Verwendung dieser Website berechnet werden

Sein Dezimaläquivalent, das mithilfe dieser Website berechnet wurde, ist 393. 393 % 2048 = 393

Der Bloom-Filter setzt ein 393-tes Bit einer 2048-Bit-Sequenz.

[i,i+1]bezeichnet Bytes an Position iundi+1

Ich hoffe es hilft!