Estoy usando este código simple para obtener los saldos con 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));
}
}
}
}
Los primeros foreach
bucles funcionan, pero el tercero no. Supongo que los saldos que se imprimen en el segundo foreach están en unidades Wei, por lo que tuve que convertirlos a Eth. Pero al hacer eso, el resultado es 0 para ambos casos, lo cual es incorrecto porque los saldos son diferentes entre las cuentas.
Esta es la salida completa:
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
ACTUALIZACIÓN 1 : Acabo de encontrar una solución fea: decimal.Parse(balance.Value.ToString())/10000000000000000m
.
ACTUALIZACIÓN 2 : el autor de la biblioteca recomendó una nueva API: https://github.com/Nethereum/Nethereum/blob/master/src/Nethereum.Util/UnitConversion.cs (aún no la he probado).
Hay una función de conversión auxiliar en Web3, similar a la implementada en web3.js.
Se puede utilizar de la siguiente manera:
web3.Convert.ToWei() o web3.Convert.FromWei()
o como método estático Nethereum.Web3.Web3.Convert.ToWei() o Nethereum.Web3.Web3.Convert.FromWei()
por favor, eche un vistazo al código para las diferentes sobrecargas
https://github.com/Nethereum/Nethereum/blob/master/src/Nethereum.Util/UnitConversion.cs
Nethereum.Web3.Web3.Convert.FromWei(<numberInWei>)
; Devuelve un decimal que representa un valor eth.
usuario4951
tocar