小编Cyb*_*èle的帖子

使用Python验证Metamask签名(以太坊)

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

{'signature': '0x0293cc0d4eb416ca95349b7e63dc9d1c9a7aab4865b5cd6d6f2c36fb1dce12d34a05039aedf0bc64931a439def451bcf313abbcc72e9172f7fd51ecca30b41dd1b', 'nonce': '6875972781', 'adress': '0x3a806c439805d6e0fdd88a4c98682f86a7111789'}
Run Code Online (Sandbox Code Playgroud)

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

我使用 javascript 使用以太库来签署随机数

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

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

vk = ecdsa.VerifyingKey.from_string(bytes.fromhex(address), curve=ecdsa.SECP256k1, hashfunc=sha256) 
vk.verify(bytes.fromhex(hex(signature)), bytes(nonce, 'utf-8'))
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

ValueError: non-hexadecimal number found in fromhex() arg at position 1
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助 !

python digital-signature ecdsa ethereum metamask

5
推荐指数
1
解决办法
5491
查看次数

标签 统计

digital-signature ×1

ecdsa ×1

ethereum ×1

metamask ×1

python ×1