9 "github.com/google/uuid"
11 "github.com/bytom/bytom/crypto/sha3pool"
12 "github.com/bytom/bytom/database"
13 dbm "github.com/bytom/bytom/database/leveldb"
14 "github.com/bytom/bytom/errors"
15 "github.com/bytom/bytom/protocol/vm"
18 func TestRegisterContract(t *testing.T) {
19 dbName := uuid.New().String()
20 db := dbm.NewDB(dbName, "leveldb", dbName)
21 defer os.RemoveAll(dbName)
23 store := database.NewStore(db)
24 chain, _, _, _ := mockChainWithStore(store)
26 contract, err := hex.DecodeString("0164740a52797b937b788791698700c0")
31 if err := registerContract(chain, store, contract); err != nil {
36 sha3pool.Sum256(hash[:], contract)
37 data := db.Get(database.CalcContractKey(hash))
39 t.Fatalf("can't find the registered contract by contract hash %v", hash)
42 if !bytes.Equal(contract, data[32:]) {
43 t.Fatalf("TestRegisterContract failed: got %v want %v", data[32:], contract)
47 func TestUseContractSuccess(t *testing.T) {
48 dbName := uuid.New().String()
49 db := dbm.NewDB(dbName, "leveldb", dbName)
50 defer os.RemoveAll(dbName)
52 store := database.NewStore(db)
53 chain, _, _, _ := mockChainWithStore(store)
55 contract, err := hex.DecodeString("0164740a52797b937b788791698700c0")
60 if err := registerContract(chain, store, contract); err != nil {
64 arguments := [][]byte{
69 if err := validateContract(chain, contract, arguments, nil); err != nil {
74 func TestUseContractFailed(t *testing.T) {
75 dbName := uuid.New().String()
76 db := dbm.NewDB(dbName, "leveldb", dbName)
77 defer os.RemoveAll(dbName)
79 store := database.NewStore(db)
80 chain, _, _, _ := mockChainWithStore(store)
82 contract, err := hex.DecodeString("0164740a52797b937b788791698700c0")
87 if err := registerContract(chain, store, contract); err != nil {
91 arguments := [][]byte{
96 if err := validateContract(chain, contract, arguments, nil); errors.Root(err) != vm.ErrFalseVMResult {
101 func TestUseContractWithStateDataSuccess(t *testing.T) {
102 dbName := uuid.New().String()
103 db := dbm.NewDB(dbName, "leveldb", dbName)
104 defer os.RemoveAll(dbName)
106 store := database.NewStore(db)
107 chain, _, _, _ := mockChainWithStore(store)
109 contract, err := hex.DecodeString("01646c7c740a52797b937b788791698700c0")
114 if err := registerContract(chain, store, contract); err != nil {
118 arguments := [][]byte{
122 stateData := [][]byte{
126 if err := validateContract(chain, contract, arguments, stateData); err != nil {
131 func TestUseContractWithStateDataFailed(t *testing.T) {
132 dbName := uuid.New().String()
133 db := dbm.NewDB(dbName, "leveldb", dbName)
134 defer os.RemoveAll(dbName)
136 store := database.NewStore(db)
137 chain, _, _, _ := mockChainWithStore(store)
139 contract, err := hex.DecodeString("01646c7c740a52797b937b788791698700c0")
144 if err := registerContract(chain, store, contract); err != nil {
148 arguments := [][]byte{
152 stateData := [][]byte{
156 if err := validateContract(chain, contract, arguments, stateData); errors.Root(err) != vm.ErrFalseVMResult {