首先了解以太坊地址的生成方式:
第一步:创建一个随机私钥。
第二步:根据私钥,利用ECDSA算出公钥,公钥以0x04开头。
第三步: 把公钥去掉0x04,剩下的进行keccak-256的哈希,得到长度64的16进制字串,丢掉前面24个,拿后40个,再加上”0x”,即为以太坊地址。
想要更改以太坊的地址格式,思路有很多,例如:使用ECDSA之外的曲线、使用其他的hash方式、截取不同长度的字符串、地址使用别的编码方式显示等等。思路确定了之后,就需要修改源码了,从以下几个地方入手:
1,生成个人账户地址
不论是使用命令行geth account new
命令,还是在控制台使用personal.newAccount()命令,最终代码都会进入到/accounts/keystore/key.go
的storeNewKey
方法,在这里可以进行上述思路的修改。
2,解析地址
每个api入口的地方几乎都会用到地址,这里可以定义一个公共方法对地址进行解码,每个api都调用该方法。
3,合约生成地址
从sendTransaction接口追踪到交易的接收地址为空,进入合约创建代码,找到生成合约地址的地方CreateAddress
方法。
4,已有的钱包、浏览器等程序地址的升级
如果之前已经有了钱包,浏览器等工具,需要翻新一遍。
5,remix
基于solidity的智能合约是以太坊的核心功能,所以必须考虑到它,如果改变了原有地址的生成方式,那么以太坊官方提供的remix编译器就不能够再使用,需要自己重新编译一个solidity编译器,remix的代码是开源的,在以太坊的github项目中可以找到,修改地址生成方式以适应合约中Address变量类型。
转载请注明来源