object/user: Add ScriptHash method #199
2 changed files with 19 additions and 0 deletions
|
@ -72,6 +72,11 @@ func (x *ID) SetScriptHash(scriptHash util.Uint160) {
|
|||
copy(x.w[21:], hash.Checksum(x.w[:21]))
|
||||
}
|
||||
|
||||
// ScriptHash calculates and returns script hash of ID.
|
||||
func (x *ID) ScriptHash() (util.Uint160, error) {
|
||||
return util.Uint160DecodeBytesBE(x.w[1:21])
|
||||
}
|
||||
|
||||
// WalletBytes returns FrostFS user ID as Neo3 wallet address in a binary format.
|
||||
//
|
||||
// Return value MUST NOT be mutated: to do this, first make a copy.
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ import (
|
|||
. "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user"
|
||||
usertest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user/test"
|
||||
"github.com/mr-tron/base58"
|
||||
"github.com/nspcc-dev/neo-go/pkg/encoding/address"
|
||||
"github.com/nspcc-dev/neo-go/pkg/util"
|
||||
"github.com/nspcc-dev/neo-go/pkg/util/slice"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
@ -47,6 +48,19 @@ func TestID_SetScriptHash(t *testing.T) {
|
|||
require.True(t, id2.Equals(id))
|
||||
}
|
||||
|
||||
func TestID_ScriptHash(t *testing.T) {
|
||||
userID := usertest.ID()
|
||||
|
||||
scriptHash, err := userID.ScriptHash()
|
||||
require.NoError(t, err)
|
||||
|
||||
ownerAddress := userID.EncodeToString()
|
||||
decodedScriptHash, err := address.StringToUint160(ownerAddress)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.True(t, scriptHash.Equals(decodedScriptHash))
|
||||
}
|
||||
fyrchik
commented
`scriptHash.Equals`?
|
||||
|
||||
func TestV2_ID(t *testing.T) {
|
||||
id := usertest.ID()
|
||||
var m refs.OwnerID
|
||||
|
|
Loading…
Reference in a new issue
It is better to use decoders from https://github.com/nspcc-dev/neo-go/blob/master/pkg/util/uint160.go
There are LE+BE representations, and we use
BytesBE()
inSetScriptHash()
.So if neo-go are to change the internal representation, this code will break. The one with
Uint160DecodeBytesBE
will not.fixed