OSDN Git Service

Merge pull request #201 from Bytom/v0.1
[bytom/vapor.git] / test / chain_test_util.go
index c358dde..9181053 100644 (file)
@@ -5,12 +5,11 @@ import (
        "os"
        "time"
 
-       dbm "github.com/tendermint/tmlibs/db"
-
        "github.com/golang/protobuf/proto"
        "github.com/vapor/blockchain/txbuilder"
        "github.com/vapor/consensus"
-       "github.com/vapor/database/leveldb"
+       "github.com/vapor/database"
+       dbm "github.com/vapor/database/leveldb"
        "github.com/vapor/database/storage"
        "github.com/vapor/protocol"
        "github.com/vapor/protocol/bc"
@@ -23,7 +22,7 @@ const utxoPrefix = "UT:"
 type chainTestContext struct {
        Chain *protocol.Chain
        DB    dbm.DB
-       Store *leveldb.Store
+       Store *database.Store
 }
 
 func (ctx *chainTestContext) validateStatus(block *types.Block) error {
@@ -63,13 +62,26 @@ func (ctx *chainTestContext) validateStatus(block *types.Block) error {
 
 func (ctx *chainTestContext) validateExecution(block *types.Block) error {
        for _, tx := range block.Transactions {
+               for _, mainchainOutputID := range tx.MainchainOutputIDs {
+                       utxoEntry, _ := ctx.Store.GetUtxo(&mainchainOutputID)
+                       if utxoEntry == nil {
+                               continue
+                       }
+                       if utxoEntry.Type != storage.CrosschainUTXOType {
+                               return fmt.Errorf("found non-mainchain utxo entry")
+                       }
+                       if !utxoEntry.Spent {
+                               return fmt.Errorf("utxo entry status should be spent")
+                       }
+               }
+
                for _, spentOutputID := range tx.SpentOutputIDs {
                        utxoEntry, _ := ctx.Store.GetUtxo(&spentOutputID)
                        if utxoEntry == nil {
                                continue
                        }
-                       if !utxoEntry.IsCoinBase {
-                               return fmt.Errorf("found non-coinbase spent utxo entry")
+                       if utxoEntry.Type == storage.NormalUTXOType {
+                               return fmt.Errorf("found normal utxo entry")
                        }
                        if !utxoEntry.Spent {
                                return fmt.Errorf("utxo entry status should be spent")
@@ -209,7 +221,7 @@ func (t *ctTransaction) createTransaction(ctx *chainTestContext, txs []*types.Tx
        }
 
        for _, amount := range t.Outputs {
-               output := types.NewTxOutput(*consensus.BTMAssetID, amount, []byte{byte(vm.OP_TRUE)})
+               output := types.NewIntraChainOutput(*consensus.BTMAssetID, amount, []byte{byte(vm.OP_TRUE)})
                if err := builder.AddOutput(output); err != nil {
                        return nil, err
                }
@@ -250,7 +262,7 @@ func (cfg *chainTestConfig) Run() error {
                if err != nil {
                        return err
                }
-               err = SolveAndUpdate(ctx.Chain, block)
+               _, err = ctx.Chain.ProcessBlock(block)
                if err != nil && blk.Invalid {
                        continue
                }