
EOS地址计算
Hello , 我是09
此篇内容为我2018~2020年在【库神】工作时,对部分重要知识做的学习总结
随着比特币冲破10万美金,行业又再次兴起,希望相关从业者可以学习到你需要的内容
地址计算原理
EOS私钥编码格式和Bitcoin的非压缩格式私钥编码完全一致,而EOS地址的编码就比较奇葩,它的算法是:
计算压缩格式的33位公钥;
取RipeMD160结果的前4位作为checksum;
把33位公钥和4位checksum连起来,用Base58编码,但不使用Base58的checksum;
加上前缀EOS即为最终地址。
地址计算代码
uint32_t EOS_GetAddress(uint8_t publicKey, uint32_t keyLength, char out, uint32_t outLength)
{
uint8_t temp[37];
int8_t check[20];
if ((publicKey NULL) || (out NULL))
{
return 0;
}
if (outLength < 40)
{
return 0;
}
if(keyLength == 65)//若公钥为非压缩公钥
{
// is even?
temp[0] = (publicKey[64] & 0x1) ? 0x03 : 0x02;
memmove(temp + 1, publicKey + 1, 32);
}
else if(keyLength == 33)
{
memmove(temp, publicKey, 33);
}
else
{
return 0;
}
ripemd160(temp, 33, check);
memmove(temp + 33, check, 4);
memset(out, 0, outLength);
out[0] = 'E';
out[1] = 'O';
out[2] = 'S';
size_t addressLen = outLength - 3;
b58enc(out + 3, &addressLen, temp, sizeof(temp));
if (addressLen + 3 >= outLength)
{
return 0;
}
return addressLen + 3;
}
举例
私钥:
6a49b749ee5588e7d8f59e42848072ba0de3484370f23afe12aea1ca16f89761
公钥:
037E1D3A7E57108FC7A35CCD8AD80F97A4B981E7421D8948F7328174CF1C11EAAC
==》
Raw Private: 6a49b749ee5588e7d8f59e42848072ba0de3484370f23afe12aea1ca16f89761
ETH Address: 0xb289c33560b6ef88ce481406f61b04a93f6ffaa0
BTC Private: KznKZLHWwxBt3YeCDWfcrwzHf8Gc1JeQ4omnpy1sHXNUAsBzpT7q
EOS Private: 5Jd6Zhcv1DWCZkRHb6pGNjpRAYZ5m2HBDC3u555jCuCD3nmnUgZ
EOS Address: EOS7nmwuAaB8WvYXJuH3YkXHGh7ABk4njitZRkjKCgaFCLcXEpAfA
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果