Verificación del mensaje firmado de Bicoin en el contrato inteligente de Ethereum

Me gustaría explorar la opción de verificar los mensajes que se han firmado en las billeteras de Bitcoin en los contratos inteligentes de Ethereum.

  • El contrato inteligente de Ethereum recibe una lista de direcciones de Bitcoin

  • El contrato inteligente de Ethereum puede verificar si la llamada de función entrante msg, v, r, s coincide con alguna de las direcciones de Bitcoin proporcionadas anteriormente

Ahora, la pregunta es que el incorporado ecrecover()solo da una dirección de Ethereum resultante y no sé cómo podría proceder desde aquí.

  • ¿Puede el ecrecover() incorporado tratar con direcciones de Bitcoin?

  • ¿Existe alguna forma de mapear la dirección de Bitcoin a la dirección de Ethereum 1:1?

  • ¿Puede el ecrecover() incorporado dar una salida de clave pública completa?

  • Si el ecrecover() incorporado no funciona, ¿puedo escribir mi propia recuperación que genere una dirección de Bitcoin y gaste una cantidad razonable de gasolina?

  • ¿Puedo preprocesar de alguna manera las direcciones de Bitcoin (o claves públicas) en un formato compatible con Ethereum ecrecover()?

... que todo tipo de están relacionados con una pregunta

  • ¿Necesito la clave pública completa de Bitcoin como punto de partida o es suficiente la dirección de Bitcoin?

Respuestas (1)

Tanto Ethereum como Bitcoin usan la misma curva elíptica para las claves privadas secp256k1. La diferencia es que Ethereum formatea las direcciones como hexadecimal y bitcoin como base58.

Se puede hacer que ecrecover funcione para ambos, devuelve los 20 bytes sin formato de dirección.

Un posible problema es que Ethereum usa keccak256 para firmar, y las bibliotecas de bitcoin normalmente usan sha256, por lo que debe usar bibliotecas de ethereum para firmar.

Gracias Ismael. Estos son exactamente algunos consejos que necesitaba. El problema aquí es que trabajé asumiendo que podía usar la interfaz de usuario de firma de billetera Bitcoin existente para el mensaje y luego recuperarlo en el lado Ethereum.
Ismael, tengo una petición delicada. Usted escribió "usa el mismo tipo de curva elíptica", pero ¿no sería más preciso "usa exactamente la misma curva elíptica"?
@DaveScotese Gracias, tiene razón, ambos usan la misma curva elíptica, debería arreglarse ahora.