Как создать подписанное сообщение?
Я еще не так хорошо знаком с подписанными сообщениями вне сети (на английском off-chain signed message), но пару слов сказать о них стоит.
Подобные сообщения используются для подтверждения владельца, платежа, авторизации и т.д. Вся фишка в том, что вы создаете такое сообщение вне сети Эфира и можете позже отправить его. Или переслать другому пользователю для исполнения, типа как мета-транзакция.
По сути, в задаче требовалось создать сообщение с текстом содержащим мое имя и подписать его адресом кошелька, с которого была проведена транзакция-решение для контракта из предыдущего поста.
Как я это сделал?
Для начала создать в Ремиксе небольшой контракт с двумя функциями, которые позволяют зашифровать мое сообщение с именем.
function getHash(string memory str) public pure returns (bytes32) {
return keccak256(abi.encodePacked(str));
}
function getEthSignedHash(bytes32 _messageHash) public pure returns (bytes32) {
return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", _messageHash));
}
Затем получил хеш своего имени через getHash(), а также конечный хеш в getEthSignedHash().
После этого нужно зайти в браузер, где у вас установлен Метамаск, с которого деплоили контракт и проводили транзакцию, в моем случае Хром.
Далее нажимаем f12 или правую кнопку мыши, выбирая Посмотреть код. Откроется консоль Хрома. Переходим на вкладку Console.
Прямо во вкладке ставим курсор и прописываем:
hash = "вставляем наш хеш из функции getEthSignedHash()"
Это сохранит в переменную наш хеш. Далее прописываем эту строку:
ethereum.enable().then(console.log)
Откроется Метамаск и нужно будет подтвердить действие.
В консоли отобразится ваш адрес кошелька. Сохраните его в переменную account, как сделали это с hash.
Затем прописываем эту строку:
ethereum.request({method: “personal_sign”, params: [account, hash]}).then(console.log)
Снова появится окошко Метамаска с предложением о подписании сообщения. Подписываете его, нажимая sign.
В консоли отобразится хеш вашего подписанного сообщения. Это то, что нам нужно.
Теперь этот хеш можно переслать другому человеку, подтверждая, что кошелек действительно принадлежит нам.
Надеюсь, эта информация была вам полезна.
#sign #message #metamask
Post #514
301
- 👍 1