Skip to content

Commit

Permalink
Add test for verifyFxUsage (ava-labs#2690)
Browse files Browse the repository at this point in the history
  • Loading branch information
StephenButtolph authored Mar 23, 2023
1 parent ca6a477 commit ef2832c
Showing 1 changed file with 151 additions and 0 deletions.
151 changes: 151 additions & 0 deletions vms/avm/vm_regression_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
// Copyright (C) 2019-2022, Ava Labs, Inc. All rights reserved.
// See the file LICENSE for licensing terms.

package avm

import (
"context"
"testing"

"github.com/stretchr/testify/require"

"github.com/ava-labs/avalanchego/database/manager"
"github.com/ava-labs/avalanchego/ids"
"github.com/ava-labs/avalanchego/snow"
"github.com/ava-labs/avalanchego/snow/engine/common"
"github.com/ava-labs/avalanchego/utils/constants"
"github.com/ava-labs/avalanchego/utils/crypto/secp256k1"
"github.com/ava-labs/avalanchego/version"
"github.com/ava-labs/avalanchego/vms/avm/txs"
"github.com/ava-labs/avalanchego/vms/components/avax"
"github.com/ava-labs/avalanchego/vms/components/verify"
"github.com/ava-labs/avalanchego/vms/nftfx"
"github.com/ava-labs/avalanchego/vms/secp256k1fx"
)

func TestVerifyFxUsage(t *testing.T) {
require := require.New(t)
vm := &VM{}
ctx := NewContext(t)
ctx.Lock.Lock()
defer func() {
require.NoError(vm.Shutdown(context.Background()))
ctx.Lock.Unlock()
}()

genesisBytes := BuildGenesisTest(t)
issuer := make(chan common.Message, 1)
err := vm.Initialize(
context.Background(),
ctx,
manager.NewMemDB(version.Semantic1_0_0),
genesisBytes,
nil,
nil,
issuer,
[]*common.Fx{
{
ID: ids.Empty.Prefix(0),
Fx: &secp256k1fx.Fx{},
},
{
ID: ids.Empty.Prefix(1),
Fx: &nftfx.Fx{},
},
},
nil,
)
require.NoError(err)
vm.batchTimeout = 0

require.NoError(vm.SetState(context.Background(), snow.Bootstrapping))
require.NoError(vm.SetState(context.Background(), snow.NormalOp))

createAssetTx := &txs.Tx{Unsigned: &txs.CreateAssetTx{
BaseTx: txs.BaseTx{BaseTx: avax.BaseTx{
NetworkID: constants.UnitTestID,
BlockchainID: chainID,
}},
Name: "Team Rocket",
Symbol: "TR",
Denomination: 0,
States: []*txs.InitialState{
{
FxIndex: 0,
Outs: []verify.State{
&secp256k1fx.TransferOutput{
Amt: 1,
OutputOwners: secp256k1fx.OutputOwners{
Threshold: 1,
Addrs: []ids.ShortID{keys[0].PublicKey().Address()},
},
},
},
},
{
FxIndex: 1,
Outs: []verify.State{
&nftfx.MintOutput{
GroupID: 1,
OutputOwners: secp256k1fx.OutputOwners{
Threshold: 1,
Addrs: []ids.ShortID{keys[0].PublicKey().Address()},
},
},
},
},
},
}}
require.NoError(vm.parser.InitializeTx(createAssetTx))

_, err = vm.IssueTx(createAssetTx.Bytes())
require.NoError(err)

mintNFTTx := &txs.Tx{Unsigned: &txs.OperationTx{
BaseTx: txs.BaseTx{BaseTx: avax.BaseTx{
NetworkID: constants.UnitTestID,
BlockchainID: chainID,
}},
Ops: []*txs.Operation{{
Asset: avax.Asset{ID: createAssetTx.ID()},
UTXOIDs: []*avax.UTXOID{{
TxID: createAssetTx.ID(),
OutputIndex: 1,
}},
Op: &nftfx.MintOperation{
MintInput: secp256k1fx.Input{
SigIndices: []uint32{0},
},
GroupID: 1,
Payload: []byte{'h', 'e', 'l', 'l', 'o'},
Outputs: []*secp256k1fx.OutputOwners{{}},
},
}},
}}
require.NoError(mintNFTTx.SignNFTFx(vm.parser.Codec(), [][]*secp256k1.PrivateKey{{keys[0]}}))

_, err = vm.IssueTx(mintNFTTx.Bytes())
require.NoError(err)

spendTx := &txs.Tx{Unsigned: &txs.BaseTx{BaseTx: avax.BaseTx{
NetworkID: constants.UnitTestID,
BlockchainID: chainID,
Ins: []*avax.TransferableInput{{
UTXOID: avax.UTXOID{
TxID: createAssetTx.ID(),
OutputIndex: 0,
},
Asset: avax.Asset{ID: createAssetTx.ID()},
In: &secp256k1fx.TransferInput{
Amt: 1,
Input: secp256k1fx.Input{
SigIndices: []uint32{0},
},
},
}},
}}}
require.NoError(spendTx.SignSECP256K1Fx(vm.parser.Codec(), [][]*secp256k1.PrivateKey{{keys[0]}}))

_, err = vm.IssueTx(spendTx.Bytes())
require.NoError(err)
}

0 comments on commit ef2832c

Please sign in to comment.