请问下比特币一个私钥可以生成几个地址?我看到有 1 开头和 3 开头的
如果同时向一个私钥的 2 个地址各发送 1 个比特币,那 2 个地址是各自都能查到 2 个比特币,还是 2 个地址各自只能查到 1 个比特币
1
frienmo 2021-04-21 20:29:30 +08:00
其实你看到的地址 内涵了(公约+包公约定格式)
所以一个私钥可以生产多个地址(基于不同格式) 所以 2 地址各自查到一个比特币 |
2
acess 2021-04-22 01:34:52 +08:00
一个私钥可以控制很多很多种地址。
一般来讲,不同的地址就是不同的地址。 |
3
acess 2021-04-22 01:39:41 +08:00
按理说,A 地址有币就是 A 地址有币,不会用 B 地址去查,结果却查到了 A 地址上的币。
(不过很显然,不同地址上的币是可以一起花出去的,毕竟比特币从一开始就推荐地址用一次就换一个,尤其是后来有了 HD 钱包,换地址后不需要重新备份私钥,只要备份好一个助记词种子就一劳永逸) 但是因为历史遗留问题,在极少见的情况下(比如中本聪的币,用了 P2PK 裸公钥输出)在这方面会存在一些混淆。 |
4
acess 2021-04-22 02:42:11 +08:00
中本聪那个时代我没经历过,不过从当时的官网软件截图来看,1 开头的地址(公钥哈希)只是考虑收款方不在线的时候才要用到的。如果收款方在线,就直接用 IP 地址从对方下载一个公钥回来,然后支付给这个公钥(而不是公钥哈希)。这个“付款给 IP 地址”的功能后来被删掉了。
不仅如此,那个时候挖矿得到的币,也大多放到这种“裸公钥输出”( P2PK )上,而不是现在常用的公钥哈希输出( P2PKH )上。 就比如 9 号区块,没记错的话这个区块挖到的币公认是中本聪的,中本聪后来用这些币发起第一笔比特币转账给 Hal Finney 。 你去不同的区块浏览器查 9 号区块,显示出来的样子是就不一样的,虽然表示的内容实际上是一样的。 blockchair . com 会显示 12cbQLTFMXRnSzktFkuoG3eHoMeFtpTu3S 这个地址; 而 blockstream . info 和 btc . com 就不显示这个 1 开头的地址。 9 号区块的 coinbase 输出用的就是这种 P2PK 裸公钥输出,而不是现在通用的 P2PKH 公钥哈希输出。 如果继续查 12cbQLTFMXRnSzktFkuoG3eHoMeFtpTu3S 这个地址的交易记录,不同区块浏览器显示的结果也不一样。不出意外的话,就是因为有的区块浏览器把 P2PK 和 P2PKH 都统计在内;而有的区块浏览器就只统计 P2PKH,不包括 P2PK 。 很多开发者都觉得,1 开头的地址就是 P2PKH 地址,只应该用来表示 P2PKH 输出,把它借用过来表示其他的东西是不对的,造成了混淆。但是毕竟这个“混淆”多年以前就一直这么干,现在要“纠正”反而还有点难受。毕竟,如果你一开始只知道 1 开头的 P2PKH 地址,它编码表示的是公钥哈希,从公钥哈希是无法逆推计算得到公钥的,只能扫描区·块·链账本才能找到哈希值匹配的公钥。 |
6
acess 2021-04-22 05:08:21 +08:00
在 BTC 里面,一般而言(不去想 P2PK 这个历史包袱),不同的地址就是不同的地址。
考虑其他币种的话…… 莱特币还有 M 开头的地址,表示的意思和 3 开头的地址一样,就是因为 3 开头的地址和比特币混淆了(),所以才改成 M 开头。这两种只是地址格式不一样,表示的内容是完全一模一样的,就是换了个编码方式,所以甚至还可以互相转换。不过很显然,这个转变有阵痛,而且也许很长很长时间都不能覆盖到所有人。 BCH 的 CashAddr 也是类似的情况。 |
7
acess 2021-04-22 05:18:06 +08:00
莱特币的 M 开头地址表示的是 P2SH,和比特币这边 3 开头的地址一样。原先两个币种 P2SH 都是 3 开头的地址,所以偶尔会出现 BTC 打到 LTC 地址(或反之)之类的错误……嗯,(据我所知)按理说出现这个情况,其实币没丢,只要私钥倒腾一下,从 LTC 钱包倒腾到 BTC 钱包(或反之)即可;不过像交易所充错地址之类情况,可能交易所就以各种理由拒绝找回了。
BCH 因为去掉了隔离见证(当初从 BTC 分叉出去就是为了抵制隔离见证),貌似还新加了脚本操作码,所以情况会更复杂,打错币种可能出现币被锁死或者“任何人都可以花”的情况。 |