Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

142
Vistas
Dividir ETH al transferir

¡Te agradecería mucho si me puedes ayudar con esta simple pregunta!

Quiero hacer una división de fondos en un contrato inteligente: el 10 % será para mi amigo y el 90 % para mí. Creé una variable y escribí el siguiente código en la función retirar ():

 address private constant _friend = 0xAb8483F64d9C6d1EcF9b849Aeblablalbasomeaddress;

En el inicio del contrato y:

 function withdraw() public payable onlyOwner { uint balance = address(this).balance; payable(msg.sender).transfer(balance / 100 * 10); payable(_friend).transfer(balance / 100 * 90); }

Probé esto en una red de prueba, pero estoy un poco paranoico. ¿Funcionará este código?

¿Por qué creo que podría haber problemas con esto? Al enviar ETH, debe pagar una comisión, por lo que si envío msg.sender, luego envío este 90% + comisión, ¿tendré suficiente dinero para enviar el 10%?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

payable(msg.sender).transfer(balance / 100 * 10); payable(_friend).transfer(balance / 100 * 90);

Esto funcionará como se esperaba para las cantidades (en wei) que son divisibles por 100. Las cantidades que no son divisibles por 100 darán como resultado errores de redondeo, porque se trata de una división de números enteros (no de decimales). Así que cualquiera de ustedes podría obtener un poco menos de lo esperado.

Ejemplo:

  • balance = 200 wei

    • msg.sender obtiene (200/100) * 10 = (2) * 10 = 20
    • _friend obtiene (200 / 100) * 90 = (2) * 90 = 180
  • balance = 150 wei

    • msg.sender obtiene (150/100) * 10 = (1) * 10 = 10
    • _friend obtiene (150 / 100) * 90 = (1) * 90 = 90
    • Los 60 wei restantes permanecen en la dirección del contrato

Solidity resuelve ambos operadores desde la izquierda. Así que primero calcula balance / 100 y luego multiplica el resultado por 10 o 90 .


Al enviar ETH, hay que pagar una comisión

Probablemente te refieres a la tarifa del gas. Esto se paga además del value de la transacción por parte de la dirección que ejecuta la función de withdraw() . La tarifa de gas no afecta las transacciones internas (y su value ) que serán generadas por cada una de las funciones de transfer() .

Ejemplo:

  1. Está enviando 1 value ETH (o 1000000000000000000 wei) junto con la transacción que ejecuta la función de withdraw() . La tarifa del gas es de 0,001 ETH, por lo que el monto total que pagas es de 1,001 ETH. Sin embargo, la tarifa va a la red, por lo que el contrato aún recibe solo el value de 1 ETH.

  2. Luego se divide en dos transacciones internas: 0,1 ETH para usted (como msg.sender ) y 0,9 ETH para la dirección _friend . La tarifa de gas para estas transacciones internas ya está incluida en la tarifa de transacción principal (punto 1).

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda