names: implement FromID
Allow to convert interop id to it's name.
This commit is contained in:
parent
7854dcfd8f
commit
a796f2b61d
3 changed files with 99 additions and 0 deletions
|
@ -3,10 +3,23 @@ package interopnames
|
||||||
import (
|
import (
|
||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
|
"errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var errNotFound = errors.New("interop not found")
|
||||||
|
|
||||||
// ToID returns an identificator of the method based on its name.
|
// ToID returns an identificator of the method based on its name.
|
||||||
func ToID(name []byte) uint32 {
|
func ToID(name []byte) uint32 {
|
||||||
h := sha256.Sum256(name)
|
h := sha256.Sum256(name)
|
||||||
return binary.LittleEndian.Uint32(h[:4])
|
return binary.LittleEndian.Uint32(h[:4])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FromID returns interop name from its id.
|
||||||
|
func FromID(id uint32) (string, error) {
|
||||||
|
for i := range names {
|
||||||
|
if id == ToID([]byte(names[i])) {
|
||||||
|
return names[i], nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "", errNotFound
|
||||||
|
}
|
||||||
|
|
21
pkg/core/interop/interopnames/convert_test.go
Normal file
21
pkg/core/interop/interopnames/convert_test.go
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
package interopnames
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestFromID(t *testing.T) {
|
||||||
|
t.Run("Valid", func(t *testing.T) {
|
||||||
|
id := ToID([]byte(names[0]))
|
||||||
|
name, err := FromID(id)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, names[0], name)
|
||||||
|
})
|
||||||
|
t.Run("Invalid", func(t *testing.T) {
|
||||||
|
_, err := FromID(0x42424242)
|
||||||
|
require.True(t, errors.Is(err, errNotFound))
|
||||||
|
})
|
||||||
|
}
|
|
@ -65,3 +65,68 @@ const (
|
||||||
NeoNativeCall = "Neo.Native.Call"
|
NeoNativeCall = "Neo.Native.Call"
|
||||||
NeoNativeDeploy = "Neo.Native.Deploy"
|
NeoNativeDeploy = "Neo.Native.Deploy"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var names = []string{
|
||||||
|
SystemBinaryBase64Decode,
|
||||||
|
SystemBinaryBase64Encode,
|
||||||
|
SystemBinaryDeserialize,
|
||||||
|
SystemBinarySerialize,
|
||||||
|
SystemBlockchainGetBlock,
|
||||||
|
SystemBlockchainGetContract,
|
||||||
|
SystemBlockchainGetHeight,
|
||||||
|
SystemBlockchainGetTransaction,
|
||||||
|
SystemBlockchainGetTransactionFromBlock,
|
||||||
|
SystemBlockchainGetTransactionHeight,
|
||||||
|
SystemCallbackCreate,
|
||||||
|
SystemCallbackCreateFromMethod,
|
||||||
|
SystemCallbackCreateFromSyscall,
|
||||||
|
SystemCallbackInvoke,
|
||||||
|
SystemContractCall,
|
||||||
|
SystemContractCallEx,
|
||||||
|
SystemContractCreate,
|
||||||
|
SystemContractCreateStandardAccount,
|
||||||
|
SystemContractDestroy,
|
||||||
|
SystemContractIsStandard,
|
||||||
|
SystemContractGetCallFlags,
|
||||||
|
SystemContractUpdate,
|
||||||
|
SystemEnumeratorConcat,
|
||||||
|
SystemEnumeratorCreate,
|
||||||
|
SystemEnumeratorNext,
|
||||||
|
SystemEnumeratorValue,
|
||||||
|
SystemIteratorConcat,
|
||||||
|
SystemIteratorCreate,
|
||||||
|
SystemIteratorKey,
|
||||||
|
SystemIteratorKeys,
|
||||||
|
SystemIteratorValues,
|
||||||
|
SystemJSONDeserialize,
|
||||||
|
SystemJSONSerialize,
|
||||||
|
SystemRuntimeCheckWitness,
|
||||||
|
SystemRuntimeGasLeft,
|
||||||
|
SystemRuntimeGetCallingScriptHash,
|
||||||
|
SystemRuntimeGetEntryScriptHash,
|
||||||
|
SystemRuntimeGetExecutingScriptHash,
|
||||||
|
SystemRuntimeGetInvocationCounter,
|
||||||
|
SystemRuntimeGetNotifications,
|
||||||
|
SystemRuntimeGetScriptContainer,
|
||||||
|
SystemRuntimeGetTime,
|
||||||
|
SystemRuntimeGetTrigger,
|
||||||
|
SystemRuntimeLog,
|
||||||
|
SystemRuntimeNotify,
|
||||||
|
SystemRuntimePlatform,
|
||||||
|
SystemStorageDelete,
|
||||||
|
SystemStorageFind,
|
||||||
|
SystemStorageGet,
|
||||||
|
SystemStorageGetContext,
|
||||||
|
SystemStorageGetReadOnlyContext,
|
||||||
|
SystemStoragePut,
|
||||||
|
SystemStoragePutEx,
|
||||||
|
SystemStorageAsReadOnly,
|
||||||
|
NeoCryptoVerifyWithECDsaSecp256r1,
|
||||||
|
NeoCryptoVerifyWithECDsaSecp256k1,
|
||||||
|
NeoCryptoCheckMultisigWithECDsaSecp256r1,
|
||||||
|
NeoCryptoCheckMultisigWithECDsaSecp256k1,
|
||||||
|
NeoCryptoSHA256,
|
||||||
|
NeoCryptoRIPEMD160,
|
||||||
|
NeoNativeCall,
|
||||||
|
NeoNativeDeploy,
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue