From d833a96a315eaf3385316c6cfc89a2c7b5f32c73 Mon Sep 17 00:00:00 2001 From: Aaron Buchwald Date: Mon, 5 Oct 2020 16:00:34 -0400 Subject: import tx test wip --- plugin/evm/import_tx_test.go | 126 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 plugin/evm/import_tx_test.go diff --git a/plugin/evm/import_tx_test.go b/plugin/evm/import_tx_test.go new file mode 100644 index 0000000..b497794 --- /dev/null +++ b/plugin/evm/import_tx_test.go @@ -0,0 +1,126 @@ +// (c) 2019-2020, Ava Labs, Inc. All rights reserved. +// See the file LICENSE for licensing terms. + +package evm + +import ( + "testing" + + "github.com/ava-labs/avalanchego/ids" + "github.com/ava-labs/avalanchego/vms/components/avax" + "github.com/ava-labs/avalanchego/vms/secp256k1fx" +) + +func TestImportTxVerifyNil(t *testing.T) { + var importTx UnsignedImportTx + if err := importTx.Verify(testXChainID, NewContext(), testTxFee, testAvaxAssetID); err == nil { + t.Fatal("Verify should have failed due to nil transaction") + } +} + +func TestImportTxVerify(t *testing.T) { + var importAmount uint64 = 10000000 + txID := ids.NewID([32]byte{0xff}) + importTx := &UnsignedImportTx{ + NetworkID: testNetworkID, + BlockchainID: testCChainID, + SourceChain: testXChainID, + ImportedInputs: []*avax.TransferableInput{ + { + UTXOID: avax.UTXOID{ + TxID: txID, + OutputIndex: uint32(0), + }, + Asset: avax.Asset{ID: testAvaxAssetID}, + In: &secp256k1fx.TransferInput{ + Amt: importAmount, + Input: secp256k1fx.Input{ + SigIndices: []uint32{0}, + }, + }, + }, + { + UTXOID: avax.UTXOID{ + TxID: txID, + OutputIndex: uint32(1), + }, + Asset: avax.Asset{ID: testAvaxAssetID}, + In: &secp256k1fx.TransferInput{ + Amt: importAmount, + Input: secp256k1fx.Input{ + SigIndices: []uint32{0}, + }, + }, + }, + }, + Outs: []EVMOutput{ + { + Address: testEthAddrs[0], + Amount: importAmount, + AssetID: testAvaxAssetID, + }, + { + Address: testEthAddrs[1], + Amount: importAmount, + AssetID: testAvaxAssetID, + }, + }, + } + + ctx := NewContext() + + if err := importTx.Verify(testXChainID, ctx, testTxFee, testAvaxAssetID); err != nil { + t.Fatalf("Failed to verify ImportTx: %w", err) + } + // // Sort the inputs and outputs to ensure the transaction is canonical + // avax.SortTransferableOutputs(exportTx.ExportedOutputs, Codec) + // // Pass in a list of signers here with the appropriate length + // // to avoid causing a nil-pointer error in the helper method + // emptySigners := make([][]*crypto.PrivateKeySECP256K1R, 2) + // SortEVMInputsAndSigners(exportTx.Ins, emptySigners) + + // // Test Valid Export Tx + // if err := exportTx.Verify(testXChainID, ctx, testTxFee, testAvaxAssetID); err != nil { + // t.Fatalf("Failed to verify valid ExportTx: %w", err) + // } + + // exportTx.syntacticallyVerified = false + // exportTx.NetworkID = testNetworkID + 1 + + // // Test Incorrect Network ID Errors + // if err := exportTx.Verify(testXChainID, ctx, testTxFee, testAvaxAssetID); err == nil { + // t.Fatal("ExportTx should have failed verification due to incorrect network ID") + // } + + // exportTx.syntacticallyVerified = false + // exportTx.NetworkID = testNetworkID + // exportTx.BlockchainID = nonExistentID + // // Test Incorrect Blockchain ID Errors + // if err := exportTx.Verify(testXChainID, ctx, testTxFee, testAvaxAssetID); err == nil { + // t.Fatal("ExportTx should have failed verification due to incorrect blockchain ID") + // } + + // exportTx.syntacticallyVerified = false + // exportTx.BlockchainID = testCChainID + // exportTx.DestinationChain = nonExistentID + // // Test Incorrect Destination Chain ID Errors + // if err := exportTx.Verify(testXChainID, ctx, testTxFee, testAvaxAssetID); err == nil { + // t.Fatal("ExportTx should have failed verification due to incorrect destination chain") + // } + + // exportTx.syntacticallyVerified = false + // exportTx.DestinationChain = testXChainID + // exportedOuts := exportTx.ExportedOutputs + // exportTx.ExportedOutputs = nil + // // Test No Exported Outputs Errors + // if err := exportTx.Verify(testXChainID, ctx, testTxFee, testAvaxAssetID); err == nil { + // t.Fatal("ExportTx should have failed verification due to no exported outputs") + // } + + // exportTx.syntacticallyVerified = false + // exportTx.ExportedOutputs = []*avax.TransferableOutput{exportedOuts[1], exportedOuts[0]} + // // Test Unsorted outputs Errors + // if err := exportTx.Verify(testXChainID, ctx, testTxFee, testAvaxAssetID); err == nil { + // t.Fatal("ExportTx should have failed verification due to no exported outputs") + // } +} -- cgit v1.2.3-70-g09d2