/* * private void GetCallValue(object sender, EventArgs e) * { * var selectedFnDef = _viewModel.SelectedFunctionDefinition; * if (selectedFnDef == null) * { * MainWindowStore.Instance().DisplayError("A function must be selected"); * return; * } * * var parameters = string.Empty; * if (selectedFnDef.Parameters != null) * { * parameters = string.Join(",", selectedFnDef.Parameters.Select(p => p.Type)); * } * * var operationName = string.Format("{0}({1})", selectedFnDef.FunctionName, parameters); * var hash = HashFactory.Crypto.SHA3.CreateKeccak256(); * var callDataValue = new List<byte>(); * var operationPayload = hash.ComputeBytes(Encoding.ASCII.GetBytes(operationName)).GetBytes().Take(4); * callDataValue.AddRange(operationPayload); * if (selectedFnDef.Parameters != null) * { * for (var i = 1; i <= selectedFnDef.Parameters.Count; i++) * { * var p = selectedFnDef.Parameters[i - 1]; * callDataValue.AddRange(new DataWord(32 * (i * selectedFnDef.Parameters.Count)).GetData()); * } * * foreach (var p in selectedFnDef.Parameters) * { * callDataValue.AddRange(new DataWord(Encoding.ASCII.GetBytes(p.Value).Count()).GetData()); * callDataValue.AddRange(new DataWord(Encoding.ASCII.GetBytes(p.Value)).GetReverseData()); * } * } * * var hex = callDataValue.ToHexString(); * Application.Current.Dispatcher.Invoke(() => _viewModel.GeneratedCallValue = hex); * } */ private void UpdateSmartContractDefinition(CompileSolidityResponse compilationResult) { /* * if (compilationResult.Infos == null) * { * return; * } * * Application.Current.Dispatcher.Invoke(() => _viewModel.FunctionDefinitions.Clear()); * foreach (var info in compilationResult.Infos) * { * var abiDefinition = info.AbiDefinition; * foreach (JObject record in abiDefinition) * { * JToken jTokenName = null; * if (!record.TryGetValue("name", out jTokenName)) * { * continue; * } * * JToken jTokenInputs = null; * var fnType = record.GetValue("type").ToString(); * if (fnType != "function") * { * continue; * } * * var parameters = new ObservableCollection<ParameterDefinitionViewModel>(); * if (record.TryGetValue("inputs", out jTokenInputs)) * { * var jArrInput = jTokenInputs as JArray; * if (jArrInput != null) * { * foreach (JObject inputDef in jArrInput) * { * parameters.Add(new ParameterDefinitionViewModel * { * Name = inputDef.GetValue("name").ToString(), * Type = inputDef.GetValue("type").ToString() * }); * } * } * } * * var newFuncDef = new FunctionDefinitionViewModel * { * FunctionName = jTokenName.ToString(), * Parameters = parameters * }; * Application.Current.Dispatcher.Invoke(() => _viewModel.FunctionDefinitions.Add(newFuncDef)); * } * } */ }
public async Task <CompileSolidityResponse> CompileSolidity(string contract) { if (string.IsNullOrWhiteSpace(contract)) { throw new ArgumentNullException(nameof(contract)); } var httpClient = _httpClientFactory.BuildClient(); var jParams = new JArray(); jParams.Add(contract); var jObj = new JObject(); jObj.Add("id", Guid.NewGuid().ToString()); jObj.Add("method", Constants.RpcOperations.CompileSolidity); jObj.Add("params", jParams); var content = new StringContent(jObj.ToString(), System.Text.Encoding.UTF8, ContentType); var request = new HttpRequestMessage { Method = HttpMethod.Post, Content = content, RequestUri = GetUri() }; var response = await httpClient.SendAsync(request).ConfigureAwait(false); var json = await response.Content.ReadAsStringAsync().ConfigureAwait(false); string errorCode = null; var jsonObj = JObject.Parse(json); if (TryGetError(jsonObj, out errorCode)) { throw new RpcException(errorCode); } var r = jsonObj.GetValue("result").ToString(); if (string.IsNullOrWhiteSpace(r)) { return(null); } var resultObj = JObject.Parse(r); var result = new CompileSolidityResponse { CompilerVersion = resultObj.GetValue("compilerVersion").ToString(), Language = resultObj.GetValue("language").ToString(), LanguageVersion = resultObj.GetValue("languageVersion").ToString(), Source = resultObj.Value <string>("source") }; var infoLst = JArray.Parse(resultObj.GetValue("info").ToString()); var lstInfo = new List <CompileSolidityResponseInfo>(); foreach (JToken info in infoLst) { var infoObj = info as JObject; if (infoObj == null) { continue; } lstInfo.Add(new CompileSolidityResponseInfo { AbiDefinition = JArray.Parse(infoObj.GetValue("abiDefinition").ToString()), Code = infoObj.GetValue("code").ToString() }); } result.Infos = lstInfo; return(result); }