package storagecontract import ( "github.com/nspcc-dev/neo-go/pkg/interop/iterator" "github.com/nspcc-dev/neo-go/pkg/interop/storage" ) // Main is a very useful function. func Main(operation string, args []interface{}) interface{} { if operation == "put" { return Put(args) } if operation == "get" { return Get(args) } if operation == "delete" { return Delete(args) } if operation == "find" { return Find(args) } return false } // Put puts value at key. func Put(args []interface{}) interface{} { ctx := storage.GetContext() if checkArgs(args, 2) { key := args[0].([]byte) value := args[1].([]byte) storage.Put(ctx, key, value) return key } return false } // Get returns the value at passed key. func Get(args []interface{}) interface{} { ctx := storage.GetContext() if checkArgs(args, 1) { key := args[0].([]byte) return storage.Get(ctx, key) } return false } // Delete deletes the value at passed key. func Delete(args []interface{}) interface{} { ctx := storage.GetContext() key := args[0].([]byte) storage.Delete(ctx, key) return true } // Find returns an array of key-value pairs with key that matched the passed value. func Find(args []interface{}) interface{} { ctx := storage.GetContext() if checkArgs(args, 1) { value := args[0].([]byte) iter := storage.Find(ctx, value) result := []string{} for iterator.Next(iter) { val := iterator.Value(iter) key := iterator.Key(iter) result = append(result, key.(string)+":"+val.(string)) } return result } return false } func checkArgs(args []interface{}, length int) bool { if len(args) == length { return true } return false }