aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugin/evm/export_tx.go2
-rw-r--r--plugin/evm/import_tx.go14
-rw-r--r--plugin/evm/tx.go4
-rw-r--r--plugin/evm/vm.go14
4 files changed, 19 insertions, 15 deletions
diff --git a/plugin/evm/export_tx.go b/plugin/evm/export_tx.go
index 3a544a6..0314f0c 100644
--- a/plugin/evm/export_tx.go
+++ b/plugin/evm/export_tx.go
@@ -21,8 +21,6 @@ var (
errNoExportOutputs = errors.New("no export outputs")
errOutputsNotSorted = errors.New("outputs not sorted")
errOverflowExport = errors.New("overflow when computing export amount + txFee")
-
- _ UnsignedAtomicTx = &UnsignedExportTx{}
)
// UnsignedExportTx is an unsigned ExportTx
diff --git a/plugin/evm/import_tx.go b/plugin/evm/import_tx.go
index 68f34b0..d6e03dc 100644
--- a/plugin/evm/import_tx.go
+++ b/plugin/evm/import_tx.go
@@ -6,6 +6,9 @@ package evm
import (
"errors"
"fmt"
+ "math/big"
+
+ "github.com/ava-labs/coreth/core/state"
"github.com/ava-labs/gecko/database"
"github.com/ava-labs/gecko/ids"
@@ -134,7 +137,7 @@ func (tx *UnsignedImportTx) SemanticVerify(
// we don't want to remove an imported UTXO in semanticVerify
// only to have the transaction not be Accepted. This would be inconsistent.
// Recall that imported UTXOs are not kept in a versionDB.
-func (tx *UnsignedImportTx) Accept(batch database.Batch) error {
+func (tx *UnsignedImportTx) Accept(ctx *snow.Context, batch database.Batch) error {
// TODO: finish this function via gRPC
return nil
}
@@ -218,3 +221,12 @@ func (vm *VM) newImportTx(
}
return tx, utx.Verify(vm.avm, vm.ctx, vm.txFee, vm.avaxAssetID)
}
+
+func (tx *UnsignedImportTx) EVMStateTransfer(state *state.StateDB) {
+ for _, to := range tx.Outs {
+ amount := new(big.Int).SetUint64(to.Amount)
+ state.AddBalance(to.Address, new(big.Int).Mul(amount, x2cRate))
+ nonce := state.GetNonce(to.Address)
+ state.SetNonce(to.Address, nonce+1)
+ }
+}
diff --git a/plugin/evm/tx.go b/plugin/evm/tx.go
index 90cd232..dfd49f0 100644
--- a/plugin/evm/tx.go
+++ b/plugin/evm/tx.go
@@ -7,6 +7,8 @@ import (
"errors"
"fmt"
+ "github.com/ava-labs/coreth/core/state"
+
"github.com/ava-labs/gecko/database"
"github.com/ava-labs/gecko/ids"
"github.com/ava-labs/gecko/snow"
@@ -62,6 +64,8 @@ type UnsignedAtomicTx interface {
// Accept this transaction with the additionally provided state transitions.
Accept(ctx *snow.Context, batch database.Batch) error
+
+ EVMStateTransfer(state *state.StateDB)
}
// Tx is a signed transaction
diff --git a/plugin/evm/vm.go b/plugin/evm/vm.go
index 5bb8ac0..292e383 100644
--- a/plugin/evm/vm.go
+++ b/plugin/evm/vm.go
@@ -163,15 +163,6 @@ func (vm *VM) getAtomicTx(block *types.Block) *Tx {
return atx
}
-func importTxStateTransfer(tx *UnsignedImportTx, state *state.StateDB) {
- for _, to := range tx.Outs {
- amount := new(big.Int).SetUint64(to.Amount)
- state.AddBalance(to.Address, new(big.Int).Mul(amount, x2cRate))
- nonce := state.GetNonce(to.Address)
- state.SetNonce(to.Address, nonce+1)
- }
-}
-
/*
******************************************************************************
********************************* Snowman API ********************************
@@ -225,7 +216,7 @@ func (vm *VM) Initialize(
chain.SetOnFinalizeAndAssemble(func(state *state.StateDB, txs []*types.Transaction) ([]byte, error) {
select {
case atx := <-vm.pendingAtomicTxs:
- importTxStateTransfer(atx.UnsignedTx.(*UnsignedImportTx), state)
+ atx.UnsignedTx.(UnsignedAtomicTx).EVMStateTransfer(state)
raw, _ := vm.codec.Marshal(atx)
return raw, nil
default:
@@ -259,8 +250,7 @@ func (vm *VM) Initialize(
return vm.getLastAccepted().ethBlock
})
chain.SetOnExtraStateChange(func(block *types.Block, state *state.StateDB) error {
- atx := vm.getAtomicTx(block).UnsignedTx.(*UnsignedImportTx)
- importTxStateTransfer(atx, state)
+ vm.getAtomicTx(block).UnsignedTx.(UnsignedAtomicTx).EVMStateTransfer(state)
return nil
})
vm.blockCache = cache.LRU{Size: 2048}