Wie konvertiert man das BigInteger-Guthaben von NEthereum von WEI in ETH?

Ich verwende diesen einfachen Code, um die Guthaben bei NEthereum abzurufen:

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));
            }
        }
    }
}

Die erste foreachSchleife funktioniert, aber die dritte nicht. Meine Vermutung war, dass die Salden, die im zweiten Foreach gedruckt werden, in Wei-Einheiten sind, also musste ich sie in Eth umwandeln. Aber dabei ist das Ergebnis in beiden Fällen 0, was falsch ist, weil die Salden zwischen den Konten unterschiedlich sind.

Dies ist die vollständige Ausgabe:

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

UPDATE 1 : Habe gerade eine hässliche Problemumgehung gefunden: decimal.Parse(balance.Value.ToString())/10000000000000000m.

UPDATE 2 : Der Autor der Bibliothek hat eine neue API empfohlen: https://github.com/Nethereum/Nethereum/blob/master/src/Nethereum.Util/UnitConversion.cs (noch nicht getestet).

Welche Sprache ist das? C#?
NEthereum ist eine .NET-Bibliothek, also ja, es ist C#

Antworten (1)

In Web3 gibt es eine Hilfskonverterfunktion, ähnlich der in web3.js implementierten.

Es kann wie folgt verwendet werden:

web3.Convert.ToWei() oder web3.Convert.FromWei()

oder als statische Methode Nethereum.Web3.Web3.Convert.ToWei() oder Nethereum.Web3.Web3.Convert.FromWei()

Bitte schau dir den Code für die verschiedenen Überladungen an

https://github.com/Nethereum/Nethereum/blob/master/src/Nethereum.Util/UnitConversion.cs

Ich habe gerade Ihre FromWei() -Methode ausprobiert und sie gibt mir das gleiche Problem, gibt 0 zurück. Also muss ich immer noch meine Problemumgehung verwenden :(
Interessant, dass bigInteger keine richtige Division durchführt, teste es später
Ich habe gerade festgestellt, dass die Konvertierung von und nach Wei die Dezimalstellen aufgrund von BigInteger nicht behandelt. Ich habe bereits eine Implementierung für Dezimalzahlen durchgeführt. github.com/Nethereum/Netherum.Maker/blob/master/Nethereum.Maker/…
Dies ist in der TODO-Liste.. zum Konverter hinzuzufügen
URL ist jetzt 404 :P
In der NEthereum-Bibliothek ist dies eine statische Methode, die aufgerufen werden kann als Nethereum.Web3.Web3.Convert.FromWei(<numberInWei>); Es gibt eine Dezimalzahl zurück, die einen eth-Wert darstellt.
Danke @ThorkilVærge bearbeitet, um weitere Informationen hinzuzufügen.