En DeFi, he visto que se solicita a los usuarios que den acceso a sus fondos. ¿Por qué no simplemente enviar esos fondos al contrato inteligente?
¿Cuál es la ventaja de este diseño?
No hay "ventaja". La razón por la que la mayoría de las aplicaciones DeFi piden a los usuarios que "permitan" la transferencia de sus fondos es que esos fondos se representan como tokens ERC-20 . La comunidad de Ethereum se enfrenta a una instancia del clásico problema de dependencia de ruta .
Aquí hay una guía que profundiza en las asignaciones ERC-20. Y aquí hay algunas soluciones prácticas:
"Because the Ethereum blockchain allows transactions with smart contracts and those smart contracts can be facilitated by 3rd parties – like a DEX or Protocol Relayer – permissions have to be granted to the 3rd party by token owners before those smart contracts can execute."
Cómo es un dex un tercero si el contrato inteligente es el dex?The reason most DeFi apps ask users to "allow" the transfer of their funds is that those funds are represented as ERC-20 tokens.
Qué quiere decir con esto? Si no fueran tokens ERC 20, ¿no habría necesidad de la funcionalidad 'permitir'? También ha hablado sobre la dependencia de la ruta. ¿Significa esto que el método allow actualmente no es necesario?ERC20Permit
y ERC-777
.En general, hay dos formas de transferir tokens (ERC20):
Transferencia directa con transfer
. Puede llamar a esta función para transferir sus tokens directamente a otra dirección.
Transferencia indirecta con approve
y transferFrom
. De esta manera, realiza dos transacciones diferentes: primero, da su aprobación para que el receptor retire sus tokens. Luego llama a alguna funcionalidad en el receptor, y eso se ejecuta transferFrom
y toma sus tokens.
Creo que hay dos ventajas de usar el método indirecto:
Funcionalidad. Si usa una transferencia directa, el receptor no tiene idea de que ha recibido tokens. De todos modos, necesitaría una segunda transacción para decirle al receptor que "hey, le envié tokens, ahora haga su parte del trato", y también sufriría en seguridad. Además, con las aprobaciones, si confía en el receptor, puede simplemente aprobar todos sus tokens y realizar múltiples transacciones con la misma aprobación, por lo que solo una aprobación y varias "segunda" transacción.
Seguridad. Es más difícil engañar a los usuarios para que envíen tokens al lugar equivocado si se requieren dos transacciones separadas. Además, de esta manera puede leer de antemano el código de contrato del receptor y ver qué sucede cuando realiza la segunda transacción. Con la transferencia directa, simplemente tendría que esperar que el receptor haga lo que prometió hacer.
CómicGuy