Gibt es eine Liste mit seltsamen oder ungewöhnlichen Skripten, die in Transaktionen gefunden wurden?

Ich studiere Skripte und suche nach seltsamen oder ungewöhnlichen Skripten, die in einem der *Coin-Netzwerke aufgetaucht sind.. ( außerhalb der auf dieser Seite aufgeführten Standard- Skripte )

  • Gibt es eine Person oder Website, die nicht standardmäßige Transaktionen auflistet, die nicht vom Standardclient generiert werden?

Idealerweise würde es eine Analyse des Drehbuchs geben und was los ist, aber ich bin nicht wählerisch. Ich würde mich sogar mit einer Befehlszeilenmethode begnügen, um diese Daten zu extrahieren und sie selbst zu entdecken.

Mein Ziel ist es, zu erfahren, welche Verträge in jedem Netzwerk auftreten, und die Häufigkeit von jedem zu bestimmen. (Wie beliebt ist Multi-Sig-Tx im Laufe der Zeit)

Alternativ kann ich dies als Werkzeug verwenden, um zu erfahren, wie die Leute die Skriptsprache verwenden.

Antworten (4)

Blockchain Info hat eine Liste seltsamer Transaktionen , die seine Knoten empfangen, aber nicht verifizieren konnten.

Sie alle sehen aus wie p2pool-Transaktionen.

Ich habe mich in letzter Zeit mit der gleichen Sache befasst, um ein „Bitcoin-Bestiarium“ mit seltsamen Transaktionen aufzubauen. Ich habe Bitcoin-Tools heruntergeladen ( https://github.com/gavinandresen/bitcointools ). Es hat eine Option, um nicht standardmäßige Transaktionen zu verfolgen: dbdump.py --search-blocks=NONSTANDARD_CSCRIPTS

Ich habe darauf ein Python-Programm aufgebaut, um meine lokalen blk000x.dat-Dateien mit den Blockchain-Informationen zu studieren. BCDataStream und Deserialize stammen von Bitcoin-Tools.

#!/usr/bin/env python 

from BCDataStream import *
import deserialize

def extract_script(d):

 for t in d['transactions']:


     for txOut in t['txOut']:
          print  "Prev hash: "+(d['hashPrev'][::-1]).encode('hex')+" Script: "+deserialize.decode_script(txOut['scriptPubKey'])+'\n'   


 return None


def findlock(filename):

    f = open(filename, 'r')

    magic=f.read(4)
    magicref='f9beb4d9'.decode('hex')

    while magic:
        size=f.read(4)[::-1].encode('hex')
        N=int(size,16)

        blk = deserialize.BCDataStream()
        blk.write(f.read(N))
        d=deserialize.parse_Block(blk)
        extract_script(d)

        magic=f.read(4)

    f.close()
    return None

def test():
     findlock('blk0001.dat')
     findlock('blk0002.dat')
     findlock('blk0003.dat')


if __name__ == '__main__':
    test()

Das Programm dumpt das Script in allen Transaktionen mit der vorherigen Blocknummer (das muss ich verbessern, aber man findet später den richtigen Block). Die gesamte Datei ist etwa 3 GB groß.

In meinem Linux-Terminal leite ich die Ausgabe in eine scripts.txt-Datei um und verwende dann grep, um Befehle zu finden, wie:

grep 'IF' scripts.txt > IF.txt

MIN, IF, DROP, SWAP zum Beispiel zeigen interessante Dinge. Einige davon sind Fehler (siehe https://bitcointalk.org/index.php?topic=67158.0 ), andere kenne ich nicht.

In Ermangelung einer anderen Ressource zum Verfolgen bemerkenswerter Transaktionen wird die folgende Antwort CW erstellt, damit jeder sie nach Bedarf bearbeiten und aktualisieren kann.

  • Block 728: Die häufigste Zahlungsart ist der Pubkey-Hash, der hier zuerst auftauchte. [Quelle]

Lokales Skript, um sie zu finden + vorverarbeitete Daten

https://bitcoin.stackexchange.com/a/5890/21282 veröffentlichte ein lokales Skript und https://bitcoin.stackexchange.com/a/5886/21282 veröffentlichte eine Liste, aber hier ist beides zusammen:

Das Skript basiert auf der netten https://github.com/alecalve/python-bitcoin-blockchain-parser Python-Bibliothek, die blk-Dateien ohne die Notwendigkeit eines Servers parst.

Dann known_op_signatures.jsonsind die Ausgangsdaten wie folgt organisiert:

[
  {
    "count": 1122142242,
    "ioidx": 0,
    "sample": "74c1a6dd6e88f73035143f8fc7420b5c395d28300a70bb35b943f7f2eddc656d",
    "sig": [
      null,
      null
    ]
  },
  {
    "count": 1103133457,
    "ioidx": 0,
    "sample": "6f7cf9580f1c2dfb3c4d5d043cdbb128c640e3f20161245aa7372e9666168516",
    "sig": [
      "OP_DUP",
      "OP_HASH160",
      null,
      "OP_EQUALVERIFY",
      "OP_CHECKSIG"
    ]
  },

Sie können also sehen, dass wir auf oberster Ebene eine Liste von Transaktionstypen haben, sortiert nach Anzahl der Vorkommen.

In der Transaktionssignatur gibt sig, nulleine Literalzahlkonstante an. Auf diese Weise sind nur Operanden von Bedeutung, und das Skript gruppiert alle Transaktionen eines bestimmten Typs allein nach Operanden, um die Datengröße überschaubar zu halten.

Der häufigste Transaktionstyp mit 1122142242 Vorkommen war beispielsweise:

    "sig": [
      null,
      null
    ]

dh zwei Literale, das ist das Eingabeskript einer P2PKH-Transaktion.

Die zweithäufigste war:

"sig": [
  "OP_DUP",
  "OP_HASH160",
  null,
  "OP_EQUALVERIFY",
  "OP_CHECKSIG"
]

Dies ist das Ausgabeskript einer P2PKH-Transaktion.

Wenn Sie schnell durch die Liste scrollen, werden Sie schnell feststellen, dass es wenig überraschend nur extrem wenige Nicht-Standard-Transaktionen gibt.

Übersichten der Nicht-Standard-Skripte

https://www.quantabytes.com/articles/a-survey-of-bitcoin-transaction-types bietet eine schöne Zusammenfassung. Andere Quellen: