Direcciones multigrado con claves de diferentes carteras

Estoy aprendiendo a manejar multisig. Primero creé una dirección multisig 2-3 con todas las claves de mi billetera de prueba (bitcoind en el servidor) y envié dinero a la nueva dirección multisig desde otra billetera. La transacción se muestra en la billetera de prueba y puedo usar la salida no gastada.

Luego creé una dirección 2-2 con una clave de la billetera de prueba y una clave de otra billetera, y envié dinero a la nueva dirección desde otra billetera. La transacción se muestra en blockchain.info:

https://blockchain.info/tx/910298ae8133cc142009539298b6e2127b2c49960facd3b21470e130d07a1701

pero no aparece en la billetera de prueba, y la nueva dirección multisig tiene saldo cero.

Leyendo estas preguntas y respuestas anteriores:

¿Multisig no funciona a menos que todas las claves se hayan generado desde la billetera actual?

Veo que en julio de 2014 Bitcoin Core solo mostraba transacciones a direcciones multisig con todas las claves en su billetera.

Preguntas:

1) ¿Sigue siendo así?

2) Si es así, ¿puedo seguir usando la salida no gastada y cómo?

Respuestas (1)

  1. Addmultisigaddress 2[{"address/pubkey of Bitcoincore address", "pubkey of other wallet key"}] debe devolver la dirección P2SH ( 3MWpeBDwJdk8F7fecZBZ6FHjDJVnGxpnRA ) y también agregar 3MWpeBDwJdk8F7fecZBZ6FHjDJVnGxpnRA a los UTXO
  2. importaddress3MWpeBDwJdk8F7fecZBZ6FHjDJVnGxpnRA agregará la dirección P2SH a la billetera como WatchOnly

Supongo que no está ejecutando un nodo completo, usando la txindex=1bandera, por lo que el addmultisigaddresscomando es lo que necesitará para canjear 3MWpeBDwJdk8F7fecZBZ6FHjDJVnGxpnRA en Bitcoincore. FYI, createmultisig tiene los mismos parámetros que addmultisigaddress ( referencia RPC ) pero solo devuelve el script de canje; es decir, no está agregando la dirección P2SH a los UTXO.

Como ya se mencionó, para todos los comandos multisig necesitará la clave pública completa (versión hexadecimal, comenzando con 0x04 o 0x02/03 para comprimido). La única razón por la que puede sustituir la dirección Base58Check en Bitcoincore como clave pública es porque el software recupera la clave pública de la billetera y la sustituye en consecuencia.

Una forma alternativa de hacerlo es usar dumpprivkey / valideaddress para obtener las claves de Bitcoincore requeridas y luego importar la clave privada al otro software de billetera y firmar/canjear con eso.

EDITAR: probé la importación de claves públicas que no son de wallet.dat para una dirección P2SH multisig y agregué con éxito el Tx a los UTXO devueltos porlistunspent, con la única diferencia de que los datos de retorno de JSON tendránspendable: false. Lo hice de la siguiente manera:

  1. addmultisigaddress 2 '["pubkey1", "pubkey2"]'
  2. Tome la dirección P2SH devuelta...
  3. importaddress 3MWpeBDwJdk8F7fecZBZ6FHjDJVnGxpnRA "TESTING" true
  4. Espere a que se complete el escaneo
  5. Financiado 3MWpeBDwJdk8F7fecZBZ6FHjDJVnGxpnRA con createrawtransaction/ signrawtransaction/ sendrawtransaction(pero estoy seguro de que puedes hacerlo usando la GUI
  6. listunspent 0devolverá una matriz JSON (incluidas 0las confirmaciones) con un objeto que se muestra redeemScriptpero con spendable: falso
  7. Deberá canjear el Tx usando createrawtransactionlas claves privadas pasadas como parámetros para gastar esto, obviamente
Gracias por la respuesta. Probé con éxito direcciones multisig con claves de diferentes billeteras en otras plataformas (coinb.in), pero aún no he logrado hacerlo con mi instalación de bitcoincore, a pesar de seguir todas sus sugerencias. Un problema es que incluso después de importar la dirección como watchonly (dirección de importación) no veo las transacciones en la dirección.
Echaré un vistazo lo antes posible. Voy de memoria. Estoy experimentando una frustración similar con BIP32/Electrum 2.0.4, aunque es un problema por diferentes razones técnicas, sigue siendo indicativo de lo difícil que pueden ser diferentes clientes de billetera con multisig y BIP32/39
Creo que deberá volver a escanear los datos de su cadena de bloques, lo que llevará entre 5 y 10 minutos, suponiendo que no esté utilizando un nodo completo con txindex=1. Cuando use importaraddress, volverá a escanear de forma predeterminada, sin embargo, primero deberá asegurarse de haber creado el script de canje con addmultisigaddress . Nuevamente, tendré que confirmar esto, ya que puede ser que sin ambas claves privadas en la billetera, no "verá" los UTXO que financian el P2SH para la clave pública externa utilizada.
@GiulioPrisco Ver edición.