"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"
type chainTestContext struct {
Chain *protocol.Chain
DB dbm.DB
- Store *leveldb.Store
+ Store *database.Store
}
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")
}
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
}
if err != nil {
return err
}
- err = SolveAndUpdate(ctx.Chain, block)
+ _, err = ctx.Chain.ProcessBlock(block)
if err != nil && blk.Invalid {
continue
}