主页 > imtoken安卓最新版 > 使用PHP开发以太坊代币和合约——创建钱包

使用PHP开发以太坊代币和合约——创建钱包

imtoken安卓最新版 2023-09-01 05:09:33

加密货币之所以叫加密货币,是因为钱包是用各种加密方式加密的。 公钥对应你的钱包地址,私钥可以用来操作钱包。

因此,创建钱包不需要任何第三方授权,其唯一性也由加密算法本身保护。

类库实现了两种创建钱包的方式:

用私钥创建钱包 创建助记词钱包

我绝对不知道创建公钥和私钥的算法。 从一些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