php实现助记词转TRX,ETH 私钥和钱包地址

TRX助记词转地址网上都是Java,js或其他语言开发的示例,一个简单的功能需要依赖其他环境来实现表示不能忍,毕竟php是世界上最好的语言。【狗头】

一、知识准备

要实现助记词转TRX私钥和地址,先需要知道助记词和私钥钱包地址之间的关系。

建议先阅读这篇文章:理解开发HD 钱包涉及的 BIP32、BIP44、BIP39(转)

大概意思是,在数字货币里,所有的交易都是由私钥签名来确认身份的,但是私钥没有规律,不利于记忆,于是就引入了一些便于记忆的词组(助记词),助记词由私钥根据一些规范转换而来,这些规范实现了助记词和私钥之间相互转换。

php实现助记词转TRX,ETH 私钥和钱包地址
创建钱包说明

二、TRX助记词转私钥和地址思路(其他链也是一个思路)

首先有网友写了php 创建BTC、LTC、ETH助记词、私钥和地址 使用示例(转)的方法,我们可以根据这个思路,将助记词转成TRX私钥。

php实现助记词转TRX,ETH 私钥和钱包地址
创建助记词并生成BTC私钥
php实现助记词转TRX,ETH 私钥和钱包地址
创建助记词并生成ETH私钥、地址
php实现助记词转TRX,ETH 私钥和钱包地址
创建助记词并生成LTC私钥、地址

通过上面三个案例,我们发现助记词在转不同的链时私钥时,只是需要调用不同的BIP44选项即可。所以理论上,我们所有符合BIP44规范的链,都可以按本方法将助记词转成私钥。

BIP44规范不同链对应编码:Registered coin types for BIP-0044

转钱包地址则是利用不同链自己的生成规则,将私钥转成公钥,公钥再生成地址。所以要实现转地址,只需要去找到不同链的开发包即可。

私钥和公钥及地址的关系

三、实现方法

trx我这边用的这个包

composer require fenguoz/tron-php
php实现助记词转TRX,ETH 私钥和钱包地址
    //const URI = 'https://api.shasta.trongrid.io'; // shasta testnet
    const URI = 'https://api.trongrid.io'; // mainnet
    const TRON_PRO_API_KEY = 'xxxxxxxxxx'; // mainnet
    const CONTRACT = [
        'contract_address' => 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t', // USDT TRC20
        'decimals' => 6,
    ];

    private $trx;
    private $trx20;

    /**
     * @throws TronErrorException
     */
    private function getTRX(): TRX
    {
        if ($this->trx==null){
            $api = new Api(new Client(['base_uri' => self::URI,'headers'=>['TRON-PRO-API-KEY'=>self::TRON_PRO_API_KEY]]));
            $this->trx = new Trx($api);
        }
        return $this->trx;
    }

    /**
     * 私钥转地址
     * @throws TronErrorException
     */
    public function privateKeyToAddress($privateKey): TronAddress
    {
        return $this->getTRX()->privateKeyToAddress($privateKey);
    }

    /**
     * @throws TronErrorException
     * @throws Exception
     * trc 助记词转地址
     */
    public function trxMnemonicToAddress($mnemonic): TronAddress
    {
        $seedGenerator = new Bip39SeedGenerator();
        // 通过助记词生成种子,传入可选加密串'hello'
        $seed = $seedGenerator->getSeed($mnemonic);
        $hdFactory = new HierarchicalKeyFactory();
        $master = $hdFactory->fromEntropy($seed);
        $hardened = $master->derivePath("44'/195'/0'/0/0");
        $pri = $hardened->getPrivateKey()->getHex();
        return $this->privateKeyToAddress($pri);
    }

开发调试时,可以用这个网站测试对比生成结果:Mnemonic Code Converter

4、温馨提示

助记词和私钥都是非常重要的敏感数据,一旦泄露可能造成非常严重测财产损失,请谨慎操作使用。

