我在ethers.js文档中看到,有一个压缩和未压缩的公钥1的Ethereum。这个压缩公钥是仅由ethers.js使用,还是由许多libs使用的一种常见算法?在这种压缩中使用了什么算法?
参见下面部分Ethersjs文档(创建派生) 1。
//公钥(压缩) computeAddress("0x0376698beebe8ee5c74d8cc50ab84ac301ee8f10af6f28d0ffd6adf4d6d3b9b762");// 0x0Ac1dF0185025F65202660F8167210A80dD5086‘
//公钥(未压缩) 0x0476698beebe8ee5c74d8cc50ab84ac301ee8f10af6f28d0ffd6adf4d6d3b9b762d46ca56d3dad2ce13213a6f42278dabbb53259f2d92681ea6a0b98197a719be3");// 0x0Ac1dF0185025F65202660F8167210A80dD5086‘
发布于 2021-07-14 22:09:47
一个压缩的和未压缩的公钥正在远离椭圆曲线的细节。让我解释给你听!
为了从私钥中查找公钥,Ethereum协议使用与比特币相同的椭圆曲线,即Secp256k1。你可以在我提供的图片上的实数空间上看到这条曲线。

使用的方程是y^2 = x^3 + 3,因此对于一个x,将有两个对应的y坐标,在图像上也可以看到(y1 < 0,y2 > 0)。
因此,将有两个对(x,y1)和(x,y2)作为公钥。选择正对,我们得到一个未压缩的公钥作为x和y2的级联。
这种格式以前被钱包使用过,但是随着区块链开始增长,就需要压缩公钥。这就是为什么它决定为一个公钥创建一个压缩格式,通过删除y坐标来减少内存中两倍的空间(因为它可以通过将x坐标传递给y^2 = x^3方程来计算)。所以现在只有x坐标作为公钥加上一个前缀来定义y应该是负的还是正的。如果您仔细查看您的压缩和未压缩公钥,您可以发现实际上,它们以前缀03 (用于负y压缩公钥)和04 (用于未压缩公钥)开始。但除此之外,压缩的是未压缩的开始。
现在,钱包主要尝试使用压缩公钥,但它们也节省了与使用未压缩公钥的旧钱包的向后兼容性。
您可以阅读更详细的这里。虽然这是一本与比特币相关的书,但它的这一部分也应该与Ethereum键相关!
https://ethereum.stackexchange.com/questions/103482
复制相似问题