コード例 #1
0
        //Returns the balance for a specific token, given a contract.
        public IEnumerator GetTokenBalance(string addressText, string tokenContract, string tokenSymbol, int tokenDecimals, Action <Poltergeist.Balance> callback, Action <EPHANTASMA_SDK_ERROR_TYPE, string> errorHandlingCallback = null)
        {
            if (String.IsNullOrEmpty(tokenContract))
            {
                // Don't query token balances if we haven't deployed contracts for them.

                var balance = new Poltergeist.Balance()
                {
                    Symbol    = tokenSymbol,
                    Available = 0,
                    Pending   = 0,
                    Claimable = 0,
                    Staked    = 0,
                    Chain     = "main",
                    Decimals  = tokenDecimals
                };

                callback(balance);

                yield break;
            }

            var balanceOf = "70a08231b98ef4ca268c9cc3f6b4590e4bfec28280db06bb5d45e689f2a360be";
            var data      = balanceOf.Substring(0, 8) + addressText.Substring(2).PadLeft(64, '0');

            var paramData  = DataNode.CreateArray("params");
            var callParams = DataNode.CreateObject();

            callParams.AddField("to", "0x" + tokenContract);
            callParams.AddField("data", "0x" + data);
            paramData.AddNode(callParams);
            paramData.AddField(null, "latest");

            yield return(WebClient.RPCRequestEx(Host, "eth_call", WebClient.DefaultTimeout, errorHandlingCallback, (node) => {
                var availableHex = node.Value;
                BigInteger available = 0;
                if (!String.IsNullOrEmpty(availableHex) && availableHex != "0x")
                {
                    available = BigInteger.FromHex(availableHex.Substring(2));
                }

                var balance = new Poltergeist.Balance()
                {
                    Symbol = tokenSymbol,
                    Available = UnitConversion.ToDecimal(available, tokenDecimals),
                    Pending = 0,
                    Claimable = 0,
                    Staked = 0,
                    Chain = "main",
                    Decimals = tokenDecimals
                };

                callback(balance);
            }, paramData));
        }
コード例 #2
0
        public IEnumerator GetBalance(string addressText, string tokenSymbol, int tokenDecimals, Action <Poltergeist.Balance> callback, Action <EPHANTASMA_SDK_ERROR_TYPE, string> errorHandlingCallback = null)
        {
            yield return(WebClient.RPCRequest(Host, "eth_getBalance", WebClient.DefaultTimeout, errorHandlingCallback, (node) => {
                var availableHex = node.Value;
                var available = BigInteger.FromHex(availableHex.Substring(2));

                var balance = new Poltergeist.Balance()
                {
                    Symbol = tokenSymbol,
                    Available = UnitConversion.ToDecimal(available, tokenDecimals),
                    Pending = 0,
                    Claimable = 0,
                    Staked = 0,
                    Chain = "main",
                    Decimals = tokenDecimals
                };

                callback(balance);
            }, addressText, "latest"));
        }