Transmitir transacciones sin procesar sin validación de entrada

¿Qué herramienta/software puedo usar para transmitir una transacción sin procesar, que no rechazaría una transacción debido a un gasto no válido o doble?

Bitcoind con RPC tiene un paso de validación que rechaza cualquier transacción sin procesar en la que no se conocen las entradas, o si las entradas son de gasto doble.

Además, no quiero depender de un servicio de terceros como blockchain.info.

AFAIK No existe. Busqué esto yo también. Tienes que desarrollar tu propia herramienta.
Parece que la forma más fácil podría ser simplemente comentar el código de validación en bitcoind y volver a compilar.
¿Qué herramienta haría esto? Ninguna herramienta, porque si fuera posible, que no lo es, serías capaz de romper Bitcoin.
Gracias a Dios, los intentos de doble gasto no rompen Bitcoin, eso lo haría bastante inútil.
Y sí, ciertamente es posible, sucede unos cientos de veces al día: blockchain.info/double-spends .

Respuestas (2)

Resulta que hay muchas maneras de hacer esto:

No hay absolutamente ninguna razón para intentar transmitir una transacción no válida. Está perdiendo su tiempo y su tráfico. Su(s) compañero(s) lo revisarán y lo tirarán. No lo retransmitirán a la red. También pueden prohibir su dirección IP durante algún tiempo (¿1 día?)

¿Puede ser que desee enviar una transacción válida pero no estándar? ¿O tal vez desee tener una herramienta personalizada que envíe transacciones a una red?

    // [...]
    void NetSocket::pushTx ( const QByteArray& data )
    {
      const MyKey32 key ( data.constData ( ), data.size ( ) );  // calculate txid
      outTx.insert ( key, data );                               // store data
      write ( "inv", invPacket ( MSG_TX, key ) );               // send inv packet
    }
    //--------------------------------------------------------------
    void NetSocket::write ( const char* type, const QByteArray& data )
    {
      socket -> write ( packet ( type, data ) );
    }
    //--------------------------------------------------------------
    void NetSocket::procGetdataPacket ( const QByteArray& data )
    {
      Stream d ( data ); d.skip24 ( );               // i do not check header now
      const int count ( d.readVar ( ) );
      xassert ( count == 1 );
      const quint8* ss = d.readAdvance ( 36 );
      const quint32 tag ( *(quint32*)ss );
      const MyKey32 key ( ss + 4 );
      xassert ( tag == MSG_TX );
      xassert ( outTx.contains ( key ) );
      write ( "tx", txPacket ( outTx.value ( key ) ) );
    }
    // [...]
Creo que muy bien podría ser que las diversas implementaciones de bitcoin tengan nociones ligeramente diferentes de cuándo aceptar o no una transacción. la única forma de averiguarlo es poder enviar una transacción sin filtrar a muchos nodos diferentes.
Por supuesto, hay una muy buena razón. Es posible que esté gastando salidas no confirmadas, que su cliente no conoce, pero que aún existen en la red.