cómo quiero usar un nuevo contrato enviando un token ERC20 implementado de uno a otro

Una dirección envía eth a mi contrato Y le pagaré a A otro token

ese es mi código de función, pero no funciona. ¿Dónde me equivoco?

pragma solidity ^0.4.16;
contract ICOProxy  {
address tokenaddr;
function () payable public{
 uint256 amount = msg.value* 10 ; 
    address se=msg.sender;
    bytes4 methodId  =bytes4(keccak256("transferFrom(address,address,uint256)"));
    tokenaddr.call(methodId,owner,se, amount);
}
}

Respuestas (1)

Si agrega la interfaz correcta, no hay necesidad de intentar construir manualmente los datos de la llamada. Algo como esto debería funcionar:

pragma solidity ^0.4.19;

contract ERC20 {
    function transferFrom(address, address, uint256);
}

contract ICOProxy  {
    address tokenaddr;  // initialize this somewhere
    address owner;      // initialize this somewhere

    function () payable public{
        uint256 amount = msg.value * 10;

        // Use require(...) here to revert the transaction of the transfer fails.
        // The owner will need to call approve() to allow this call to work.
        require(ERC20(tokenaddr).transferFrom(owner, msg.sender, amount));
    }
}
Prueba tu código pero no lo uses. no se porque~
¿No es necesario el gas?
No estoy seguro de lo que estás preguntando. Cada transacción requiere gas. Si vio un error, por favor díganos cuál fue.
"Una dirección envía éter a este contrato, este contrato enviará a una dirección algunos ERC20 especificados" Probé el código pero no funcionó.
"no funciona" no es un mensaje de error. No puedo ayudarte si no me dices el problema.
sin error ~ Esta es mi prueba tx kovan.etherscan.io/tx/…
¿Dónde está el código del contrato?
solidez de pragma ^0.4.19; contrato ERC20 { transferencia de función (dirección, uint256) público; } contrato ICOProxy { dirección tokenaddr=0xa12622662aAFe7bd7029e81c55E8dECE2dC4fb73; // inicializa esta función en algún lugar () payable public{ uint256 cantidad = msg.value * 810; // Use require(...) aquí para revertir la transacción de la transferencia falla. // El propietario deberá llamar a apply() para permitir que esta llamada funcione. ERC20(tokenaddr).transfer(mensaje.remitente, monto); } conjunto de funciones (dirección c) público { tokenaddr = c; } }
¿Y dónde está el código del token? ( kovan.etherscan.io/dirección/… )
Supongo que nunca llamaste approve().
Gracias !! Encontré dónde estaba mal, mi contrato no tiene suficiente token ERC20