Comparar valores de éter en contratos

en un contrato: msg.value es una cantidad en wei, y puedo escribir 2 ether == 2000 finney según los documentos.

¿Existe una manera simple de comparar una cantidad en wei (específicamente msg.value) con una concatenación de una cantidad (como un uint) y una "denominación" (como una cadena que podría ser wei, finney, szabo o ether)?

si no, ¡sería una biblioteca genial!

editar: pseudocódigo agregado, unit & denomiationclaramente no es correcto, eso es lo que llamé una concatenación arriba:

function inferior(uint unit, string denomination) public returns(bool){
         if (msg.value < unit & denomination) {
             return true;
         }
inferior(100, "finney");
¿No es 2 ether == 2000 finneyexactamente el tipo de cosas de las que estás hablando? ¿Puede dar un ejemplo del tipo de comparación que está tratando de hacer que no es compatible? O simplemente desea poder especificar la unidad en tiempo de ejecución (si es así, ¿por qué?)
Agregué algún código, espero que sea más claro.
Un enfoque más habitual es confiar en su DApp frontend para convertir todos los valores en wei para usted, para evitar el análisis de cadenas en Solidity (y para hacer que la interfaz sea más limpia). ¿Puede explicar su caso de uso con más detalle? ¿Por qué necesitas poder hacer esto?
mmm efectivamente, eso parece mucho más simple, no sé por qué estaba tratando de complicar demasiado las cosas, el típico "debería haberlo pensado mejor antes de hacer la pregunta"
Las DApps tienen una estructura diferente a otros tipos de aplicaciones; todavía estamos averiguando qué patrones funcionan mejor para ellos. :)
definitivamente, lo que encuentro conceptualmente difícil al principio es saber dónde poner qué: ¿lado del servidor? en el navegador? En el contrato..? pero eso es lo divertido!

Respuestas (1)

Resumiendo de los comentarios, las pautas generales son:

  • los contratos deben almacenar saldos en wei (para evitar inexactitudes en la división y el redondeo)
  • los contratos deben mantener el cómputo al mínimo (ya que pagarle a un minero es mucho más costoso que realizar el mismo cómputo localmente)
  • las conversiones de datos son un ejemplo de cálculo que debe realizar la interfaz localmente (en lugar de un contrato en la cadena de bloques)