¿Hay una lista de scripts extraños o inusuales encontrados en las transacciones?

Estoy estudiando guiones y busco guiones extraños o inusuales que hayan aparecido en cualquiera de las *redes de monedas... ( fuera de las estándar enumeradas en esta página )

  • ¿Hay alguna persona o sitio web que enumere transacciones no estándar que no son generadas por el cliente predeterminado?

Lo ideal sería que hubiera un análisis del guión y de lo que está pasando, pero no soy exigente. Incluso me conformaría con un método de línea de comandos para extraer estos datos y descubrirlos yo mismo.

Mi objetivo es aprender qué contratos están ocurriendo en cada red y determinar la frecuencia de cada uno. (Qué tan popular es multi-sig tx con el tiempo)

Alternativamente, puedo usar esto como una herramienta para aprender cómo las personas usan el lenguaje de secuencias de comandos.

Respuestas (4)

Blockchain Info tiene una lista de transacciones extrañas que sus nodos recibieron pero que no pudieron verificar.

Todos parecen transacciones de p2pool.

Últimamente he estado investigando lo mismo para construir un "Bestiario de Bitcoin" con transacciones extrañas. He descargado las herramientas de bitcoin ( https://github.com/gavinandresen/bitcointools ). Tiene una opción para rastrear transacciones no estándar: dbdump.py --search-blocks=NONSTANDARD_CSCRIPTS

He creado un programa de Python para estudiar mis archivos blk000x.dat locales con la información de la cadena de bloques. BCDataStream y deserialize provienen de las herramientas de bitcoin.

#!/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()

El programa vuelca el Script en todas las transacciones con el número de bloque anterior (tengo que mejorar eso, pero luego puedes encontrar el bloque correcto). Todo el archivo es de unos 3 GB.

En mi terminal de Linux redirijo la salida a un archivo scripts.txt y luego uso grep para encontrar comandos, como:

grep 'SI' guiones.txt > SI.txt

MIN, IF, DROP, SWAP, por ejemplo, muestran cosas interesantes. Algunos de ellos son errores (ver https://bitcointalk.org/index.php?topic=67158.0 ), algunos no los conozco.

Al carecer de cualquier otro recurso para rastrear transacciones notables, la siguiente respuesta se hace en CW para que cualquiera pueda editarla y actualizarla según sea necesario.

  • Bloque 728: el tipo de pago más común es pubkey-hash, que apareció por primera vez aquí. [fuente]

Script local para encontrarlos + datos preprocesados

https://bitcoin.stackexchange.com/a/5890/21282 publicó un script local y https://bitcoin.stackexchange.com/a/5886/21282 publicó una lista, pero aquí están ambos juntos:

El script se basa en la agradable biblioteca Python https://github.com/alecalve/python-bitcoin-blockchain-parser que analiza archivos blk sin necesidad de un servidor.

Luego, en known_op_signatures.jsonla salida, los datos se organizan de la siguiente manera:

[
  {
    "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"
    ]
  },

Entonces puede ver que tenemos en el nivel superior una lista de tipos de transacciones, ordenados por conteo de ocurrencias.

En la firma de la transacción sig, nullindica un número literal constante. De esta manera, solo importan los operandos, y el script agrupa todas las transacciones de un tipo dado solo por operando para mantener manejable el tamaño de los datos.

Por ejemplo, el tipo de transacción más común, con 1122142242 ocurrencias, fue:

    "sig": [
      null,
      null
    ]

es decir, dos literales, que es el script de entrada de una transacción P2PKH.

El segundo más común fue:

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

que es el script de salida de una transacción P2PKH.

Al desplazarse rápidamente por la lista, verá rápidamente que, como era de esperar, hay muy pocas transacciones no estándar.

Resúmenes de los scripts no estándar

https://www.quantabytes.com/articles/a-survey-of-bitcoin-transaction-types proporciona un buen resumen. Otras fuentes: