Escrow
Introducción al contrato de Celo Escrow y cómo utilizarlo para retirar, revocar y recuperar fondos.
¿Qué es el contrato de Escrow?
El contrato de Escrow
utiliza la función de identidad ligera de Celo para permitir a los usuarios enviar pagos a otros usuarios que aún no tienen un par de claves públicas/privadas o una dirección. Estos pagos se almacenan en el mismo contrato y pueden ser retirados por el destinatario o reclamados por el remitente. Esta funcionalidad soporta ambas versiones de la identidad ligera de Celo: identifier-based (por ejemplo, un número de teléfono para mapear direcciones) y privacy-based. Esto da a las aplicaciones que pretenden utilizar este contrato cierta flexibilidad a la hora de decidir qué versión de identidad prefieren utilizar.
¿Cómo funciona?
Si Alice quiere enviar un pago a Bob, que aún no tiene una dirección asociada, enviará ese pago a este contrato Escrow
y también creará un par temporal de claves públicas/privadas. La dirección temporal asociada se llamará paymentId
. Alice compartirá entonces externamente la nueva clave privada temporal, también conocido como una invitation, a Bob, que más tarde la utilizará para reclamar el pago. Este paymentId ahora se almacenará en este contrato y se asignará a los detalles relevantes relacionados con este pago específico, tales como: el valor del pago, un identificador opcional del destinatario previsto, una cantidad opcional de attestations
que el destinatario debe tener antes de poder retirar el pago, una cantidad de tiempo después de la cual el remitente puede revocar el pago (a través del campo expirySeconds
- más sobre eso en la sección "withdrawing" de abajo), que activo está siendo transferido en este pago, etc.
Retirando
El receptor de un pago incurrido puede optar por retirar su pago suponiendo que hayan creado con éxito su propio par de claves públicas/privadas y ahora tengan una dirección. Para demostrar su identidad, el receptor debe ser capaz de demostrar la propiedad de la clave privada del paymentId, que debería haberles dado el remitente original. Si el remitente establece un número mínimo de certificaciones requeridas para retirar el pago, también se comprobará para retirar con éxito. Siguiendo el mismo ejemplo anterior, si Bob quiere retirar el pago que Alicia le envió, debe firmar un mensaje con la clave privada que le ha dado Alice. El mensaje será la dirección de la nueva cuenta de Bob. Bob podrá entonces retirar su pago proporcionando el paymentId y la v, r y s salida de la firma ECDSA generada. Un pago incurrido puede tener establecido expirySeconds
, que hace referencia a la cantidad de tiempo que debe pasar antes de que el remitente pueda revocar el pago. Ten en cuenta que después de que hayan pasado expirySegundds
, el destinatario del pago puede seguir retirando el pago mientras no haya sido revocado.
Revocando & Reclamando
Alice envía a Bob un pago escrowed. Digamos que Bob nunca lo retira o, peor aún, la clave privada temporal que necesita para retirar el pago se pierde o se envía a la persona equivocada. Para ello, el protocolo de Celo también permite a los remitentes reclamar cualquier pago sin reclamar que hayan enviado. Después de que haya pasado el pago escrowed expiryseconds
(establecido por el remitente al crear el pago), el remitente del pago puede revocar el pago y recuperar sus fondos con sólo el pagmentId.