(本文以比特币为例,同时适用于绝大多数山寨币): W/ v0 T1 V/ z: q
(不适用于极少数改动巨大的山寨币,但是这样的币就不应该再叫山寨币了)9 s4 A5 |6 L+ w4 b2 |. P7 k
将比特币发到山寨币的地址上,会发生什么?
3 [0 j7 u! k1 P! r2 f1 P1 g2 }通常情况,因为一般的山寨币地址开头和比特币的不一样,地址是非法的,交易根本就不会成功。
6 U# e, f. b2 A3 _% Q(但是,只要稍微处理一下,依旧可以使交易成功,并且对方可以花费这些比特币,好奇宝宝请看最后的部分)
3 x( a) j* w- V: H+ h3 [& U) n如果山寨币地址的开头和比特币地址是一样的呢?0 G/ y6 K7 n: ~7 G. {
情况1,有一些山寨币,地址也是1开头的,例如开发币DVC。
( ]( E2 t4 A" b4 l6 G那么地址是合法的,交易成功,比特币发出去了。发到哪里了?
0 S, A1 h* Q: g7 C) I2 U5 O# n如果你看过《比特币和山寨币地址规律》比特币和山寨币地址规律
6 ?3 V. {5 g6 V2 m你就会明白,1开头的地址,NetworkID必然是0x00。
. Z T9 F* A C) w$ i9 C+ M, N' F=>BTC地址和DVC地址、私钥、公钥是完全相同的。
7 n2 Q2 t g1 h9 I5 e9 ]=>同一个私钥,可以导入BTC客户端,可以导入DVC客户端,生成的地址也完全相同。4 h5 W6 {) p7 Y) |% R1 a" {
=>如果你把比特币发到山寨币地址,并且交易成功了,那么拥有这个山寨币地址对应私钥的人,就可以使用这些比特币了。' E. H9 b* P# j2 a# a* ]1 M0 I
(两种密码币的NetworkID一样的情况,还有狗狗币DOGE与数码币DGC)
! y4 q8 d2 d2 a* O情况2,虽然没听说过,但是山寨币可以设置其NetworkID为0x05.地址3开头。/ ?1 p; S1 U+ P4 j! V) ]
这种地址被比特币客户端识别为“合成地址”,也是合法地址,交易成功,比特币发出去了。发到哪里了?7 ]5 P: J1 \: f
想为合成地址签名(即多重签名)的时候,需要额外的参数"redeemScript",生成山寨币地址时当然不会生成多重签名用的redeemScript,所以……无法签名,这些币大概就相当于丢失了。(我对多重签名了解不深,如果错了请指教)* H8 W) I9 L% A
最后说说更有趣的事情:( O6 A( L* D4 r/ _$ y0 F" D9 i9 ]3 z
如果我只知道一个人的比特币地址,并且确信他掌握着这个地址的私钥,我能不能给他发一些山寨币?3 ^% W# {' P2 S% J" U
可以。
3 S2 u; H" c3 `2 n8 ?' Z1 d简单地说,我们可以看破比特币地址的“本质”,然后将它打包成需要的山寨币地址,然后,往这个山寨币地址发山寨币就可以了。
7 U0 ?4 U. ^7 j$ s8 Z U接收方用同样的方法,看破比特币私钥的“本质”,将它打包成山寨币私钥,就饿可以花费这些山寨币了。& s4 Y( X& R2 O% z/ L6 P$ \
————原理————) W. }5 n4 ^* @2 w$ i6 j
我们通常看见地址和私钥,都是经过一次Base58Check处理的,这种写法会产生一部分冗余信息,冗余信息包括四个校验字节,为了防止错误输入;还有一个头字节,使地址、私钥更加容易被人类识别。
: |5 ~; X2 g& M! F去掉这些冗余信息后,比特币和山寨币的地址/私钥其实是一样的。
: p3 F9 t, {# O, O! U1 d7 J因为山寨币没有改变比特币私钥->公钥->地址的算法,所以相同的私钥,一定会生成相同的地址。
% O) H1 C% U# ?1 C! h————细节————
8 k, z# A0 I, X* j) l例:发送方知道接收方的比特币地址A1,知道接收方掌握着这个地址的私钥R1。
9 M0 X8 f# @. b; S7 n! {合法的私钥和地址都是经过Base58Check处理得到的字符串,它的逆运算是:转化为16进制,去掉前两位和后八位。0 C' \, P' i, j) P2 W, m
地址A1:1EHNa6Q4Jz2uvNExL497mE43ikXhwF6kZm) I5 `' r- }4 q/ c1 o4 V, @
十六进制:0091b24bf9f5288532960ac687abb035127b1d28a50074ffe00 w" l( I$ g( P% ]
去掉前2后8:91b24bf9f5288532960ac687abb035127b1d28a5& G. M' ~6 V+ p8 W
这就是公钥进行哈希运算的结果,HASH160。+ P2 n: j* f& [
再套上莱特币的参数48,执行Base58Check,得
7 {$ J( I9 P& g$ R2 N/ P: O) u/ }LYWKqJhtPeGyBAw7WC8R3F7ovxtzAiubdM
2 f# W9 Y) j4 E9 m2 W! [发送方可以向这个地址发送莱特币。" o* _& Z9 A1 z" E
接收方需要将R1用相同的方法处理一下,得到山寨币的私钥:& P3 y0 y8 ?2 t* ~" `1 u, t. N
私钥R1:5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAnchuDf: O0 l: V# W& g: n( t, ?$ I
十六进制:800000000000000000000000000000000000000000000000000000000000000001a85aa87e
6 e! B# I9 }0 N4 w% ?. ?去掉前2后8:0000000000000000000000000000000000000000000000000000000000000001
) c" D5 ^ _. Z1 L) t' I这就是私钥的16进制写法,Private Key Hexadecimal Format。6 [! v/ ]: t& T: R
用参数48执行Base58Check得
! N3 G, g* i% p. R6u823ozcyt2rjPH8Z2ErsSXJB5PPQwK7VVTwwN4mxLBFrao69XQ1 i7 d1 n* P9 s! h5 b2 o
接收方可以用此私钥花费莱特币。! o* f* c3 r: S+ l! y1 H* \
————完毕————: a) l6 @* S' K1 ^ a3 [
打赏 1BfXayW2vrj6uRpoZg3nR8rMEckLpGmaiL
9 q( a* U$ ^: T% P" Q软妹币打赏 SKZkDHNBZbo8VU8d3Rcb9TcmUPsE5B5Dix |