package segwit import ( "encoding/hex" "testing" ) func TestConvertProgram(t *testing.T) { cases := []struct { desc string program string script string fun func(prog []byte) ([]byte, error) }{ { desc: "multi sign 2-1", program: "0020e402787b2bf9749f8fcdcc132a44e86bacf36780ec5df2189a11020d590533ee", script: "76aa20e402787b2bf9749f8fcdcc132a44e86bacf36780ec5df2189a11020d590533ee8808ffffffffffffffff7c00c0", fun: ConvertP2SHProgram, }, { desc: "multi sign 5-3", program: "00200824e931fb806bd77fdcd291aad3bd0a4493443a4120062bd659e64a3e0bac66", script: "76aa200824e931fb806bd77fdcd291aad3bd0a4493443a4120062bd659e64a3e0bac668808ffffffffffffffff7c00c0", fun: ConvertP2SHProgram, }, { desc: "single sign", program: "001437e1aec83a4e6587ca9609e4e5aa728db7007449", script: "76ab1437e1aec83a4e6587ca9609e4e5aa728db700744988ae7cac", fun: ConvertP2PKHSigProgram, }, } for i, c := range cases { progBytes, err := hex.DecodeString(c.program) if err != nil { t.Fatal(err) } gotScript, err := c.fun(progBytes) if c.script != hex.EncodeToString(gotScript) { t.Errorf("case #%d (%s) got script:%s, expect script:%s", i, c.desc, hex.EncodeToString(gotScript), c.script) } } } func TestProgramType(t *testing.T) { cases := []struct { desc string program string fun func(prog []byte) bool yes bool }{ { desc: "normal P2WPKHScript", program: "001437e1aec83a4e6587ca9609e4e5aa728db7007449", fun: IsP2WPKHScript, yes: true, }, { desc: "ugly P2WPKHScript", program: "00200824e931fb806bd77fdcd291aad3bd0a4493443a4120062bd659e64a3e0bac66", fun: IsP2WPKHScript, yes: false, }, { desc: "ugly P2WPKHScript", program: "51", fun: IsP2WPKHScript, yes: false, }, { desc: "normal P2WSHScript", program: "00200824e931fb806bd77fdcd291aad3bd0a4493443a4120062bd659e64a3e0bac66", fun: IsP2WSHScript, yes: true, }, { desc: "ugly P2WSHScript", program: "001437e1aec83a4e6587ca9609e4e5aa728db7007449", fun: IsP2WSHScript, yes: false, }, { desc: "ugly P2WSHScript", program: "51", fun: IsP2WSHScript, yes: false, }, { desc: "normal IsStraightforward", program: "51", fun: IsStraightforward, yes: true, }, { desc: "ugly IsStraightforward", program: "001437e1aec83a4e6587ca9609e4e5aa728db7007449", fun: IsStraightforward, yes: false, }, { desc: "ugly IsStraightforward", program: "00200824e931fb806bd77fdcd291aad3bd0a4493443a4120062bd659e64a3e0bac66", fun: IsStraightforward, yes: false, }, } for i, c := range cases { progBytes, err := hex.DecodeString(c.program) if err != nil { t.Fatal(err) } if c.fun(progBytes) != c.yes { t.Errorf("case #%d (%s) got %t, expect %t", i, c.desc, c.fun(progBytes), c.yes) } } }