Uno de los principales objetivos que pretenden alcanzar los proyectos basados en blockchain es la verificación de datos. Para ver ejemplos en vivo, puede consultar la identidad digital y el almacenamiento y los controles de documentos en línea. De hecho, cualquiera de estos casos requiere la verificación del iniciador de la acción/transacción para confirmar a la persona o entidad. Por ejemplo, si la persona tiene un documento de identidad digital, resulta crucial garantizar la propiedad. Por tanto, es un excelente ejemplo de un problema de verificabilidad de datos. Repasemos la forma más simple de la solución: una firma digital, cuya prueba es uno de los puntos cruciales durante el desarrollo del contrato inteligente.
El enfoque es simple:
1) el sistema genera un mensaje según las reglas conocidas por todos
2) el firmante recibe el mensaje y agrega un conjunto específico de símbolos: firma digital, código construido a partir del mensaje mediante una clave privada
3) la firma generada ahora se envía al contrato, donde se descompone para recuperar la dirección del firmante.
Solidity le ofrece el algoritmo ECDSA para la generación de firmas y su posterior descomposición. No necesitamos profundizar en el algoritmo en sí (puedes encontrar la información necesaria en las fuentes apropiadas). Todo lo que necesitamos saber es que ECDSA es un ejemplo de criptografía asimétrica, donde el primer usuario crea una firma con su clave privada y el segundo usuario aplica un algoritmo estándar para recuperar la clave pública del firmante. De esta forma, puede verificar la fuente de la firma. En lugar de ello, centrémonos en la parte práctica: el uso y las pruebas de firmas.
En primer lugar, debemos reconocer un problema. Por ejemplo, el contrato necesita realizar alguna acción, digamos, almacenar la dirección de la persona que llama. Aunque el contrato debe realizar el almacenamiento solo si se verifica a la persona que llama, debemos asegurarnos de que nadie pueda usar su dirección sin permiso. Para recuperar a la persona que llama auténtica, necesitamos generar algún mensaje, firmarlo y descomponerlo dentro del contrato.
Usted puede encontrar el solución estándar en la documentación de Solidity (por ejemplo, en el 0.8.4 — la última versión estable en el momento del artículo). Los documentos nos ofrecen el contrato, que necesitaba la siguiente funcionalidad integrada: generación de mensajes, división de firmas y código ensamblador para recuperar al firmante. El ejemplo muestra todos los métodos necesarios y es bastante sencillo, aunque tiene dos desventajas: carece de universalidad y no existe un buen ejemplo de prueba de soluciones. Es por eso que proporciono mi versión del código y (el objetivo real): la estrategia de prueba del contrato.
Claro, puedes usar la biblioteca estándar OpenZeppelin para las operaciones de ECDSA, pero volverá a enfrentar los mismos problemas: falta de flexibilidad y enfoques de prueba. Entonces, profundicemos en mi ejemplo de lógica basada en firmas. Puedes encontrar el completo ejemplo de trabajo en mi GitHub, pero hay pocos lugares que quiero mostrar completamente.
En primer lugar, prepararemos el mensaje. Como puede ver, está formado por dos direcciones de billetera empaquetadas y con hash:
La segunda pieza de código importante es el hash del mensaje junto con el mensaje estándar de Ethereum:
Muestra que el mensaje se envió dentro de la red Ethereum y tiene una longitud de 32 bytes, que no es un número aleatorio. Luego de operaciones anteriores, tenemos el hash, que tiene una longitud de 32 bytes. Es esencial tener la función hash adicional en tal forma, y discutiremos el razonamiento un poco más adelante.
Otras piezas de código son bastante estándar. La función para dividir la firma es la siguiente:
y aquí está la función para recuperar el firmante:
Para la interfaz externa, usaremos la función personalizada, que recibe la firma y los argumentos necesarios, verifica si el usuario ya está registrado, forma el mensaje y verifica la firma:
Primero, imitaremos el mensaje que hay que firmar. Usaremos éteres.js biblioteca, que es (junto con web3) la biblioteca más utilizada y conveniente. Dado que es una biblioteca de código abierto, puedes explorarla libremente. su código y documentos. Además, esta biblioteca nos brinda la interfaz perfecta para construir el siguiente mensaje:
Una de las desventajas de ambos. web3 y Éteres bibliotecas es que no tienen todas las funciones para el entorno local de Ganache ya que ambas bibliotecas están destinadas a trabajar con nodos Ethererum completos. Sin embargo, existe un enfoque para las pruebas locales utilizando funcionalidad de cuenta web3. Aunque necesitas crear una cuenta adicional, que implementará la funcionalidad del cantante y proporcionará una conexión al proveedor web3 actual:
Ahora tenemos el mensaje generado y firmado. Pero eso no es todo; Quedan algunas cosas de las que hablar. Ambas bibliotecas (web3 y ethers) internas proporcionan hash adicional del mensaje antes de la creación de la firma. Además, el mensaje no solo tiene un hash, sino que se combina con el mensaje estándar de Ethereum que vimos anteriormente:
Y es por eso que agregamos el método adicional al contrato. Por lo tanto, si desea utilizar mensajes personalizados, omitir hash adicional, etc., debe crear una versión personalizada de la funcionalidad de firma. Hemos discutido el motivo anterior: ambas bibliotecas estándar implementan el enfoque típico para firmar el mensaje, que solo se puede cambiar anulando la funcionalidad.
Como último paso, ejecutemos la prueba y verifiquemos si funciona correctamente:
Hemos probado la generación de firma, el mensaje generado, la aprobación y rechazo de la firma. Por tanto, es un conjunto bastante completo de pruebas para la funcionalidad de verificación.
- Mi Cuenta
- la columna Acción
- Adicionales
- algoritmo
- Todos
- argumentos
- artículo
- Auténticos
- Poco
- cases
- Cheques
- código
- contrato
- criptografía
- Current
- datos
- Desarrollo
- digital
- identidad digital
- documentos
- Entorno
- Etereum
- red ethereum
- Cara
- Nombre
- Flexibilidad
- Focus
- formulario
- Gratuito
- ser completados
- función
- candidato
- hachís
- Hashing
- HTTPS
- ia
- Identidad
- información
- IP
- IT
- Clave
- más reciente
- Biblioteca
- local
- mediano
- del sistema,
- nodos
- LANZAMIENTO
- Ofertas
- en línea
- habiertos
- de código abierto
- Operaciones
- privada
- clave privada
- proyecta
- público
- clave pública
- una estrategia SEO para aparecer en las búsquedas de Google.
- Ejecutar
- set
- sencillos
- So
- solidez
- dividido
- STORAGE
- tienda
- Estrategia
- te
- test
- Pruebas
- pruebas
- La Fuente
- us
- Verificación
- Billetera
- Wikipedia
- dentro de
- Actividades:
- funciona