Exemplo n.º 1
0
        /*
         * 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));
             *  }
             * }
             */
        }
Exemplo n.º 2
0
        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);
        }