Почему транзакция подписи всплывает в криптокитти?

Я сделал несколько проектов web3.js, а также работал с MetaMask. Но я никогда не видел, чтобы это окно появлялось в MetaMask, как при подписке на криптокитти.

Confirm Transaction
Sign Message

MESSAGE
Cryptokitties

Что это значит? Почему это всплывающее окно? Какие разрешения я даю?

Скриншот здесь: https://i2.wp.com/blockchaindk.com/wp-content/uploads/2017/12/Cryptokitties-Sign-Message.png?w=346&ssl=1

источник: https://blockchaindk.com/2017/12/05/buy-cryptokitty-cryptokitties/

Ответы (2)

В большинстве случаев нам не нужно подписывать для отправки транзакций между сайтом (контрактом) и мной.

Но что делает знак, так это то, что сайт удостоверяется, что пользователь реален и у него есть учетная запись эфира (в данном случае метамаска). Для подписи нам обычно нужна электронная почта, имя пользователя.

  • Мы можем зарегистрировать пользователя на сайте, указав только адрес электронной почты и имя пользователя, и всякий раз, когда нам нужно передать эфир от или к пользователю, мы запускаем функцию метамаски web3.sendTransaction (которая вызывает диалог передачи метамаски).
  • Но прежде чем мы зарегистрируем пользователя только с адресом электронной почты и именем пользователя, мы проверяем, есть ли у пользователя реальная учетная запись. Если web3.personal.sign прошел успешно, это означает, что у пользователя есть учетная запись, и она настоящая, тогда мы можем продолжить регистрацию пользователя на нашем сайте.

мы расшифровываем менеджеров сайта, админов. В основном это вызывается

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,
    })
});

Ответ будет

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

Если у вас есть какие-либо вопросы, пожалуйста, дайте мне знать.

Я считаю, что это используется только как форма системы входа в систему. Подписывая сообщение, CryptoKitties могут определить, какой адрес вы используете, и, следовательно, какую учетную запись отображать на своем веб-сайте.

Ну, но если вы используете метамаску, было бы проще просто получить информацию об учетной записи непосредственно через метамаску с помощью кнопки регистрации... Имхо
Вы имеете в виду, что хотите, чтобы Metamask подписывал ваши транзакции без запроса?