Vergleichen Sie Etherwerte in Verträgen

in einem Vertrag: msg.value ist ein Betrag in Wei, und ich kann 2 Ether == 2000 finney gemäß den Dokumenten schreiben.

Gibt es eine einfache Möglichkeit, einen Betrag in wei (insbesondere msg.value) mit einer Verkettung eines Betrags (als uint) und einer "Bezeichnung" (als Zeichenfolge, die wei, finney, szabo oder ether sein könnte) zu vergleichen?

Wenn nicht, wäre das eine coole Bibliothek!

edit: Pseudo-Code hinzugefügt, das unit & denomiationist eindeutig nicht korrekt, das habe ich oben als Verkettung bezeichnet:

function inferior(uint unit, string denomination) public returns(bool){
         if (msg.value < unit & denomination) {
             return true;
         }
inferior(100, "finney");
Ist das nicht 2 ether == 2000 finneygenau das, was Sie meinen? Können Sie ein Beispiel für die Art von Vergleich geben, die Sie anstellen möchten und die nicht unterstützt wird? Oder möchten Sie nur die Einheit zur Laufzeit angeben können (wenn ja, warum?)
etwas Code hinzugefügt, ich hoffe, es ist klarer
Ein üblicherer Ansatz besteht darin, sich auf Ihre Frontend-DApp zu verlassen, um alle Werte für Sie in wei umzuwandeln, um das Parsen von Zeichenfolgen in Solidity zu vermeiden (und die Schnittstelle sauberer zu machen). Können Sie Ihren Anwendungsfall näher erläutern? Warum muss man das können?
mmm, das scheint viel einfacher zu sein, ich weiß nicht, warum ich versucht habe, die Dinge zu komplizieren, typisch "hätte besser darüber nachdenken sollen, bevor ich eine Frage stelle".
DApps unterscheiden sich in ihrer Struktur von anderen App-Typen; wir alle finden immer noch heraus, welche Muster für sie am besten funktionieren. :)
Was ich anfangs konzeptionell schwer finde, ist auf jeden Fall zu wissen, wo ich was platzieren soll: Serverseite? im Browser? im Vertrag..? aber genau das macht Spaß!

Antworten (1)

Zusammenfassend aus den Kommentaren sind allgemeine Richtlinien:

  • Verträge sollten Salden in Wei speichern (um Divisions- und Rundungsungenauigkeiten zu vermeiden)
  • Verträge sollten die Berechnung auf ein Minimum beschränken (da die Bezahlung eines Miners viel teurer ist, als die gleiche Berechnung lokal durchzuführen)
  • Datenkonvertierungen sind ein Beispiel für Berechnungen, die vom Frontend lokal durchgeführt werden sollten (anstatt durch einen Vertrag in der Blockchain).