Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
一、锁定脚本类型
! L5 V( A* r5 S: \% X( X比特币地址对应的锁定脚本(ScriptPubKey)主要类型:P2PKH P2SH P2WSH P2WPKH P2SH-P2WSH P2SH-P2WPKH,不同的锁定脚本类型是由不同的地址生成的。
6 p' R/ w4 \0 `+ z/ c3 {二、锁定脚本对应的地址类型
* J. o2 h* Y" M2 }. s2 T& J1.公钥生成地址过程:私钥->公钥->地址。公钥分为压缩和非压缩格式。/ f+ O& G6 s9 R% U- I6 I
, ^, h/ E& e  c
2.不同的锁定脚本依赖的源数据生成。对应关系如下
0 |; T% N6 g) ^; q* E
4 P$ [# q7 K/ D" l3.地址的表现形式
' R/ _) g4 s8 H! W, V7 [实际上我们看到的地址是经过Bash58编码或bech32编码的地址,地址中添加了地址类型和校验码所以不同的地址开头会呈现不同的数值。生成锁定脚本的时候要解码数据并且去掉地址类型码。7 ~5 _: ^% B! s- d
不同地址的标志位对照表如下:3 s  ?+ W$ h( N  q! z" a
! L% [6 b, `) S) G
三、锁定脚本的结构
; J; K0 Z/ `+ w$ FP2PKH:
8 S5 U/ z# r# a% S" H4 pOP_DUP OP_HASH160 OPCODE_LEN ADDR OP_EQUALVERIFY OP_CHECKSIG! ], @1 t  r& N; l+ M/ S
对应的字节表示 0x76 0xa9 0x14 20字节地址 0x88 0xac2 a; ]+ V. U7 C" i$ ]. I
P2PKH长度:25字节
6 I/ ]/ z& W' x* XOPCODE_LEN:0x14 即 地址ADDR的长度5 O% {6 C9 y+ Y2 j
ADDR:是由公钥生成的20字节  a+ q* M$ D2 y5 A, w. P+ E: b
P2SH:
, @. E( t" t! L2 e& r4 kOP_HASH160 OPCODE_LEN ADDR OP_EQUAL
$ E8 M+ ^; @; {, Q) [$ y8 E& {对应的字节表示: 0xa9 0x14 20字节地址 0x87$ c% Q. Y( J0 o) F! o4 U
P2SH长度:23
4 ~! E' L5 B2 H: ~OPCODE_LEN:0x14 即 地址ADDR的长度- \; G2 _3 F" ^- j  q6 W
ADDR:是由脚本经过HASH160生成的20字节8 D' k) P, O1 b
P2WPKH:
7 ?8 {- t/ A+ T, F2 {2 {VER OPCODE_LEN ADDR- K4 c3 z0 k4 B) b1 R6 R0 N
对应的字节表示 0x00 0x14 20字节地址
% }+ R" f( }) q4 l! ~# V" VP2WPKH长度:229 J! e3 {: N" o5 t! M
0x00: 版本号,固定0
& e: ?4 N& G1 u" r8 w/ M& t! hOPCODE_LEN:0x14 即 地址ADDR的长度
' o+ _& z5 ~$ U$ gADDR:是由公钥生成的20字节
7 H' g5 O6 n1 ^, I$ O+ x2 |5 O& pP2WSH:
. N( q$ |/ h% z) zVER OPCODE_LEN ADDR1 n- Z- s# V( y6 g3 k0 B3 V5 V
对应的字节表示 0x00 0x20 32字节地址* g6 {! h7 S4 d7 `8 E- W0 c7 U
P2WSH长度:34! r) E, `! B2 p
0x00: 版本号,固定03 d0 w0 w! N+ d. @% O
OPCODE_LEN:0x20 即 地址ADDR的长度7 d" I: L5 B* ]( Q0 x# v$ Y# u
P2SH-P2WPKH:2 T4 [9 [5 p! l5 g8 }& x& O
P2SH-P2WPKH是对P2WPKH进行HASH160得到20字节地址,此地址可在P2SH中应用,与普通的P2SH地址没有任何区别。格式见P2SH0 ~: s) H; w; V# ?8 H/ [
P2SH-P2WSH
3 x: T0 l8 V  v, O: L/ MP2SH-P2WSH是对P2WSH进行HASH160得到20字节地址,此地址可在P2SH中应用,与普通的P2SH地址没有任何区别。格式见P2SH6 ?6 ]) _! l' r  B: l  U
四、比特币地址类型:
, {( J1 {3 @) Y* o+ B# T比特币地址类型分为3中格式: legacy p2sh-segwit bech32
/ H  E! K) {5 u2 b: S  {( W& L: hlegacy类型实际上就是取公钥或脚本的HASH160值得到20位字节地址。
* X2 m, k8 z3 n  Y! ]3 n: [, vp2sh-segwit:对应生成P2SH-P2WPKH 和 P2SH-P2WSH中的地址
5 b8 @) L* G! Y: vbech32:对应生成P2WPKH 和 P2WSH中的地址- X1 L- x! E0 l* \6 I5 X
五、隔离见证中的公钥类型
8 ?+ e& g; r* p" k9 K隔离见证中生成地址用到的公钥必须是压缩的公钥,否则可能会无法赎回此地址的币。  y# D6 _* e& b% A( {5 N
隔离见证地址用长度32或20来判定地址是由脚本或公钥生成的,0(版本)开头表示是隔离见证地址。
, x2 B3 x5 N5 i. ^六、脚本中的地址和钱包中的地址区别
) N# E) ^# W- N( T) ?3 g' d我们在UI上看到的地址是带有地址类型码并且经过Bash58或Bech32编码后的地址的字符串,因此与实际地址长度并不符合。当我们传入此地址后,会解码并去除类型码,并根据类型码生成不同的ScriptPubkey(P2PKH P2SH P2WSH P2WPKH P2SH-P2WSH P2SH-P2WPKH)。$ T9 x7 z9 S# \% W
七、各种地址样子如下:% k+ p7 X3 @2 u& r, _$ x: x* }
P2PKH地址:/ y6 V- {8 h: F% k0 q1 W: ~
显示的地址:mgjswfb6eXcmuJgLxvMxAo1tth2QCyyPYt7 W' |+ R' Q7 b
实际地址16进制表示:0x0d 0x69 0xe6 0x9c 0x75 0x72 0x53 0x4c 0xa3 0x5d 0xdd 0x12 0x64 0x6f 0x90 0x8b 0xf0 0x7b 0xf7 0xb6
1 B6 e$ o+ t$ RP2SH地址:+ F/ b7 T. J5 Y+ I. L* Q; m
显示的地址:2Mz5nE8zyxQDMZawYZ6cqbHZZdkih5CwQjU
  I* W7 W" g: w5 z! O5 U实际地址16进制表示:0x4a 0xff 0xa1 0xed 0x45 0x54 0x17 0x5a 0x00 0xd6 0x54 0x78 0x8d 0x34 0xf3 0x13 0xd7 0x38 0x02 0xdd5 R1 ?0 C) ]& v$ \+ I4 H+ N5 }
P2WSH地址:) z! h" Y6 G! E6 c
显示的地址:bcrt1qja4c5mpjw8hjlatgwud56naunfykxwupk65yev
  [( @8 a; a' Y' Q0 L# R/ o  e实际地址16进制表示:0x14 0x97 0x6b 0x8a 0x6c 0x32 0x71 0xef 0x2f 0xf5 0x68 0x77 0x1b 0x4d 0x4f 0xbc 0x9a 0x49 0x63 0x3b 0x81* q; i: ^! r7 |7 C) G+ @: F
P2WPKH地址:' O: s- {+ b, Y0 q8 i
显示的地址:bcrt1q09zjqeetautmyzrxn9d2pu5c5glv6zcmj3qx5axrltslu90p88pqykxdv4
7 S% {2 j8 r6 I' |; d* g# }0 ]. ]实际地址16进制表示:0x20 0x79 0x45 0x20 0x67 0x2b 0xef 0x17 0xb2 0x08 0x66 0x99 0x5a 0xa0 0xf2 0x98 0xa2 0x3e 0xcd 0x0b 0x1b 0x94 0x40 0x6a 0x74 0xc3 0xfa 0xe1 0xfe 0x15 0xe1 0x39 0xc2
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

朋友一起走 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    16