Por qué transferir (0x0, _to, _amount) después de acuñar tokens

En https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC20/MintableToken.sol#L38 por qué es necesario emitir el evento

Transfer(0x0, _to, _amount);

después de acuñar algunas monedas? ¿Puede alguien explicar esta línea de código? ¿Realmente estás transfiriendo monedas de 0x0 a la dirección _to?

Respuestas (3)

Eso no es una operación de transferencia sino una notificación de evento.

Esto se hace de esa manera para que el explorador de bloques y las billeteras que solo interpretan el evento 'Transferir' puedan mostrar la operación al usuario. Hubo algunas quejas de los usuarios de que la transferencia falló porque no apareció en su billetera (o en el explorador de bloques).

Solo el evento 'Transfer' es parte del estándar ERC20 , y los eventos 'Mint' y 'Burn' no lo son. Es una solución alternativa a esa limitación generar una transferencia desde 0x0 para simular un evento 'Mint' y una transferencia a 0x0 para simular un evento 'Burn'.

Como autor original de esta línea de código, está ahí para mostrar el evento de transacción EIP-20 en EtherScan. De esta manera, los compradores de la venta de tokens pueden ver que recibieron los tokens y la cantidad correcta cuando compran en la venta de tokens.

Se puede encontrar más discusión en el archivo de código fuente original:

https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol#L38

La transferencia es solo un evento heredado del contrato ERC20Basic.sol.

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol

Lo que está haciendo es simplemente registrar que el contrato acuñó nuevas monedas y las entregó a la dirección _to.