织梦CMS - 轻松建站从此开始!

我的网站

当前位置: 主页 > 竞争币 > 以太坊

硬核 | 技术详解密码学签名在以太坊上应用 (6)

时间:2020-10-22 17:17来源:未知 作者:admin 点击:
return signer == ecrecover ( hashTransaction ( transaction ), v , r , s ); } 在下一节中,我们将详细解释 ecrecover 。如果你想找一个简单的 JavaScript 或 TypeScript 代码库来来
return signer == ecrecover(hashTransaction(transaction), v, r, s); }

在下一节中,我们将详细解释 ecrecover。如果你想找一个简单的 JavaScript 或 TypeScript 代码库来来实现 EIP 712,请查看 这个库。

如果你想详细了解如何在智能合约中实现 EIP 712,我建议你阅读 MetaMask 的这篇文章。遗憾的是,EIP 712 规范目前还是草案,还没有得到很多应用的支持。目前,Ledger 和 Trezor 都还没支持 EIP 712,可能会阻碍该规范的广泛采用。不过,Ledger 表示他们即将发布的更新版会支持 EIP 712。

通过智能合约来验证签名

消息签名更有趣的地方在于,我们可以使用智能合约来验证 ECDSA 签名。Solidity 有一个内置函数叫做 ecrecover(这实际上是地址 0x1 上的预编译合约),可以恢复用来签署消息的私钥的地址。一个(非常)基本的合约实现如下所示:

// SPDX-License-Identifier: MIT pragma solidity 0.7.0; contract SignatureVerifier { /** * @notice Recovers the address for an ECDSA signature and message hash, note that the hash is automatically prefixed with "Ethereum Signed Message: 32" * @return address The address that was used to sign the message */ function recoverAddress (bytes32 hash, uint8 v, bytes32 r, bytes32 s) public pure returns (address) { bytes memory prefix = "Ethereum Signed Message:n32"; bytes32 prefixedHash (责任编辑:admin1)

织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容