void dapp_UpdateFuncUI(TabItem tabitem, DApp_Func func) { var sviewer = new ScrollViewer(); tabitem.Content = sviewer; var canvas = new Canvas(); sviewer.Content = canvas; canvas.Background = null; var text = new TextBlock(); text.Width = 500; text.Height = 32; canvas.Children.Add(text); Canvas.SetLeft(text, 0); Canvas.SetTop(text, 0); text.Text = func.desc; text.Foreground = white; var y = text.Height; foreach (var i in func.inputs) { var label = new TextBlock(); label.Text = i.desc; label.Width = 200; label.Height = 32; canvas.Children.Add(label); Canvas.SetLeft(label, 0); Canvas.SetTop(label, y); if (i.type == "string" || i.type == "address" || i.type == "bytes" || i.type == "url") { TextBox tbox = new TextBox(); tbox.Tag = i; tbox.Width = 300; tbox.Height = 20; tbox.Text = i.value; canvas.Children.Add(tbox); tbox.TextChanged += dapp_FuncValue_Text_Changed; Canvas.SetLeft(tbox, 200); Canvas.SetTop(tbox, y); y += 20; } else { TextBlock tbox = new TextBlock(); tbox.Tag = i; tbox.Width = 300; tbox.Height = 20; tbox.Text = "unknowntype:" + i.type; canvas.Children.Add(tbox); Canvas.SetLeft(tbox, 200); Canvas.SetTop(tbox, y); y += 20; } } }
private void dapp_getStorage(DApp_Func func) { try { var json = func.call.scriptparam; var scripthash = dapp_getCallParam(json[0].AsString()); var key = dapp_getCallParam(json[1].AsString()); var result = rpc_getStorage(scripthash, key); if (result == null) { this.dapp_result_raw.Text = "(null)"; } else { this.dapp_result_raw.Text = result; } this.dapp_result.Text = ""; if (func.results.Length > 0) { var outvalue = ""; try { MyJson.JsonNode_Object item = new MyJson.JsonNode_Object(); item.SetDictValue("type", "ByteArray"); item.SetDictValue("value", result); outvalue = dapp_getResultValue(func.results[0].type, item); } catch (Exception err) { outvalue = "err:" + err.Message; } this.dapp_result.Text += (func.results[0].desc + "=" + outvalue) + "\r\n"; } } catch (Exception err) { this.dapp_result_raw.Text = "error=" + err.Message + "\r\n" + err.StackTrace; } }
private void dapp_sendrawtransaction(DApp_Func func, bool onlyMakeTran = false) { try { dapp_result.Text = ""; dapp_result_raw.Text = ""; //fill script if (string.IsNullOrEmpty(func.call.scriptcall)) { this.lastScript = null; this.tabCType.SelectedIndex = 0; this.updateScript(); lastFee = 0; labelFee.Text = "Fee:" + lastFee; } else { var hash = dapp_getCallParam(func.call.scriptcall); var scrb = new ThinNeo.ScriptBuilder(); var jsonps = func.call.scriptparam; for (var i = jsonps.Length - 1; i >= 0; i--) { dapp_EmitParam(scrb, jsonps[i]); } scrb.EmitAppCall(hash); this.lastScript = scrb.ToArray(); this.tabCType.SelectedIndex = 1; this.updateScript(); lastFee = (decimal)func.call.scriptfee; labelFee.Text = "Fee:" + lastFee; } //fill input this.listInput.Items.Clear(); foreach (var coin in func.call.coins) { var hash = dapp_getCallParam(coin.scripthash); var value = coin.value; tx_fillInputs(hash, coin.asset, value); } //fill output this.updateOutput(); //生成交易,拼签名 var tran = this.GenTran(); if (tran == null) { return; } this.lastTranMessage = tran.GetMessage(); //处理鉴证 foreach (var coin in func.call.witnesses) { byte[] vscript = dapp_getCallParam(coin.vscript); var hash = ThinNeo.Helper.GetScriptHashFromScript(vscript); var addr = ThinNeo.Helper.GetAddressFromScriptHash(hash); ThinNeo.Witness wit = null; foreach (ThinNeo.Witness w in listWitness.Items) { if (w.Address == addr) { wit = w; break; } } if (wit == null) { wit = new ThinNeo.Witness(); wit.VerificationScript = vscript; listWitness.Items.Add(wit); } ThinNeo.ScriptBuilder sb = new ThinNeo.ScriptBuilder(); for (var i = coin.iscript.Length - 1; i >= 0; i--) { dapp_EmitParam(sb, coin.iscript[i]); } wit.InvocationScript = sb.ToArray(); } if (onlyMakeTran) { return; } var ttran = this.signAndBroadcast(); if (tran != null) { this.dapp_result_raw.Text = "sendtran:" + ThinNeo.Helper.Bytes2HexString(ttran.GetHash()); } } catch (Exception err) { this.dapp_result_raw.Text = "error=" + err.Message + "\r\n" + err.StackTrace; } }
private void dapp_invokeScript(DApp_Func func) { try { var hash = dapp_getCallParam(func.call.scriptcall); var scrb = new ThinNeo.ScriptBuilder(); var jsonps = func.call.scriptparam; for (var i = jsonps.Length - 1; i >= 0; i--) { dapp_EmitParam(scrb, jsonps[i]); } scrb.EmitAppCall(hash); var callstr = ThinNeo.Helper.Bytes2HexString(scrb.ToArray()); var str = WWW.MakeRpcUrl(labelApi.Text, "invokescript", new MyJson.JsonNode_ValueString(callstr)); var result = WWW.GetWithDialog(this, str); this.dapp_result.Text = ""; if (result == null) { this.dapp_result_raw.Text = "(null)"; } else { var json = MyJson.Parse(result).AsDict(); if (json.ContainsKey("error")) { this.dapp_result_raw.Text = json["error"].ToString(); } else { StringBuilder sb = new StringBuilder(); //json["result"].AsDict().ConvertToStringWithFormat(sb, 4); this.dapp_result_raw.Text = sb.ToString(); //var gas = json["result"].AsDict()["gas_consumed"].ToString(); //this.dapp_result.Items.Add("Fee:" + gas); //var state = json["result"].AsDict()["state"].ToString(); //this.dapp_result.Items.Add("State:" + state); var stack = json["result"].AsList()[0].AsDict()["stack"].AsList(); this.dapp_result.Text += ("StackCount=" + stack.Count) + "\r\n"; for (var i = 0; i < func.results.Length; i++) { var jsonresult = getJsonResult(stack, func.results[i].pos); if (jsonresult == null) { this.dapp_result.Text += (func.results[i].desc + "=" + "<miss>") + "\r\n"; } else { try { var outvalue = dapp_getResultValue(func.results[i].type, jsonresult); this.dapp_result.Text += (func.results[i].desc + "=" + outvalue) + "\r\n"; } catch { this.dapp_result.Text += (func.results[i].desc + "=" + "<error>") + "\r\n"; } } } } } } catch (Exception err) { this.dapp_result_raw.Text = "error=" + err.Message + "\r\n" + err.StackTrace; } }