¿Cómo convertir el saldo BigInteger de NEthereum de WEI a ETH?

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 foreachbucles 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).

¿Qué lenguaje es este? C#?
NEthereum es una biblioteca .NET, así que sí, es C#

Respuestas (1)

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

Acabo de probar su método FromWei() y me da el mismo problema, devuelve 0. Así que todavía tendré que usar mi solución alternativa :(
Es interesante que bigInteger no haga una división adecuada, lo probaré más tarde
Me acabo de dar cuenta de que convertir de y a Wei no maneja los lugares decimales debido a BigInteger. Ya tengo una implementación hecha para decimales. github.com/Nethereum/Netherum.Maker/blob/master/Nethereum.Maker/…
esto está en la lista TODO... para agregar al convertidor
La URL ahora es 404 :P
En la biblioteca NEthereum, este es un método estático que se puede llamar como Nethereum.Web3.Web3.Convert.FromWei(<numberInWei>); Devuelve un decimal que representa un valor eth.
Gracias @ThorkilVærge editado para agregar más información.