OSDN Git Service

2d data for butxo state (#1921)
[bytom/bytom.git] / protocol / bc / types / spend_commitment_test.go
1 package types
2
3 import (
4         "bytes"
5         "encoding/hex"
6         "testing"
7
8         "github.com/bytom/bytom/encoding/blockchain"
9         "github.com/bytom/bytom/protocol/bc"
10         "github.com/bytom/bytom/testutil"
11 )
12
13 func TestReadWriteSpendCommitment(t *testing.T) {
14         btmAssetID := testutil.MustDecodeAsset("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")
15         cases := []struct {
16                 sc           *SpendCommitment
17                 encodeString string
18         }{
19                 {
20                         sc: &SpendCommitment{
21                                 AssetAmount: bc.AssetAmount{
22                                         AssetId: &btmAssetID,
23                                         Amount:  100,
24                                 },
25                                 SourceID:       testutil.MustDecodeHash("3160fb24f97e06ad5a9717cd47fe2b65c7409903216b39120b10550282b20e99"),
26                                 SourcePosition: 0,
27                                 VMVersion:      1,
28                                 ControlProgram: testutil.MustDecodeHexString("0014d927424f4e8c242460b538f04c2676b97842e9a7"),
29                                 StateData:      [][]byte{testutil.MustDecodeHexString("1234abcd")},
30                         },
31                         encodeString: "603160fb24f97e06ad5a9717cd47fe2b65c7409903216b39120b10550282b20e99ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff640001160014d927424f4e8c242460b538f04c2676b97842e9a701041234abcd",
32                 },
33                 {
34                         sc: &SpendCommitment{
35                                 AssetAmount: bc.AssetAmount{
36                                         AssetId: &btmAssetID,
37                                         Amount:  999,
38                                 },
39                                 SourceID:       testutil.MustDecodeHash("4b5cb973f5bef4eadde4c89b92ee73312b940e84164da0594149554cc8a2adea"),
40                                 SourcePosition: 2,
41                                 VMVersion:      1,
42                                 ControlProgram: testutil.MustDecodeHexString("001418549d84daf53344d32563830c7cf979dc19d5c0"),
43                                 StateData:      [][]byte{testutil.MustDecodeHexString("123456abcdef")},
44                         },
45                         encodeString: "634b5cb973f5bef4eadde4c89b92ee73312b940e84164da0594149554cc8a2adeaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe707020116001418549d84daf53344d32563830c7cf979dc19d5c00106123456abcdef",
46                 },
47         }
48
49         for _, c := range cases {
50                 buff := []byte{}
51                 buffer := bytes.NewBuffer(buff)
52                 if err := c.sc.writeExtensibleString(buffer, nil, 1); err != nil {
53                         t.Fatal(err)
54                 }
55
56                 got := hex.EncodeToString(buffer.Bytes())
57                 if got != c.encodeString {
58                         t.Errorf("test write spend commitment fail, got:%s, want:%s", got, c.encodeString)
59                 }
60
61                 sc := &SpendCommitment{}
62                 _, err := sc.readFrom(blockchain.NewReader(buffer.Bytes()), 1)
63                 if err != nil {
64                         t.Fatal(err)
65                 }
66
67                 if !testutil.DeepEqual(*sc, *c.sc) {
68                         t.Errorf("test read spend commitment fail, got:%v, want:%v", *sc, *c.sc)
69                 }
70         }
71 }