5、参考资料

  1. Bit-Wasp/bitcoin-php 的简单使用:创建钱包 + 进行交易
  2. php 创建BTC、LTC、ETH助记词、私钥和地址 使用示例
  3. Mnemonic Code Converter
  4. 理解开发HD 钱包涉及的 BIP32、BIP44、BIP39

排名不分先后,仅以浏览器关闭顺序为依据。【笑哭】

原创文章,作者:Zeyu,如若转载,请注明出处:https://jinzhijun.cn/develop/1208

赞 (17)
ZeyuZeyu
上一篇 2022年8月4日
下一篇 2022年9月5日

相关推荐

  • 记录一下宝塔搭建Redis遇到的一个小问题

    最近在对接广东省互联网医院监管平台时,发现广东这边是要求平台必须要有医生和患者要有视频通话功能。因为原本的消息通话是用的网易IM,所以音视频也选的网易。网易音视频能实现通话视频云录…

    2021年6月29日
    1.8K
  • 香港阿里云Windows服务器省钱方法

    最近把因为香港阿里云服务器要续费了,因为之前购买的时候服务器上还部署了其他的java系统,当时对Linux操作不熟,所以操作系统选的是Windows的系统,但是阿里云香港的服务器需…

    2020年11月11日
    1.9K
  • 理解开发HD 钱包涉及的 BIP32、BIP44、BIP39(转)

    理解开发HD 钱包涉及的 BIP32、BIP44、BIP39 数字钱包概念 钱包用来存钱的,在区块链中,我们的数字资产都会对应到一个账户地址上, 只有拥有账户的钥匙(私钥)才可以对…

    2022年8月4日
    5.2K
  • Centos安装elasticsearch教程

    最近在部署一个项目是用 laravel开发,项目用到了了 elasticsearch,通过自己的搜索和学习能力不算很费力解决了。下面就整理一下安装elasticsearch教程,服…

    2020年11月26日
    1.9K
  • PHP设计模式之命令模式

    命令模式,也称为动作或者事务模式,很多教材会用饭馆来举例。作为顾客的我们是命令的下达者,服务员是这个命令的接收者,菜单是这个实际的命令,而厨师是这个命令的执行者。那么,这个模式解决…

    2022年1月7日
    1.5K
  • 以太坊节点面面观:全节点与轻节点(转)

    收看本系列文章的读者,应该都对于区块链的基本原理和架构有些概念,如果没有,推荐您先去Google搜寻区块链、比特币、以太坊这些关键字了解一下。我们将在这些基础概念之上,来谈区块链的…

    2020年11月30日
    7.1K
  • codeigniter发邮件sendmail报错

    最近将公司系统从Windows换成了Linux,大部分功能都能正常使用,唯独发送邮件通知功能时,出现了错误。通过var_dump($CI->email->print_d…

    2020年11月12日
    1.9K
  • 打破壁垒:使用 PHP 和 Nginx 在本地开发 OpenAI API

    最近在开发一个OpenAI的产品,但是由于众所周知的原因, OpenAI API 有 IP 限制,使得在本地开发变得困难。开始我的想法是,把代码放服务器上去跑,可是这样一来,要修改…

    2023年4月10日
    5.1K
  • 记一次生产环境救火-20210716

    今天起了个早,早早来到公司,本来吃完早餐,泡好咖啡,在工位上气定神闲的刷刷昨天的财经信息,准备开启今天的工作。想起昨天微信群里有人反映系统,系统加载较慢,于是打开阿里云后台,准备看…

    2021年7月16日
    1.5K
  • fiddler修改请求信息重新执行

    最近在做一个仿制功能开发时,碰到了这样一个场景:开发的系统需要在三方app里运行,并且在app里执行完后会产生一些数据,然后需要将这些数据保存起来。因为开发是在本地,本地的环境无法…

    2022年7月1日
    3.6K

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注