Я использую этот простой код для получения балансов с NEthereum:
using System;
using System.Numerics;
namespace TestConsole
{
class Program
{
static readonly BigInteger ethToWeiRatio = new BigInteger(1000000000000000000m);
static void Main(string[] args)
{
var web3 = new Nethereum.Web3.Web3();
var accountsTask = web3.Eth.Accounts.SendRequestAsync();
accountsTask.Wait();
var accounts = accountsTask.Result;
foreach (var account in accounts)
{
Console.WriteLine("account " + account);
}
foreach (var account in accounts)
{
var balanceTask = web3.Eth.GetBalance.SendRequestAsync(account);
balanceTask.Wait();
var balance = balanceTask.Result;
Console.WriteLine("account " + account + "; balance in wei: "
+ balance.Value);
}
foreach (var account in accounts)
{
var balanceTask = web3.Eth.GetBalance.SendRequestAsync(account);
balanceTask.Wait();
var balance = balanceTask.Result;
Console.WriteLine("account " + account + "; balance in eth: "
+ BigInteger.Divide(balance.Value, ethToWeiRatio));
}
}
}
}
Первые foreach
петли работают, а третья нет. Я предполагаю, что балансы, выводимые во втором foreach, указаны в единицах Wei, поэтому мне пришлось преобразовать их в Eth. Но при этом результат равен 0 для обоих случаев, что неверно, поскольку балансы на разных счетах разные.
Это полный вывод:
account 0xd74c7d19e3bff6b150f76cac754a65df3b23b755
account 0xa9f4a7d4d7a163bc9f45e2e1e216b7f40ce79af5
account 0xd74c7d19e3bff6b150f76cac754a65df3b23b755; balance in wei: 542316352000000000
account 0xa9f4a7d4d7a163bc9f45e2e1e216b7f40ce79af5; balance in wei: 300000000000000000
account 0xd74c7d19e3bff6b150f76cac754a65df3b23b755; balance in eth: 0
account 0xa9f4a7d4d7a163bc9f45e2e1e216b7f40ce79af5; balance in eth: 0
ОБНОВЛЕНИЕ 1 : только что нашел уродливое обходное решение: decimal.Parse(balance.Value.ToString())/10000000000000000m
.
ОБНОВЛЕНИЕ 2 : Автор библиотеки рекомендовал новый API: https://github.com/Nethereum/Nethereum/blob/master/src/Nethereum.Util/UnitConversion.cs (еще не тестировал).
В Web3 есть вспомогательная функция конвертера, аналогичная реализованной в web3.js.
Его можно использовать следующим образом:
web3.Convert.ToWei() или web3.Convert.FromWei()
или как статический метод Nethereum.Web3.Web3.Convert.ToWei() или Nethereum.Web3.Web3.Convert.FromWei()
пожалуйста, взгляните на код для различных перегрузок
https://github.com/Nethereum/Nethereum/blob/master/src/Nethereum.Util/UnitConversion.cs
Nethereum.Web3.Web3.Convert.FromWei(<numberInWei>)
; Он возвращает десятичное число, которое представляет собой значение eth.
пользователь4951
нокте