En primer lugar, entiendo que la forma estándar de hacer un depósito en garantía con bitcoin es un P2SH con un script de canje de 2 de 3 multisig. Me gustaría intentar hacer un depósito en garantía de la siguiente manera:
nombres de 3 partes involucradas:
money source
escrow agent
money destination
hay 2 transacciones involucradas:
escrow transaction
: money source
envía fondos a un script de bloqueo personalizadospending transaction
: el escrow agent
mueve fondos del escrow transaction
almoney destination
Con estas propiedades, el escrow agent
tiene control total sobre el gasto de los fondos, PERO escrow agent
solo puede moverlos al money destination
y a ningún otro lugar. (es decir escrow agent
, no puede robar los fondos)
Me doy cuenta de que para que esto funcione, el script de bloqueo personalizado de escrow transaction
alguna manera tiene que hacer referencia a la money destination
dirección y proporcionar algún mecanismo tal que cuando el escrow transaction
script de bloqueo esté desbloqueado verifique que la transacción en la que se está utilizando sea de hecho. yendo a la money destination
.
Parece que uno no puede hacer referencia directamente a la dirección de salida de spending transaction
cuando spending transaction
se está verificando. La única forma en que parece que la dirección de salida sea parte de la verificación es indirectamente a través de CHECKSIG (ya que los datos que se firman incluyen la dirección de salida del spending transaction
). Pero para que esto funcione, necesitamos firmar spending transaction
e incluir esa firma en the escrow transaction
, pero eso crea una dependencia circular: the escrow transaction
incluye una firma de the spending transaction
que incluye el hash de the escrow transaction
(ya que the escrow transaction
es una entrada para the spending transaction
). Y entonces esto sería imposible. Desearía que hubiera un tipo de hash que le permitiera firmar solo el lado de salida de la transacción y no las entradas en absoluto.
Soy bastante nuevo en Bitcoin, así que tal vez me estoy perdiendo algo. Pero parece que diseñar un depósito en garantía con las propiedades que describí al comienzo de esta pregunta sería imposible, y la única forma de hacerlo es un P2SH estándar 2 de 3 multisig.
La razón por la que no quiero hacer un multisig estándar es para que funcione sin confianza. money source
y tienen que intercambiar money destination
sus direcciones directamente (es decir escrow agent
, no pueden dar a las otras 2 partes las direcciones apropiadas, porque podría dar las direcciones incorrectas). De esta manera, cuando escrow agent
firma el txn y se lo da a la otra parte para que lo firme, puede verificar que el agente de custodia lo firmó para ir al lugar correcto.
Me gustaría que el escrow agent
sea el punto de contacto para las otras 2 partes para que no necesiten hacer un intercambio de direcciones antes de trabajar con el escrow agent
pero aún así no tengan que confiar en elescrow agent
Respuesta parcial (no es una solución nueva; simplemente adapté el protocolo del canal de micropagos): si permite el intercambio de claves públicas, me parece que una solución es:
source
financia una dirección A controlada por source
yescrow
source
firma parcialmente la transacción T gastando A en destination
. Luego envía esta transacción parcialmente firmada a escrow
.ahora toca escrow
firmar y transmitir T para que destination
reciba el fondo. Escrow
no puede gastar los fondos de manera diferente (es decir, robar) como lo requeriría source
ser cosignatario.
(Problema: Escrow
podría decidir no firmar y "bloquear los fondos" (es por eso que las transacciones de Reembolso se incluyen en los canales de pago). Resuelto Escrow
firmando parcialmente y enviando a la fuente una transacción R enviando los fondos de A de regreso a source
t0. Ahora depende de source
enviarse a sí misma los fondos de A. ¿Es esto un problema? No realmente si tiene la transacción R con "tiempo fijo")
Parece más difícil encontrar una solución sin el intercambio de claves públicas... pero es un poco extraño prohibir el intercambio de claves públicas.
manfredmacx