Skip to content

Commit 9b57706

Browse files
authored
Merge pull request #1119 from yihanga/BTC
feat: add base58 to BTC tools
2 parents 50bc9eb + 1694b70 commit 9b57706

File tree

2 files changed

+95
-0
lines changed

2 files changed

+95
-0
lines changed

BTC/tools/README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# BTC工具目录
2+
3+
欢迎访问比特币工具目录!随着比特币和其他加密货币的流行,对于普通用户而言,理解其背后的技术变得越来越重要。本目录旨在提供一系列易于使用的工具,帮助您深入了解比特币的基本原理、操作和技术细节。
4+
5+
6+
## 可用工具
7+
8+
### dust计算
9+
10+
- **描述**:在比特币网络中,“尘埃”(Dust)是一个专有术语,它指的是一种非常小的比特币金额,这种金额小到它的交易费用可能会超过这笔金额本身的价值。因此,从经济角度来看,发送这样一笔交易是不划算的。
11+
- **影响**:尘埃限制的存在主要是为了防止网络被大量的微小交易所拥堵,这些交易可能是无效的或试图进行“尘埃攻击”(发送大量的小额交易到多个地址,以试图追踪这些地址的所有者)。因此,比特币网络通过设置尘埃限制来保护网络不被这种小额交易滥用。
12+
13+
### base58 编码/解码
14+
15+
- **描述**:Base58是一种二进制到文本的编码方式,主要用于编码比特币地址。
16+
- **使用方法**:Base58编码主要用于生成人类可读的公钥哈希(即比特币地址)和私钥的可导入格式。这样的格式不仅容易被人识别和处理,也方便在不同的应用和服务之间进行交易和管理。

BTC/tools/base58.md

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
Base58 是一种用于将大数字转换为可读的文本格式的编码方案,广泛用于比特币以及其他多种加密货币的地址。与常见的 Base64 编码类似,Base58 是一种二进制到文本的编码,设计它的主要目的是为了减少混淆并增加地址的可读性。
2+
3+
### 特点
4+
Base58 编码具有几个显著的特点,使其适合用于加密货币地址:
5+
6+
1. **去除视觉上易混淆的字符**:Base58编码不使用数字"0",大写字母"O",大写字母"I",和小写字母"l",因为这些字符在视觉上容易与其他字符混淆。
7+
2. **无标点符号**:Base58不包含标点符号,这减少了在抄写或读取地址时出错的可能性。
8+
3. **编码效率**:Base58 编码是紧凑的,它使得编码的数据相对较短,便于分享和书写。
9+
4. **大小写敏感**:Base58是大小写敏感的,增加了编码的字符集,从而提高了每个字符的信息容量。
10+
11+
### Base58 字符集
12+
Base58使用以下58个字符作为其字母表:
13+
```
14+
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
15+
```
16+
注意这里没有0, O, I, l,这是为了避免在读写时的混淆。
17+
18+
### 应用
19+
在比特币和许多其他加密货币中,Base58编码主要用于生成人类可读的公钥哈希(即比特币地址)和私钥的可导入格式。这样的格式不仅容易被人识别和处理,也方便在不同的应用和服务之间进行交易和管理。
20+
21+
### 技术实现
22+
Base58 编码涉及将大整数转换为一种基于58的数制系统。编码过程通常包括以下步骤:
23+
1. 将初始数据(例如,比特币地址的哈希值)转换为一个大整数。
24+
2. 将这个大整数重复除以58,同时记录每次除法的余数。
25+
3. 将余数用对应的Base58字符表示,直到整数部分为0。
26+
4. 将结果的字符反转,因为在计算过程中,第一个余数实际上对应最后一个Base58字符。
27+
28+
### 示例
29+
30+
##### 编码
31+
```js
32+
base10 = 123456789
33+
34+
123456789 % 58 = 19 <- remainder
35+
2128565 % 58 = 23 <- remainder
36+
36699 % 58 = 43 <- remainder
37+
632 % 58 = 52 <- remainder
38+
10 % 58 = 10 <- remainder
39+
40+
base58 = [10][52][43][23][19]
41+
base58 = BukQL
42+
```
43+
44+
#### 解码
45+
```js
46+
base58 = BukQL
47+
48+
L = 19 * 58^0 = 19
49+
Q = 23 * 58^1 = 1334
50+
k = 43 * 58^2 = 144652
51+
u = 52 * 58^3 = 10145824
52+
B = 10 * 58^4 = 113164960
53+
54+
base10 = 19 + 1334 + 144652 + 10145824 + 113164960
55+
base10 = 123456789
56+
```
57+
58+
### BTC中的应用
59+
Base58 最初仅用于对BTC地址进行编码,在后来引入 WIF 私钥和扩展密钥时也使用Base58编码。
60+
61+
#### 前缀
62+
在比特币中,在转换为 base58 之前,会向数据添加不同的前缀以影响结果的前导字符,这个前导字符有助于我们识别每个 base58 字符串代表什么。
63+
64+
| Hex Prefix | Base58首字符 | 类型 | 示例 |
65+
|------------|--------------|------------------|-----------------------------------------------------------|
66+
| 00 | 1 | 地址 (P2PKH) | 1mGqBH... |
67+
| 05 | 3 | 地址 (P2SH) | 3JiUY4... |
68+
| 80 | K, L, 或 5 | WIF私钥 | Lu38mr... |
69+
| 0488ADE4 | xprv | 扩展私钥 | xprv9t... |
70+
| 0488B21E | xpub | 扩展公钥 | xpub67... |
71+
72+
#### base58 check
73+
74+
Base58Check 编码是将某些数据编码为 base58 之前向某些数据添加校验和的缩写。
75+
76+
在BTC的base58编码时
77+
1. 首先会对原始数据增加对应的prefix
78+
2. 对上述结果执行两次SHA-256,取前四个字节做checkSum
79+
3. 连接1和2的结果进行base58编码

0 commit comments

Comments
 (0)