forked from TrueCloudLab/neoneo-go
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
|
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
|
// ArrayOfPublicKeys checks the result for correct state (HALT) and then
|
||||||
// extracts a slice of public keys from the returned stack item.
|
// extracts a slice of public keys from the returned stack item.
|
||||||
func ArrayOfPublicKeys(r *result.Invoke, err error) (keys.PublicKeys, error) {
|
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])
|
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) {
|
func TestArrayOfPublicKeys(t *testing.T) {
|
||||||
_, err := ArrayOfPublicKeys(&result.Invoke{State: "HALT", Stack: []stackitem.Item{stackitem.Make(42)}}, nil)
|
_, err := ArrayOfPublicKeys(&result.Invoke{State: "HALT", Stack: []stackitem.Item{stackitem.Make(42)}}, nil)
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
|
|
Loading…
Reference in a new issue