OSDN Git Service

2d data for butxo state (#1921)
[bytom/bytom.git] / protocol / bc / types / output_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 TestReadWriteOutputCommitment(t *testing.T) {
14         btmAssetID := testutil.MustDecodeAsset("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")
15         cases := []struct {
16                 oc           *OutputCommitment
17                 encodeString string
18         }{
19                 {
20                         oc: &OutputCommitment{
21                                 AssetAmount:    bc.AssetAmount{AssetId: &btmAssetID, Amount: 100},
22                                 VMVersion:      1,
23                                 ControlProgram: testutil.MustDecodeHexString("00140876db6ca8f4542a836f0edd42b87d095d081182"),
24                                 StateData:      [][]byte{[]byte("stateData1")},
25                         },
26                         encodeString: "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff64011600140876db6ca8f4542a836f0edd42b87d095d081182010a73746174654461746131",
27                 },
28                 {
29                         oc: &OutputCommitment{
30                                 AssetAmount:    bc.AssetAmount{AssetId: &btmAssetID, Amount: 50},
31                                 VMVersion:      1,
32                                 ControlProgram: testutil.MustDecodeHexString("00148bf7800b2333afd8414d6e903d58c4908b9bbcc7"),
33                                 StateData:      [][]byte{[]byte("stateData2")},
34                         },
35                         encodeString: "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32011600148bf7800b2333afd8414d6e903d58c4908b9bbcc7010a73746174654461746132",
36                 },
37         }
38
39         for _, c := range cases {
40                 buff := []byte{}
41                 buffer := bytes.NewBuffer(buff)
42                 if err := c.oc.writeTo(buffer, 1); err != nil {
43                         t.Fatal(err)
44                 }
45
46                 got := hex.EncodeToString(buffer.Bytes())
47                 if got != c.encodeString {
48                         t.Errorf("got:%s, want:%s", got, c.encodeString)
49                 }
50
51                 oc := &OutputCommitment{}
52                 if err := oc.readFrom(blockchain.NewReader(buffer.Bytes()), 1); err != nil {
53                         t.Fatal(err)
54                 }
55
56                 if !testutil.DeepEqual(*oc, *c.oc) {
57                         t.Errorf("got:%v, want:%v", *oc, *c.oc)
58                 }
59         }
60 }