Tron波场区块链 | 使用Java将Tron钱包助记词转私钥 全网独门一份

如何使用Java将Tron钱包助记词转换为私钥?

本来想着这个问题挺简单,可是查了半天,不是,不止半天查了好长时间,看了半天官网文档,全网Java就没有实现的。

咋办。。。咋办呢?

好巧,官网我看到了一个Tronweb的东东。

呦呵。。。再细细的看下,找到一个接口。

fromMnemonic

但是咱们这个Tronweb是前端项目啊,先不管了,我们来先看是否能实现,然后看看Js的实现是否能转换为Java语言。

创建完Vue项目,我们来导入TronWeb

npm install tronweb

写一个简单的vue来实现,我在想:Tron可以离线创建私钥、地址以及助记词。它的生成也是加密解密的关系,那么这里我们使用tronweb其实并不需要实例化,只要引入它的组件包,包含加解密应该就行了,那么代码其实很简单。

// 导入
import Tronweb from "tronweb";
// 直接调用接口查看
Tronweb.fromMnemonic(this.zjc)

写web我们就必须要可视化,那么我们写一个简单的页面。

输入助记词,点击解析后,我们看等到了私钥、公钥还有地址信息。

那么让我们来分析一下他的实现:

import {ethersHDNodeWallet, Mnemonic} from './ethersUtils'
const account =  ethersHDNodeWallet.fromMnemonic(Mnemonic.fromPhrase(mnemonic, null, wordlist), path);const result = {mnemonic: account.mnemonic,privateKey: account.privateKey,publicKey: account.signingKey.publicKey,address: pkToAddress(account.privateKey.replace(/^0x/, ''))}

看到实际的实现是ethersHDNodeWallet、Mnemonic俩个类。然后我们再看下ethersUtils那的实现。

import {Mnemonic,HDNodeWallet as ethersHDNodeWallet
} from 'ethers';

​​​​​​​看到ethers,这里我们就可以知道了。

哦,原来Tron波场链其实也是以太坊的分支链,那么按照理论上来说Tron的加解密方式其实也是ETH的加密方式。

看到了这里,我们这里转到Java。

先理解下ETH创建离线地址的过程:

1.生成一个随机的助记词

2.使用助记词生成一串种子

3.进行路径(BIP30)加密后产出地址等信息。

那么现在我们已经有了助记词,是不是直接用当前的助记词来生成种子,就可以产出私钥、地址等了呢?

publicstatic void main(String[] args) {String mnemonic = "program repair next claw rival slight spider tennis begin cute daring fancy";//使用助记词生成钱包种子List<String> mnemonics = Splitter.on(" ").splitToList(mnemonic);System.out.println(mnemonics.get(0));byte[] seed = MnemonicCode.toSeed(mnemonics, "");DeterministicKey masterPrivateKey = HDKeyDerivation.createMasterPrivateKey(seed);DeterministicHierarchy deterministicHierarchy = new DeterministicHierarchy(masterPrivateKey);DeterministicKey deterministicKey = deterministicHierarchy.deriveChild(BIP44_ETH_ACCOUNT_ZERO_PATH, false, true, new ChildNumber(0));byte[] bytes = deterministicKey.getPrivKeyBytes();ECKeyPair keyPair = ECKeyPair.create(bytes);System.out.println("0x" + keyPair.getPrivateKey().toString(16));
}

​​​​​​​运行程序后,结果是错的。

那么到底是哪里错了呢?

再看看代码前面的TronWeb接口:

图片

