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
}