-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathscript_test.go
More file actions
138 lines (133 loc) · 6.55 KB
/
Copy pathscript_test.go
File metadata and controls
138 lines (133 loc) · 6.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
package doge
import (
"bytes"
"testing"
)
func TestClassifyScript(t *testing.T) {
// P2PKH
pkh_scr := hx2b("76a91454f6fb64f14b756d118a96a57a2f9ebf4b4708fe88ac")
pkh_adr := Address("DCtMAyy9w2QCrWMRdZ28Kn7GwMfCEp2irP")
pkh_type, pkh_found := ClassifyScript(pkh_scr)
if pkh_type != ScriptTypeP2PKH {
t.Errorf("Wrong script type: %v vs %v", pkh_type, ScriptTypeP2PKH)
}
if Hash160toAddress(pkh_found, DogeMainNetChain.P2PKH_Address_Prefix) != pkh_adr {
t.Errorf("Wrong address: %v vs %v", pkh_found, pkh_adr)
}
// P2SH
sh_scr := hx2b("a9149feb23c522d5404c1974b761b4079d06e485325387")
sh_adr := Address("A71qnghzaMDGNboHC9XkDu7mmKjdQNLqiA")
sh_type, sh_found := ClassifyScript(sh_scr)
if sh_type != ScriptTypeP2SH {
t.Errorf("Wrong script type: %v vs %v", sh_type, ScriptTypeP2SH)
}
if Hash160toAddress(sh_found, DogeMainNetChain.P2SH_Address_Prefix) != sh_adr {
t.Errorf("Wrong address: %v vs %v", sh_found, sh_adr)
}
// P2PK uncompressed
pku_scr := hx2b("4104ae1a62fe09c5f51b13905f07f06b99a2f7159b2225f374cd378d71302fa28414e7aab37397f554a7df5f142c21c1b7303b8a0626f1baded5c72a704f7e6cd84cac")
pku_pbkey := hx2b("04ae1a62fe09c5f51b13905f07f06b99a2f7159b2225f374cd378d71302fa28414e7aab37397f554a7df5f142c21c1b7303b8a0626f1baded5c72a704f7e6cd84c")
pku_type, pku_found := ClassifyScript(pku_scr)
if pku_type != ScriptTypeP2PK {
t.Errorf("Wrong script type: %v vs %v", pku_type, ScriptTypeP2PK)
}
if !bytes.Equal(pku_found, pku_pbkey) {
t.Errorf("Wrong PubKey: %x vs %x", pku_found, pku_pbkey)
}
// P2PK compressed
pkc_scr := hx2b("2102ae1a62fe09c5f51b13905f07f06b99a2f7159b2225f374cd378d71302fa28414ac")
pkc_pbkey := hx2b("02ae1a62fe09c5f51b13905f07f06b99a2f7159b2225f374cd378d71302fa28414")
pkc_type, pkc_found := ClassifyScript(pkc_scr)
if pkc_type != ScriptTypeP2PK {
t.Errorf("Wrong script type: %v vs %v", pkc_type, ScriptTypeP2PK)
}
if !bytes.Equal(pkc_found, pkc_pbkey) {
t.Errorf("Wrong PubKey: %x vs %x", pkc_found, pkc_pbkey)
}
// NullData
nud_scr := hx2b("6a1454f6fb64f14b756d118a96a57a2f9ebf4b4708fe")
nud_expct := hx2b("1454f6fb64f14b756d118a96a57a2f9ebf4b4708fe")
nud_type, nud_found := ClassifyScript(nud_scr)
if nud_type != ScriptTypeNullData {
t.Errorf("Wrong script type: %v vs %v", nud_type, ScriptTypeNullData)
}
if !bytes.Equal(nud_found, nud_expct) {
t.Errorf("Wrong NullData: %x vs %x", nud_found, nud_expct)
}
// MultiSig
ms_scr := hx2b("514104cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4410461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af52ae")
ms_exp := hx2b("514104cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4410461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af52")
ms_type, ms_found := ClassifyScript(ms_scr)
if ms_type != ScriptTypeMultiSig {
t.Errorf("Wrong script type: %v vs %v", ms_type, ScriptTypeMultiSig)
}
if !bytes.Equal(ms_found, ms_exp) {
t.Errorf("Wrong PubKeys: %x vs %x", ms_found, ms_exp)
}
}
func TestExpandScript(t *testing.T) {
// P2PKH
pkh_scr := hx2b("76a91454f6fb64f14b756d118a96a57a2f9ebf4b4708fe88ac")
pkh_hash := hx2b("54f6fb64f14b756d118a96a57a2f9ebf4b4708fe")
script := ExpandScript(ScriptTypeP2PKH, pkh_hash)
if !bytes.Equal(script, pkh_scr) {
t.Errorf("Wrong P2PKH script: %x vs %x", script, pkh_scr)
}
// P2SH
sh_scr := hx2b("a9149feb23c522d5404c1974b761b4079d06e485325387")
sh_hash := hx2b("9feb23c522d5404c1974b761b4079d06e4853253")
script = ExpandScript(ScriptTypeP2SH, sh_hash)
if !bytes.Equal(script, sh_scr) {
t.Errorf("Wrong P2SH script: %x vs %x", script, sh_scr)
}
// P2PK uncompressed
pku_scr := hx2b("4104ae1a62fe09c5f51b13905f07f06b99a2f7159b2225f374cd378d71302fa28414e7aab37397f554a7df5f142c21c1b7303b8a0626f1baded5c72a704f7e6cd84cac")
pku_key := hx2b("04ae1a62fe09c5f51b13905f07f06b99a2f7159b2225f374cd378d71302fa28414e7aab37397f554a7df5f142c21c1b7303b8a0626f1baded5c72a704f7e6cd84c")
script = ExpandScript(ScriptTypeP2PK, pku_key)
if !bytes.Equal(script, pku_scr) {
t.Errorf("Wrong P2PK-Uncompressed script: %x vs %x", script, pku_scr)
}
// P2PK compressed
pkc_scr := hx2b("2102ae1a62fe09c5f51b13905f07f06b99a2f7159b2225f374cd378d71302fa28414ac")
pkc_key := hx2b("02ae1a62fe09c5f51b13905f07f06b99a2f7159b2225f374cd378d71302fa28414")
script = ExpandScript(ScriptTypeP2PK, pkc_key)
if !bytes.Equal(script, pkc_scr) {
t.Errorf("Wrong P2PK-Compressed script: %x vs %x", script, pkc_scr)
}
// NullData
nud_scr := hx2b("6a1454f6fb64f14b756d118a96a57a2f9ebf4b4708fe")
nud_data := hx2b("1454f6fb64f14b756d118a96a57a2f9ebf4b4708fe")
script = ExpandScript(ScriptTypeNullData, nud_data)
if !bytes.Equal(script, nud_scr) {
t.Errorf("Wrong OP_RETURN script: %x vs %x", script, nud_scr)
}
// MultiSig
ms_scr := hx2b("514104cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4410461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af52ae")
ms_data := hx2b("514104cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4410461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af52")
script = ExpandScript(ScriptTypeMultiSig, ms_data)
if !bytes.Equal(script, ms_scr) {
t.Errorf("Wrong MultiSig script: %x vs %x", script, ms_scr)
}
}
func TestP2PKHScript(t *testing.T) {
// P2PKH
p2pkh_script := hx2b("76a91454f6fb64f14b756d118a96a57a2f9ebf4b4708fe88ac")
address := Address("DCtMAyy9w2QCrWMRdZ28Kn7GwMfCEp2irP")
script, err := P2PKHScriptFromAddress(address)
if err != nil {
t.Errorf("P2PKHScriptFromAddress: %v", err)
} else if !bytes.Equal(script, p2pkh_script) {
t.Errorf("P2PKHScriptFromAddress: wrong P2PKH script: %x vs %x", script, p2pkh_script)
}
}
func TestP2SHScript(t *testing.T) {
// P2SH
p2sh_script := hx2b("a914748284390f9e263a4b766a75d0633c50426eb87587")
redeem_script := hx2b("5121022afc20bf379bc96a2f4e9e63ffceb8652b2b6a097f63fbee6ecec2a49a48010e2103a767c7221e9f15f870f1ad9311f5ab937d79fcaeee15bb2c722bca515581b4c052ae")
script, err := P2SHScriptFromRedeemScript(redeem_script)
if err != nil {
t.Errorf("P2SHScriptFromScript: %v", err)
} else if !bytes.Equal(script, p2sh_script) {
t.Errorf("P2SHScriptFromScript: wrong P2SH script: %x vs %x", script, p2sh_script)
}
}