func TestSaveUtxoView(t *testing.T) {
testDB := dbm.NewDB("testdb", "leveldb", "temp")
batch := testDB.NewBatch()
- defer os.RemoveAll("temp")
+ defer func() {
+ testDB.Close()
+ os.RemoveAll("temp")
+ }()
cases := []struct {
hash bc.Hash
}{
{
hash: bc.Hash{V0: 0},
- utxoEntry: storage.NewUtxoEntry(true, 0, true),
+ utxoEntry: storage.NewUtxoEntry(storage.CoinbaseUTXOType, 0, true),
exist: true,
},
{
hash: bc.Hash{V0: 1},
- utxoEntry: storage.NewUtxoEntry(true, 0, false),
+ utxoEntry: storage.NewUtxoEntry(storage.CoinbaseUTXOType, 0, false),
exist: true,
},
{
hash: bc.Hash{V0: 2},
- utxoEntry: storage.NewUtxoEntry(false, 0, false),
+ utxoEntry: storage.NewUtxoEntry(storage.NormalUTXOType, 0, false),
exist: true,
},
{
hash: bc.Hash{V0: 3},
- utxoEntry: storage.NewUtxoEntry(false, 0, true),
+ utxoEntry: storage.NewUtxoEntry(storage.NormalUTXOType, 0, true),
exist: false,
},
+ {
+ hash: bc.Hash{V0: 4},
+ utxoEntry: storage.NewUtxoEntry(storage.CrosschainUTXOType, 0, true),
+ exist: true,
+ },
+ {
+ hash: bc.Hash{V0: 5},
+ utxoEntry: storage.NewUtxoEntry(storage.CrosschainUTXOType, 0, false),
+ exist: false,
+ },
+ {
+ hash: bc.Hash{V0: 6},
+ utxoEntry: storage.NewUtxoEntry(storage.VoteUTXOType, 0, true),
+ exist: true,
+ },
+ {
+ hash: bc.Hash{V0: 7},
+ utxoEntry: storage.NewUtxoEntry(storage.VoteUTXOType, 0, false),
+ exist: true,
+ },
}
view := state.NewUtxoViewpoint()
func TestGetTransactionsUtxo(t *testing.T) {
testDB := dbm.NewDB("testdb", "leveldb", "temp")
- defer os.RemoveAll("temp")
+ defer func() {
+ testDB.Close()
+ os.RemoveAll("temp")
+ }()
batch := testDB.NewBatch()
inputView := state.NewUtxoViewpoint()
for i := 0; i <= 2; i++ {
- inputView.Entries[bc.Hash{V0: uint64(i)}] = storage.NewUtxoEntry(false, uint64(i), false)
+ inputView.Entries[bc.Hash{V0: uint64(i)}] = storage.NewUtxoEntry(storage.NormalUTXOType, uint64(i), false)
}
+ inputView.Entries[bc.Hash{V0: uint64(3)}] = storage.NewUtxoEntry(storage.CrosschainUTXOType, uint64(3), true)
+ inputView.Entries[bc.Hash{V0: uint64(4)}] = storage.NewUtxoEntry(storage.CoinbaseUTXOType, uint64(4), false)
+ inputView.Entries[bc.Hash{V0: uint64(5)}] = storage.NewUtxoEntry(storage.VoteUTXOType, uint64(5), false)
+
saveUtxoView(batch, inputView)
batch.Write()
{
txs: []*bc.Tx{
&bc.Tx{
+ MainchainOutputIDs: []bc.Hash{
+ bc.Hash{V0: 10},
+ bc.Hash{V0: 3},
+ },
+ },
+ },
+ inputView: state.NewUtxoViewpoint(),
+ fetchView: &state.UtxoViewpoint{
+ Entries: map[bc.Hash]*storage.UtxoEntry{
+ bc.Hash{V0: 10}: storage.NewUtxoEntry(storage.CrosschainUTXOType, 0, false),
+ bc.Hash{V0: 3}: storage.NewUtxoEntry(storage.CrosschainUTXOType, 3, true),
+ },
+ },
+ err: false,
+ },
+ {
+ txs: []*bc.Tx{
+ &bc.Tx{
+ SpentOutputIDs: []bc.Hash{
+ bc.Hash{V0: 4},
+ bc.Hash{V0: 5},
+ bc.Hash{V0: 6},//no spentOutputID store
+ },
+ },
+ },
+ inputView: state.NewUtxoViewpoint(),
+ fetchView: &state.UtxoViewpoint{
+ Entries: map[bc.Hash]*storage.UtxoEntry{
+ bc.Hash{V0: 4}: storage.NewUtxoEntry(storage.CoinbaseUTXOType, 4, false),
+ bc.Hash{V0: 5}: storage.NewUtxoEntry(storage.VoteUTXOType, 5, false),
+ },
+ },
+ err: false,
+ },
+ {
+ txs: []*bc.Tx{
+ &bc.Tx{
SpentOutputIDs: []bc.Hash{bc.Hash{V0: 0}},
},
},
inputView: state.NewUtxoViewpoint(),
fetchView: &state.UtxoViewpoint{
Entries: map[bc.Hash]*storage.UtxoEntry{
- bc.Hash{V0: 0}: storage.NewUtxoEntry(false, 0, false),
+ bc.Hash{V0: 0}: storage.NewUtxoEntry(storage.NormalUTXOType, 0, false),
},
},
err: false,
inputView: state.NewUtxoViewpoint(),
fetchView: &state.UtxoViewpoint{
Entries: map[bc.Hash]*storage.UtxoEntry{
- bc.Hash{V0: 0}: storage.NewUtxoEntry(false, 0, false),
- bc.Hash{V0: 1}: storage.NewUtxoEntry(false, 1, false),
+ bc.Hash{V0: 0}: storage.NewUtxoEntry(storage.NormalUTXOType, 0, false),
+ bc.Hash{V0: 1}: storage.NewUtxoEntry(storage.NormalUTXOType, 1, false),
},
},
err: false,
inputView: state.NewUtxoViewpoint(),
fetchView: &state.UtxoViewpoint{
Entries: map[bc.Hash]*storage.UtxoEntry{
- bc.Hash{V0: 0}: storage.NewUtxoEntry(false, 0, false),
- bc.Hash{V0: 1}: storage.NewUtxoEntry(false, 1, false),
- bc.Hash{V0: 2}: storage.NewUtxoEntry(false, 2, false),
+ bc.Hash{V0: 0}: storage.NewUtxoEntry(storage.NormalUTXOType, 0, false),
+ bc.Hash{V0: 1}: storage.NewUtxoEntry(storage.NormalUTXOType, 1, false),
+ bc.Hash{V0: 2}: storage.NewUtxoEntry(storage.NormalUTXOType, 2, false),
},
},
err: false,
},
inputView: &state.UtxoViewpoint{
Entries: map[bc.Hash]*storage.UtxoEntry{
- bc.Hash{V0: 0}: storage.NewUtxoEntry(false, 1, false),
+ bc.Hash{V0: 0}: storage.NewUtxoEntry(storage.NormalUTXOType, 1, false),
},
},
fetchView: &state.UtxoViewpoint{
Entries: map[bc.Hash]*storage.UtxoEntry{
- bc.Hash{V0: 0}: storage.NewUtxoEntry(false, 1, false),
+ bc.Hash{V0: 0}: storage.NewUtxoEntry(storage.NormalUTXOType, 1, false),
},
},
err: false,