mirror of
https://github.com/nspcc-dev/neo-go.git
synced 2024-11-27 03:58:06 +00:00
core: add transaction.GetAttributes
This commit is contained in:
parent
95630b72e8
commit
7947e99a1e
2 changed files with 47 additions and 2 deletions
|
@ -133,6 +133,18 @@ func (t *Transaction) HasAttribute(typ AttrType) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetAttributes returns the list of transaction's attributes of the given type.
|
||||||
|
// Returns nil in case if attributes not found.
|
||||||
|
func (t *Transaction) GetAttributes(typ AttrType) []Attribute {
|
||||||
|
var result []Attribute
|
||||||
|
for _, attr := range t.Attributes {
|
||||||
|
if attr.Type == typ {
|
||||||
|
result = append(result, attr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
// decodeHashableFields decodes the fields that are used for signing the
|
// decodeHashableFields decodes the fields that are used for signing the
|
||||||
// transaction, which are all fields except the scripts.
|
// transaction, which are all fields except the scripts.
|
||||||
func (t *Transaction) decodeHashableFields(br *io.BinReader) {
|
func (t *Transaction) decodeHashableFields(br *io.BinReader) {
|
||||||
|
|
|
@ -7,12 +7,13 @@ import (
|
||||||
"math"
|
"math"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/config/netmode"
|
"github.com/nspcc-dev/neo-go/pkg/config/netmode"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/encoding/address"
|
"github.com/nspcc-dev/neo-go/pkg/encoding/address"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/internal/testserdes"
|
"github.com/nspcc-dev/neo-go/pkg/internal/testserdes"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/util"
|
"github.com/nspcc-dev/neo-go/pkg/util"
|
||||||
"github.com/stretchr/testify/assert"
|
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestWitnessEncodeDecode(t *testing.T) {
|
func TestWitnessEncodeDecode(t *testing.T) {
|
||||||
|
@ -215,3 +216,35 @@ func TestTransaction_isValid(t *testing.T) {
|
||||||
require.True(t, errors.Is(tx.isValid(), ErrEmptyScript))
|
require.True(t, errors.Is(tx.isValid(), ErrEmptyScript))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestTransaction_GetAttributes(t *testing.T) {
|
||||||
|
attributesTypes := []AttrType{
|
||||||
|
HighPriority,
|
||||||
|
OracleResponseT,
|
||||||
|
NotValidBeforeT,
|
||||||
|
}
|
||||||
|
t.Run("no attributes", func(t *testing.T) {
|
||||||
|
tx := new(Transaction)
|
||||||
|
for _, typ := range attributesTypes {
|
||||||
|
require.Nil(t, tx.GetAttributes(typ))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
t.Run("single attributes", func(t *testing.T) {
|
||||||
|
attrs := make([]Attribute, len(attributesTypes))
|
||||||
|
for i, typ := range attributesTypes {
|
||||||
|
attrs[i] = Attribute{Type: typ}
|
||||||
|
}
|
||||||
|
tx := &Transaction{Attributes: attrs}
|
||||||
|
for _, typ := range attributesTypes {
|
||||||
|
require.Equal(t, []Attribute{{Type: typ}}, tx.GetAttributes(typ))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
t.Run("multiple attributes", func(t *testing.T) {
|
||||||
|
typ := AttrType(ReservedLowerBound + 1)
|
||||||
|
conflictsAttrs := []Attribute{{Type: typ}, {Type: typ}}
|
||||||
|
tx := Transaction{
|
||||||
|
Attributes: append([]Attribute{{Type: HighPriority}}, conflictsAttrs...),
|
||||||
|
}
|
||||||
|
require.Equal(t, conflictsAttrs, tx.GetAttributes(typ))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue