9 "github.com/davecgh/go-spew/spew"
11 "github.com/vapor/encoding/blockchain"
12 "github.com/vapor/testutil"
15 func TestSerializationSpend(t *testing.T) {
16 arguments := [][]byte{
20 spend := NewSpendInput(arguments, testutil.MustDecodeHash("fad5195a0c8e3b590b86a3c0a95e7529565888508aecca96e9aeda633002f409"), testutil.MustDecodeAsset("fe9791d71b67ee62515e08723c061b5ccb952a80d804417c8aeedf7f633c524a"), 254354, 3, []byte("spendProgram"))
22 wantHex := strings.Join([]string{
23 "01", // asset version
24 "54", // input commitment length
25 "01", // spend type flag
26 "52", // spend commitment length
27 "fad5195a0c8e3b590b86a3c0a95e7529565888508aecca96e9aeda633002f409", // source id
28 "fe9791d71b67ee62515e08723c061b5ccb952a80d804417c8aeedf7f633c524a", // assetID
30 "03", // source position
32 "0c", // spend program length
33 "7370656e6450726f6772616d", // spend program
34 "17", // witness length
35 "02", // argument array length
36 "0a", // first argument length
37 "617267756d656e747331", // first argument data
38 "0a", // second argument length
39 "617267756d656e747332", // second argument data
42 // Test convert struct to hex
43 var buffer bytes.Buffer
44 if err := spend.writeTo(&buffer); err != nil {
48 gotHex := hex.EncodeToString(buffer.Bytes())
49 if gotHex != wantHex {
50 t.Errorf("serialization bytes = %s want %s", gotHex, wantHex)
53 // Test convert hex to struct
55 decodeHex, err := hex.DecodeString(wantHex)
60 if err := gotSpend.readFrom(blockchain.NewReader(decodeHex)); err != nil {
64 if !testutil.DeepEqual(*spend, gotSpend) {
65 t.Errorf("expected marshaled/unmarshaled txinput to be:\n%sgot:\n%s", spew.Sdump(*spend), spew.Sdump(gotSpend))
69 func TestSerializationCrossIn(t *testing.T) {
70 arguments := [][]byte{
75 crossIn := NewCrossChainInput(arguments, testutil.MustDecodeHash("fad5195a0c8e3b590b86a3c0a95e7529565888508aecca96e9aeda633002f409"), testutil.MustDecodeAsset("fe9791d71b67ee62515e08723c061b5ccb952a80d804417c8aeedf7f633c524a"), 254354, 3, 1, []byte("whatever"), []byte("IssuanceProgram"))
77 wantHex := strings.Join([]string{
78 "01", // asset version
79 "62", // input commitment length
80 "00", // cross-chain input type flag
81 "46", // cross-chain input commitment length
82 "fad5195a0c8e3b590b86a3c0a95e7529565888508aecca96e9aeda633002f409", // source id
83 "fe9791d71b67ee62515e08723c061b5ccb952a80d804417c8aeedf7f633c524a", // assetID
85 "03", // source position
87 "00", // spend program length
89 "08", // asset definition length
90 "7768617465766572", // asset definition data
91 "0f", // IssuanceProgram length
92 "49737375616e636550726f6772616d", // IssuanceProgram
93 "17", // witness length
94 "02", // argument array length
95 "0a", // first argument length
96 "617267756d656e747331", // first argument data
97 "0a", // second argument length
98 "617267756d656e747332", // second argument data
101 // Test convert struct to hex
102 var buffer bytes.Buffer
103 if err := crossIn.writeTo(&buffer); err != nil {
107 gotHex := hex.EncodeToString(buffer.Bytes())
108 if gotHex != wantHex {
109 t.Errorf("serialization bytes = %s want %s", gotHex, wantHex)
112 // Test convert hex to struct
113 var gotCrossIn TxInput
114 decodeHex, err := hex.DecodeString(wantHex)
119 if err := gotCrossIn.readFrom(blockchain.NewReader(decodeHex)); err != nil {
123 if !testutil.DeepEqual(*crossIn, gotCrossIn) {
124 t.Errorf("expected marshaled/unmarshaled txinput to be:\n%sgot:\n%s", spew.Sdump(*crossIn), spew.Sdump(gotCrossIn))
128 func TestSerializationVeto(t *testing.T) {
129 arguments := [][]byte{
130 []byte("arguments1"),
131 []byte("arguments2"),
134 vetoInput := NewVetoInput(arguments, testutil.MustDecodeHash("fad5195a0c8e3b590b86a3c0a95e7529565888508aecca96e9aeda633002f409"), testutil.MustDecodeAsset("fe9791d71b67ee62515e08723c061b5ccb952a80d804417c8aeedf7f633c524a"), 254354, 3, []byte("spendProgram"), []byte("af594006a40837d9f028daabb6d589df0b9138daefad5683e5233c2646279217294a8d532e60863bcf196625a35fb8ceeffa3c09610eb92dcfb655a947f13269"))
136 wantHex := strings.Join([]string{
137 "01", // asset version
138 "d601", // input commitment length
139 "03", // veto type flag
140 "52", // veto commitment length
141 "fad5195a0c8e3b590b86a3c0a95e7529565888508aecca96e9aeda633002f409", // source id
142 "fe9791d71b67ee62515e08723c061b5ccb952a80d804417c8aeedf7f633c524a", // assetID
144 "03", // source position
146 "0c", // veto program length
147 "7370656e6450726f6772616d", // veto program
148 "8001", //xpub length
149 "6166353934303036613430383337643966303238646161626236643538396466306239313338646165666164353638336535323333633236343632373932313732393461386435333265363038363362636631393636323561333566623863656566666133633039363130656239326463666236353561393437663133323639", //voter xpub
150 "17", // witness length
151 "02", // argument array length
152 "0a", // first argument length
153 "617267756d656e747331", // first argument data
154 "0a", // second argument length
155 "617267756d656e747332", // second argument data
158 // Test convert struct to hex
159 var buffer bytes.Buffer
160 if err := vetoInput.writeTo(&buffer); err != nil {
164 gotHex := hex.EncodeToString(buffer.Bytes())
165 if gotHex != wantHex {
166 t.Errorf("serialization bytes = %s want %s", gotHex, wantHex)
169 // Test convert hex to struct
171 decodeHex, err := hex.DecodeString(wantHex)
176 if err := gotVeto.readFrom(blockchain.NewReader(decodeHex)); err != nil {
180 if !testutil.DeepEqual(*vetoInput, gotVeto) {
181 t.Errorf("expected marshaled/unmarshaled txinput to be:\n%sgot:\n%s", spew.Sdump(*vetoInput), spew.Sdump(gotVeto))
185 func TestSerializationCoinbase(t *testing.T) {
186 coinbase := NewCoinbaseInput([]byte("arbitrary"))
187 wantHex := strings.Join([]string{
188 "01", // asset version
189 "0b", // input commitment length
190 "02", // coinbase type flag
191 "09", // arbitrary length
192 "617262697472617279", // arbitrary data
193 "00", // witness length
196 // Test convert struct to hex
197 var buffer bytes.Buffer
198 if err := coinbase.writeTo(&buffer); err != nil {
202 gotHex := hex.EncodeToString(buffer.Bytes())
203 if gotHex != wantHex {
204 t.Errorf("serialization bytes = %s want %s", gotHex, wantHex)
207 // Test convert hex to struct
208 var gotCoinbase TxInput
209 decodeHex, err := hex.DecodeString(wantHex)
214 if err := gotCoinbase.readFrom(blockchain.NewReader(decodeHex)); err != nil {
218 if !testutil.DeepEqual(*coinbase, gotCoinbase) {
219 t.Errorf("expected marshaled/unmarshaled txinput to be:\n%sgot:\n%s", spew.Sdump(*coinbase), spew.Sdump(gotCoinbase))