private static ExecutionState Map_Get(RuntimeVM vm) { vm.ExpectStackSize(4); var contractName = vm.PopString("contract"); var field = vm.PopString("field"); var mapKey = SmartContract.GetKeyForField(contractName, field, false); var entryKey = vm.Stack.Pop().AsByteArray(); vm.Expect(entryKey.Length > 0, "invalid entry key"); var type_obj = vm.Stack.Pop(); var vmType = type_obj.AsEnum <VMType>(); var map = new StorageMap(mapKey, vm.Storage); var value_bytes = map.GetRaw(entryKey); var val = new VMObject(); if (value_bytes == null) { val.SetDefaultValue(vmType); } else { val.SetValue(value_bytes, vmType); } vm.Stack.Push(val); return(ExecutionState.Running); }