Was genau ist in den Bloomfiltern enthalten?

Welche Adressen sind genau in den Bloom-Filtern für Transaktionsbelege enthalten? Ich weiß, dass jede 'Adresse' in den Protokollen der Quittung enthalten ist (ebenso wie die Ereignissignatur und die indizierten Ereignisparameter).

Ich bin zuversichtlich (aber neugierig, ob ich richtig liege), dass die tound fromAdressen aus der Transaktion nicht im Bloom-Filter der Quittung enthalten sind.

Ich bin auch zuversichtlich (aber wieder neugierig), dass alle Adressen, an die die Transaktion "angerufen" hat, im Bloom-Filter enthalten sind (auf --nichtParity sicher über geth).

Ich weiß weder, ob das Feld „contractAddress“ bei der Vertragserstellung enthalten ist, noch, ob die Adresse des gewinnenden Miners enthalten ist.

Gibt es irgendwo eine endgültige Dokumentation (abgesehen von der brutal schwierigen Beschreibung der Bloom-Filter in einem Absatz auf gelbem Papier), die genau erklärt, welche Adressen in der Bloom-Phase sind und welche nicht?

Antworten (1)

[Ich musste mir dafür den Code ansehen, also müssen Sie vielleicht ein bisschen mehr graben, wenn das Folgende nicht ganz vollständig ist. (Ich glaube, ich habe es richtig befolgt.) Dies ist die Geth-Implementierung.]

Die Bloom-Filter werden in erstellt bloom9.go, indem die Empfangsprotokolle an übergeben werden CreateBloom().

func CreateBloom(receipts Receipts) Bloom {
    bin := new(big.Int)
    for _, receipt := range receipts {
        bin.Or(bin, LogsBloom(receipt.Logs))
    }

    return BytesToBloom(bin.Bytes())
}

Von hier aus lautet die allgemeine Aufrufkette LogsBloom()-> bloom9()-> Keccak256(), die in derselben Datei verfolgt werden kann.

Die erste dieser Funktionen zeigt uns den Inhalt: die Protokolladresse und eine Themenliste.

func LogsBloom(logs []*Log) *big.Int {
    bin := new(big.Int)
    for _, log := range logs {
        bin.Or(bin, bloom9(log.Address.Bytes()))
        for _, b := range log.Topics {
            bin.Or(bin, bloom9(b[:]))
        }
    }

    return bin
}
Tu mir einen Gefallen? Bearbeiten Sie Ihre Antwort, um alles zu entfernen, was mit "Die Belege scheinen nicht verarbeitet zu werden ..." beginnen, und kopieren Sie dann den Code für diese Funktion: github.com/ethereum/go-ethereum/blob/… . Die Antwort ist in diesem Code (die Adresse des Protokolls plus eine Liste von Themen, die in den Bloom-Filtern enthalten sind). Wenn Sie das tun, werde ich diese Antwort akzeptieren. Ihre Antwort ist gut, aber sie verkompliziert sich zu sehr. Ich habe nur gefragt, welche Werte in den Bloom-Filter eingegeben wurden. Vielen Dank. Ich hoffe, es ist in Ordnung, eine Antwort zu bearbeiten.
Hallo Thomas - verstanden. Vielen Dank für Ihre Hilfe beim Aussortieren der unnötigen Teile.
Verstehe ich das richtig, dass die Log-Adresse die Vertragsadresse ist und nicht die Adresse des Anrufers? Vielen Dank.