Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #5
0
        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;
            }
        }