Función de firma de web3.js para autenticar usuarios a través de MetaMask

Estoy tratando de seguir el ejemplo que se encuentra en este sitio para autenticar a los usuarios que utilizan la funcionalidad MetaMask. Además, la documentación de web3.js en el siguiente sitio especifica esta función de signo:

 web3.eth.personal.sign(dataToSign, address, password [, callback])

No tengo ningún problema en pasar los valores de dataToSign y dirección a esta función, sin embargo, ¿cómo puedo pasarle la contraseña?

De lo contrario, ¿es esta la función adecuada para usar para firmar un nonce utilizado para autenticar a un usuario? ¿Quizás necesito usar otra función? Esta es mi promesa de llamar a la función (con diferentes funciones alternativas posibles):

 return new Promise((resolve, reject) =>
   // NOt sure which function among the ones below to use:
   this.web3.eth.personal.sign(this.web3.fromUtf8(nonce), account, (err, signature) => { // Or         
   this.web3.eth.sign(nonce, account, (err, signature) => { // Or
   this.web3.eth.accounts.sign(nonce, account, (err, signature) => { // Or
   this.web3.eth.personal.sign(nonce, account, password, (err, signature) => {
       if (err) return reject(err)
       return resolve([account, signature])
     })
   )

No tuve mucho éxito con ninguno de ellos.

Gracias. j

Respuestas (1)

¡El artículo al que vinculaste tiene más de dos años! Hizo referencias a la versión anterior de web3 v0.20.

Con web3 v1.2, hubo varios cambios. Para firmar, puede elegir entre:

Esta respuesta tiene un ejemplo con la sintaxis correcta para web3 v1.2 para los dos primeros casos: https://ethereum.stackexchange.com/a/76578

¡Muchas gracias Ismael! Sí, de hecho, esto funciona. Sin embargo, el indicador de MetaMask muestra el siguiente mensaje: "Firmar este mensaje puede tener efectos secundarios peligrosos. Solo firme mensajes de sitios en los que confíe plenamente con toda su cuenta. Este método peligroso se eliminará en una versión futura". ¿Sabrías si este método se eliminará en el futuro? Gracias de nuevo.
Además, el mensaje en el aviso consiste exclusivamente en 0x
@JF0001 La propuesta EIP 712 debería solucionar esos problemas. Hay un repositorio con ejemplos de trabajo para Metamask github.com/danfinlay/js-eth-personal-sign-examples . La propuesta aún no se ha finalizado, por lo que es posible que algunas carteras no cumplan al 100 % (carteras móviles). Si su objetivo es Metamask, debería estar bien, de lo contrario, debe probar las billeteras que desea admitir.