Reciba Ether en múltiples direcciones de mejores prácticas

Digamos que soy un intercambio que tiene muchos usuarios. Cuando le pido a un usuario que deposite ETH, le doy una dirección única para poder atribuirle el ETH.

Con Bitcoin esto es fácil. El software de la billetera bitcoin maneja esto y puedo tener BTC en varias direcciones y se trata como una sola cuenta.

Entiendo que con Ethereum esto es diferente.

Encontré 2 opciones para lograr esto:

  1. Implemente un contrato inteligente de reenviador una vez para cada usuario, proporcione la dirección al usuario. Cuando el contrato inteligente recibe ETH, lo reenvía a mi dirección ETH principal.
    Ventajas :

    • El usuario paga el costo del gas por reenviar ETH
    • Solo tiene que hacer un seguimiento de una cuenta (1 clave privada).

    Contras :

    • Tengo que pagar el costo del gas por implementar el contrato de transportista varias veces
  2. Crea una cuenta para cada usuario. No proporcione la clave privada al usuario. Revise periódicamente todas las "cuentas de usuario" que controlo y envíe el ETH a la "cuenta principal"

    Ventajas:

    • No tengo que pagar gasolina por implementar contratos inteligentes

    Contras:

    • Tengo que hacer un seguimiento de varias cuentas.

¿Cuál de estos dos enfoques me costará más gasolina? Intuitivamente, creo que el segundo costaría menos gasolina porque implementar contratos inteligentes es más costoso que enviar ETH. Pero el primer enfoque parece ser el más popular entre los intercambios. ¿Porqué es eso?

Debo señalar que no espero que los usuarios depositen ETH más de una vez. (O más bien, para cada depósito, les daría una nueva dirección para que sea más fácil realizar un seguimiento de sus depósitos)

en el n. ° 2, debe pagar gasolina por cada transacción.
la implementación de un contrato se realiza solo una vez, por lo que no tiene que implementar un contrato cada vez que se agrega una cuenta
Pero como quiero una dirección única para cada usuario, tengo que implementar el contrato una vez para cada usuario, ¿correcto?
Me refería a un contrato, que maneja los saldos de las cuentas internamente, y como internamente puedes hacer cualquier cosa, puedes generar una dirección única para cada usuario.

Respuestas (2)

Digamos que soy un intercambio que tiene muchos usuarios. Cuando le pido a un usuario que deposite ETH, le doy una dirección única para poder atribuirle el ETH.

Con Bitcoin esto es fácil. El software de la billetera bitcoin maneja esto y puedo tener BTC en varias direcciones y se trata como una sola cuenta.

Entiendo que con Ethereum esto es diferente.

No estoy seguro de entender lo que estás tratando de lograr. Si desea permitir que las personas depositen Ether en su contrato, ¿no puede simplemente mantener un mapeo de direcciones a saldos? Obtendría la dirección del remitente con msg.sender

Permítanme describirlo desde una experiencia de usuario POW. Cada usuario recibe una dirección Ethereum única donde puede depositar Ether. El Ether de todas estas direcciones termina en una sola dirección de Ethereum que yo controlo. Eso lo hace más claro?
Es inusualmente complicado de esta manera. Debe dar a cualquier usuario la misma dirección para depositar, luego mantener en el contrato su dirección personal, leída cuando deposita, acoplando a la dirección el saldo actual de ese usuario. Un simple mapeo es suficiente. ¿Cuál es el significado de dar una dirección de depósito diferente a un depositante diferente cuando es tan simple entender quién deposita qué?
Hay un usuario en un sistema fuera de la cadena, digamos identificado por su correo electrónico. Quiero pedirle a este usuario que pague una factura con ETH. Necesito una forma de identificar que esta factura ha sido pagada. No quiero pedirle al usuario su dirección de ethereum por razones de UX. Si le doy una dirección ETH única para enviar el ETH, entonces, una vez que se envía el ETH a la dirección, sé que debo acreditar a este usuario en mi sistema fuera de la cadena. ¿Tiene sentido? Tampoco quiero pedirle al usuario que llame a un contrato y pase su dirección de correo electrónico, quiero que envíe una transacción ETH regular.

Tendrías un contrato que crea contratos. Su contrato maestro crea nuevas 'billeteras infantiles' para sus usuarios.

Luego puede hacer que los niños escuchen a un propietario determinado que se crea al crear la nueva billetera. De esa manera tienen una dirección específica que tú controlas. Si solo desea enviar el dinero instantáneamente a su propia billetera, puede tener una función en el nuevo contrato que es una función alternativa que envía todo el ETH a una dirección determinada.