mirror of https://github.com/poanetwork/gecko.git
Merge pull request #87 from ava-labs/remove-tx-dependencies
use transitive dependencies when possible with transaction dependencies
This commit is contained in:
commit
f2126cba19
|
@ -18,9 +18,10 @@ import (
|
||||||
// database, writing changes to the underlying database only when commit is
|
// database, writing changes to the underlying database only when commit is
|
||||||
// called.
|
// called.
|
||||||
type Database struct {
|
type Database struct {
|
||||||
lock sync.RWMutex
|
lock sync.RWMutex
|
||||||
mem map[string]valueDelete
|
mem map[string]valueDelete
|
||||||
db database.Database
|
db database.Database
|
||||||
|
batch database.Batch
|
||||||
}
|
}
|
||||||
|
|
||||||
type valueDelete struct {
|
type valueDelete struct {
|
||||||
|
@ -31,8 +32,9 @@ type valueDelete struct {
|
||||||
// New returns a new prefixed database
|
// New returns a new prefixed database
|
||||||
func New(db database.Database) *Database {
|
func New(db database.Database) *Database {
|
||||||
return &Database{
|
return &Database{
|
||||||
mem: make(map[string]valueDelete, memdb.DefaultSize),
|
mem: make(map[string]valueDelete, memdb.DefaultSize),
|
||||||
db: db,
|
db: db,
|
||||||
|
batch: db.NewBatch(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -169,6 +171,7 @@ func (db *Database) SetDatabase(newDB database.Database) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
db.db = newDB
|
db.db = newDB
|
||||||
|
db.batch = newDB.NewBatch()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -206,7 +209,9 @@ func (db *Database) Abort() {
|
||||||
|
|
||||||
func (db *Database) abort() { db.mem = make(map[string]valueDelete, memdb.DefaultSize) }
|
func (db *Database) abort() { db.mem = make(map[string]valueDelete, memdb.DefaultSize) }
|
||||||
|
|
||||||
// CommitBatch returns a batch that will commit all pending writes to the underlying database
|
// CommitBatch returns a batch that will commit all pending writes to the
|
||||||
|
// underlying database. The returned batch should be written before future calls
|
||||||
|
// to this DB unless the batch will never be written.
|
||||||
func (db *Database) CommitBatch() (database.Batch, error) {
|
func (db *Database) CommitBatch() (database.Batch, error) {
|
||||||
db.lock.Lock()
|
db.lock.Lock()
|
||||||
defer db.lock.Unlock()
|
defer db.lock.Unlock()
|
||||||
|
@ -219,21 +224,21 @@ func (db *Database) commitBatch() (database.Batch, error) {
|
||||||
return nil, database.ErrClosed
|
return nil, database.ErrClosed
|
||||||
}
|
}
|
||||||
|
|
||||||
batch := db.db.NewBatch()
|
db.batch.Reset()
|
||||||
for key, value := range db.mem {
|
for key, value := range db.mem {
|
||||||
if value.delete {
|
if value.delete {
|
||||||
if err := batch.Delete([]byte(key)); err != nil {
|
if err := db.batch.Delete([]byte(key)); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
} else if err := batch.Put([]byte(key), value.value); err != nil {
|
} else if err := db.batch.Put([]byte(key), value.value); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err := batch.Write(); err != nil {
|
if err := db.batch.Write(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return batch, nil
|
return db.batch, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close implements the database.Database interface
|
// Close implements the database.Database interface
|
||||||
|
|
|
@ -54,6 +54,8 @@ func (vtx *uniqueVertex) refresh() {
|
||||||
func (vtx *uniqueVertex) Evict() {
|
func (vtx *uniqueVertex) Evict() {
|
||||||
if vtx.v != nil {
|
if vtx.v != nil {
|
||||||
vtx.v.unique = false
|
vtx.v.unique = false
|
||||||
|
// make sure the parents are able to be garbage collected
|
||||||
|
vtx.v.parents = nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,8 +9,8 @@ import (
|
||||||
"github.com/ava-labs/gecko/database"
|
"github.com/ava-labs/gecko/database"
|
||||||
"github.com/ava-labs/gecko/ids"
|
"github.com/ava-labs/gecko/ids"
|
||||||
"github.com/ava-labs/gecko/snow"
|
"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/utils/codec"
|
||||||
|
"github.com/ava-labs/gecko/vms/components/ava"
|
||||||
"github.com/ava-labs/gecko/vms/components/verify"
|
"github.com/ava-labs/gecko/vms/components/verify"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -46,8 +46,8 @@ func (t *BaseTx) InputUTXOs() []*ava.UTXOID {
|
||||||
return utxos
|
return utxos
|
||||||
}
|
}
|
||||||
|
|
||||||
// AssetIDs returns the IDs of the assets this transaction depends on
|
// ConsumedAssetIDs returns the IDs of the assets this transaction consumes
|
||||||
func (t *BaseTx) AssetIDs() ids.Set {
|
func (t *BaseTx) ConsumedAssetIDs() ids.Set {
|
||||||
assets := ids.Set{}
|
assets := ids.Set{}
|
||||||
for _, in := range t.Ins {
|
for _, in := range t.Ins {
|
||||||
assets.Add(in.AssetID())
|
assets.Add(in.AssetID())
|
||||||
|
@ -55,6 +55,11 @@ func (t *BaseTx) AssetIDs() ids.Set {
|
||||||
return assets
|
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
|
// NumCredentials returns the number of expected credentials
|
||||||
func (t *BaseTx) NumCredentials() int { return len(t.Ins) }
|
func (t *BaseTx) NumCredentials() int { return len(t.Ins) }
|
||||||
|
|
||||||
|
|
|
@ -77,7 +77,7 @@ func TestBaseTxSerialization(t *testing.T) {
|
||||||
tx := &Tx{UnsignedTx: &BaseTx{
|
tx := &Tx{UnsignedTx: &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
|
Outs: []*ava.TransferableOutput{{
|
||||||
Asset: ava.Asset{ID: asset},
|
Asset: ava.Asset{ID: asset},
|
||||||
Out: &secp256k1fx.TransferOutput{
|
Out: &secp256k1fx.TransferOutput{
|
||||||
Amt: 12345,
|
Amt: 12345,
|
||||||
|
@ -87,7 +87,7 @@ func TestBaseTxSerialization(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}},
|
}},
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: ids.NewID([32]byte{
|
TxID: ids.NewID([32]byte{
|
||||||
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
|
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
|
||||||
|
@ -125,7 +125,7 @@ func TestBaseTxGetters(t *testing.T) {
|
||||||
tx := &BaseTx{
|
tx := &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
|
Outs: []*ava.TransferableOutput{{
|
||||||
Asset: ava.Asset{ID: asset},
|
Asset: ava.Asset{ID: asset},
|
||||||
Out: &secp256k1fx.TransferOutput{
|
Out: &secp256k1fx.TransferOutput{
|
||||||
Amt: 12345,
|
Amt: 12345,
|
||||||
|
@ -135,7 +135,7 @@ func TestBaseTxGetters(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}},
|
}},
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: ids.NewID([32]byte{
|
TxID: ids.NewID([32]byte{
|
||||||
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
|
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
|
||||||
|
@ -162,6 +162,10 @@ func TestBaseTxGetters(t *testing.T) {
|
||||||
t.Fatalf("Wrong number of assets returned")
|
t.Fatalf("Wrong number of assets returned")
|
||||||
} else if !assets.Contains(asset) {
|
} else if !assets.Contains(asset) {
|
||||||
t.Fatalf("Wrong asset returned")
|
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 {
|
} else if utxos := tx.UTXOs(); len(utxos) != 1 {
|
||||||
t.Fatalf("Wrong number of utxos returned")
|
t.Fatalf("Wrong number of utxos returned")
|
||||||
} else if utxo := utxos[0]; !utxo.TxID.Equals(txID) {
|
} else if utxo := utxos[0]; !utxo.TxID.Equals(txID) {
|
||||||
|
@ -179,7 +183,7 @@ func TestBaseTxSyntacticVerify(t *testing.T) {
|
||||||
tx := &BaseTx{
|
tx := &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
|
Outs: []*ava.TransferableOutput{{
|
||||||
Asset: ava.Asset{ID: asset},
|
Asset: ava.Asset{ID: asset},
|
||||||
Out: &secp256k1fx.TransferOutput{
|
Out: &secp256k1fx.TransferOutput{
|
||||||
Amt: 12345,
|
Amt: 12345,
|
||||||
|
@ -189,7 +193,7 @@ func TestBaseTxSyntacticVerify(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}},
|
}},
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: ids.NewID([32]byte{
|
TxID: ids.NewID([32]byte{
|
||||||
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
|
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
|
||||||
|
@ -230,7 +234,7 @@ func TestBaseTxSyntacticVerifyWrongNetworkID(t *testing.T) {
|
||||||
tx := &BaseTx{
|
tx := &BaseTx{
|
||||||
NetID: 0,
|
NetID: 0,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
|
Outs: []*ava.TransferableOutput{{
|
||||||
Asset: ava.Asset{ID: asset},
|
Asset: ava.Asset{ID: asset},
|
||||||
Out: &secp256k1fx.TransferOutput{
|
Out: &secp256k1fx.TransferOutput{
|
||||||
Amt: 12345,
|
Amt: 12345,
|
||||||
|
@ -240,7 +244,7 @@ func TestBaseTxSyntacticVerifyWrongNetworkID(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}},
|
}},
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: ids.NewID([32]byte{
|
TxID: ids.NewID([32]byte{
|
||||||
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
|
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
|
||||||
|
@ -272,7 +276,7 @@ func TestBaseTxSyntacticVerifyWrongChainID(t *testing.T) {
|
||||||
tx := &BaseTx{
|
tx := &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: ids.Empty,
|
BCID: ids.Empty,
|
||||||
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
|
Outs: []*ava.TransferableOutput{{
|
||||||
Asset: ava.Asset{ID: asset},
|
Asset: ava.Asset{ID: asset},
|
||||||
Out: &secp256k1fx.TransferOutput{
|
Out: &secp256k1fx.TransferOutput{
|
||||||
Amt: 12345,
|
Amt: 12345,
|
||||||
|
@ -282,7 +286,7 @@ func TestBaseTxSyntacticVerifyWrongChainID(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}},
|
}},
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: ids.NewID([32]byte{
|
TxID: ids.NewID([32]byte{
|
||||||
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
|
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
|
||||||
|
@ -315,7 +319,7 @@ func TestBaseTxSyntacticVerifyInvalidOutput(t *testing.T) {
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Outs: []*ava.TransferableOutput{nil},
|
Outs: []*ava.TransferableOutput{nil},
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: ids.NewID([32]byte{
|
TxID: ids.NewID([32]byte{
|
||||||
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
|
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
|
||||||
|
@ -348,7 +352,7 @@ func TestBaseTxSyntacticVerifyUnsortedOutputs(t *testing.T) {
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Outs: []*ava.TransferableOutput{
|
Outs: []*ava.TransferableOutput{
|
||||||
&ava.TransferableOutput{
|
{
|
||||||
Asset: ava.Asset{ID: asset},
|
Asset: ava.Asset{ID: asset},
|
||||||
Out: &secp256k1fx.TransferOutput{
|
Out: &secp256k1fx.TransferOutput{
|
||||||
Amt: 2,
|
Amt: 2,
|
||||||
|
@ -358,7 +362,7 @@ func TestBaseTxSyntacticVerifyUnsortedOutputs(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
&ava.TransferableOutput{
|
{
|
||||||
Asset: ava.Asset{ID: asset},
|
Asset: ava.Asset{ID: asset},
|
||||||
Out: &secp256k1fx.TransferOutput{
|
Out: &secp256k1fx.TransferOutput{
|
||||||
Amt: 1,
|
Amt: 1,
|
||||||
|
@ -370,7 +374,7 @@ func TestBaseTxSyntacticVerifyUnsortedOutputs(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Ins: []*ava.TransferableInput{
|
Ins: []*ava.TransferableInput{
|
||||||
&ava.TransferableInput{
|
{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: ids.NewID([32]byte{
|
TxID: ids.NewID([32]byte{
|
||||||
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
|
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
|
||||||
|
@ -403,7 +407,7 @@ func TestBaseTxSyntacticVerifyInvalidInput(t *testing.T) {
|
||||||
tx := &BaseTx{
|
tx := &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
|
Outs: []*ava.TransferableOutput{{
|
||||||
Asset: ava.Asset{ID: asset},
|
Asset: ava.Asset{ID: asset},
|
||||||
Out: &secp256k1fx.TransferOutput{
|
Out: &secp256k1fx.TransferOutput{
|
||||||
Amt: 12345,
|
Amt: 12345,
|
||||||
|
@ -428,7 +432,7 @@ func TestBaseTxSyntacticVerifyInputOverflow(t *testing.T) {
|
||||||
tx := &BaseTx{
|
tx := &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
|
Outs: []*ava.TransferableOutput{{
|
||||||
Asset: ava.Asset{ID: asset},
|
Asset: ava.Asset{ID: asset},
|
||||||
Out: &secp256k1fx.TransferOutput{
|
Out: &secp256k1fx.TransferOutput{
|
||||||
Amt: 12345,
|
Amt: 12345,
|
||||||
|
@ -439,7 +443,7 @@ func TestBaseTxSyntacticVerifyInputOverflow(t *testing.T) {
|
||||||
},
|
},
|
||||||
}},
|
}},
|
||||||
Ins: []*ava.TransferableInput{
|
Ins: []*ava.TransferableInput{
|
||||||
&ava.TransferableInput{
|
{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: ids.NewID([32]byte{
|
TxID: ids.NewID([32]byte{
|
||||||
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
|
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
|
||||||
|
@ -457,7 +461,7 @@ func TestBaseTxSyntacticVerifyInputOverflow(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
&ava.TransferableInput{
|
{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: ids.NewID([32]byte{
|
TxID: ids.NewID([32]byte{
|
||||||
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
|
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
|
||||||
|
@ -491,7 +495,7 @@ func TestBaseTxSyntacticVerifyOutputOverflow(t *testing.T) {
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Outs: []*ava.TransferableOutput{
|
Outs: []*ava.TransferableOutput{
|
||||||
&ava.TransferableOutput{
|
{
|
||||||
Asset: ava.Asset{ID: asset},
|
Asset: ava.Asset{ID: asset},
|
||||||
Out: &secp256k1fx.TransferOutput{
|
Out: &secp256k1fx.TransferOutput{
|
||||||
Amt: 2,
|
Amt: 2,
|
||||||
|
@ -501,7 +505,7 @@ func TestBaseTxSyntacticVerifyOutputOverflow(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
&ava.TransferableOutput{
|
{
|
||||||
Asset: ava.Asset{ID: asset},
|
Asset: ava.Asset{ID: asset},
|
||||||
Out: &secp256k1fx.TransferOutput{
|
Out: &secp256k1fx.TransferOutput{
|
||||||
Amt: math.MaxUint64,
|
Amt: math.MaxUint64,
|
||||||
|
@ -512,7 +516,7 @@ func TestBaseTxSyntacticVerifyOutputOverflow(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: ids.NewID([32]byte{
|
TxID: ids.NewID([32]byte{
|
||||||
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
|
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
|
||||||
|
@ -544,7 +548,7 @@ func TestBaseTxSyntacticVerifyInsufficientFunds(t *testing.T) {
|
||||||
tx := &BaseTx{
|
tx := &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
|
Outs: []*ava.TransferableOutput{{
|
||||||
Asset: ava.Asset{ID: asset},
|
Asset: ava.Asset{ID: asset},
|
||||||
Out: &secp256k1fx.TransferOutput{
|
Out: &secp256k1fx.TransferOutput{
|
||||||
Amt: math.MaxUint64,
|
Amt: math.MaxUint64,
|
||||||
|
@ -554,7 +558,7 @@ func TestBaseTxSyntacticVerifyInsufficientFunds(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}},
|
}},
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: ids.NewID([32]byte{
|
TxID: ids.NewID([32]byte{
|
||||||
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
|
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
|
||||||
|
@ -586,7 +590,7 @@ func TestBaseTxSyntacticVerifyUninitialized(t *testing.T) {
|
||||||
tx := &BaseTx{
|
tx := &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
|
Outs: []*ava.TransferableOutput{{
|
||||||
Asset: ava.Asset{ID: asset},
|
Asset: ava.Asset{ID: asset},
|
||||||
Out: &secp256k1fx.TransferOutput{
|
Out: &secp256k1fx.TransferOutput{
|
||||||
Amt: 12345,
|
Amt: 12345,
|
||||||
|
@ -596,7 +600,7 @@ func TestBaseTxSyntacticVerifyUninitialized(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}},
|
}},
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: ids.NewID([32]byte{
|
TxID: ids.NewID([32]byte{
|
||||||
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
|
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
|
||||||
|
@ -633,7 +637,7 @@ func TestBaseTxSemanticVerify(t *testing.T) {
|
||||||
tx := &Tx{UnsignedTx: &BaseTx{
|
tx := &Tx{UnsignedTx: &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: genesisTx.ID(),
|
TxID: genesisTx.ID(),
|
||||||
OutputIndex: 1,
|
OutputIndex: 1,
|
||||||
|
@ -702,7 +706,7 @@ func TestBaseTxSemanticVerifyUnknownFx(t *testing.T) {
|
||||||
tx := &Tx{UnsignedTx: &BaseTx{
|
tx := &Tx{UnsignedTx: &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: genesisTx.ID(),
|
TxID: genesisTx.ID(),
|
||||||
OutputIndex: 1,
|
OutputIndex: 1,
|
||||||
|
@ -754,7 +758,7 @@ func TestBaseTxSemanticVerifyWrongAssetID(t *testing.T) {
|
||||||
tx := &Tx{UnsignedTx: &BaseTx{
|
tx := &Tx{UnsignedTx: &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: genesisTx.ID(),
|
TxID: genesisTx.ID(),
|
||||||
OutputIndex: 1,
|
OutputIndex: 1,
|
||||||
|
@ -825,11 +829,11 @@ func TestBaseTxSemanticVerifyUnauthorizedFx(t *testing.T) {
|
||||||
genesisBytes,
|
genesisBytes,
|
||||||
issuer,
|
issuer,
|
||||||
[]*common.Fx{
|
[]*common.Fx{
|
||||||
&common.Fx{
|
{
|
||||||
ID: ids.Empty,
|
ID: ids.Empty,
|
||||||
Fx: &secp256k1fx.Fx{},
|
Fx: &secp256k1fx.Fx{},
|
||||||
},
|
},
|
||||||
&common.Fx{
|
{
|
||||||
ID: ids.NewID([32]byte{1}),
|
ID: ids.NewID([32]byte{1}),
|
||||||
Fx: &testFx{},
|
Fx: &testFx{},
|
||||||
},
|
},
|
||||||
|
@ -863,7 +867,7 @@ func TestBaseTxSemanticVerifyUnauthorizedFx(t *testing.T) {
|
||||||
tx := &Tx{UnsignedTx: &BaseTx{
|
tx := &Tx{UnsignedTx: &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: genesisTx.ID(),
|
TxID: genesisTx.ID(),
|
||||||
OutputIndex: 1,
|
OutputIndex: 1,
|
||||||
|
@ -923,7 +927,7 @@ func TestBaseTxSemanticVerifyInvalidSignature(t *testing.T) {
|
||||||
tx := &Tx{UnsignedTx: &BaseTx{
|
tx := &Tx{UnsignedTx: &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: genesisTx.ID(),
|
TxID: genesisTx.ID(),
|
||||||
OutputIndex: 1,
|
OutputIndex: 1,
|
||||||
|
@ -941,9 +945,7 @@ func TestBaseTxSemanticVerifyInvalidSignature(t *testing.T) {
|
||||||
}}
|
}}
|
||||||
|
|
||||||
tx.Creds = append(tx.Creds, &secp256k1fx.Credential{
|
tx.Creds = append(tx.Creds, &secp256k1fx.Credential{
|
||||||
Sigs: [][crypto.SECP256K1RSigLen]byte{
|
Sigs: [][crypto.SECP256K1RSigLen]byte{{}},
|
||||||
[crypto.SECP256K1RSigLen]byte{},
|
|
||||||
},
|
|
||||||
})
|
})
|
||||||
|
|
||||||
b, err := vm.codec.Marshal(tx)
|
b, err := vm.codec.Marshal(tx)
|
||||||
|
@ -977,7 +979,7 @@ func TestBaseTxSemanticVerifyMissingUTXO(t *testing.T) {
|
||||||
tx := &Tx{UnsignedTx: &BaseTx{
|
tx := &Tx{UnsignedTx: &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: ids.Empty,
|
TxID: ids.Empty,
|
||||||
OutputIndex: 1,
|
OutputIndex: 1,
|
||||||
|
@ -1044,7 +1046,7 @@ func TestBaseTxSemanticVerifyInvalidUTXO(t *testing.T) {
|
||||||
tx := &Tx{UnsignedTx: &BaseTx{
|
tx := &Tx{UnsignedTx: &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: genesisTx.ID(),
|
TxID: genesisTx.ID(),
|
||||||
OutputIndex: math.MaxUint32,
|
OutputIndex: math.MaxUint32,
|
||||||
|
@ -1107,7 +1109,7 @@ func TestBaseTxSemanticVerifyPendingInvalidUTXO(t *testing.T) {
|
||||||
pendingTx := &Tx{UnsignedTx: &BaseTx{
|
pendingTx := &Tx{UnsignedTx: &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: genesisTx.ID(),
|
TxID: genesisTx.ID(),
|
||||||
OutputIndex: 1,
|
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()},
|
Asset: ava.Asset{ID: genesisTx.ID()},
|
||||||
Out: &secp256k1fx.TransferOutput{
|
Out: &secp256k1fx.TransferOutput{
|
||||||
Amt: 50000,
|
Amt: 50000,
|
||||||
|
@ -1179,7 +1181,7 @@ func TestBaseTxSemanticVerifyPendingInvalidUTXO(t *testing.T) {
|
||||||
tx := &Tx{UnsignedTx: &BaseTx{
|
tx := &Tx{UnsignedTx: &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: txID,
|
TxID: txID,
|
||||||
OutputIndex: 2,
|
OutputIndex: 2,
|
||||||
|
@ -1241,7 +1243,7 @@ func TestBaseTxSemanticVerifyPendingWrongAssetID(t *testing.T) {
|
||||||
pendingTx := &Tx{UnsignedTx: &BaseTx{
|
pendingTx := &Tx{UnsignedTx: &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: genesisTx.ID(),
|
TxID: genesisTx.ID(),
|
||||||
OutputIndex: 1,
|
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()},
|
Asset: ava.Asset{ID: genesisTx.ID()},
|
||||||
Out: &secp256k1fx.TransferOutput{
|
Out: &secp256k1fx.TransferOutput{
|
||||||
Amt: 50000,
|
Amt: 50000,
|
||||||
|
@ -1313,7 +1315,7 @@ func TestBaseTxSemanticVerifyPendingWrongAssetID(t *testing.T) {
|
||||||
tx := &Tx{UnsignedTx: &BaseTx{
|
tx := &Tx{UnsignedTx: &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: txID,
|
TxID: txID,
|
||||||
OutputIndex: 0,
|
OutputIndex: 0,
|
||||||
|
@ -1381,11 +1383,11 @@ func TestBaseTxSemanticVerifyPendingUnauthorizedFx(t *testing.T) {
|
||||||
genesisBytes,
|
genesisBytes,
|
||||||
issuer,
|
issuer,
|
||||||
[]*common.Fx{
|
[]*common.Fx{
|
||||||
&common.Fx{
|
{
|
||||||
ID: ids.NewID([32]byte{1}),
|
ID: ids.NewID([32]byte{1}),
|
||||||
Fx: &secp256k1fx.Fx{},
|
Fx: &secp256k1fx.Fx{},
|
||||||
},
|
},
|
||||||
&common.Fx{
|
{
|
||||||
ID: ids.Empty,
|
ID: ids.Empty,
|
||||||
Fx: &testFx{},
|
Fx: &testFx{},
|
||||||
},
|
},
|
||||||
|
@ -1419,7 +1421,7 @@ func TestBaseTxSemanticVerifyPendingUnauthorizedFx(t *testing.T) {
|
||||||
pendingTx := &Tx{UnsignedTx: &BaseTx{
|
pendingTx := &Tx{UnsignedTx: &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: genesisTx.ID(),
|
TxID: genesisTx.ID(),
|
||||||
OutputIndex: 1,
|
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()},
|
Asset: ava.Asset{ID: genesisTx.ID()},
|
||||||
Out: &secp256k1fx.TransferOutput{
|
Out: &secp256k1fx.TransferOutput{
|
||||||
Amt: 50000,
|
Amt: 50000,
|
||||||
|
@ -1491,7 +1493,7 @@ func TestBaseTxSemanticVerifyPendingUnauthorizedFx(t *testing.T) {
|
||||||
tx := &Tx{UnsignedTx: &BaseTx{
|
tx := &Tx{UnsignedTx: &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: txID,
|
TxID: txID,
|
||||||
OutputIndex: 0,
|
OutputIndex: 0,
|
||||||
|
@ -1543,11 +1545,11 @@ func TestBaseTxSemanticVerifyPendingInvalidSignature(t *testing.T) {
|
||||||
genesisBytes,
|
genesisBytes,
|
||||||
issuer,
|
issuer,
|
||||||
[]*common.Fx{
|
[]*common.Fx{
|
||||||
&common.Fx{
|
{
|
||||||
ID: ids.NewID([32]byte{1}),
|
ID: ids.NewID([32]byte{1}),
|
||||||
Fx: &secp256k1fx.Fx{},
|
Fx: &secp256k1fx.Fx{},
|
||||||
},
|
},
|
||||||
&common.Fx{
|
{
|
||||||
ID: ids.Empty,
|
ID: ids.Empty,
|
||||||
Fx: &testFx{},
|
Fx: &testFx{},
|
||||||
},
|
},
|
||||||
|
@ -1581,7 +1583,7 @@ func TestBaseTxSemanticVerifyPendingInvalidSignature(t *testing.T) {
|
||||||
pendingTx := &Tx{UnsignedTx: &BaseTx{
|
pendingTx := &Tx{UnsignedTx: &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: genesisTx.ID(),
|
TxID: genesisTx.ID(),
|
||||||
OutputIndex: 1,
|
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()},
|
Asset: ava.Asset{ID: genesisTx.ID()},
|
||||||
Out: &secp256k1fx.TransferOutput{
|
Out: &secp256k1fx.TransferOutput{
|
||||||
Amt: 50000,
|
Amt: 50000,
|
||||||
|
@ -1653,7 +1655,7 @@ func TestBaseTxSemanticVerifyPendingInvalidSignature(t *testing.T) {
|
||||||
tx := &Tx{UnsignedTx: &BaseTx{
|
tx := &Tx{UnsignedTx: &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: txID,
|
TxID: txID,
|
||||||
OutputIndex: 0,
|
OutputIndex: 0,
|
||||||
|
@ -1671,9 +1673,7 @@ func TestBaseTxSemanticVerifyPendingInvalidSignature(t *testing.T) {
|
||||||
}}
|
}}
|
||||||
|
|
||||||
tx.Creds = append(tx.Creds, &secp256k1fx.Credential{
|
tx.Creds = append(tx.Creds, &secp256k1fx.Credential{
|
||||||
Sigs: [][crypto.SECP256K1RSigLen]byte{
|
Sigs: [][crypto.SECP256K1RSigLen]byte{{}},
|
||||||
[crypto.SECP256K1RSigLen]byte{},
|
|
||||||
},
|
|
||||||
})
|
})
|
||||||
|
|
||||||
b, err = vm.codec.Marshal(tx)
|
b, err = vm.codec.Marshal(tx)
|
||||||
|
|
|
@ -8,8 +8,8 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/ava-labs/gecko/ids"
|
"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/utils/codec"
|
||||||
|
"github.com/ava-labs/gecko/vms/components/ava"
|
||||||
"github.com/ava-labs/gecko/vms/components/verify"
|
"github.com/ava-labs/gecko/vms/components/verify"
|
||||||
"github.com/ava-labs/gecko/vms/secp256k1fx"
|
"github.com/ava-labs/gecko/vms/secp256k1fx"
|
||||||
)
|
)
|
||||||
|
@ -93,7 +93,7 @@ func TestCreateAssetTxSerialization(t *testing.T) {
|
||||||
0xbb, 0xbb, 0xbb, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa,
|
0xbb, 0xbb, 0xbb, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
0x99, 0x99, 0x99, 0x99, 0x88, 0x88, 0x88, 0x88,
|
0x99, 0x99, 0x99, 0x99, 0x88, 0x88, 0x88, 0x88,
|
||||||
}),
|
}),
|
||||||
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
|
Outs: []*ava.TransferableOutput{{
|
||||||
Asset: ava.Asset{
|
Asset: ava.Asset{
|
||||||
ID: ids.NewID([32]byte{
|
ID: ids.NewID([32]byte{
|
||||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
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{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: ids.NewID([32]byte{
|
TxID: ids.NewID([32]byte{
|
||||||
0xf1, 0xe1, 0xd1, 0xc1, 0xb1, 0xa1, 0x91, 0x81,
|
0xf1, 0xe1, 0xd1, 0xc1, 0xb1, 0xa1, 0x91, 0x81,
|
||||||
|
@ -152,7 +152,7 @@ func TestCreateAssetTxSerialization(t *testing.T) {
|
||||||
Symbol: "VIX",
|
Symbol: "VIX",
|
||||||
Denomination: 2,
|
Denomination: 2,
|
||||||
States: []*InitialState{
|
States: []*InitialState{
|
||||||
&InitialState{
|
{
|
||||||
FxID: 0,
|
FxID: 0,
|
||||||
Outs: []verify.Verifiable{
|
Outs: []verify.Verifiable{
|
||||||
&secp256k1fx.TransferOutput{
|
&secp256k1fx.TransferOutput{
|
||||||
|
|
|
@ -12,11 +12,11 @@ import (
|
||||||
"github.com/ava-labs/gecko/ids"
|
"github.com/ava-labs/gecko/ids"
|
||||||
"github.com/ava-labs/gecko/snow"
|
"github.com/ava-labs/gecko/snow"
|
||||||
"github.com/ava-labs/gecko/snow/engine/common"
|
"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/crypto"
|
||||||
"github.com/ava-labs/gecko/utils/hashing"
|
"github.com/ava-labs/gecko/utils/hashing"
|
||||||
"github.com/ava-labs/gecko/utils/logging"
|
"github.com/ava-labs/gecko/utils/logging"
|
||||||
"github.com/ava-labs/gecko/vms/components/ava"
|
"github.com/ava-labs/gecko/vms/components/ava"
|
||||||
"github.com/ava-labs/gecko/utils/codec"
|
|
||||||
"github.com/ava-labs/gecko/vms/secp256k1fx"
|
"github.com/ava-labs/gecko/vms/secp256k1fx"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -68,7 +68,7 @@ func TestExportTxSerialization(t *testing.T) {
|
||||||
0xbb, 0xbb, 0xbb, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa,
|
0xbb, 0xbb, 0xbb, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
0x99, 0x99, 0x99, 0x99, 0x88, 0x88, 0x88, 0x88,
|
0x99, 0x99, 0x99, 0x99, 0x88, 0x88, 0x88, 0x88,
|
||||||
}),
|
}),
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{TxID: ids.NewID([32]byte{
|
UTXOID: ava.UTXOID{TxID: ids.NewID([32]byte{
|
||||||
0x0f, 0x2f, 0x4f, 0x6f, 0x8e, 0xae, 0xce, 0xee,
|
0x0f, 0x2f, 0x4f, 0x6f, 0x8e, 0xae, 0xce, 0xee,
|
||||||
0x0d, 0x2d, 0x4d, 0x6d, 0x8c, 0xac, 0xcc, 0xec,
|
0x0d, 0x2d, 0x4d, 0x6d, 0x8c, 0xac, 0xcc, 0xec,
|
||||||
|
@ -141,7 +141,7 @@ func TestIssueExportTx(t *testing.T) {
|
||||||
memdb.New(),
|
memdb.New(),
|
||||||
genesisBytes,
|
genesisBytes,
|
||||||
issuer,
|
issuer,
|
||||||
[]*common.Fx{&common.Fx{
|
[]*common.Fx{{
|
||||||
ID: ids.Empty,
|
ID: ids.Empty,
|
||||||
Fx: &secp256k1fx.Fx{},
|
Fx: &secp256k1fx.Fx{},
|
||||||
}},
|
}},
|
||||||
|
@ -167,7 +167,7 @@ func TestIssueExportTx(t *testing.T) {
|
||||||
BaseTx: BaseTx{
|
BaseTx: BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: avaID,
|
TxID: avaID,
|
||||||
OutputIndex: 1,
|
OutputIndex: 1,
|
||||||
|
@ -179,7 +179,7 @@ func TestIssueExportTx(t *testing.T) {
|
||||||
},
|
},
|
||||||
}},
|
}},
|
||||||
},
|
},
|
||||||
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
|
Outs: []*ava.TransferableOutput{{
|
||||||
Asset: ava.Asset{ID: avaID},
|
Asset: ava.Asset{ID: avaID},
|
||||||
Out: &secp256k1fx.TransferOutput{
|
Out: &secp256k1fx.TransferOutput{
|
||||||
Amt: 50000,
|
Amt: 50000,
|
||||||
|
@ -297,7 +297,7 @@ func TestClearForceAcceptedExportTx(t *testing.T) {
|
||||||
memdb.New(),
|
memdb.New(),
|
||||||
genesisBytes,
|
genesisBytes,
|
||||||
issuer,
|
issuer,
|
||||||
[]*common.Fx{&common.Fx{
|
[]*common.Fx{{
|
||||||
ID: ids.Empty,
|
ID: ids.Empty,
|
||||||
Fx: &secp256k1fx.Fx{},
|
Fx: &secp256k1fx.Fx{},
|
||||||
}},
|
}},
|
||||||
|
@ -323,7 +323,7 @@ func TestClearForceAcceptedExportTx(t *testing.T) {
|
||||||
BaseTx: BaseTx{
|
BaseTx: BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: avaID,
|
TxID: avaID,
|
||||||
OutputIndex: 1,
|
OutputIndex: 1,
|
||||||
|
@ -335,7 +335,7 @@ func TestClearForceAcceptedExportTx(t *testing.T) {
|
||||||
},
|
},
|
||||||
}},
|
}},
|
||||||
},
|
},
|
||||||
Outs: []*ava.TransferableOutput{&ava.TransferableOutput{
|
Outs: []*ava.TransferableOutput{{
|
||||||
Asset: ava.Asset{ID: avaID},
|
Asset: ava.Asset{ID: avaID},
|
||||||
Out: &secp256k1fx.TransferOutput{
|
Out: &secp256k1fx.TransferOutput{
|
||||||
Amt: 50000,
|
Amt: 50000,
|
||||||
|
|
|
@ -11,8 +11,8 @@ import (
|
||||||
"github.com/ava-labs/gecko/database/versiondb"
|
"github.com/ava-labs/gecko/database/versiondb"
|
||||||
"github.com/ava-labs/gecko/ids"
|
"github.com/ava-labs/gecko/ids"
|
||||||
"github.com/ava-labs/gecko/snow"
|
"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/utils/codec"
|
||||||
|
"github.com/ava-labs/gecko/vms/components/ava"
|
||||||
"github.com/ava-labs/gecko/vms/components/verify"
|
"github.com/ava-labs/gecko/vms/components/verify"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -33,6 +33,15 @@ func (t *ImportTx) InputUTXOs() []*ava.UTXOID {
|
||||||
return utxos
|
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
|
// AssetIDs returns the IDs of the assets this transaction depends on
|
||||||
func (t *ImportTx) AssetIDs() ids.Set {
|
func (t *ImportTx) AssetIDs() ids.Set {
|
||||||
assets := t.BaseTx.AssetIDs()
|
assets := t.BaseTx.AssetIDs()
|
||||||
|
|
|
@ -68,7 +68,7 @@ func TestImportTxSerialization(t *testing.T) {
|
||||||
0x99, 0x99, 0x99, 0x99, 0x88, 0x88, 0x88, 0x88,
|
0x99, 0x99, 0x99, 0x99, 0x88, 0x88, 0x88, 0x88,
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{TxID: ids.NewID([32]byte{
|
UTXOID: ava.UTXOID{TxID: ids.NewID([32]byte{
|
||||||
0x0f, 0x2f, 0x4f, 0x6f, 0x8e, 0xae, 0xce, 0xee,
|
0x0f, 0x2f, 0x4f, 0x6f, 0x8e, 0xae, 0xce, 0xee,
|
||||||
0x0d, 0x2d, 0x4d, 0x6d, 0x8c, 0xac, 0xcc, 0xec,
|
0x0d, 0x2d, 0x4d, 0x6d, 0x8c, 0xac, 0xcc, 0xec,
|
||||||
|
@ -130,7 +130,7 @@ func TestIssueImportTx(t *testing.T) {
|
||||||
memdb.New(),
|
memdb.New(),
|
||||||
genesisBytes,
|
genesisBytes,
|
||||||
issuer,
|
issuer,
|
||||||
[]*common.Fx{&common.Fx{
|
[]*common.Fx{{
|
||||||
ID: ids.Empty,
|
ID: ids.Empty,
|
||||||
Fx: &secp256k1fx.Fx{},
|
Fx: &secp256k1fx.Fx{},
|
||||||
}},
|
}},
|
||||||
|
@ -166,7 +166,7 @@ func TestIssueImportTx(t *testing.T) {
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
},
|
},
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: utxoID,
|
UTXOID: utxoID,
|
||||||
Asset: ava.Asset{ID: avaID},
|
Asset: ava.Asset{ID: avaID},
|
||||||
In: &secp256k1fx.TransferInput{
|
In: &secp256k1fx.TransferInput{
|
||||||
|
@ -288,7 +288,7 @@ func TestForceAcceptImportTx(t *testing.T) {
|
||||||
memdb.New(),
|
memdb.New(),
|
||||||
genesisBytes,
|
genesisBytes,
|
||||||
issuer,
|
issuer,
|
||||||
[]*common.Fx{&common.Fx{
|
[]*common.Fx{{
|
||||||
ID: ids.Empty,
|
ID: ids.Empty,
|
||||||
Fx: &secp256k1fx.Fx{},
|
Fx: &secp256k1fx.Fx{},
|
||||||
}},
|
}},
|
||||||
|
@ -326,7 +326,7 @@ func TestForceAcceptImportTx(t *testing.T) {
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
},
|
},
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: utxoID,
|
UTXOID: utxoID,
|
||||||
Asset: ava.Asset{ID: genesisTx.ID()},
|
Asset: ava.Asset{ID: genesisTx.ID()},
|
||||||
In: &secp256k1fx.TransferInput{
|
In: &secp256k1fx.TransferInput{
|
||||||
|
|
|
@ -7,8 +7,8 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/ava-labs/gecko/ids"
|
"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/utils/codec"
|
||||||
|
"github.com/ava-labs/gecko/vms/components/ava"
|
||||||
"github.com/ava-labs/gecko/vms/components/verify"
|
"github.com/ava-labs/gecko/vms/components/verify"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -43,11 +43,11 @@ func TestOperationVerifyUTXOIDsNotSorted(t *testing.T) {
|
||||||
op := &Operation{
|
op := &Operation{
|
||||||
Asset: ava.Asset{ID: ids.Empty},
|
Asset: ava.Asset{ID: ids.Empty},
|
||||||
UTXOIDs: []*ava.UTXOID{
|
UTXOIDs: []*ava.UTXOID{
|
||||||
&ava.UTXOID{
|
{
|
||||||
TxID: ids.Empty,
|
TxID: ids.Empty,
|
||||||
OutputIndex: 1,
|
OutputIndex: 1,
|
||||||
},
|
},
|
||||||
&ava.UTXOID{
|
{
|
||||||
TxID: ids.Empty,
|
TxID: ids.Empty,
|
||||||
OutputIndex: 0,
|
OutputIndex: 0,
|
||||||
},
|
},
|
||||||
|
@ -64,7 +64,7 @@ func TestOperationVerify(t *testing.T) {
|
||||||
op := &Operation{
|
op := &Operation{
|
||||||
Asset: ava.Asset{ID: ids.Empty},
|
Asset: ava.Asset{ID: ids.Empty},
|
||||||
UTXOIDs: []*ava.UTXOID{
|
UTXOIDs: []*ava.UTXOID{
|
||||||
&ava.UTXOID{
|
{
|
||||||
TxID: ids.Empty,
|
TxID: ids.Empty,
|
||||||
OutputIndex: 1,
|
OutputIndex: 1,
|
||||||
},
|
},
|
||||||
|
@ -81,20 +81,20 @@ func TestOperationSorting(t *testing.T) {
|
||||||
c.RegisterType(&testOperable{})
|
c.RegisterType(&testOperable{})
|
||||||
|
|
||||||
ops := []*Operation{
|
ops := []*Operation{
|
||||||
&Operation{
|
{
|
||||||
Asset: ava.Asset{ID: ids.Empty},
|
Asset: ava.Asset{ID: ids.Empty},
|
||||||
UTXOIDs: []*ava.UTXOID{
|
UTXOIDs: []*ava.UTXOID{
|
||||||
&ava.UTXOID{
|
{
|
||||||
TxID: ids.Empty,
|
TxID: ids.Empty,
|
||||||
OutputIndex: 1,
|
OutputIndex: 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Op: &testOperable{},
|
Op: &testOperable{},
|
||||||
},
|
},
|
||||||
&Operation{
|
{
|
||||||
Asset: ava.Asset{ID: ids.Empty},
|
Asset: ava.Asset{ID: ids.Empty},
|
||||||
UTXOIDs: []*ava.UTXOID{
|
UTXOIDs: []*ava.UTXOID{
|
||||||
&ava.UTXOID{
|
{
|
||||||
TxID: ids.Empty,
|
TxID: ids.Empty,
|
||||||
OutputIndex: 0,
|
OutputIndex: 0,
|
||||||
},
|
},
|
||||||
|
@ -112,7 +112,7 @@ func TestOperationSorting(t *testing.T) {
|
||||||
ops = append(ops, &Operation{
|
ops = append(ops, &Operation{
|
||||||
Asset: ava.Asset{ID: ids.Empty},
|
Asset: ava.Asset{ID: ids.Empty},
|
||||||
UTXOIDs: []*ava.UTXOID{
|
UTXOIDs: []*ava.UTXOID{
|
||||||
&ava.UTXOID{
|
{
|
||||||
TxID: ids.Empty,
|
TxID: ids.Empty,
|
||||||
OutputIndex: 1,
|
OutputIndex: 1,
|
||||||
},
|
},
|
||||||
|
|
|
@ -8,8 +8,8 @@ import (
|
||||||
|
|
||||||
"github.com/ava-labs/gecko/ids"
|
"github.com/ava-labs/gecko/ids"
|
||||||
"github.com/ava-labs/gecko/snow"
|
"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/utils/codec"
|
||||||
|
"github.com/ava-labs/gecko/vms/components/ava"
|
||||||
"github.com/ava-labs/gecko/vms/components/verify"
|
"github.com/ava-labs/gecko/vms/components/verify"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -39,6 +39,17 @@ func (t *OperationTx) InputUTXOs() []*ava.UTXOID {
|
||||||
return utxos
|
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
|
// AssetIDs returns the IDs of the assets this transaction depends on
|
||||||
func (t *OperationTx) AssetIDs() ids.Set {
|
func (t *OperationTx) AssetIDs() ids.Set {
|
||||||
assets := t.BaseTx.AssetIDs()
|
assets := t.BaseTx.AssetIDs()
|
||||||
|
|
|
@ -38,7 +38,7 @@ func TestPrefixedSetsAndGets(t *testing.T) {
|
||||||
tx := &Tx{UnsignedTx: &BaseTx{
|
tx := &Tx{UnsignedTx: &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: ids.Empty,
|
TxID: ids.Empty,
|
||||||
OutputIndex: 0,
|
OutputIndex: 0,
|
||||||
|
@ -160,9 +160,7 @@ func TestPrefixedFundingAddresses(t *testing.T) {
|
||||||
},
|
},
|
||||||
Asset: ava.Asset{ID: ids.Empty},
|
Asset: ava.Asset{ID: ids.Empty},
|
||||||
Out: &ava.TestAddressable{
|
Out: &ava.TestAddressable{
|
||||||
Addrs: [][]byte{
|
Addrs: [][]byte{{0}},
|
||||||
[]byte{0},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -792,7 +792,7 @@ func (service *Service) Send(r *http.Request, args *SendArgs, reply *SendReply)
|
||||||
|
|
||||||
ava.SortTransferableInputsWithSigners(ins, keys)
|
ava.SortTransferableInputsWithSigners(ins, keys)
|
||||||
|
|
||||||
outs := []*ava.TransferableOutput{&ava.TransferableOutput{
|
outs := []*ava.TransferableOutput{{
|
||||||
Asset: ava.Asset{ID: assetID},
|
Asset: ava.Asset{ID: assetID},
|
||||||
Out: &secp256k1fx.TransferOutput{
|
Out: &secp256k1fx.TransferOutput{
|
||||||
Amt: uint64(args.Amount),
|
Amt: uint64(args.Amount),
|
||||||
|
@ -946,7 +946,7 @@ func (service *Service) CreateMintTx(r *http.Request, args *CreateMintTxArgs, re
|
||||||
BCID: service.vm.ctx.ChainID,
|
BCID: service.vm.ctx.ChainID,
|
||||||
},
|
},
|
||||||
Ops: []*Operation{
|
Ops: []*Operation{
|
||||||
&Operation{
|
{
|
||||||
Asset: ava.Asset{ID: assetID},
|
Asset: ava.Asset{ID: assetID},
|
||||||
UTXOIDs: []*ava.UTXOID{
|
UTXOIDs: []*ava.UTXOID{
|
||||||
&utxo.UTXOID,
|
&utxo.UTXOID,
|
||||||
|
@ -1197,7 +1197,7 @@ func (service *Service) ImportAVA(_ *http.Request, args *ImportAVAArgs, reply *I
|
||||||
|
|
||||||
ava.SortTransferableInputsWithSigners(ins, keys)
|
ava.SortTransferableInputsWithSigners(ins, keys)
|
||||||
|
|
||||||
outs := []*ava.TransferableOutput{&ava.TransferableOutput{
|
outs := []*ava.TransferableOutput{{
|
||||||
Asset: ava.Asset{ID: service.vm.ava},
|
Asset: ava.Asset{ID: service.vm.ava},
|
||||||
Out: &secp256k1fx.TransferOutput{
|
Out: &secp256k1fx.TransferOutput{
|
||||||
Amt: amount,
|
Amt: amount,
|
||||||
|
@ -1352,7 +1352,7 @@ func (service *Service) ExportAVA(_ *http.Request, args *ExportAVAArgs, reply *E
|
||||||
|
|
||||||
ava.SortTransferableInputsWithSigners(ins, keys)
|
ava.SortTransferableInputsWithSigners(ins, keys)
|
||||||
|
|
||||||
exportOuts := []*ava.TransferableOutput{&ava.TransferableOutput{
|
exportOuts := []*ava.TransferableOutput{{
|
||||||
Asset: ava.Asset{ID: service.vm.ava},
|
Asset: ava.Asset{ID: service.vm.ava},
|
||||||
Out: &secp256k1fx.TransferOutput{
|
Out: &secp256k1fx.TransferOutput{
|
||||||
Amt: uint64(args.Amount),
|
Amt: uint64(args.Amount),
|
||||||
|
|
|
@ -300,7 +300,7 @@ func TestCreateFixedCapAsset(t *testing.T) {
|
||||||
Name: "test asset",
|
Name: "test asset",
|
||||||
Symbol: "test",
|
Symbol: "test",
|
||||||
Denomination: 1,
|
Denomination: 1,
|
||||||
InitialHolders: []*Holder{&Holder{
|
InitialHolders: []*Holder{{
|
||||||
Amount: 123456789,
|
Amount: 123456789,
|
||||||
Address: vm.Format(keys[0].PublicKey().Address().Bytes()),
|
Address: vm.Format(keys[0].PublicKey().Address().Bytes()),
|
||||||
}},
|
}},
|
||||||
|
@ -326,7 +326,7 @@ func TestCreateVariableCapAsset(t *testing.T) {
|
||||||
Name: "test asset",
|
Name: "test asset",
|
||||||
Symbol: "test",
|
Symbol: "test",
|
||||||
MinterSets: []Owners{
|
MinterSets: []Owners{
|
||||||
Owners{
|
{
|
||||||
Threshold: 1,
|
Threshold: 1,
|
||||||
Minters: []string{
|
Minters: []string{
|
||||||
vm.Format(keys[0].PublicKey().Address().Bytes()),
|
vm.Format(keys[0].PublicKey().Address().Bytes()),
|
||||||
|
@ -367,7 +367,7 @@ func TestImportAvmKey(t *testing.T) {
|
||||||
factory := crypto.FactorySECP256K1R{}
|
factory := crypto.FactorySECP256K1R{}
|
||||||
skIntf, err := factory.NewPrivateKey()
|
skIntf, err := factory.NewPrivateKey()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("problem generating private key: %w", err)
|
t.Fatalf("problem generating private key: %s", err)
|
||||||
}
|
}
|
||||||
sk := skIntf.(*crypto.PrivateKeySECP256K1R)
|
sk := skIntf.(*crypto.PrivateKeySECP256K1R)
|
||||||
|
|
||||||
|
@ -406,7 +406,7 @@ func TestImportAvmKeyNoDuplicates(t *testing.T) {
|
||||||
factory := crypto.FactorySECP256K1R{}
|
factory := crypto.FactorySECP256K1R{}
|
||||||
skIntf, err := factory.NewPrivateKey()
|
skIntf, err := factory.NewPrivateKey()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("problem generating private key: %w", err)
|
t.Fatalf("problem generating private key: %s", err)
|
||||||
}
|
}
|
||||||
sk := skIntf.(*crypto.PrivateKeySECP256K1R)
|
sk := skIntf.(*crypto.PrivateKeySECP256K1R)
|
||||||
|
|
||||||
|
|
|
@ -288,7 +288,7 @@ func TestStateTXs(t *testing.T) {
|
||||||
tx := &Tx{UnsignedTx: &BaseTx{
|
tx := &Tx{UnsignedTx: &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: ids.Empty,
|
TxID: ids.Empty,
|
||||||
OutputIndex: 0,
|
OutputIndex: 0,
|
||||||
|
|
|
@ -11,12 +11,12 @@ func TestBuildGenesis(t *testing.T) {
|
||||||
ss := StaticService{}
|
ss := StaticService{}
|
||||||
|
|
||||||
args := BuildGenesisArgs{GenesisData: map[string]AssetDefinition{
|
args := BuildGenesisArgs{GenesisData: map[string]AssetDefinition{
|
||||||
"asset1": AssetDefinition{
|
"asset1": {
|
||||||
Name: "myFixedCapAsset",
|
Name: "myFixedCapAsset",
|
||||||
Symbol: "MFCA",
|
Symbol: "MFCA",
|
||||||
Denomination: 8,
|
Denomination: 8,
|
||||||
InitialState: map[string][]interface{}{
|
InitialState: map[string][]interface{}{
|
||||||
"fixedCap": []interface{}{
|
"fixedCap": {
|
||||||
Holder{
|
Holder{
|
||||||
Amount: 100000,
|
Amount: 100000,
|
||||||
Address: "A9bTQjfYGBFK3JPRJqF2eh3JYL7cHocvy",
|
Address: "A9bTQjfYGBFK3JPRJqF2eh3JYL7cHocvy",
|
||||||
|
@ -36,11 +36,11 @@ func TestBuildGenesis(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"asset2": AssetDefinition{
|
"asset2": {
|
||||||
Name: "myVarCapAsset",
|
Name: "myVarCapAsset",
|
||||||
Symbol: "MVCA",
|
Symbol: "MVCA",
|
||||||
InitialState: map[string][]interface{}{
|
InitialState: map[string][]interface{}{
|
||||||
"variableCap": []interface{}{
|
"variableCap": {
|
||||||
Owners{
|
Owners{
|
||||||
Threshold: 1,
|
Threshold: 1,
|
||||||
Minters: []string{
|
Minters: []string{
|
||||||
|
@ -58,10 +58,10 @@ func TestBuildGenesis(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"asset3": AssetDefinition{
|
"asset3": {
|
||||||
Name: "myOtherVarCapAsset",
|
Name: "myOtherVarCapAsset",
|
||||||
InitialState: map[string][]interface{}{
|
InitialState: map[string][]interface{}{
|
||||||
"variableCap": []interface{}{
|
"variableCap": {
|
||||||
Owners{
|
Owners{
|
||||||
Threshold: 1,
|
Threshold: 1,
|
||||||
Minters: []string{
|
Minters: []string{
|
||||||
|
|
|
@ -9,8 +9,8 @@ import (
|
||||||
"github.com/ava-labs/gecko/database"
|
"github.com/ava-labs/gecko/database"
|
||||||
"github.com/ava-labs/gecko/ids"
|
"github.com/ava-labs/gecko/ids"
|
||||||
"github.com/ava-labs/gecko/snow"
|
"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/utils/codec"
|
||||||
|
"github.com/ava-labs/gecko/vms/components/ava"
|
||||||
"github.com/ava-labs/gecko/vms/components/verify"
|
"github.com/ava-labs/gecko/vms/components/verify"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -24,7 +24,9 @@ type UnsignedTx interface {
|
||||||
ID() ids.ID
|
ID() ids.ID
|
||||||
Bytes() []byte
|
Bytes() []byte
|
||||||
|
|
||||||
|
ConsumedAssetIDs() ids.Set
|
||||||
AssetIDs() ids.Set
|
AssetIDs() ids.Set
|
||||||
|
|
||||||
NumCredentials() int
|
NumCredentials() int
|
||||||
InputUTXOs() []*ava.UTXOID
|
InputUTXOs() []*ava.UTXOID
|
||||||
UTXOs() []*ava.UTXO
|
UTXOs() []*ava.UTXO
|
||||||
|
|
|
@ -7,9 +7,9 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/ava-labs/gecko/ids"
|
"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/utils/units"
|
||||||
"github.com/ava-labs/gecko/vms/components/ava"
|
"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/components/verify"
|
||||||
"github.com/ava-labs/gecko/vms/secp256k1fx"
|
"github.com/ava-labs/gecko/vms/secp256k1fx"
|
||||||
)
|
)
|
||||||
|
@ -56,7 +56,7 @@ func TestTxInvalidCredential(t *testing.T) {
|
||||||
UnsignedTx: &BaseTx{
|
UnsignedTx: &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: ids.Empty,
|
TxID: ids.Empty,
|
||||||
OutputIndex: 0,
|
OutputIndex: 0,
|
||||||
|
@ -95,7 +95,7 @@ func TestTxInvalidUnsignedTx(t *testing.T) {
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Ins: []*ava.TransferableInput{
|
Ins: []*ava.TransferableInput{
|
||||||
&ava.TransferableInput{
|
{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: ids.Empty,
|
TxID: ids.Empty,
|
||||||
OutputIndex: 0,
|
OutputIndex: 0,
|
||||||
|
@ -110,7 +110,7 @@ func TestTxInvalidUnsignedTx(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
&ava.TransferableInput{
|
{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: ids.Empty,
|
TxID: ids.Empty,
|
||||||
OutputIndex: 0,
|
OutputIndex: 0,
|
||||||
|
@ -153,7 +153,7 @@ func TestTxInvalidNumberOfCredentials(t *testing.T) {
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Ins: []*ava.TransferableInput{
|
Ins: []*ava.TransferableInput{
|
||||||
&ava.TransferableInput{
|
{
|
||||||
UTXOID: ava.UTXOID{TxID: ids.Empty, OutputIndex: 0},
|
UTXOID: ava.UTXOID{TxID: ids.Empty, OutputIndex: 0},
|
||||||
Asset: ava.Asset{ID: asset},
|
Asset: ava.Asset{ID: asset},
|
||||||
In: &secp256k1fx.TransferInput{
|
In: &secp256k1fx.TransferInput{
|
||||||
|
@ -165,7 +165,7 @@ func TestTxInvalidNumberOfCredentials(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
&ava.TransferableInput{
|
{
|
||||||
UTXOID: ava.UTXOID{TxID: ids.Empty, OutputIndex: 1},
|
UTXOID: ava.UTXOID{TxID: ids.Empty, OutputIndex: 1},
|
||||||
Asset: ava.Asset{ID: asset},
|
Asset: ava.Asset{ID: asset},
|
||||||
In: &secp256k1fx.TransferInput{
|
In: &secp256k1fx.TransferInput{
|
||||||
|
|
|
@ -85,7 +85,11 @@ func (tx *UniqueTx) refresh() {
|
||||||
|
|
||||||
// Evict is called when this UniqueTx will no longer be returned from a cache
|
// Evict is called when this UniqueTx will no longer be returned from a cache
|
||||||
// lookup
|
// lookup
|
||||||
func (tx *UniqueTx) Evict() { tx.unique = false } // Lock is already held here
|
func (tx *UniqueTx) Evict() {
|
||||||
|
// Lock is already held here
|
||||||
|
tx.unique = false
|
||||||
|
tx.deps = nil
|
||||||
|
}
|
||||||
|
|
||||||
func (tx *UniqueTx) setStatus(status choices.Status) error {
|
func (tx *UniqueTx) setStatus(status choices.Status) error {
|
||||||
tx.refresh()
|
tx.refresh()
|
||||||
|
@ -206,22 +210,25 @@ func (tx *UniqueTx) Dependencies() []snowstorm.Tx {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
txID, _ := in.InputSource()
|
txID, _ := in.InputSource()
|
||||||
if !txIDs.Contains(txID) {
|
if txIDs.Contains(txID) {
|
||||||
txIDs.Add(txID)
|
continue
|
||||||
tx.deps = append(tx.deps, &UniqueTx{
|
|
||||||
vm: tx.vm,
|
|
||||||
txID: txID,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
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() {
|
for _, assetID := range tx.Tx.AssetIDs().List() {
|
||||||
if !txIDs.Contains(assetID) {
|
if consumedIDs.Contains(assetID) || txIDs.Contains(assetID) {
|
||||||
txIDs.Add(assetID)
|
continue
|
||||||
tx.deps = append(tx.deps, &UniqueTx{
|
|
||||||
vm: tx.vm,
|
|
||||||
txID: assetID,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
txIDs.Add(assetID)
|
||||||
|
tx.deps = append(tx.deps, &UniqueTx{
|
||||||
|
vm: tx.vm,
|
||||||
|
txID: assetID,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
return tx.deps
|
return tx.deps
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,12 +20,12 @@ import (
|
||||||
"github.com/ava-labs/gecko/snow/choices"
|
"github.com/ava-labs/gecko/snow/choices"
|
||||||
"github.com/ava-labs/gecko/snow/consensus/snowstorm"
|
"github.com/ava-labs/gecko/snow/consensus/snowstorm"
|
||||||
"github.com/ava-labs/gecko/snow/engine/common"
|
"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/formatting"
|
||||||
"github.com/ava-labs/gecko/utils/logging"
|
"github.com/ava-labs/gecko/utils/logging"
|
||||||
"github.com/ava-labs/gecko/utils/timer"
|
"github.com/ava-labs/gecko/utils/timer"
|
||||||
"github.com/ava-labs/gecko/utils/wrappers"
|
"github.com/ava-labs/gecko/utils/wrappers"
|
||||||
"github.com/ava-labs/gecko/vms/components/ava"
|
"github.com/ava-labs/gecko/vms/components/ava"
|
||||||
"github.com/ava-labs/gecko/utils/codec"
|
|
||||||
|
|
||||||
cjson "github.com/ava-labs/gecko/utils/json"
|
cjson "github.com/ava-labs/gecko/utils/json"
|
||||||
)
|
)
|
||||||
|
@ -35,7 +35,7 @@ const (
|
||||||
batchSize = 30
|
batchSize = 30
|
||||||
stateCacheSize = 10000
|
stateCacheSize = 10000
|
||||||
idCacheSize = 10000
|
idCacheSize = 10000
|
||||||
txCacheSize = 100000
|
txCacheSize = 10000
|
||||||
addressSep = "-"
|
addressSep = "-"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -248,8 +248,8 @@ func (vm *VM) CreateHandlers() map[string]*common.HTTPHandler {
|
||||||
rpcServer.RegisterService(&Service{vm: vm}, "avm") // name this service "avm"
|
rpcServer.RegisterService(&Service{vm: vm}, "avm") // name this service "avm"
|
||||||
|
|
||||||
return map[string]*common.HTTPHandler{
|
return map[string]*common.HTTPHandler{
|
||||||
"": &common.HTTPHandler{Handler: rpcServer},
|
"": {Handler: rpcServer},
|
||||||
"/pubsub": &common.HTTPHandler{LockOptions: common.NoLock, Handler: vm.pubsub},
|
"/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.RegisterCodec(codec, "application/json;charset=UTF-8")
|
||||||
newServer.RegisterService(&StaticService{}, "avm") // name this service "avm"
|
newServer.RegisterService(&StaticService{}, "avm") // name this service "avm"
|
||||||
return map[string]*common.HTTPHandler{
|
return map[string]*common.HTTPHandler{
|
||||||
"": &common.HTTPHandler{LockOptions: common.WriteLock, Handler: newServer},
|
"": {LockOptions: common.WriteLock, Handler: newServer},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -84,11 +84,11 @@ func BuildGenesisTest(t *testing.T) []byte {
|
||||||
addr2 := keys[2].PublicKey().Address()
|
addr2 := keys[2].PublicKey().Address()
|
||||||
|
|
||||||
args := BuildGenesisArgs{GenesisData: map[string]AssetDefinition{
|
args := BuildGenesisArgs{GenesisData: map[string]AssetDefinition{
|
||||||
"asset1": AssetDefinition{
|
"asset1": {
|
||||||
Name: "myFixedCapAsset",
|
Name: "myFixedCapAsset",
|
||||||
Symbol: "MFCA",
|
Symbol: "MFCA",
|
||||||
InitialState: map[string][]interface{}{
|
InitialState: map[string][]interface{}{
|
||||||
"fixedCap": []interface{}{
|
"fixedCap": {
|
||||||
Holder{
|
Holder{
|
||||||
Amount: 100000,
|
Amount: 100000,
|
||||||
Address: addr0.String(),
|
Address: addr0.String(),
|
||||||
|
@ -108,11 +108,11 @@ func BuildGenesisTest(t *testing.T) []byte {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"asset2": AssetDefinition{
|
"asset2": {
|
||||||
Name: "myVarCapAsset",
|
Name: "myVarCapAsset",
|
||||||
Symbol: "MVCA",
|
Symbol: "MVCA",
|
||||||
InitialState: map[string][]interface{}{
|
InitialState: map[string][]interface{}{
|
||||||
"variableCap": []interface{}{
|
"variableCap": {
|
||||||
Owners{
|
Owners{
|
||||||
Threshold: 1,
|
Threshold: 1,
|
||||||
Minters: []string{
|
Minters: []string{
|
||||||
|
@ -131,10 +131,10 @@ func BuildGenesisTest(t *testing.T) []byte {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"asset3": AssetDefinition{
|
"asset3": {
|
||||||
Name: "myOtherVarCapAsset",
|
Name: "myOtherVarCapAsset",
|
||||||
InitialState: map[string][]interface{}{
|
InitialState: map[string][]interface{}{
|
||||||
"variableCap": []interface{}{
|
"variableCap": {
|
||||||
Owners{
|
Owners{
|
||||||
Threshold: 1,
|
Threshold: 1,
|
||||||
Minters: []string{
|
Minters: []string{
|
||||||
|
@ -168,7 +168,7 @@ func GenesisVM(t *testing.T) ([]byte, chan common.Message, *VM) {
|
||||||
memdb.New(),
|
memdb.New(),
|
||||||
genesisBytes,
|
genesisBytes,
|
||||||
issuer,
|
issuer,
|
||||||
[]*common.Fx{&common.Fx{
|
[]*common.Fx{{
|
||||||
ID: ids.Empty,
|
ID: ids.Empty,
|
||||||
Fx: &secp256k1fx.Fx{},
|
Fx: &secp256k1fx.Fx{},
|
||||||
}},
|
}},
|
||||||
|
@ -195,7 +195,7 @@ func NewTx(t *testing.T, genesisBytes []byte, vm *VM) *Tx {
|
||||||
newTx := &Tx{UnsignedTx: &BaseTx{
|
newTx := &Tx{UnsignedTx: &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: genesisTx.ID(),
|
TxID: genesisTx.ID(),
|
||||||
OutputIndex: 1,
|
OutputIndex: 1,
|
||||||
|
@ -357,7 +357,7 @@ func TestTxSerialization(t *testing.T) {
|
||||||
Symbol: "symb",
|
Symbol: "symb",
|
||||||
Denomination: 0,
|
Denomination: 0,
|
||||||
States: []*InitialState{
|
States: []*InitialState{
|
||||||
&InitialState{
|
{
|
||||||
FxID: 0,
|
FxID: 0,
|
||||||
Outs: []verify.Verifiable{
|
Outs: []verify.Verifiable{
|
||||||
&secp256k1fx.MintOutput{
|
&secp256k1fx.MintOutput{
|
||||||
|
@ -456,7 +456,7 @@ func TestFxInitializationFailure(t *testing.T) {
|
||||||
/*db=*/ memdb.New(),
|
/*db=*/ memdb.New(),
|
||||||
/*genesisState=*/ genesisBytes,
|
/*genesisState=*/ genesisBytes,
|
||||||
/*engineMessenger=*/ make(chan common.Message, 1),
|
/*engineMessenger=*/ make(chan common.Message, 1),
|
||||||
/*fxs=*/ []*common.Fx{&common.Fx{
|
/*fxs=*/ []*common.Fx{{
|
||||||
ID: ids.Empty,
|
ID: ids.Empty,
|
||||||
Fx: &testFx{initialize: errUnknownFx},
|
Fx: &testFx{initialize: errUnknownFx},
|
||||||
}},
|
}},
|
||||||
|
@ -537,7 +537,7 @@ func TestIssueDependentTx(t *testing.T) {
|
||||||
firstTx := &Tx{UnsignedTx: &BaseTx{
|
firstTx := &Tx{UnsignedTx: &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: genesisTx.ID(),
|
TxID: genesisTx.ID(),
|
||||||
OutputIndex: 1,
|
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()},
|
Asset: ava.Asset{ID: genesisTx.ID()},
|
||||||
Out: &secp256k1fx.TransferOutput{
|
Out: &secp256k1fx.TransferOutput{
|
||||||
Amt: 50000,
|
Amt: 50000,
|
||||||
|
@ -596,7 +596,7 @@ func TestIssueDependentTx(t *testing.T) {
|
||||||
secondTx := &Tx{UnsignedTx: &BaseTx{
|
secondTx := &Tx{UnsignedTx: &BaseTx{
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
Ins: []*ava.TransferableInput{&ava.TransferableInput{
|
Ins: []*ava.TransferableInput{{
|
||||||
UTXOID: ava.UTXOID{
|
UTXOID: ava.UTXOID{
|
||||||
TxID: firstTx.ID(),
|
TxID: firstTx.ID(),
|
||||||
OutputIndex: 0,
|
OutputIndex: 0,
|
||||||
|
@ -671,11 +671,11 @@ func TestIssueNFT(t *testing.T) {
|
||||||
genesisBytes,
|
genesisBytes,
|
||||||
issuer,
|
issuer,
|
||||||
[]*common.Fx{
|
[]*common.Fx{
|
||||||
&common.Fx{
|
{
|
||||||
ID: ids.Empty.Prefix(0),
|
ID: ids.Empty.Prefix(0),
|
||||||
Fx: &secp256k1fx.Fx{},
|
Fx: &secp256k1fx.Fx{},
|
||||||
},
|
},
|
||||||
&common.Fx{
|
{
|
||||||
ID: ids.Empty.Prefix(1),
|
ID: ids.Empty.Prefix(1),
|
||||||
Fx: &nftfx.Fx{},
|
Fx: &nftfx.Fx{},
|
||||||
},
|
},
|
||||||
|
@ -704,7 +704,7 @@ func TestIssueNFT(t *testing.T) {
|
||||||
Name: "Team Rocket",
|
Name: "Team Rocket",
|
||||||
Symbol: "TR",
|
Symbol: "TR",
|
||||||
Denomination: 0,
|
Denomination: 0,
|
||||||
States: []*InitialState{&InitialState{
|
States: []*InitialState{{
|
||||||
FxID: 1,
|
FxID: 1,
|
||||||
Outs: []verify.Verifiable{
|
Outs: []verify.Verifiable{
|
||||||
&nftfx.MintOutput{
|
&nftfx.MintOutput{
|
||||||
|
@ -740,9 +740,9 @@ func TestIssueNFT(t *testing.T) {
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
},
|
},
|
||||||
Ops: []*Operation{&Operation{
|
Ops: []*Operation{{
|
||||||
Asset: ava.Asset{ID: createAssetTx.ID()},
|
Asset: ava.Asset{ID: createAssetTx.ID()},
|
||||||
UTXOIDs: []*ava.UTXOID{&ava.UTXOID{
|
UTXOIDs: []*ava.UTXOID{{
|
||||||
TxID: createAssetTx.ID(),
|
TxID: createAssetTx.ID(),
|
||||||
OutputIndex: 0,
|
OutputIndex: 0,
|
||||||
}},
|
}},
|
||||||
|
@ -752,9 +752,7 @@ func TestIssueNFT(t *testing.T) {
|
||||||
},
|
},
|
||||||
GroupID: 1,
|
GroupID: 1,
|
||||||
Payload: []byte{'h', 'e', 'l', 'l', 'o'},
|
Payload: []byte{'h', 'e', 'l', 'l', 'o'},
|
||||||
Outputs: []*secp256k1fx.OutputOwners{
|
Outputs: []*secp256k1fx.OutputOwners{{}},
|
||||||
&secp256k1fx.OutputOwners{},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
}},
|
}},
|
||||||
}}
|
}}
|
||||||
|
@ -793,9 +791,9 @@ func TestIssueNFT(t *testing.T) {
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
},
|
},
|
||||||
Ops: []*Operation{&Operation{
|
Ops: []*Operation{{
|
||||||
Asset: ava.Asset{ID: createAssetTx.ID()},
|
Asset: ava.Asset{ID: createAssetTx.ID()},
|
||||||
UTXOIDs: []*ava.UTXOID{&ava.UTXOID{
|
UTXOIDs: []*ava.UTXOID{{
|
||||||
TxID: mintNFTTx.ID(),
|
TxID: mintNFTTx.ID(),
|
||||||
OutputIndex: 0,
|
OutputIndex: 0,
|
||||||
}},
|
}},
|
||||||
|
@ -840,15 +838,15 @@ func TestIssueProperty(t *testing.T) {
|
||||||
genesisBytes,
|
genesisBytes,
|
||||||
issuer,
|
issuer,
|
||||||
[]*common.Fx{
|
[]*common.Fx{
|
||||||
&common.Fx{
|
{
|
||||||
ID: ids.Empty.Prefix(0),
|
ID: ids.Empty.Prefix(0),
|
||||||
Fx: &secp256k1fx.Fx{},
|
Fx: &secp256k1fx.Fx{},
|
||||||
},
|
},
|
||||||
&common.Fx{
|
{
|
||||||
ID: ids.Empty.Prefix(1),
|
ID: ids.Empty.Prefix(1),
|
||||||
Fx: &nftfx.Fx{},
|
Fx: &nftfx.Fx{},
|
||||||
},
|
},
|
||||||
&common.Fx{
|
{
|
||||||
ID: ids.Empty.Prefix(2),
|
ID: ids.Empty.Prefix(2),
|
||||||
Fx: &propertyfx.Fx{},
|
Fx: &propertyfx.Fx{},
|
||||||
},
|
},
|
||||||
|
@ -877,7 +875,7 @@ func TestIssueProperty(t *testing.T) {
|
||||||
Name: "Team Rocket",
|
Name: "Team Rocket",
|
||||||
Symbol: "TR",
|
Symbol: "TR",
|
||||||
Denomination: 0,
|
Denomination: 0,
|
||||||
States: []*InitialState{&InitialState{
|
States: []*InitialState{{
|
||||||
FxID: 2,
|
FxID: 2,
|
||||||
Outs: []verify.Verifiable{
|
Outs: []verify.Verifiable{
|
||||||
&propertyfx.MintOutput{
|
&propertyfx.MintOutput{
|
||||||
|
@ -905,9 +903,9 @@ func TestIssueProperty(t *testing.T) {
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
},
|
},
|
||||||
Ops: []*Operation{&Operation{
|
Ops: []*Operation{{
|
||||||
Asset: ava.Asset{ID: createAssetTx.ID()},
|
Asset: ava.Asset{ID: createAssetTx.ID()},
|
||||||
UTXOIDs: []*ava.UTXOID{&ava.UTXOID{
|
UTXOIDs: []*ava.UTXOID{{
|
||||||
TxID: createAssetTx.ID(),
|
TxID: createAssetTx.ID(),
|
||||||
OutputIndex: 0,
|
OutputIndex: 0,
|
||||||
}},
|
}},
|
||||||
|
@ -960,9 +958,9 @@ func TestIssueProperty(t *testing.T) {
|
||||||
NetID: networkID,
|
NetID: networkID,
|
||||||
BCID: chainID,
|
BCID: chainID,
|
||||||
},
|
},
|
||||||
Ops: []*Operation{&Operation{
|
Ops: []*Operation{{
|
||||||
Asset: ava.Asset{ID: createAssetTx.ID()},
|
Asset: ava.Asset{ID: createAssetTx.ID()},
|
||||||
UTXOIDs: []*ava.UTXOID{&ava.UTXOID{
|
UTXOIDs: []*ava.UTXOID{{
|
||||||
TxID: mintPropertyTx.ID(),
|
TxID: mintPropertyTx.ID(),
|
||||||
OutputIndex: 1,
|
OutputIndex: 1,
|
||||||
}},
|
}},
|
||||||
|
|
Loading…
Reference in New Issue