哦哦哦。。。原来的path是BIP44(m/44'/195'/0'/0/0),那么我们把这个Path参数修改下,看是否可行?

之前试了好几次,都没有达到最终正确的生成。

快要绝望的时候,我直接按了一下IDEA的快捷键俩下SHIFT+SHIFT,有了新的机会!

图片

这不是我要找的工具类吗?打开类看了它的内部实现,其实还不能完全适用,但是逻辑咱们清楚了,我们就来实现吧

public static final int HARDENED_BIT = 0x80000000;public static void main(String[] args) throws MnemonicException.MnemonicLengthException {String mnemonic = "program repair next claw rival slight spider tennis begin cute daring fancy";byte[] seed = MnemonicUtils.generateSeed(mnemonic, "");Bip32ECKeyPair masterKeypair = Bip32ECKeyPair.generateKeyPair(seed);// m/44'/195'/0'/0/0final int[] path = {44 | HARDENED_BIT, 195 | HARDENED_BIT, 0 | HARDENED_BIT, 0, 0};Bip32ECKeyPair bip44Keypair = Bip32ECKeyPair.deriveKeyPair(masterKeypair, path);Credentials credentials = Credentials.create(bip44Keypair);String privateKey = credentials.getEcKeyPair().getPrivateKey().toString(16);System.out.println(privateKey);KeyPair keyPair = new KeyPair(privateKey);String base58CheckAddress = keyPair.toBase58CheckAddress();String publicKey = keyPair.toPublicKey();System.out.println(publicKey);System.out.println(base58CheckAddress);
}

​​​​​​​运行结果正确,完美。

解决这个问题其实花了好长时间,查百度、Google还有官网接口文档,部署开发Web前端的解决方案,试图找到门路。

写到这里,可以能帮到其他开发人员。

假如还是没有办法实现,关注我,联系我,帮您解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/781748.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.Net Web窗口页属性

<%Page %> Page 指令定义 Web 窗体使用的属性&#xff0c;这些属性将被 Web 窗体页分析器和编译器使用。只能包含在 .aspx 文件中。我们每新建一个 Web 页面时&#xff0c;系统会自动为该 Web 页面头部创建一个 Page 指令&#xff0c;来指明页面最基本的属性。 Langu…

ARM-按键中断实验

代码 #include "stm32mp1xx_gic.h" #include "stm32mp1xx_exti.h" extern void printf(const char *fmt, ...); unsigned int i 0; void do_irq(void) {//获取要处理的中断的中断号unsigned int irqnoGICC->IAR&0x3ff;switch (irqno){case 99:pr…

C++奇迹之旅(三):缺省参数与函数重载

文章目录 &#x1f4dd;缺省参数分类&#x1f320; 缺省参数概念&#x1f309;缺省参数分类 &#x1f320;全缺省参数&#x1f309;半缺省参数 &#x1f320; 函数重载&#x1f309; 函数重载概念&#x1f320;参数类型不同&#x1f320;参数个数不同&#x1f320;参数类型顺序…

SpringWebFlux初步认识

反应式编程的认识 基础认识 命令式编程&#xff1a;后一行代码需要等待前一行代码执行完毕&#xff0c;也就是后面的执行任务步骤依赖于前面的执行任务。 反应式编程&#xff1a; 定义了一组如何处理数据的任务&#xff0c;这些任务是可以并行进行的&#xff0c;可以在处理数…

CQI-17:2021 V2 英文 、中文版。特殊过程:电子组装制造-锡焊系统评审标准

锡焊作为一个特殊的工艺过程&#xff0c;由于其材料特性的差异性、工艺参数的复杂性和过程控制的不确定性&#xff0c;长期以来一直视为汽车零部件制造业的薄弱环节&#xff0c;并将很大程度上直接导致整车产品质量的下降和召回风险的上升。 美国汽车工业行动集团AIAG的特别工…

C++蓝桥考级一级到十八级的考点内容整理

以下是C蓝桥考级一级到十八级的考点内容整理&#xff1a; C一级考点内容 C程序基本结构 初步了解C编程了解C程序基本结构&#xff1a;头文件、命名空间、主函数、基本输入输出 cin、cout C二级考点内容 数据类型与变量 掌握编程中数学表达式的计算方式基础数据类型、变量的…

2024年2月游戏手柄线上电商(京东天猫淘宝)综合热销排行榜

鲸参谋监测的线上电商&#xff08;京东天猫淘宝&#xff09;游戏手柄品牌销售数据已出炉&#xff01;2月游戏手柄销售数据呈现出强劲的增长势头。 根据鲸参谋数据显示&#xff0c;今年2月游戏手柄月销售量累计约43万件&#xff0c;同比去年上涨了78%&#xff1b;销售额累计达1…

武汉星起航:跨境电商获各大企业鼎力支持,共筑繁荣生态

随着全球化和数字化的深入发展&#xff0c;跨境电商行业逐渐成为连接国内外市场的重要桥梁。在这一进程中&#xff0c;各大企业纷纷加大对跨境电商行业的支持力度&#xff0c;通过投资、合作与创新&#xff0c;共同推动行业的繁荣与发展。武汉星起航将探讨各大企业对跨境电商行…

Linux安装python3

Linux安装python3 本文章中使用的安装包等相关文件&#xff1a; 链接: https://pan.baidu.com/s/1C4PTB6IqXtHM6XSOEMkefg 提取码: wyeq 1.编译环境安装 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc mak…

Linux 基于chrony进行时钟同步方案验证

Linux 基于chrony进行时钟同步方案验证 1. 背景介绍2. 验证过程2.1 追踪配置2.2 追平记录2.2 追平时间换算 3. 疑问和思考3.1 如何统计追踪1s需要花费多长时间&#xff1f; 4. 参考文档 chrony是一个Linux系统中用于时钟同步的工具。它使用NTP&#xff08;网络时间协议&#xf…

在 Linux 中通过 SSH 执行远程命令时,无法自动加载环境变量(已解决)

问题场景 目前我的环境变量都存储在 /etc/profile 文件中&#xff0c;当我通过远程 SSH 执行一些命令时&#xff0c;提示命令找不到&#xff0c;如下所示&#xff1a; 问题出现原因 这里找到了一张出自尚硅谷的图片&#xff0c;很好的解释了该问题&#xff1a; 这是由于 Linu…

【BlossomRPC】一个完整的含源码和文档的RPC项目

文章目录 手把手教你写一个RPC协议如何自定义一个RPC协议&#xff1f;编解码器的实现服务暴露与发现服务端与客户端服务解析注解的实现服务端与客户端请求Handler接入注册中心 RPC项目源码 配置中心项目源码 ⭐网关项目源码⭐ 手把手教你写一个RPC协议 如何自定义一个RPC协议…

Java解决数位递增的数

Java解决数位递增的数 01 题目 一个正整数如果任何一个数位不大于右边相邻的数位&#xff0c;则称为 个数位递增的数。 例如 1135 是一个数位递增的数&#xff0c;而 1024 不是一个数位递增的数。 给定正整数n&#xff0c;请问在整数 1 至 n 中有多少个数位递增的数? 输入描…

Java数据结构-链表OJ题

目录 1. 移除链表元素2. 反转链表3. 返回中间结点4. 返回倒数第k个结点5. 合并两个有序链表6. 分割链表7. 回文链表8. 找相交链表的公共结点9. 判断链表是否有环10. 返回链表环的入口 老铁们好&#xff0c;学习完链表这个数据结构之后&#xff0c;怎么能少了OJ题呢&#xff1f;…

HTLM 之 vscode 插件推荐

文章目录 vscode 插件live Serverprettiersetting 保存这个文档的更改Material Theme / Material Theme icon vscode 插件 live Server prettier setting 搜索 format default 保存这个文档的更改 cmds // mac ctrls // win Material Theme / Material Theme icon 来更换…

Mysql中的那些锁

表锁和行锁 表锁&#xff1a;一锁锁整张表&#xff0c;mysql中锁定颗粒度最大的一种&#xff0c;针对非索引字段加的锁。MyISAM和InnoDb都支持。 行锁&#xff1a;一锁只锁整行&#xff0c;锁定颗粒度最小&#xff0c;针对索引字段加的锁。MyISAM不支持&#xff0c;InnoDb支持…

【No.21】蓝桥杯组合数学|数位排序|加法计数原理|乘法计数原理|排列数|组合数|抽屉原理|小蓝吃糖果|二项式定理|杨辉三角|归并排序(C++)

组合数学 数位排序 【问题描述】 小蓝对一个数的数位之和很感兴趣,今天他要按照数位之和给数排序。当两个数各个数位之和不同时,将数位和较小的排在前面,当数位之和相等时,将数值小的排在前面。 例如,2022 排在 409 前面, 因为 2022 的数位之和是 6,小于 409 的数位 之和 13。…

数据结构:Trie(前缀树/字典树)

文章目录 一、介绍Trie1.1、Trie的结点结构1.2、Trie的整体结构 二、Trie的操作2.1、Trie插入操作2.2、Trie查找操作2.3、Trie前缀匹配操作2.4、Trie删除操作 三、实战3.1、实现Trie&#xff08;前缀树&#xff09; 一、介绍Trie Trie 又称字典树、前缀树和单词查找树&#xff…

C++11 shared_from_this学习

最近学习网络变成发现一些C源码库中封装对象时会公有继承enable_shared_from_this&#xff1b; 用一个案例进行说明&#xff0c;案例代码如下&#xff1a; #include <iostream> #include <memory> #include <stdio.h>using namespace std;class C : public…

RPC(Remote Procedure Call)远程过程调用

定义 RPC&#xff08;Remote Procedure Call&#xff09;即远程过程调用&#xff0c;是一种计算机通信协议&#xff0c;它允许程序在不同的计算机之间进行通信和交互&#xff0c;就像本地调用一样。 为什么需要 RPC&#xff1f; 回到 RPC 的概念&#xff0c;RPC 允许一个程序…