pragma solidity ^0.4.10; interface IToken { function transfer(address to, uint256 amount) public returns (bool); } contract BadToken { function transfer(address to, uint256 amount) public { // @do nothing } } contract GoodToken { function transfer(address to, uint256 amount) public returns (bool) { return true; } } contract Transferer { function transfer(address token, uint256 amount) { require(IToken(token).transfer(msg.sender, amount)); } }