使用 Python 验证 Metamask 签名以太坊

问题描述

我想验证使用 pythonMetaMask 中制作的 ethereum (ETH) 签名。我正在开发一个使用 Flask 作为后端的网站。 Javascript 代码向后端发送包含以下 3 个变量的 POST 请求:

{'signature': '0x0293cc0d4eb416ca95349b7e63dc9d1c9a7aab4865b5cd6d6f2c36fb1dce12d34a05039aedf0bc64931a439def451bcf313abbcc72e9172f7fd51ecca30b41dd1b','nonce': '6875972781','adress': '0x3a806c439805d6e0fdd88a4c98682f86a7111789'}

我的目标是验证签名是否包含nonce(随机整数并由公共地址

签名

我使用 javascript 使用 ether library 对 nonce 进行签名

const ethereum = window.ethereum;
const provider = new ethers.providers.Web3Provider(ethereum)
const signer = provider.getSigner()
var signature = await signer.signMessage(nonce);

我尝试了几个 python 库,但我无法格式化签名、地址和随机数以使其正常工作。这是使用 ecdsa 库进行的不成功尝试:

vk = ecdsa.VerifyingKey.from_string(bytes.fromhex(address),curve=ecdsa.secp256k1,hashfunc=sha256) 
vk.verify(bytes.fromhex(hex(signature)),bytes(nonce,'utf-8'))

我收到以下错误

ValueError: non-hexadecimal number found in fromhex() arg at position 1

感谢您的帮助!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...