7 "github.com/bytom/crypto/ed25519"
8 "github.com/bytom/errors"
11 // TestIsUnspendable ensures the IsUnspendable function returns the expected
13 func TestIsUnspendable(t *testing.T) {
20 pkScript: []byte{0x6a, 0x04, 0x74, 0x65, 0x73, 0x74},
25 pkScript: []byte{0x76, 0xa9, 0x14, 0x29, 0x95, 0xa0,
26 0xfe, 0x68, 0x43, 0xfa, 0x9b, 0x95, 0x45,
27 0x97, 0xf0, 0xdc, 0xa7, 0xa4, 0x4d, 0xf6,
28 0xfa, 0x0b, 0x5c, 0x88, 0xac},
33 for i, test := range tests {
34 res := IsUnspendable(test.pkScript)
35 if res != test.expected {
36 t.Errorf("TestIsUnspendable #%d failed: got %v want %v",
37 i, res, test.expected)
43 func TestP2SPMultiSigProgram(t *testing.T) {
44 pub1, _ := hex.DecodeString("988650ff921c82d47a953527894f792572ba63197c56e5fe79e5df0c444d6bb6")
45 pub2, _ := hex.DecodeString("7192bf4eac0789ee19c88dfa87861cf59e215820f7bdb7be02761d9ed92e6c62")
46 pub3, _ := hex.DecodeString("8bcd251d9f4e03877130b6e6f1d577eda562375f07c3cdfad8f1d541002fd1a3")
49 pubkeys []ed25519.PublicKey
55 pubkeys: []ed25519.PublicKey{pub1},
57 wantProgram: "ae20988650ff921c82d47a953527894f792572ba63197c56e5fe79e5df0c444d6bb65151ad",
60 pubkeys: []ed25519.PublicKey{pub1, pub2},
62 wantProgram: "ae20988650ff921c82d47a953527894f792572ba63197c56e5fe79e5df0c444d6bb6207192bf4eac0789ee19c88dfa87861cf59e215820f7bdb7be02761d9ed92e6c625252ad",
65 pubkeys: []ed25519.PublicKey{pub1, pub2, pub3},
67 wantProgram: "ae20988650ff921c82d47a953527894f792572ba63197c56e5fe79e5df0c444d6bb6207192bf4eac0789ee19c88dfa87861cf59e215820f7bdb7be02761d9ed92e6c62208bcd251d9f4e03877130b6e6f1d577eda562375f07c3cdfad8f1d541002fd1a35253ad",
70 pubkeys: []ed25519.PublicKey{pub1},
72 wantErr: errors.WithDetail(ErrBadValue, "negative quorum"),
75 pubkeys: []ed25519.PublicKey{pub1},
77 wantErr: errors.WithDetail(ErrBadValue, "quorum empty with non-empty pubkey list"),
80 pubkeys: []ed25519.PublicKey{pub1, pub2},
82 wantErr: errors.WithDetail(ErrBadValue, "quorum too big"),
86 for i, test := range tests {
87 got, err := P2SPMultiSigProgram(test.pubkeys, test.nrequired)
89 if test.wantErr != nil && err.Error() != test.wantErr.Error() {
90 t.Errorf("TestP2SPMultiSigProgram #%d failed: got %v want %v", i, err.Error(), test.wantErr.Error())
91 } else if test.wantErr == nil {
96 if hex.EncodeToString(got) != test.wantProgram {
97 t.Errorf("TestP2SPMultiSigProgram #%d failed: got %v want %v", i, hex.EncodeToString(got), test.wantProgram)
102 func TestP2SPMultiSigProgramWithHeight(t *testing.T) {
103 pub1, _ := hex.DecodeString("988650ff921c82d47a953527894f792572ba63197c56e5fe79e5df0c444d6bb6")
104 pub2, _ := hex.DecodeString("7192bf4eac0789ee19c88dfa87861cf59e215820f7bdb7be02761d9ed92e6c62")
105 pub3, _ := hex.DecodeString("8bcd251d9f4e03877130b6e6f1d577eda562375f07c3cdfad8f1d541002fd1a3")
108 pubkeys []ed25519.PublicKey
115 pubkeys: []ed25519.PublicKey{pub1},
117 wantProgram: "ae20988650ff921c82d47a953527894f792572ba63197c56e5fe79e5df0c444d6bb65151ad",
120 pubkeys: []ed25519.PublicKey{pub1, pub2},
122 wantProgram: "ae20988650ff921c82d47a953527894f792572ba63197c56e5fe79e5df0c444d6bb6207192bf4eac0789ee19c88dfa87861cf59e215820f7bdb7be02761d9ed92e6c625252ad",
125 pubkeys: []ed25519.PublicKey{pub1, pub2, pub3},
127 wantProgram: "ae20988650ff921c82d47a953527894f792572ba63197c56e5fe79e5df0c444d6bb6207192bf4eac0789ee19c88dfa87861cf59e215820f7bdb7be02761d9ed92e6c62208bcd251d9f4e03877130b6e6f1d577eda562375f07c3cdfad8f1d541002fd1a35253ad",
130 pubkeys: []ed25519.PublicKey{pub1},
133 wantErr: errors.WithDetail(ErrBadValue, "negative blockHeight"),
136 pubkeys: []ed25519.PublicKey{pub1},
139 wantProgram: "ae20988650ff921c82d47a953527894f792572ba63197c56e5fe79e5df0c444d6bb65151ad",
142 pubkeys: []ed25519.PublicKey{pub1},
145 wantProgram: "01c8cda069ae20988650ff921c82d47a953527894f792572ba63197c56e5fe79e5df0c444d6bb65151ad",
148 pubkeys: []ed25519.PublicKey{pub1, pub2},
151 wantProgram: "01c8cda069ae20988650ff921c82d47a953527894f792572ba63197c56e5fe79e5df0c444d6bb6207192bf4eac0789ee19c88dfa87861cf59e215820f7bdb7be02761d9ed92e6c625252ad",
154 pubkeys: []ed25519.PublicKey{pub1, pub2, pub3},
157 wantProgram: "01c8cda069ae20988650ff921c82d47a953527894f792572ba63197c56e5fe79e5df0c444d6bb6207192bf4eac0789ee19c88dfa87861cf59e215820f7bdb7be02761d9ed92e6c62208bcd251d9f4e03877130b6e6f1d577eda562375f07c3cdfad8f1d541002fd1a35253ad",
160 pubkeys: []ed25519.PublicKey{pub1},
162 wantErr: errors.WithDetail(ErrBadValue, "negative quorum"),
165 pubkeys: []ed25519.PublicKey{pub1},
167 wantErr: errors.WithDetail(ErrBadValue, "quorum empty with non-empty pubkey list"),
170 pubkeys: []ed25519.PublicKey{pub1, pub2},
172 wantErr: errors.WithDetail(ErrBadValue, "quorum too big"),
176 for i, test := range tests {
177 got, err := P2SPMultiSigProgramWithHeight(test.pubkeys, test.nrequired, test.height)
179 if test.wantErr != nil && err.Error() != test.wantErr.Error() {
180 t.Errorf("TestP2SPMultiSigProgram #%d failed: got %v want %v", i, err.Error(), test.wantErr.Error())
181 } else if test.wantErr == nil {
186 if hex.EncodeToString(got) != test.wantProgram {
187 t.Errorf("TestP2SPMultiSigProgram #%d failed: got %v want %v", i, hex.EncodeToString(got), test.wantProgram)
192 func TestGetIssuanceProgramRestrictHeight(t *testing.T) {
194 issuanceProgram string
202 issuanceProgram: "ae20ac20f5cdb9ada2ae9836bcfff32126d6b885aa3f73ee111a95d1bf37f3904aca5151ad",
206 issuanceProgram: "01c8cda069ae20f44dd85be89de08b0f894476ccc7b3eebcf0a288c79504fa7e4c8033f5b7338020c86dc682ce3ecac64e165d9b5f8cca9ee05bd0d4df07adbfd11251ad7e88f1685152ad",
211 for i, test := range tests {
212 program, err := hex.DecodeString(test.issuanceProgram)
217 gotHeight := GetIssuanceProgramRestrictHeight(program)
218 if gotHeight != test.wantHeight {
219 t.Errorf("TestGetIssuanceProgramRestrictHeight #%d failed: got %d want %d", i, gotHeight, test.wantHeight)