¿Cuáles son las categorías de una transacción y qué significan?

Solo he visto "recibir", "enviar" e "inmaduro". ¿Hay otras categorías que me estoy perdiendo? ¿Y qué significan? Parece que "recibir" significa una transacción que le dio monedas a nuestra cuenta, y "enviar" significa que le dimos monedas a otra persona.

Respuestas (2)

Lo que está viendo no es una propiedad inherente de una transacción, sino cómo se ve la transacción en el momento actual y cómo su cliente de Bitcoin quiere mostrarla.

Una transacción contiene entradas y salidas; si la transacción se considera un "envío" o "recepción" (o "transferencia") depende de cuáles de las direcciones de entrada y salida estén en su billetera y se consideren de su propiedad.

Una transacción "no confirmada" es aquella que es lo suficientemente reciente como para no ser considerada una parte canónica de la cadena de bloques. Una vez que se hayan agregado suficientes bloques a la cadena de bloques después de que se registre su transacción, se considerará confirmada. El número de bloques depende de su cliente Bitcoin.

Una transacción "inmadura" es una transacción de generación que no tiene la edad suficiente para estar disponible para gastar. Según la especificación actual, una transacción de generación debe tener al menos 100 confirmaciones antes de que pueda gastarse.

inmaduro solo se usa para transacciones de generación, y es decididamente diferente de las transacciones no confirmadas. Las transacciones no confirmadas son perfectamente válidas y se pueden gastar, aunque las billeteras intentan evitarlo. Las monedas inmaduras son generaciones que no tienen 120 confirmaciones sí, y estas son efectivamente inválidas (sin valor) antes de que lo sean.
@Pieter Sí, lo siento, absolutamente cierto. Tener una respuesta actualizada (aunque el protocolo dice que son 100 confirmaciones, no 120)
@jgm El protocolo requiere 101, IIRC. El software de la billetera usa 120 para protegerse contra algunos problemas en casos de reorganización.
@PieterWuille, ¿significaría eso que el usuario no puede gastar transacciones inmaduras hasta que obtenga 100 confirmaciones?
@philosopher Eso es correcto. Los resultados de las transacciones de coinbase (llamadas transacciones de "generación" en la respuesta aquí) no se pueden gastar hasta que se hayan construido 100 bloques encima del bloque que los incluye.
@PieterWuille Gracias. En este caso, si estuviera calculando la suma de los depósitos para una dirección a partir de la salida de listsinceblock, ¿tendría que considerar solo las transacciones de categoría recibir y generar e ignorar todas las transacciones de categoría inmaduro, envío, huérfano o cualquier otra categoría?
A menos que sea un minero que esté utilizando la billetera de su propio núcleo de bitcoin para construir su propio grupo, nunca tendrá que preocuparse por las transacciones inmaduras.
@PieterWuille ¡Gracias! Sin embargo, hipotéticamente, si tuviera una lista de transacciones, que incluyera transacciones inmaduras y quisiera mostrar la suma de los depósitos para la dirección del usuario, ¿incluiría la transacción inmadura o la excluiría? La intuición me dice que debo excluirlos ya que no son gastables hasta que se conviertan en transacciones de generación.
Las salidas de transacciones inmaduras en realidad se enumerarán con el valor 0, en listtransactions, creo.
@PieterWuille No todas las transacciones inmaduras tienen una cantidad de 0. Algunas pueden tener una cantidad superior a 0, al menos cuando se consultan las listas desde el bloque. La razón por la que hago esta pregunta es porque estoy escribiendo un programa en el que, dados los resultados de Listsinceblock, quiero calcular los depósitos válidos con confirmaciones superiores a 4 para la dirección de la billetera de un usuario. A veces, cuando sondeo listsinceblock, obtengo transacciones inmaduras en la salida con un monto superior a 0. No estoy seguro de si esto contaría como un depósito en la billetera del usuario o no, de ahí la pregunta.

Desde la fuente en 0.8.6, veo estas posibles categorías:

src/rpcwallet.cpp:961:            entry.push_back(Pair("category", "send"));
src/rpcwallet.cpp:986:                        entry.push_back(Pair("category", "orphan"));
src/rpcwallet.cpp:988:                        entry.push_back(Pair("category", "immature"));
src/rpcwallet.cpp:990:                        entry.push_back(Pair("category", "generate"));
src/rpcwallet.cpp:993:                    entry.push_back(Pair("category", "receive"));
src/rpcwallet.cpp:1011:        entry.push_back(Pair("category", "move"));

Así que esencialmente:

  • "enviar"
  • "huérfano"
  • "inmaduro"
  • "generar"
  • "recibir"
  • "Muevete"
¿Qué pasa con el "¿y qué emanan?" parte de la pregunta? :)