From a054d19f05a31a0421d6fe1bc534da46921481d5 Mon Sep 17 00:00:00 2001
From: Determinant <tederminant@gmail.com>
Date: Thu, 20 Aug 2020 01:03:31 -0400
Subject: fix minor bugs

---
 plugin/evm/export_tx.go |  2 ++
 plugin/evm/vm.go        | 11 ++++++++---
 2 files changed, 10 insertions(+), 3 deletions(-)

(limited to 'plugin/evm')

diff --git a/plugin/evm/export_tx.go b/plugin/evm/export_tx.go
index 423c754..4f47a16 100644
--- a/plugin/evm/export_tx.go
+++ b/plugin/evm/export_tx.go
@@ -8,6 +8,7 @@ import (
 	"math/big"
 
 	"github.com/ava-labs/coreth/core/state"
+	"github.com/ava-labs/go-ethereum/log"
 
 	"github.com/ava-labs/gecko/database"
 	"github.com/ava-labs/gecko/ids"
@@ -149,6 +150,7 @@ func (vm *VM) newExportTx(
 
 func (tx *UnsignedExportTx) EVMStateTransfer(state *state.StateDB) error {
 	for _, from := range tx.Ins {
+		log.Info("consume", "in", from.Address, "amount", from.Amount, "nonce", from.Nonce, "nonce0", state.GetNonce(from.Address))
 		amount := new(big.Int).Mul(
 			new(big.Int).SetUint64(from.Amount), x2cRate)
 		if state.GetBalance(from.Address).Cmp(amount) < 0 {
diff --git a/plugin/evm/vm.go b/plugin/evm/vm.go
index fffc0d5..8823380 100644
--- a/plugin/evm/vm.go
+++ b/plugin/evm/vm.go
@@ -229,7 +229,10 @@ func (vm *VM) Initialize(
 	chain.SetOnFinalizeAndAssemble(func(state *state.StateDB, txs []*types.Transaction) ([]byte, error) {
 		select {
 		case atx := <-vm.pendingAtomicTxs:
-			atx.UnsignedTx.(UnsignedAtomicTx).EVMStateTransfer(state)
+			if err := atx.UnsignedTx.(UnsignedAtomicTx).EVMStateTransfer(state); err != nil {
+				vm.newBlockChan <- nil
+				return nil, err
+			}
 			raw, _ := vm.codec.Marshal(atx)
 			return raw, nil
 		default:
@@ -263,8 +266,7 @@ func (vm *VM) Initialize(
 		return vm.getLastAccepted().ethBlock
 	})
 	chain.SetOnExtraStateChange(func(block *types.Block, state *state.StateDB) error {
-		vm.getAtomicTx(block).UnsignedTx.(UnsignedAtomicTx).EVMStateTransfer(state)
-		return nil
+		return vm.getAtomicTx(block).UnsignedTx.(UnsignedAtomicTx).EVMStateTransfer(state)
 	})
 	vm.blockCache = cache.LRU{Size: 2048}
 	vm.blockStatusCache = cache.LRU{Size: 1024}
@@ -735,6 +737,9 @@ func (vm *VM) GetSpendableCanonical(keys []*crypto.PrivateKeySECP256K1R, amount
 		}
 		addr := GetEthAddress(key)
 		balance := new(big.Int).Div(state.GetBalance(addr), x2cRate).Uint64()
+		if balance == 0 {
+			continue
+		}
 		if amount < balance {
 			balance = amount
 		}
-- 
cgit v1.2.3-70-g09d2