unwrap: provide ArrayOfUint160
It's a popular type as well.
This commit is contained in:
parent
8cd4948e06
commit
d0702c2cf9
2 changed files with 39 additions and 0 deletions
|
@ -195,6 +195,28 @@ func ArrayOfBytes(r *result.Invoke, err error) ([][]byte, error) {
|
|||
return res, nil
|
||||
}
|
||||
|
||||
// ArrayOfUint160 checks the result for correct state (HALT) and then extracts a
|
||||
// slice of util.Uint160 from the returned stack item.
|
||||
func ArrayOfUint160(r *result.Invoke, err error) ([]util.Uint160, error) {
|
||||
a, err := Array(r, err)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
res := make([]util.Uint160, len(a))
|
||||
for i := range a {
|
||||
b, err := a[i].TryBytes()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("element %d is not a byte string: %w", i, err)
|
||||
}
|
||||
u, err := util.Uint160DecodeBytesBE(b)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("element %d is not a uint160: %w", i, err)
|
||||
}
|
||||
res[i] = u
|
||||
}
|
||||
return res, nil
|
||||
}
|
||||
|
||||
// ArrayOfPublicKeys checks the result for correct state (HALT) and then
|
||||
// extracts a slice of public keys from the returned stack item.
|
||||
func ArrayOfPublicKeys(r *result.Invoke, err error) (keys.PublicKeys, error) {
|
||||
|
|
|
@ -231,6 +231,23 @@ func TestArrayOfBytes(t *testing.T) {
|
|||
require.Equal(t, []byte("some"), a[0])
|
||||
}
|
||||
|
||||
func TestArrayOfUint160(t *testing.T) {
|
||||
_, err := ArrayOfUint160(&result.Invoke{State: "HALT", Stack: []stackitem.Item{stackitem.Make(42)}}, nil)
|
||||
require.Error(t, err)
|
||||
|
||||
_, err = ArrayOfUint160(&result.Invoke{State: "HALT", Stack: []stackitem.Item{stackitem.Make([]stackitem.Item{stackitem.Make([]stackitem.Item{})})}}, nil)
|
||||
require.Error(t, err)
|
||||
|
||||
_, err = ArrayOfUint160(&result.Invoke{State: "HALT", Stack: []stackitem.Item{stackitem.Make([]stackitem.Item{stackitem.Make([]byte("some"))})}}, nil)
|
||||
require.Error(t, err)
|
||||
|
||||
u160 := util.Uint160{1, 2, 3}
|
||||
uints, err := ArrayOfUint160(&result.Invoke{State: "HALT", Stack: []stackitem.Item{stackitem.Make([]stackitem.Item{stackitem.Make(u160.BytesBE())})}}, nil)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 1, len(uints))
|
||||
require.Equal(t, u160, uints[0])
|
||||
}
|
||||
|
||||
func TestArrayOfPublicKeys(t *testing.T) {
|
||||
_, err := ArrayOfPublicKeys(&result.Invoke{State: "HALT", Stack: []stackitem.Item{stackitem.Make(42)}}, nil)
|
||||
require.Error(t, err)
|
||||
|
|
Loading…
Reference in a new issue