BIP 37 automatische Filteraktualisierung fügt keine Ausgänge ein

Ich habe ein Problem mit Bloom-Filtern, wenn ich die getdata- Nachricht verwende.

Soweit ich BIP 37 verstehe , fügt der antwortende Client automatisch alle Outpoints (TXID und Ausgabeindex) in den Bloomfilter von Transaktionen ein, die mit dem Filter übereinstimmen, indem der Bloomfilter für eine Verbindung mithilfe der Loadfilter- Nachricht mit dem Flag BLOOM_UPDATE_P2PUBKEY_ONLY festgelegt wird. Wenn ich jedoch versuche, genau dies zu tun, sendet der Knoten immer nur Transaktionen, die Ausgaben an die Adresse enthalten, nach der ich filtere, niemals Transaktionen, die Ausgaben von der Adresse enthalten, nach der ich filtere.

Meine Vorgehensweise ist wie folgt:

  1. Fügen Sie dem Bloom-Filter den folgenden öffentlichen Schlüssel hinzu: 1JbFvyaMyHHmvvjc54h4YARq3uoX2ZZ4Qj (zufällig ausgewählt)
  2. Senden Sie die Filterload- Nachricht mit dem Filter (wie im Wireshark-Snippet unten zu sehen).

    Bitcoin protocol
    Packet magic: 0xf9beb4d9
    Command name: filterload
    Payload Length: 261
    Payload checksum: 0x2bb02c45
    Filterload message
        Filter
            Count: 251
            Data: 000000040004010000000100000000000000020000400000...
        nHashFunc: 13
        nTweak: 0x1a689ff4
        nFlags: BLOOM_UPDATE_P2PUBKEY_ONLY (0x02)
    
  3. Senden Sie die getdata- Nachricht mit dem Hash aller Blöcke, die Transaktionen zu und von der Brieftasche enthalten (die ich zu Testzwecken in einem Block-Explorer identifiziert habe). Die Inventare sind vom Typ MSG_FILTERED_BLOCK .

Der Knoten antwortet der Reihe nach mit den folgenden Nachrichten:

MerkleBlock: 000000000000000001201ab2679db7c87a432967c060596bad0ac093dac94111
Tx:......... 187b00588e8d7844c405da9a15d78dbd7ebb9b2887fb5aace6651719fede923e
Tx:......... dbbca0d839435ac77db65378a9607d17b0aa965f3027d84dcf0ee5115dc8d32f
Tx:......... 17c12f45956082a913c0c862d573cf067fa5ee96ba5b954914371da6bef51f7f
Tx:......... 36cce25d34a5da0f7d69253743eae7bb7c576e5543d0eb16db0f72967edb4bc6
Tx:......... 6ea48c6286b1691cd1ecec271a3f52a3fe099467bb6c926b41ba8942e21d4aa6
MerkleBlock: 0000000000000000049ee67931f6d4970a7d06b14b8aadd406223ab65efe5025
MerkleBlock: 0000000000000000019f3fc2c8da43e8a81373ae189ace4caec6c59969f46ff6
MerkleBlock: 000000000000000000f67dad206798db2e6c5dffec84d213397784be894e66fa

Die 5 Transaktionen in der Liste sind korrekt, da sie Ausgaben enthalten, die auf diese Brieftasche abzielen. Block 0000000000000000019f3... enthält jedoch Transaktionen mit Eingaben aus besagter Wallet, aber auf die Merkleblock-Nachricht dieses Blocks folgen diese Transaktionen nicht. Sollte der Knoten nicht die Ausgaben dieser 5 Transaktionen zum Bloom-Filter hinzufügen und dadurch die späteren Transaktionen abgleichen, die Eingaben enthalten, die auf sie zeigen?

Ich habe bestätigt, dass der Node im Besitz der relevanten Transaktionen ist. Wenn ich den Filter manuell lade und die Ausgänge selbst hinzufüge, funktioniert dies wie beabsichtigt.

Verstehe ich falsch, wie BIP 37 verwendet wird?

Antworten (1)

BLOOM_UPDATE_P2PUBKEY_ONLY bedeutet, dass der Filter nur mit Outpoints aktualisiert wird, wenn die übereinstimmende Transaktion Pay-to-Pubkey oder Bare Multisig ist, nicht p2pkh oder andere. Ich weiß aber nicht warum, da das, was du zu tun versuchst, sehr häufig vorkommt.

Sie könnten auch an dieser Arbeit in Bitcoin XT interessiert sein , die es ermöglicht, einen Filter mit unbestätigten Vorfahren einer übereinstimmenden Transaktion zu aktualisieren (um die Bestätigungsaussichten besser einzuschätzen).

Vielen Dank. Ich habe nicht bemerkt, dass P2PUBKEY und nicht P2PUBKEYHASH stand. Dumm von mir.