是否有任何库可以从智能契约中的签名中获取公钥?ecrecover方法返回地址,而不是公钥,并执行需要从签名派生公钥的计算,其中公钥不为已知,并且不通过其他方式传递到契约中,当签名已知时,最好有一个从签名中获取公钥的库。
部分库在这里也会有所帮助。
发布于 2018-03-06 06:36:32
有一个库https://github.com/jbaylina/ecsol在椭圆曲线上实现了一些坚实的操作。
我没有尝试,但它似乎有足够的实现公钥恢复。但我不确定汽油限额是否允许这样的操作。
无论如何,这个问题似乎很有趣,但它相当于从keccak获得一个预图像。
发布于 2018-02-28 13:36:20
没有一个内置的方式来做到这一点,而且我也不认为有一个库可以做到这一点。出于好奇,你为什么要拿到公钥而不是地址?
发布于 2022-10-20 09:35:59
一个新的库可用于从ECDSA签名的消息https://github.com/0xcyphered/secp256k1-solidity中恢复公钥。
示例:
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;
import "@0xcyphered/secp256k1-solidity/contracts/SECP256K1.sol";
contract Example {
function recoverPersonalSignPublicKey(
bytes32 message,
uint8 v,
bytes32 r,
bytes32 s
) public pure returns (bytes memory) {
string memory header = '\x19Ethereum Signed Message:\n32';
bytes32 _message = keccak256(abi.encodePacked(header, message));
(uint256 x, uint256 y) = SECP256K1.recover(uint256(_message), v - 27, uint256(r), uint256(s));
return abi.encodePacked(x, y);
}
}https://ethereum.stackexchange.com/questions/41230
复制相似问题