use transitive dependencies when possible with transaction dependencies

This commit is contained in:
StephenButtolph 2020-06-18 13:34:04 -04:00
parent be6be7ae1c
commit f78d7b3caf
18 changed files with 186 additions and 160 deletions

View File

@ -9,8 +9,8 @@ import (
"github.com/ava-labs/gecko/database"
"github.com/ava-labs/gecko/ids"
"github.com/ava-labs/gecko/snow"
"github.com/ava-labs/gecko/vms/components/ava"
"github.com/ava-labs/gecko/utils/codec"
"github.com/ava-labs/gecko/vms/components/ava"
"github.com/ava-labs/gecko/vms/components/verify"
)
@ -46,8 +46,8 @@ func (t *BaseTx) InputUTXOs() []*ava.UTXOID {
return utxos
}
// AssetIDs returns the IDs of the assets this transaction depends on
func (t *BaseTx) AssetIDs() ids.Set {
// ConsumedAssetIDs returns the IDs of the assets this transaction consumes
func (t *BaseTx) ConsumedAssetIDs() ids.Set {
assets := ids.Set{}
for _, in := range t.Ins {
assets.Add(in.AssetID())
@ -55,6 +55,11 @@ func (t *BaseTx) AssetIDs() ids.Set {
return assets
}
// AssetIDs returns the IDs of the assets this transaction depends on
func (t *BaseTx) AssetIDs() ids.Set {
return t.ConsumedAssetIDs()
}
// NumCredentials returns the number of expected credentials
func (t *BaseTx) NumCredentials() int { return len(t.Ins) }

View File

@ -77,7 +77,7 @@ func TestBaseTxSerialization(t *testing.T) {
tx := &Tx{UnsignedTx: &BaseTx{
NetID: networkID,
BCID: chainID,
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
Outs: []*ava.TransferableOutput{{
Asset: ava.Asset{ID: asset},
Out: &secp256k1fx.TransferOutput{
Amt: 12345,
@ -87,7 +87,7 @@ func TestBaseTxSerialization(t *testing.T) {
},
},
}},
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: ids.NewID([32]byte{
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
@ -125,7 +125,7 @@ func TestBaseTxGetters(t *testing.T) {
tx := &BaseTx{
NetID: networkID,
BCID: chainID,
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
Outs: []*ava.TransferableOutput{{
Asset: ava.Asset{ID: asset},
Out: &secp256k1fx.TransferOutput{
Amt: 12345,
@ -135,7 +135,7 @@ func TestBaseTxGetters(t *testing.T) {
},
},
}},
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: ids.NewID([32]byte{
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
@ -162,6 +162,10 @@ func TestBaseTxGetters(t *testing.T) {
t.Fatalf("Wrong number of assets returned")
} else if !assets.Contains(asset) {
t.Fatalf("Wrong asset returned")
} else if assets := tx.ConsumedAssetIDs(); assets.Len() != 1 {
t.Fatalf("Wrong number of consumed assets returned")
} else if !assets.Contains(asset) {
t.Fatalf("Wrong consumed asset returned")
} else if utxos := tx.UTXOs(); len(utxos) != 1 {
t.Fatalf("Wrong number of utxos returned")
} else if utxo := utxos[0]; !utxo.TxID.Equals(txID) {
@ -179,7 +183,7 @@ func TestBaseTxSyntacticVerify(t *testing.T) {
tx := &BaseTx{
NetID: networkID,
BCID: chainID,
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
Outs: []*ava.TransferableOutput{{
Asset: ava.Asset{ID: asset},
Out: &secp256k1fx.TransferOutput{
Amt: 12345,
@ -189,7 +193,7 @@ func TestBaseTxSyntacticVerify(t *testing.T) {
},
},
}},
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: ids.NewID([32]byte{
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
@ -230,7 +234,7 @@ func TestBaseTxSyntacticVerifyWrongNetworkID(t *testing.T) {
tx := &BaseTx{
NetID: 0,
BCID: chainID,
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
Outs: []*ava.TransferableOutput{{
Asset: ava.Asset{ID: asset},
Out: &secp256k1fx.TransferOutput{
Amt: 12345,
@ -240,7 +244,7 @@ func TestBaseTxSyntacticVerifyWrongNetworkID(t *testing.T) {
},
},
}},
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: ids.NewID([32]byte{
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
@ -272,7 +276,7 @@ func TestBaseTxSyntacticVerifyWrongChainID(t *testing.T) {
tx := &BaseTx{
NetID: networkID,
BCID: ids.Empty,
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
Outs: []*ava.TransferableOutput{{
Asset: ava.Asset{ID: asset},
Out: &secp256k1fx.TransferOutput{
Amt: 12345,
@ -282,7 +286,7 @@ func TestBaseTxSyntacticVerifyWrongChainID(t *testing.T) {
},
},
}},
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: ids.NewID([32]byte{
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
@ -315,7 +319,7 @@ func TestBaseTxSyntacticVerifyInvalidOutput(t *testing.T) {
NetID: networkID,
BCID: chainID,
Outs: []*ava.TransferableOutput{nil},
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: ids.NewID([32]byte{
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
@ -348,7 +352,7 @@ func TestBaseTxSyntacticVerifyUnsortedOutputs(t *testing.T) {
NetID: networkID,
BCID: chainID,
Outs: []*ava.TransferableOutput{
&ava.TransferableOutput{
{
Asset: ava.Asset{ID: asset},
Out: &secp256k1fx.TransferOutput{
Amt: 2,
@ -358,7 +362,7 @@ func TestBaseTxSyntacticVerifyUnsortedOutputs(t *testing.T) {
},
},
},
&ava.TransferableOutput{
{
Asset: ava.Asset{ID: asset},
Out: &secp256k1fx.TransferOutput{
Amt: 1,
@ -370,7 +374,7 @@ func TestBaseTxSyntacticVerifyUnsortedOutputs(t *testing.T) {
},
},
Ins: []*ava.TransferableInput{
&ava.TransferableInput{
{
UTXOID: ava.UTXOID{
TxID: ids.NewID([32]byte{
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
@ -403,7 +407,7 @@ func TestBaseTxSyntacticVerifyInvalidInput(t *testing.T) {
tx := &BaseTx{
NetID: networkID,
BCID: chainID,
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
Outs: []*ava.TransferableOutput{{
Asset: ava.Asset{ID: asset},
Out: &secp256k1fx.TransferOutput{
Amt: 12345,
@ -428,7 +432,7 @@ func TestBaseTxSyntacticVerifyInputOverflow(t *testing.T) {
tx := &BaseTx{
NetID: networkID,
BCID: chainID,
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
Outs: []*ava.TransferableOutput{{
Asset: ava.Asset{ID: asset},
Out: &secp256k1fx.TransferOutput{
Amt: 12345,
@ -439,7 +443,7 @@ func TestBaseTxSyntacticVerifyInputOverflow(t *testing.T) {
},
}},
Ins: []*ava.TransferableInput{
&ava.TransferableInput{
{
UTXOID: ava.UTXOID{
TxID: ids.NewID([32]byte{
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
@ -457,7 +461,7 @@ func TestBaseTxSyntacticVerifyInputOverflow(t *testing.T) {
},
},
},
&ava.TransferableInput{
{
UTXOID: ava.UTXOID{
TxID: ids.NewID([32]byte{
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
@ -491,7 +495,7 @@ func TestBaseTxSyntacticVerifyOutputOverflow(t *testing.T) {
NetID: networkID,
BCID: chainID,
Outs: []*ava.TransferableOutput{
&ava.TransferableOutput{
{
Asset: ava.Asset{ID: asset},
Out: &secp256k1fx.TransferOutput{
Amt: 2,
@ -501,7 +505,7 @@ func TestBaseTxSyntacticVerifyOutputOverflow(t *testing.T) {
},
},
},
&ava.TransferableOutput{
{
Asset: ava.Asset{ID: asset},
Out: &secp256k1fx.TransferOutput{
Amt: math.MaxUint64,
@ -512,7 +516,7 @@ func TestBaseTxSyntacticVerifyOutputOverflow(t *testing.T) {
},
},
},
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: ids.NewID([32]byte{
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
@ -544,7 +548,7 @@ func TestBaseTxSyntacticVerifyInsufficientFunds(t *testing.T) {
tx := &BaseTx{
NetID: networkID,
BCID: chainID,
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
Outs: []*ava.TransferableOutput{{
Asset: ava.Asset{ID: asset},
Out: &secp256k1fx.TransferOutput{
Amt: math.MaxUint64,
@ -554,7 +558,7 @@ func TestBaseTxSyntacticVerifyInsufficientFunds(t *testing.T) {
},
},
}},
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: ids.NewID([32]byte{
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
@ -586,7 +590,7 @@ func TestBaseTxSyntacticVerifyUninitialized(t *testing.T) {
tx := &BaseTx{
NetID: networkID,
BCID: chainID,
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
Outs: []*ava.TransferableOutput{{
Asset: ava.Asset{ID: asset},
Out: &secp256k1fx.TransferOutput{
Amt: 12345,
@ -596,7 +600,7 @@ func TestBaseTxSyntacticVerifyUninitialized(t *testing.T) {
},
},
}},
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: ids.NewID([32]byte{
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
@ -633,7 +637,7 @@ func TestBaseTxSemanticVerify(t *testing.T) {
tx := &Tx{UnsignedTx: &BaseTx{
NetID: networkID,
BCID: chainID,
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: genesisTx.ID(),
OutputIndex: 1,
@ -702,7 +706,7 @@ func TestBaseTxSemanticVerifyUnknownFx(t *testing.T) {
tx := &Tx{UnsignedTx: &BaseTx{
NetID: networkID,
BCID: chainID,
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: genesisTx.ID(),
OutputIndex: 1,
@ -754,7 +758,7 @@ func TestBaseTxSemanticVerifyWrongAssetID(t *testing.T) {
tx := &Tx{UnsignedTx: &BaseTx{
NetID: networkID,
BCID: chainID,
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: genesisTx.ID(),
OutputIndex: 1,
@ -825,11 +829,11 @@ func TestBaseTxSemanticVerifyUnauthorizedFx(t *testing.T) {
genesisBytes,
issuer,
[]*common.Fx{
&common.Fx{
{
ID: ids.Empty,
Fx: &secp256k1fx.Fx{},
},
&common.Fx{
{
ID: ids.NewID([32]byte{1}),
Fx: &testFx{},
},
@ -863,7 +867,7 @@ func TestBaseTxSemanticVerifyUnauthorizedFx(t *testing.T) {
tx := &Tx{UnsignedTx: &BaseTx{
NetID: networkID,
BCID: chainID,
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: genesisTx.ID(),
OutputIndex: 1,
@ -923,7 +927,7 @@ func TestBaseTxSemanticVerifyInvalidSignature(t *testing.T) {
tx := &Tx{UnsignedTx: &BaseTx{
NetID: networkID,
BCID: chainID,
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: genesisTx.ID(),
OutputIndex: 1,
@ -941,9 +945,7 @@ func TestBaseTxSemanticVerifyInvalidSignature(t *testing.T) {
}}
tx.Creds = append(tx.Creds, &secp256k1fx.Credential{
Sigs: [][crypto.SECP256K1RSigLen]byte{
[crypto.SECP256K1RSigLen]byte{},
},
Sigs: [][crypto.SECP256K1RSigLen]byte{{}},
})
b, err := vm.codec.Marshal(tx)
@ -977,7 +979,7 @@ func TestBaseTxSemanticVerifyMissingUTXO(t *testing.T) {
tx := &Tx{UnsignedTx: &BaseTx{
NetID: networkID,
BCID: chainID,
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: ids.Empty,
OutputIndex: 1,
@ -1044,7 +1046,7 @@ func TestBaseTxSemanticVerifyInvalidUTXO(t *testing.T) {
tx := &Tx{UnsignedTx: &BaseTx{
NetID: networkID,
BCID: chainID,
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: genesisTx.ID(),
OutputIndex: math.MaxUint32,
@ -1107,7 +1109,7 @@ func TestBaseTxSemanticVerifyPendingInvalidUTXO(t *testing.T) {
pendingTx := &Tx{UnsignedTx: &BaseTx{
NetID: networkID,
BCID: chainID,
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: genesisTx.ID(),
OutputIndex: 1,
@ -1122,7 +1124,7 @@ func TestBaseTxSemanticVerifyPendingInvalidUTXO(t *testing.T) {
},
},
}},
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
Outs: []*ava.TransferableOutput{{
Asset: ava.Asset{ID: genesisTx.ID()},
Out: &secp256k1fx.TransferOutput{
Amt: 50000,
@ -1179,7 +1181,7 @@ func TestBaseTxSemanticVerifyPendingInvalidUTXO(t *testing.T) {
tx := &Tx{UnsignedTx: &BaseTx{
NetID: networkID,
BCID: chainID,
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: txID,
OutputIndex: 2,
@ -1241,7 +1243,7 @@ func TestBaseTxSemanticVerifyPendingWrongAssetID(t *testing.T) {
pendingTx := &Tx{UnsignedTx: &BaseTx{
NetID: networkID,
BCID: chainID,
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: genesisTx.ID(),
OutputIndex: 1,
@ -1256,7 +1258,7 @@ func TestBaseTxSemanticVerifyPendingWrongAssetID(t *testing.T) {
},
},
}},
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
Outs: []*ava.TransferableOutput{{
Asset: ava.Asset{ID: genesisTx.ID()},
Out: &secp256k1fx.TransferOutput{
Amt: 50000,
@ -1313,7 +1315,7 @@ func TestBaseTxSemanticVerifyPendingWrongAssetID(t *testing.T) {
tx := &Tx{UnsignedTx: &BaseTx{
NetID: networkID,
BCID: chainID,
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: txID,
OutputIndex: 0,
@ -1381,11 +1383,11 @@ func TestBaseTxSemanticVerifyPendingUnauthorizedFx(t *testing.T) {
genesisBytes,
issuer,
[]*common.Fx{
&common.Fx{
{
ID: ids.NewID([32]byte{1}),
Fx: &secp256k1fx.Fx{},
},
&common.Fx{
{
ID: ids.Empty,
Fx: &testFx{},
},
@ -1419,7 +1421,7 @@ func TestBaseTxSemanticVerifyPendingUnauthorizedFx(t *testing.T) {
pendingTx := &Tx{UnsignedTx: &BaseTx{
NetID: networkID,
BCID: chainID,
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: genesisTx.ID(),
OutputIndex: 1,
@ -1434,7 +1436,7 @@ func TestBaseTxSemanticVerifyPendingUnauthorizedFx(t *testing.T) {
},
},
}},
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
Outs: []*ava.TransferableOutput{{
Asset: ava.Asset{ID: genesisTx.ID()},
Out: &secp256k1fx.TransferOutput{
Amt: 50000,
@ -1491,7 +1493,7 @@ func TestBaseTxSemanticVerifyPendingUnauthorizedFx(t *testing.T) {
tx := &Tx{UnsignedTx: &BaseTx{
NetID: networkID,
BCID: chainID,
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: txID,
OutputIndex: 0,
@ -1543,11 +1545,11 @@ func TestBaseTxSemanticVerifyPendingInvalidSignature(t *testing.T) {
genesisBytes,
issuer,
[]*common.Fx{
&common.Fx{
{
ID: ids.NewID([32]byte{1}),
Fx: &secp256k1fx.Fx{},
},
&common.Fx{
{
ID: ids.Empty,
Fx: &testFx{},
},
@ -1581,7 +1583,7 @@ func TestBaseTxSemanticVerifyPendingInvalidSignature(t *testing.T) {
pendingTx := &Tx{UnsignedTx: &BaseTx{
NetID: networkID,
BCID: chainID,
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: genesisTx.ID(),
OutputIndex: 1,
@ -1596,7 +1598,7 @@ func TestBaseTxSemanticVerifyPendingInvalidSignature(t *testing.T) {
},
},
}},
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
Outs: []*ava.TransferableOutput{{
Asset: ava.Asset{ID: genesisTx.ID()},
Out: &secp256k1fx.TransferOutput{
Amt: 50000,
@ -1653,7 +1655,7 @@ func TestBaseTxSemanticVerifyPendingInvalidSignature(t *testing.T) {
tx := &Tx{UnsignedTx: &BaseTx{
NetID: networkID,
BCID: chainID,
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: txID,
OutputIndex: 0,
@ -1671,9 +1673,7 @@ func TestBaseTxSemanticVerifyPendingInvalidSignature(t *testing.T) {
}}
tx.Creds = append(tx.Creds, &secp256k1fx.Credential{
Sigs: [][crypto.SECP256K1RSigLen]byte{
[crypto.SECP256K1RSigLen]byte{},
},
Sigs: [][crypto.SECP256K1RSigLen]byte{{}},
})
b, err = vm.codec.Marshal(tx)

View File

@ -8,8 +8,8 @@ import (
"testing"
"github.com/ava-labs/gecko/ids"
"github.com/ava-labs/gecko/vms/components/ava"
"github.com/ava-labs/gecko/utils/codec"
"github.com/ava-labs/gecko/vms/components/ava"
"github.com/ava-labs/gecko/vms/components/verify"
"github.com/ava-labs/gecko/vms/secp256k1fx"
)
@ -93,7 +93,7 @@ func TestCreateAssetTxSerialization(t *testing.T) {
0xbb, 0xbb, 0xbb, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa,
0x99, 0x99, 0x99, 0x99, 0x88, 0x88, 0x88, 0x88,
}),
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
Outs: []*ava.TransferableOutput{{
Asset: ava.Asset{
ID: ids.NewID([32]byte{
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
@ -122,7 +122,7 @@ func TestCreateAssetTxSerialization(t *testing.T) {
},
},
}},
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: ids.NewID([32]byte{
0xf1, 0xe1, 0xd1, 0xc1, 0xb1, 0xa1, 0x91, 0x81,
@ -152,7 +152,7 @@ func TestCreateAssetTxSerialization(t *testing.T) {
Symbol: "VIX",
Denomination: 2,
States: []*InitialState{
&InitialState{
{
FxID: 0,
Outs: []verify.Verifiable{
&secp256k1fx.TransferOutput{

View File

@ -12,11 +12,11 @@ import (
"github.com/ava-labs/gecko/ids"
"github.com/ava-labs/gecko/snow"
"github.com/ava-labs/gecko/snow/engine/common"
"github.com/ava-labs/gecko/utils/codec"
"github.com/ava-labs/gecko/utils/crypto"
"github.com/ava-labs/gecko/utils/hashing"
"github.com/ava-labs/gecko/utils/logging"
"github.com/ava-labs/gecko/vms/components/ava"
"github.com/ava-labs/gecko/utils/codec"
"github.com/ava-labs/gecko/vms/secp256k1fx"
)
@ -68,7 +68,7 @@ func TestExportTxSerialization(t *testing.T) {
0xbb, 0xbb, 0xbb, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa,
0x99, 0x99, 0x99, 0x99, 0x88, 0x88, 0x88, 0x88,
}),
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{TxID: ids.NewID([32]byte{
0x0f, 0x2f, 0x4f, 0x6f, 0x8e, 0xae, 0xce, 0xee,
0x0d, 0x2d, 0x4d, 0x6d, 0x8c, 0xac, 0xcc, 0xec,
@ -141,7 +141,7 @@ func TestIssueExportTx(t *testing.T) {
memdb.New(),
genesisBytes,
issuer,
[]*common.Fx{&common.Fx{
[]*common.Fx{{
ID: ids.Empty,
Fx: &secp256k1fx.Fx{},
}},
@ -167,7 +167,7 @@ func TestIssueExportTx(t *testing.T) {
BaseTx: BaseTx{
NetID: networkID,
BCID: chainID,
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: avaID,
OutputIndex: 1,
@ -179,7 +179,7 @@ func TestIssueExportTx(t *testing.T) {
},
}},
},
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
Outs: []*ava.TransferableOutput{{
Asset: ava.Asset{ID: avaID},
Out: &secp256k1fx.TransferOutput{
Amt: 50000,
@ -297,7 +297,7 @@ func TestClearForceAcceptedExportTx(t *testing.T) {
memdb.New(),
genesisBytes,
issuer,
[]*common.Fx{&common.Fx{
[]*common.Fx{{
ID: ids.Empty,
Fx: &secp256k1fx.Fx{},
}},
@ -323,7 +323,7 @@ func TestClearForceAcceptedExportTx(t *testing.T) {
BaseTx: BaseTx{
NetID: networkID,
BCID: chainID,
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: avaID,
OutputIndex: 1,
@ -335,7 +335,7 @@ func TestClearForceAcceptedExportTx(t *testing.T) {
},
}},
},
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
Outs: []*ava.TransferableOutput{{
Asset: ava.Asset{ID: avaID},
Out: &secp256k1fx.TransferOutput{
Amt: 50000,

View File

@ -11,8 +11,8 @@ import (
"github.com/ava-labs/gecko/database/versiondb"
"github.com/ava-labs/gecko/ids"
"github.com/ava-labs/gecko/snow"
"github.com/ava-labs/gecko/vms/components/ava"
"github.com/ava-labs/gecko/utils/codec"
"github.com/ava-labs/gecko/vms/components/ava"
"github.com/ava-labs/gecko/vms/components/verify"
)
@ -33,6 +33,15 @@ func (t *ImportTx) InputUTXOs() []*ava.UTXOID {
return utxos
}
// ConsumedAssetIDs returns the IDs of the assets this transaction consumes
func (t *ImportTx) ConsumedAssetIDs() ids.Set {
assets := t.BaseTx.AssetIDs()
for _, in := range t.Ins {
assets.Add(in.AssetID())
}
return assets
}
// AssetIDs returns the IDs of the assets this transaction depends on
func (t *ImportTx) AssetIDs() ids.Set {
assets := t.BaseTx.AssetIDs()

View File

@ -68,7 +68,7 @@ func TestImportTxSerialization(t *testing.T) {
0x99, 0x99, 0x99, 0x99, 0x88, 0x88, 0x88, 0x88,
}),
},
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{TxID: ids.NewID([32]byte{
0x0f, 0x2f, 0x4f, 0x6f, 0x8e, 0xae, 0xce, 0xee,
0x0d, 0x2d, 0x4d, 0x6d, 0x8c, 0xac, 0xcc, 0xec,
@ -130,7 +130,7 @@ func TestIssueImportTx(t *testing.T) {
memdb.New(),
genesisBytes,
issuer,
[]*common.Fx{&common.Fx{
[]*common.Fx{{
ID: ids.Empty,
Fx: &secp256k1fx.Fx{},
}},
@ -166,7 +166,7 @@ func TestIssueImportTx(t *testing.T) {
NetID: networkID,
BCID: chainID,
},
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: utxoID,
Asset: ava.Asset{ID: avaID},
In: &secp256k1fx.TransferInput{
@ -288,7 +288,7 @@ func TestForceAcceptImportTx(t *testing.T) {
memdb.New(),
genesisBytes,
issuer,
[]*common.Fx{&common.Fx{
[]*common.Fx{{
ID: ids.Empty,
Fx: &secp256k1fx.Fx{},
}},
@ -326,7 +326,7 @@ func TestForceAcceptImportTx(t *testing.T) {
NetID: networkID,
BCID: chainID,
},
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: utxoID,
Asset: ava.Asset{ID: genesisTx.ID()},
In: &secp256k1fx.TransferInput{

View File

@ -7,8 +7,8 @@ import (
"testing"
"github.com/ava-labs/gecko/ids"
"github.com/ava-labs/gecko/vms/components/ava"
"github.com/ava-labs/gecko/utils/codec"
"github.com/ava-labs/gecko/vms/components/ava"
"github.com/ava-labs/gecko/vms/components/verify"
)
@ -43,11 +43,11 @@ func TestOperationVerifyUTXOIDsNotSorted(t *testing.T) {
op := &Operation{
Asset: ava.Asset{ID: ids.Empty},
UTXOIDs: []*ava.UTXOID{
&ava.UTXOID{
{
TxID: ids.Empty,
OutputIndex: 1,
},
&ava.UTXOID{
{
TxID: ids.Empty,
OutputIndex: 0,
},
@ -64,7 +64,7 @@ func TestOperationVerify(t *testing.T) {
op := &Operation{
Asset: ava.Asset{ID: ids.Empty},
UTXOIDs: []*ava.UTXOID{
&ava.UTXOID{
{
TxID: ids.Empty,
OutputIndex: 1,
},
@ -81,20 +81,20 @@ func TestOperationSorting(t *testing.T) {
c.RegisterType(&testOperable{})
ops := []*Operation{
&Operation{
{
Asset: ava.Asset{ID: ids.Empty},
UTXOIDs: []*ava.UTXOID{
&ava.UTXOID{
{
TxID: ids.Empty,
OutputIndex: 1,
},
},
Op: &testOperable{},
},
&Operation{
{
Asset: ava.Asset{ID: ids.Empty},
UTXOIDs: []*ava.UTXOID{
&ava.UTXOID{
{
TxID: ids.Empty,
OutputIndex: 0,
},
@ -112,7 +112,7 @@ func TestOperationSorting(t *testing.T) {
ops = append(ops, &Operation{
Asset: ava.Asset{ID: ids.Empty},
UTXOIDs: []*ava.UTXOID{
&ava.UTXOID{
{
TxID: ids.Empty,
OutputIndex: 1,
},

View File

@ -8,8 +8,8 @@ import (
"github.com/ava-labs/gecko/ids"
"github.com/ava-labs/gecko/snow"
"github.com/ava-labs/gecko/vms/components/ava"
"github.com/ava-labs/gecko/utils/codec"
"github.com/ava-labs/gecko/vms/components/ava"
"github.com/ava-labs/gecko/vms/components/verify"
)
@ -39,6 +39,17 @@ func (t *OperationTx) InputUTXOs() []*ava.UTXOID {
return utxos
}
// ConsumedAssetIDs returns the IDs of the assets this transaction consumes
func (t *OperationTx) ConsumedAssetIDs() ids.Set {
assets := t.BaseTx.AssetIDs()
for _, op := range t.Ops {
if len(op.UTXOIDs) > 0 {
assets.Add(op.AssetID())
}
}
return assets
}
// AssetIDs returns the IDs of the assets this transaction depends on
func (t *OperationTx) AssetIDs() ids.Set {
assets := t.BaseTx.AssetIDs()

View File

@ -38,7 +38,7 @@ func TestPrefixedSetsAndGets(t *testing.T) {
tx := &Tx{UnsignedTx: &BaseTx{
NetID: networkID,
BCID: chainID,
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: ids.Empty,
OutputIndex: 0,
@ -160,9 +160,7 @@ func TestPrefixedFundingAddresses(t *testing.T) {
},
Asset: ava.Asset{ID: ids.Empty},
Out: &ava.TestAddressable{
Addrs: [][]byte{
[]byte{0},
},
Addrs: [][]byte{{0}},
},
}

View File

@ -792,7 +792,7 @@ func (service *Service) Send(r *http.Request, args *SendArgs, reply *SendReply)
ava.SortTransferableInputsWithSigners(ins, keys)
outs := []*ava.TransferableOutput{&ava.TransferableOutput{
outs := []*ava.TransferableOutput{{
Asset: ava.Asset{ID: assetID},
Out: &secp256k1fx.TransferOutput{
Amt: uint64(args.Amount),
@ -946,7 +946,7 @@ func (service *Service) CreateMintTx(r *http.Request, args *CreateMintTxArgs, re
BCID: service.vm.ctx.ChainID,
},
Ops: []*Operation{
&Operation{
{
Asset: ava.Asset{ID: assetID},
UTXOIDs: []*ava.UTXOID{
&utxo.UTXOID,
@ -1197,7 +1197,7 @@ func (service *Service) ImportAVA(_ *http.Request, args *ImportAVAArgs, reply *I
ava.SortTransferableInputsWithSigners(ins, keys)
outs := []*ava.TransferableOutput{&ava.TransferableOutput{
outs := []*ava.TransferableOutput{{
Asset: ava.Asset{ID: service.vm.ava},
Out: &secp256k1fx.TransferOutput{
Amt: amount,
@ -1352,7 +1352,7 @@ func (service *Service) ExportAVA(_ *http.Request, args *ExportAVAArgs, reply *E
ava.SortTransferableInputsWithSigners(ins, keys)
exportOuts := []*ava.TransferableOutput{&ava.TransferableOutput{
exportOuts := []*ava.TransferableOutput{{
Asset: ava.Asset{ID: service.vm.ava},
Out: &secp256k1fx.TransferOutput{
Amt: uint64(args.Amount),

View File

@ -300,7 +300,7 @@ func TestCreateFixedCapAsset(t *testing.T) {
Name: "test asset",
Symbol: "test",
Denomination: 1,
InitialHolders: []*Holder{&Holder{
InitialHolders: []*Holder{{
Amount: 123456789,
Address: vm.Format(keys[0].PublicKey().Address().Bytes()),
}},
@ -326,7 +326,7 @@ func TestCreateVariableCapAsset(t *testing.T) {
Name: "test asset",
Symbol: "test",
MinterSets: []Owners{
Owners{
{
Threshold: 1,
Minters: []string{
vm.Format(keys[0].PublicKey().Address().Bytes()),
@ -367,7 +367,7 @@ func TestImportAvmKey(t *testing.T) {
factory := crypto.FactorySECP256K1R{}
skIntf, err := factory.NewPrivateKey()
if err != nil {
t.Fatalf("problem generating private key: %w", err)
t.Fatalf("problem generating private key: %s", err)
}
sk := skIntf.(*crypto.PrivateKeySECP256K1R)
@ -406,7 +406,7 @@ func TestImportAvmKeyNoDuplicates(t *testing.T) {
factory := crypto.FactorySECP256K1R{}
skIntf, err := factory.NewPrivateKey()
if err != nil {
t.Fatalf("problem generating private key: %w", err)
t.Fatalf("problem generating private key: %s", err)
}
sk := skIntf.(*crypto.PrivateKeySECP256K1R)

View File

@ -288,7 +288,7 @@ func TestStateTXs(t *testing.T) {
tx := &Tx{UnsignedTx: &BaseTx{
NetID: networkID,
BCID: chainID,
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: ids.Empty,
OutputIndex: 0,

View File

@ -11,12 +11,12 @@ func TestBuildGenesis(t *testing.T) {
ss := StaticService{}
args := BuildGenesisArgs{GenesisData: map[string]AssetDefinition{
"asset1": AssetDefinition{
"asset1": {
Name: "myFixedCapAsset",
Symbol: "MFCA",
Denomination: 8,
InitialState: map[string][]interface{}{
"fixedCap": []interface{}{
"fixedCap": {
Holder{
Amount: 100000,
Address: "A9bTQjfYGBFK3JPRJqF2eh3JYL7cHocvy",
@ -36,11 +36,11 @@ func TestBuildGenesis(t *testing.T) {
},
},
},
"asset2": AssetDefinition{
"asset2": {
Name: "myVarCapAsset",
Symbol: "MVCA",
InitialState: map[string][]interface{}{
"variableCap": []interface{}{
"variableCap": {
Owners{
Threshold: 1,
Minters: []string{
@ -58,10 +58,10 @@ func TestBuildGenesis(t *testing.T) {
},
},
},
"asset3": AssetDefinition{
"asset3": {
Name: "myOtherVarCapAsset",
InitialState: map[string][]interface{}{
"variableCap": []interface{}{
"variableCap": {
Owners{
Threshold: 1,
Minters: []string{

View File

@ -9,8 +9,8 @@ import (
"github.com/ava-labs/gecko/database"
"github.com/ava-labs/gecko/ids"
"github.com/ava-labs/gecko/snow"
"github.com/ava-labs/gecko/vms/components/ava"
"github.com/ava-labs/gecko/utils/codec"
"github.com/ava-labs/gecko/vms/components/ava"
"github.com/ava-labs/gecko/vms/components/verify"
)
@ -24,7 +24,9 @@ type UnsignedTx interface {
ID() ids.ID
Bytes() []byte
ConsumedAssetIDs() ids.Set
AssetIDs() ids.Set
NumCredentials() int
InputUTXOs() []*ava.UTXOID
UTXOs() []*ava.UTXO

View File

@ -7,9 +7,9 @@ import (
"testing"
"github.com/ava-labs/gecko/ids"
"github.com/ava-labs/gecko/utils/codec"
"github.com/ava-labs/gecko/utils/units"
"github.com/ava-labs/gecko/vms/components/ava"
"github.com/ava-labs/gecko/utils/codec"
"github.com/ava-labs/gecko/vms/components/verify"
"github.com/ava-labs/gecko/vms/secp256k1fx"
)
@ -56,7 +56,7 @@ func TestTxInvalidCredential(t *testing.T) {
UnsignedTx: &BaseTx{
NetID: networkID,
BCID: chainID,
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: ids.Empty,
OutputIndex: 0,
@ -95,7 +95,7 @@ func TestTxInvalidUnsignedTx(t *testing.T) {
NetID: networkID,
BCID: chainID,
Ins: []*ava.TransferableInput{
&ava.TransferableInput{
{
UTXOID: ava.UTXOID{
TxID: ids.Empty,
OutputIndex: 0,
@ -110,7 +110,7 @@ func TestTxInvalidUnsignedTx(t *testing.T) {
},
},
},
&ava.TransferableInput{
{
UTXOID: ava.UTXOID{
TxID: ids.Empty,
OutputIndex: 0,
@ -153,7 +153,7 @@ func TestTxInvalidNumberOfCredentials(t *testing.T) {
NetID: networkID,
BCID: chainID,
Ins: []*ava.TransferableInput{
&ava.TransferableInput{
{
UTXOID: ava.UTXOID{TxID: ids.Empty, OutputIndex: 0},
Asset: ava.Asset{ID: asset},
In: &secp256k1fx.TransferInput{
@ -165,7 +165,7 @@ func TestTxInvalidNumberOfCredentials(t *testing.T) {
},
},
},
&ava.TransferableInput{
{
UTXOID: ava.UTXOID{TxID: ids.Empty, OutputIndex: 1},
Asset: ava.Asset{ID: asset},
In: &secp256k1fx.TransferInput{

View File

@ -206,22 +206,25 @@ func (tx *UniqueTx) Dependencies() []snowstorm.Tx {
continue
}
txID, _ := in.InputSource()
if !txIDs.Contains(txID) {
txIDs.Add(txID)
tx.deps = append(tx.deps, &UniqueTx{
vm: tx.vm,
txID: txID,
})
if txIDs.Contains(txID) {
continue
}
txIDs.Add(txID)
tx.deps = append(tx.deps, &UniqueTx{
vm: tx.vm,
txID: txID,
})
}
consumedIDs := tx.Tx.ConsumedAssetIDs()
for _, assetID := range tx.Tx.AssetIDs().List() {
if !txIDs.Contains(assetID) {
txIDs.Add(assetID)
tx.deps = append(tx.deps, &UniqueTx{
vm: tx.vm,
txID: assetID,
})
if consumedIDs.Contains(assetID) || txIDs.Contains(assetID) {
continue
}
txIDs.Add(assetID)
tx.deps = append(tx.deps, &UniqueTx{
vm: tx.vm,
txID: assetID,
})
}
return tx.deps
}

View File

@ -20,12 +20,12 @@ import (
"github.com/ava-labs/gecko/snow/choices"
"github.com/ava-labs/gecko/snow/consensus/snowstorm"
"github.com/ava-labs/gecko/snow/engine/common"
"github.com/ava-labs/gecko/utils/codec"
"github.com/ava-labs/gecko/utils/formatting"
"github.com/ava-labs/gecko/utils/logging"
"github.com/ava-labs/gecko/utils/timer"
"github.com/ava-labs/gecko/utils/wrappers"
"github.com/ava-labs/gecko/vms/components/ava"
"github.com/ava-labs/gecko/utils/codec"
cjson "github.com/ava-labs/gecko/utils/json"
)
@ -248,8 +248,8 @@ func (vm *VM) CreateHandlers() map[string]*common.HTTPHandler {
rpcServer.RegisterService(&Service{vm: vm}, "avm") // name this service "avm"
return map[string]*common.HTTPHandler{
"": &common.HTTPHandler{Handler: rpcServer},
"/pubsub": &common.HTTPHandler{LockOptions: common.NoLock, Handler: vm.pubsub},
"": {Handler: rpcServer},
"/pubsub": {LockOptions: common.NoLock, Handler: vm.pubsub},
}
}
@ -261,7 +261,7 @@ func (vm *VM) CreateStaticHandlers() map[string]*common.HTTPHandler {
newServer.RegisterCodec(codec, "application/json;charset=UTF-8")
newServer.RegisterService(&StaticService{}, "avm") // name this service "avm"
return map[string]*common.HTTPHandler{
"": &common.HTTPHandler{LockOptions: common.WriteLock, Handler: newServer},
"": {LockOptions: common.WriteLock, Handler: newServer},
}
}

View File

@ -84,11 +84,11 @@ func BuildGenesisTest(t *testing.T) []byte {
addr2 := keys[2].PublicKey().Address()
args := BuildGenesisArgs{GenesisData: map[string]AssetDefinition{
"asset1": AssetDefinition{
"asset1": {
Name: "myFixedCapAsset",
Symbol: "MFCA",
InitialState: map[string][]interface{}{
"fixedCap": []interface{}{
"fixedCap": {
Holder{
Amount: 100000,
Address: addr0.String(),
@ -108,11 +108,11 @@ func BuildGenesisTest(t *testing.T) []byte {
},
},
},
"asset2": AssetDefinition{
"asset2": {
Name: "myVarCapAsset",
Symbol: "MVCA",
InitialState: map[string][]interface{}{
"variableCap": []interface{}{
"variableCap": {
Owners{
Threshold: 1,
Minters: []string{
@ -131,10 +131,10 @@ func BuildGenesisTest(t *testing.T) []byte {
},
},
},
"asset3": AssetDefinition{
"asset3": {
Name: "myOtherVarCapAsset",
InitialState: map[string][]interface{}{
"variableCap": []interface{}{
"variableCap": {
Owners{
Threshold: 1,
Minters: []string{
@ -168,7 +168,7 @@ func GenesisVM(t *testing.T) ([]byte, chan common.Message, *VM) {
memdb.New(),
genesisBytes,
issuer,
[]*common.Fx{&common.Fx{
[]*common.Fx{{
ID: ids.Empty,
Fx: &secp256k1fx.Fx{},
}},
@ -195,7 +195,7 @@ func NewTx(t *testing.T, genesisBytes []byte, vm *VM) *Tx {
newTx := &Tx{UnsignedTx: &BaseTx{
NetID: networkID,
BCID: chainID,
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: genesisTx.ID(),
OutputIndex: 1,
@ -357,7 +357,7 @@ func TestTxSerialization(t *testing.T) {
Symbol: "symb",
Denomination: 0,
States: []*InitialState{
&InitialState{
{
FxID: 0,
Outs: []verify.Verifiable{
&secp256k1fx.MintOutput{
@ -456,7 +456,7 @@ func TestFxInitializationFailure(t *testing.T) {
/*db=*/ memdb.New(),
/*genesisState=*/ genesisBytes,
/*engineMessenger=*/ make(chan common.Message, 1),
/*fxs=*/ []*common.Fx{&common.Fx{
/*fxs=*/ []*common.Fx{{
ID: ids.Empty,
Fx: &testFx{initialize: errUnknownFx},
}},
@ -537,7 +537,7 @@ func TestIssueDependentTx(t *testing.T) {
firstTx := &Tx{UnsignedTx: &BaseTx{
NetID: networkID,
BCID: chainID,
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: genesisTx.ID(),
OutputIndex: 1,
@ -552,7 +552,7 @@ func TestIssueDependentTx(t *testing.T) {
},
},
}},
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
Outs: []*ava.TransferableOutput{{
Asset: ava.Asset{ID: genesisTx.ID()},
Out: &secp256k1fx.TransferOutput{
Amt: 50000,
@ -596,7 +596,7 @@ func TestIssueDependentTx(t *testing.T) {
secondTx := &Tx{UnsignedTx: &BaseTx{
NetID: networkID,
BCID: chainID,
Ins: []*ava.TransferableInput{&ava.TransferableInput{
Ins: []*ava.TransferableInput{{
UTXOID: ava.UTXOID{
TxID: firstTx.ID(),
OutputIndex: 0,
@ -671,11 +671,11 @@ func TestIssueNFT(t *testing.T) {
genesisBytes,
issuer,
[]*common.Fx{
&common.Fx{
{
ID: ids.Empty.Prefix(0),
Fx: &secp256k1fx.Fx{},
},
&common.Fx{
{
ID: ids.Empty.Prefix(1),
Fx: &nftfx.Fx{},
},
@ -704,7 +704,7 @@ func TestIssueNFT(t *testing.T) {
Name: "Team Rocket",
Symbol: "TR",
Denomination: 0,
States: []*InitialState{&InitialState{
States: []*InitialState{{
FxID: 1,
Outs: []verify.Verifiable{
&nftfx.MintOutput{
@ -740,9 +740,9 @@ func TestIssueNFT(t *testing.T) {
NetID: networkID,
BCID: chainID,
},
Ops: []*Operation{&Operation{
Ops: []*Operation{{
Asset: ava.Asset{ID: createAssetTx.ID()},
UTXOIDs: []*ava.UTXOID{&ava.UTXOID{
UTXOIDs: []*ava.UTXOID{{
TxID: createAssetTx.ID(),
OutputIndex: 0,
}},
@ -752,9 +752,7 @@ func TestIssueNFT(t *testing.T) {
},
GroupID: 1,
Payload: []byte{'h', 'e', 'l', 'l', 'o'},
Outputs: []*secp256k1fx.OutputOwners{
&secp256k1fx.OutputOwners{},
},
Outputs: []*secp256k1fx.OutputOwners{{}},
},
}},
}}
@ -793,9 +791,9 @@ func TestIssueNFT(t *testing.T) {
NetID: networkID,
BCID: chainID,
},
Ops: []*Operation{&Operation{
Ops: []*Operation{{
Asset: ava.Asset{ID: createAssetTx.ID()},
UTXOIDs: []*ava.UTXOID{&ava.UTXOID{
UTXOIDs: []*ava.UTXOID{{
TxID: mintNFTTx.ID(),
OutputIndex: 0,
}},
@ -840,15 +838,15 @@ func TestIssueProperty(t *testing.T) {
genesisBytes,
issuer,
[]*common.Fx{
&common.Fx{
{
ID: ids.Empty.Prefix(0),
Fx: &secp256k1fx.Fx{},
},
&common.Fx{
{
ID: ids.Empty.Prefix(1),
Fx: &nftfx.Fx{},
},
&common.Fx{
{
ID: ids.Empty.Prefix(2),
Fx: &propertyfx.Fx{},
},
@ -877,7 +875,7 @@ func TestIssueProperty(t *testing.T) {
Name: "Team Rocket",
Symbol: "TR",
Denomination: 0,
States: []*InitialState{&InitialState{
States: []*InitialState{{
FxID: 2,
Outs: []verify.Verifiable{
&propertyfx.MintOutput{
@ -905,9 +903,9 @@ func TestIssueProperty(t *testing.T) {
NetID: networkID,
BCID: chainID,
},
Ops: []*Operation{&Operation{
Ops: []*Operation{{
Asset: ava.Asset{ID: createAssetTx.ID()},
UTXOIDs: []*ava.UTXOID{&ava.UTXOID{
UTXOIDs: []*ava.UTXOID{{
TxID: createAssetTx.ID(),
OutputIndex: 0,
}},
@ -960,9 +958,9 @@ func TestIssueProperty(t *testing.T) {
NetID: networkID,
BCID: chainID,
},
Ops: []*Operation{&Operation{
Ops: []*Operation{{
Asset: ava.Asset{ID: createAssetTx.ID()},
UTXOIDs: []*ava.UTXOID{&ava.UTXOID{
UTXOIDs: []*ava.UTXOID{{
TxID: mintPropertyTx.ID(),
OutputIndex: 1,
}},