¿Por qué aparece la transacción de firma en cryptokitties?

Hice algunos proyectos web3.js y también trabajé con MetaMask. Pero nunca he visto aparecer esta ventana en MetaMask, como sucede cuando me inscribo en cryptokitties.

Confirm Transaction
Sign Message

MESSAGE
Cryptokitties

¿Qué quiere decir esto? ¿Por qué aparece esta ventana emergente? ¿Qué permisos otorgo?

Captura de pantalla aquí: https://i2.wp.com/blockchaindk.com/wp-content/uploads/2017/12/Cryptokitties-Sign-Message.png?w=346&ssl=1

fuente: https://blockchaindk.com/2017/12/05/buy-cryptokitty-cryptokitties/

Respuestas (2)

En la mayoría de los casos, no necesitamos firmar para enviar transacciones entre el sitio (contrato) y yo.

Pero lo que hace el letrero es que el sitio se asegura de que el usuario sea real y tenga una cuenta ether (metamask en este caso). Para firmar, generalmente necesitamos correo electrónico, nombre de usuario.

  • Podemos registrar al usuario en el sitio con solo el correo electrónico y el nombre de usuario y cada vez que necesitemos transferir ether desde o hacia el usuario, activamos la función web3.sendTransaction proporcionada por metamask (que activará el diálogo de transferencia de metamask).
  • Pero antes de registrar al usuario solo con el correo electrónico y el nombre de usuario, verificamos si el usuario tiene una cuenta real. Si web3.personal.sign tiene éxito, significa que el usuario tiene la cuenta y es real, entonces podemos continuar registrando al usuario en nuestro sitio.

representamos a los administradores del sitio, administradores. Básicamente, se desencadena por

var signer = web3.eth.defaultAccount || web3.eth.accounts[0];
var original_message = "I am but a stack exchange post";
var message = "0x" + original_message.toHex();
var message_hash = web3.sha3('\u0019Ethereum Signed Message:\n' + message.length.toString() + message);
var signature;
web3.personal.sign(message, signer, function(err, res) {
    if (err) console.error(err);
    signature = res;
    console.log({
        "signer": signer,
        "message": message,
        "message_hash": message_hash,
        "signature": signature,
    })
});

la respuesta seria

{
    message: "0x4920616d20627574206120737461636b2065786368616e676520706f7374"
    message_hash: "0x1a0126ceafb4579293016a4cc3ca0ec753c7d497cda8b3e6ece095c832d92590"
    signature: "0x0cf7e2e1cbaf249175b8e004118a182eb378a0b78a7a741e72a0a34e970b59194aa4d9419352d181a4d1827abbad279ad4f5a7b60da5751b82fec4dde6f380a51b"
    signer: "0x9283099a29556fcf8fff5b2cea2d4f67cb7a7a8b"
}

Si tiene alguna pregunta, por favor hágamelo saber.

Creo que esto solo se usa como una forma de sistema de inicio de sesión. Al firmar un mensaje, CryptoKitties puede determinar qué dirección está utilizando y, por lo tanto, qué cuenta mostrar en su sitio web.

Bueno, pero si usa metamask, sería más fácil obtener la información de la cuenta directamente sobre metamask con el botón de registro... Imho
¿Quiere decir que quiere que Metamask firme sus transacciones sin preguntarle?