#Taproot #BTC #Atomicals
现在可以写长文了,这里重写一下这篇文章的实现
bitcoin core 创建的taproot地址无法导出私钥的解决办法:
1、先用bitcoin core钱包导出主私钥xprv
bitcoin core 钱包是基于一个主私钥然后加上HD_path 路径生成的无数个私钥,那么如何导出主私钥
打开控制台,输入 :listdescriptors true ,主私钥就是我下面截图红框中的内容,这个就是主私钥
2、xprv 提取出单独某个地址的私钥
原理:
xprv HD_path 如何生成 taproot 地址的,是由HD_path 指定
BIP44、BIP84 和 BIP86 等提案定义了如何从一个主密钥派生出各种类型的地址。
BIP44 路径 (m/44'/0'/0'/0/0) 通常用于生成传统的 P2PKH 地址,即以"1"开头的地址。
BIP49 路径 (m/49'/0'/0'/0/0) 用于生成 P2SH-P2WPKH 地址,这是一种结合了 P2SH 和 SegWit 特性的地址,也可能以"3"开头。
BIP84 路径 (m/84'/0'/0'/0/0) 用于生成 P2WPKH 地址,这是一种纯 SegWit 地址,它们通常以"bc1"开头,不同于以"1"或"3"开头的地址。
BIP86 路径 (m/86'/0'/0'/0/0):
86' 代表 BIP86 标准。
0' 第一次出现表示比特币。
第二个 0' 表示第一个账户。
第一个 0 表示外部链(用于接收资金的地址)。
第二个 0 表示特定地址的索引。
Taproot 是比特币的一个重大升级,它增强了隐私性、扩展性和安全性。与传统的 P2PKH (1 开头) 和 P2SH (3 开头) 地址不同,Taproot 地址通常以 bc1p 开头。这些地址使用了 Schnorr 签名和 MAST(Merkelized Abstract Syntax Trees),使得复杂的智能合约在区块链上的表现更加高效和隐私。
BIP86 的引入主要是为了充分利用 Taproot 的这些优势,提供一种简洁的方式来生成和管理这类地址。通过这种路径,用户可以从同一个种子生成一系列的 Taproot 地址,同时保持良好的组织和安全性。
我们这里要用的就是BIP86
下面上主要代码,通过不同的path 来打印对应的私钥和地址,找到自己对应的地址的私钥就能完成了。
借助以下node.js 代码实现:
import {
LocalWallet,
NetworkType,
toPsbtNetwork,
} from "@unisat/ord-utils/lib/LocalWallet.js";
import { BIP32Factory } from "bip32";
import * as ecc from "tiny-secp256k1";
import * as bitcoin from "bitcoinjs-lib";
const bip32 = BIP32Factory(ecc);
const AddressType = {
P2PKH: 0,
P2WPKH: 1,
P2TR: 2,
P2SH_P2WPKH: 3,
M44_P2WPKH: 4,
M44_P2TR: 5,
};
function importWalletWithXprv(xprv,path ) {
const root = bip32.fromBase58(xprv);
const childNode = root.derivePath(path);
const privateKey = childNode.toWIF();
console.log(privateKey);
const addressType = AddressType.P2TR;
const networkType = NetworkType.MAINNET;
const wallet = new LocalWallet(privateKey, networkType, addressType);
console.log(wallet.address);
return [privateKey ,wallet.address]
}
// Example usage:
const path = `m/86'/0'/0'/0/0`; // The derivation path might change according to your xprv and what you want to derive
const xprv = "";
importWalletWithXprv(xprv,path ); // Replace 'your-xprv-here' with your actual xprv
这里的0可以自己用代码替换,然后无限生成地址
3、然后私钥导入atom wallet
4、发现bitcion core 创建的地址 和atom wallet钱包显示的一摸一样