private static decimal GetZoroBalance(string coinType, string address) { string tokenHash = Config._nep5TokenHashDict[coinType]; UInt160 nep5Hash = UInt160.Parse(tokenHash); var addrHash = ZoroHelper.GetPublicKeyHashFromAddress(address); ScriptBuilder sb = new ScriptBuilder(); if (coinType == "bct" || coinType == "bcp" || coinType == "zoro") { sb.EmitSysCall("Zoro.NativeNEP5.Call", "BalanceOf", nep5Hash, addrHash); } else { sb.EmitAppCall(nep5Hash, "balanceOf", addrHash); } var info = ZoroHelper.InvokeScript(sb.ToArray(), ""); JObject json = JObject.Parse(info); decimal value = 0; if (json.ContainsKey("result")) { JObject json_result = json["result"] as JObject; JArray stack = json_result["stack"] as JArray; string result = ZoroHelper.GetJsonValue(stack[0] as JObject); value = Math.Round(decimal.Parse(result) / (decimal)Math.Pow(10, Config._nep5TokenDecimalDict[coinType]), Config._nep5TokenDecimalDict[coinType]); } return(value); }
private static Dictionary <string, decimal> GetZoroBalances(string coinType, JArray addrJArray) { Dictionary <string, decimal> balanceDict = new Dictionary <string, decimal>(); ScriptBuilder sb = new ScriptBuilder(); string tokenHash = Config._nep5TokenHashDict[coinType]; UInt160 nep5Hash = UInt160.Parse(tokenHash); for (int i = 0; i < addrJArray.Count; i++) { var addrHash = ZoroHelper.GetPublicKeyHashFromAddress(addrJArray[i].ToString()); if (coinType == "bct" || coinType == "bcp" || coinType == "zoro") { sb.EmitSysCall("Zoro.NativeNEP5.Call", "BalanceOf", nep5Hash, addrHash); } else { sb.EmitAppCall(nep5Hash, "balanceOf", addrHash); } } var info = ZoroHelper.InvokeScript(sb.ToArray(), ""); JObject json = JObject.Parse(info); if (json.ContainsKey("result")) { JObject json_result = json["result"] as JObject; JArray stackJArray = json_result["stack"] as JArray; if (addrJArray.Count == stackJArray.Count) { int i = 0; for (int j = 0; j < stackJArray.Count; j++) { string result = ZoroHelper.GetJsonValue(stackJArray[j] as JObject); decimal value = Math.Round(decimal.Parse(result) / (decimal)Math.Pow(10, Config._nep5TokenDecimalDict[coinType]), Config._nep5TokenDecimalDict[coinType]); balanceDict[addrJArray[i].ToString()] = value; i++; } } } return(balanceDict); }
private void GetBalance(UInt160 assetHash, WalletAccount account) { using (ScriptBuilder sb = new ScriptBuilder()) { sb.EmitAppCall(assetHash, "balanceOf", account.ScriptHash); sb.EmitAppCall(assetHash, "decimals"); sb.EmitAppCall(assetHash, "symbol"); var script = sb.ToArray().ToHexString(); Zoro.IO.Json.JArray _params = new Zoro.IO.Json.JArray(); _params.Add(""); _params.Add(script); var info = Handler.Process("invokescript", _params); JObject json = JObject.Parse(info.ToString()); if (json.ContainsKey("stack")) { JArray stack = json["stack"] as JArray; if (stack[0]["value"].ToString() == "" || stack[1]["value"].ToString() == "" || stack[2]["value"].ToString() == "") { return; } string value = ZoroHelper.GetJsonValue((JObject)stack[0]); string decimals = BigInteger.Parse(stack[1]["value"].ToString()).ToString(); string symbol = Encoding.UTF8.GetString(ZoroHelper.HexString2Bytes(stack[2]["value"].ToString())); decimal balance = Math.Round(decimal.Parse(value) / (decimal)Math.Pow(10, double.Parse(decimals)), int.Parse(decimals)); if (balance > 0) { IsShow = true; this.lblAddress.Text = account.Address; this.lblAsset.Text = assetHash.ToString() + "(" + symbol + ")"; this.lblBalance.Text = balance.ToString(); Account = account; AssetHash = assetHash; AssetSymbol = symbol; Decimals = int.Parse(decimals); } } } }
private string GetBalanceFromJson(string info) { string result = ""; JObject json = JObject.Parse(info); JArray stack = json["stack"] as JArray; if (stack != null && stack.Count > 0) { string balance = ZoroHelper.GetJsonValue(stack[0] as JObject); Decimal value = Decimal.Parse(balance) / new Decimal(Math.Pow(10, 8)); string fmt = "{0:N" + 8 + "}"; result = string.Format(fmt, value); } return(result); }
private void GetBalance(UInt160 assetHash, WalletAccount account) { try { using (ScriptBuilder sb = new ScriptBuilder()) { if (assetHash == Genesis.BcpContractAddress || assetHash == Genesis.BctContractAddress) { sb.EmitSysCall("Zoro.NativeNEP5.Call", "BalanceOf", assetHash, Account.ScriptHash); sb.EmitSysCall("Zoro.NativeNEP5.Call", "Decimals", assetHash); sb.EmitSysCall("Zoro.NativeNEP5.Call", "Symbol", assetHash); } else { sb.EmitAppCall(assetHash, "balanceOf", account.ScriptHash); sb.EmitAppCall(assetHash, "decimals"); sb.EmitAppCall(assetHash, "symbol"); } var script = sb.ToArray().ToHexString(); Zoro.IO.Json.JArray _params = new Zoro.IO.Json.JArray(); _params.Add(""); _params.Add(script); Zoro.IO.Json.JObject info; info = Program.Handler.Process("invokescript", _params); JObject json = JObject.Parse(info.ToString()); string decimals; string symbol = ""; decimal balance = 0.00m; if (json.ContainsKey("stack")) { JArray stack = json["stack"] as JArray; symbol = Encoding.UTF8.GetString(ZoroHelper.HexString2Bytes(stack[2]["value"].ToString())); decimals = BigInteger.Parse(stack[1]["value"].ToString()).ToString(); if (stack[0]["value"].ToString() == "" || stack[1]["value"].ToString() == "" || stack[2]["value"].ToString() == "") { this.lblBalance.Text = "0.00"; this.btnTransfer.Enabled = false; } else { string value = ZoroHelper.GetJsonValue((JObject)stack[0]); balance = Math.Round(decimal.Parse(value) / (decimal)Math.Pow(10, double.Parse(decimals)), int.Parse(decimals)); if (balance != 0) { this.btnTransfer.Enabled = true; } } Account = account; AssetHash = assetHash; AssetSymbol = symbol; Decimals = int.Parse(decimals); } this.lblAsset.Text = assetHash.ToString() + "(" + symbol + ")"; this.lblBalance.Text = balance.ToString(); } } catch { return; } }