EOS钱包开发原理

2019-12-06  本文已影响0人  v587的毅哥

EOS

私钥转WIF

EOS使用与Bitcion WIF地址相同的版本、校验、编码方案,并与现有库兼容。

1.一个全是0的示例私钥,它是一个32字节的long(此处用16进制表示)
0000000000000000000000000000000000000000000000000000000000000000

2.添加一个版本字节0x80到最前面,这个字节其实代币Bitcoin mainnet。当编码后这个版本字节也标志着这是一个私钥,与比特币不同,EOS总是使用压缩后的公钥(从私钥衍生出来的)所以并不会在私钥后面添加0x01
800000000000000000000000000000000000000000000000000000000000000000

3.在上面已添加版本(就是指已添加0x80字节)key上执行二进制SHA-256
ce145d282834c009c24410812a60588c1085b63d65a7effc2e0a5e3a2e21b236

4.对上面的结果再次执行SHA-256
0565fba7ebf8143516e0222d7950c28589a34c3ee144c3876ceb01bfb0e9bb70

5.在上面的结果上再取前4个字节,这个是校验和
0565fba7

6.把上面这个校验和添加到第二步执行后结果里的后面
8000000000000000000000000000000000000000000000000000000000000000000565fba7

7.把上面这个结果用Base58编码
5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAbuatmU

WIF转私钥

把上面的顺序反过来就OK了

私钥转公钥

  1. 根据私钥bytes计算出公钥bytes(Java中通过bitcoinJ实现:val publicKeyBytes = ECKey.fromPrivate(privateKeyBytes))
  2. 将公钥bytes进行RIPEMD160算法加密
  3. 将上一步得到的结果取前4位为checksumBytes
  4. 将第一步原始公钥bytes与上一步的checksumBytes拼接
  5. Base58.encode()编码上一步的结果(注:不要使用Base58.encodeChecked()),再在前面添加字符串EOS,结果即为公钥

Todo

如何校验公钥是否有效?

如何通过公钥拿到账号?

交易离线签名怎么实现?

怎么与结合HD钱包?

上一篇 下一篇

猜你喜欢

热点阅读