¿Es posible enviar una transacción sin procesar y firmada desde un contrato de ethereum?

¿El EVM es compatible con esto? ¿La solidez permite esto? ¿Cómo puedo hacerlo?

Respuestas (2)

En teoría, es posible que una transacción a un contrato de Ethereum calcule una firma y cree una transacción firmada. Sin embargo, esto casi nunca es útil, ya que la firma de una transacción requiere una clave privada, y las claves privadas no suelen ser útiles a menos que sean privadas.

Si el objetivo es desencadenar alguna acción en otro contrato, su código simplemente puede llamar a ese contrato. No hay necesidad de firmar una transacción.

Si el objetivo es enviar una transacción a la cadena de bloques en una fecha posterior, esto se puede lograr incentivando a otra persona para que envíe la transacción. Consulte el reloj despertador de Ethereum para ver un ejemplo.

Quiero un contrato para enviar una transacción firmada por una billetera a otro contrato. La transacción se firmará antes de colocarla en la cadena de bloques, manteniendo segura la clave privada.
En ese caso, la respuesta es no, un contrato no puede hacer networking, por lo que no puede enviar cosas a la red. Sin embargo, si puede explicar qué problema está tratando de resolver, probablemente haya una solución que no requiera que haga esto.
¿Qué tal si enviamos la aprobación de una transacción firmada dentro de la llamada que hacemos? ¿Ejecutar la aprobación de la firma y luego ejecutar la llamada realizada?

No es exactamente lo que quiere hacer, pero las billeteras Multisig permiten que se envíen transacciones arbitrarias desde ellas. Crea una transacción sin procesar sin firmar y la envía a la billetera multisig con submitTransaction(destination, txValue, txData).

Cuando se logra la cantidad requerida de confirmaciones a través confirmTransactionde la transacción sin procesar, se ejecuta con algo como esto

destination.call.value(txValue)(txData);

txData puede ser cualquier cosa. Por ejemplo, si el destino es un contrato de token, entonces TXDATA puede ser una transferencia de token "0xA9059CBB00000000000000000000000000001234567890123456789012345678901234567890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ATROMENTOS.

  • 0xa9059cbb transferencia(destino,cantidad)
  • 0000000000000000000000001234567890123456789012345678901234567890 dirección de destino
  • 00000000000000000000000000000000000000000000000000de0b6b3a7640000 cantidad a transferir