主页 > 如何下载imtoken钱包 > 使用PHP开发以太坊代币和合约——创建钱包
使用PHP开发以太坊代币和合约——创建钱包
加密货币之所以叫加密货币,是因为钱包是用各种加密方式加密的。 公钥对应你的钱包地址,私钥可以用来操作钱包。
因此,创建钱包不需要任何第三方授权,其唯一性也由加密算法本身保护。
类库实现了两种创建钱包的方式:
用私钥创建钱包 创建助记词钱包
我绝对不知道创建公钥和私钥的算法。 从一些github相关的库中,找到了相关的PHP实现。 由于各种原因,我最终选择将它们集成到这个项目中,而不是使用 composer 包引用。 具体实现在PEMHelper中,原谅我不知道如何描述这个类。
主要提供两个外部方法:
generateNewPrivateKey:生成私钥 privateKeyToAddress:使用私钥计算钱包地址
依赖几个椭圆曲线加密库:
"sop/asn1": "^3.3",
"sop/crypto-encoding": "^0.2.0",
"sop/crypto-types": "^0.2.1",
"kornrunner/keccak": "^1.0",
"simplito/elliptic-php": "^1.0",
创建钱包类库主要在Wallet类中实现以太坊钱包怎么注册,包括以下方法:
newAccountByPrivateKey:生成秘钥创建账户 newAccountByMnemonic:生成助记词创建账户 revertAccountByMnemonic:使用助记词恢复账户
这里主要讲助记词。
助记词
以太坊助记词遵循比特币规范。 其实这套东西是比特币生态的产物。
这里主要有两个规范:BIP39和BIP44
BIP39需要2048个字或者单次,根据一定的算法得到一个BIP39种子值(BIP39 Seed),可以使用以下网址验证:
这里的字词其实是有限的。 这并不意味着您可以自定义任何您想要的。 你的自定义最终只能由你的系统使用和恢复,其他钱包无法使用。
通常需要生成 12 个单词或短语。 如果不填写密码和路径,生成的助记词可以在MetaMask和IMToken中使用。 当然IMToken是支持Path的。
生成BIP39 Seed后,需要使用BIP44规范生成指定的私钥。 之所以指定,是因为可以根据一组助记词生成多组私钥,自然会有多组地址。
这里也是一样以太坊钱包怎么注册,因为使用了比特币规范,在进行sha512计算的时候,需要使用比特币种子作为密钥,然后截取一半,但是生成的私钥并不是最终的私钥,私钥需要根据路径获取。
以太坊的路径是m/44'/60'/0'/0,因为各大钱包都默认取第一个地址,所以最终路径是m/44'/60'/0'/0/0(再次,IMToken 支持路径)。
在这里,我使用了两个社区库:
"furqansiddiqui/bip39-mnemonic-php": "^0.1.2",
"minter/minter-php-bip-44": "^1.0",
其中minter/minter-php-bip-44就比较可怜了。 在github上没有找到BIP44的其他PHP实现,但是引用这个类库后报错。 具体来说,笔者在调用deriveChild时,使用了PHP7的参数类型。 必须要int类型,使用一些助记符计算后的结果是float,超出了int的上限。 我已经针对这个问题向作者提交了 PR。 我不知道他是否会合并它。 当我最终发布它时,如果还没有合并,我会搬过来一份。
最后,由于个人能力有限,希望大家指出文章或代码中可能存在的问题,共同改进。 欢迎留言交流讨论。 个人QQ:275096967