Seite 1 von 1

uint128 umrechnen in Decimal

Verfasst: Montag 21. August 2023, 13:08
von Kurt_Wallander
Ahoi!

Ich lese aus einem Smart Contract (auf Arbitrum) einen Wert aus. In der Doku für Developer heißt es, dabei handele es sich um einen uint128-Wert („Expressed in ray“). Ich möchte diesen umrechnen in einen Dezimalwert mit zwei Nachkommastellen. Stehe gerade etwas auf dem Schlauch. Wie mache ich das?

Lieben Gruß und Dank vorab
Kurt

Re: uint128 umrechnen in Decimal

Verfasst: Montag 21. August 2023, 14:01
von __deets__
Durch 100 teilen.

Re: uint128 umrechnen in Decimal

Verfasst: Montag 21. August 2023, 14:22
von Kurt_Wallander
__deets__ hat geschrieben: Montag 21. August 2023, 14:01 Durch 100 teilen.
Sicher? Das haut nicht wirklich hin.

Re: uint128 umrechnen in Decimal

Verfasst: Montag 21. August 2023, 14:39
von Sirius3
Was haut nicht hin?
Was ist Deine Eingabe, wie sieht der Code aus, wie die Ausgabe und was wäre Deine erwartete Ausgabe?

Re: uint128 umrechnen in Decimal

Verfasst: Montag 21. August 2023, 14:46
von Kurt_Wallander
Sirius3 hat geschrieben: Montag 21. August 2023, 14:39 Was haut nicht hin?
Was ist Deine Eingabe, wie sieht der Code aus, wie die Ausgabe und was wäre Deine erwartete Ausgabe?
Zurück kriege ich den Wert 33555008. Draus werden müsste eine Zahl mit einer Stelle vor dem Komma.

Sollte es helfen: Ich lese aus dem Pool Smart Contract von Aave den Wert für currentLiquidityRate aus und bekomme obigen Wert.

https://docs.aave.com/developers/core-contracts/pool

Re: uint128 umrechnen in Decimal

Verfasst: Montag 21. August 2023, 14:52
von Sirius3
Also durch 10000000 teilen?

Re: uint128 umrechnen in Decimal

Verfasst: Montag 21. August 2023, 15:05
von Kurt_Wallander
Sorry, verguckt, das ist der Wert:

26307950997624296042583108

Und irgendwo habe ich was gelesen von Ray = 27 Stellen. Das passt dann aber auch nicht. Hmmm …

Re: uint128 umrechnen in Decimal

Verfasst: Montag 21. August 2023, 15:07
von __deets__
Kurt_Wallander hat geschrieben: Montag 21. August 2023, 14:22
__deets__ hat geschrieben: Montag 21. August 2023, 14:01 Durch 100 teilen.
Sicher? Das haut nicht wirklich hin.
Todsicher. Das haut so hin:

Code: Alles auswählen

>>> v = 1234567
>>> v / 100
12345.67
>>> import decimal as d
>>> d.Decimal(v) / d.Decimal(100)
Decimal('12345.67')
Das sind Ganzzaheln, umgerechnet in " Dezimalwert mit zwei Nachkommastellen".

Re: uint128 umrechnen in Decimal

Verfasst: Montag 21. August 2023, 17:38
von Kurt_Wallander
Probiere es später aus und melde mich nochmal. Danke!

Re: uint128 umrechnen in Decimal

Verfasst: Montag 21. August 2023, 19:52
von Kurt_Wallander
Hallo,

also ich kriege näherungsweise die richtigen Werte raus, wenn ich die vom Smart Contract zurückgelieferte Zahl durch 10000000000000000000000000 teile. Die Ungenauigkeit könnte damit zusammenhängen, dass die Aave-Website die Rates nicht so oft aktualisiert. Sicher bin ich mir nicht, aber ich habe mehrere Assets abgeglichen, und jetzt scheint es einigermaßen zu passen. Nun würde ich nur zu gern verstehen, warum ...

Lieben Gruß
Kurt

Re: uint128 umrechnen in Decimal

Verfasst: Montag 21. August 2023, 23:39
von __blackjack__
Warum nicht? Nach einer kurzen Recherche ist ein ”ray” halt so definiert.

Re: uint128 umrechnen in Decimal

Verfasst: Dienstag 22. August 2023, 07:09
von Kurt_Wallander
__blackjack__ hat geschrieben: Montag 21. August 2023, 23:39 Warum nicht? Nach einer kurzen Recherche ist ein ”ray” halt so definiert.
Dann habe ich falsch gesucht. Aber gut, damit wäre das Problem dann erstmal gelöst.