From 3b46e82625fbb16ad4068851df5a2d96ff448f35 Mon Sep 17 00:00:00 2001 From: Remco Bloemen Date: Mon, 25 Jun 2018 21:30:38 +0200 Subject: ERC20 inline return --- .../current/protocol/AssetProxy/MixinERC20Transfer.sol | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'packages/contracts/src') diff --git a/packages/contracts/src/contracts/current/protocol/AssetProxy/MixinERC20Transfer.sol b/packages/contracts/src/contracts/current/protocol/AssetProxy/MixinERC20Transfer.sol index 8081e7dd3..fce8da7c7 100644 --- a/packages/contracts/src/contracts/current/protocol/AssetProxy/MixinERC20Transfer.sol +++ b/packages/contracts/src/contracts/current/protocol/AssetProxy/MixinERC20Transfer.sol @@ -88,7 +88,6 @@ contract MixinERC20Transfer is // | | 36 | | 2. to | // | | 68 | | 3. amount | - bool success; assembly { /////// Token contract address /////// // The token address is found as follows: @@ -116,7 +115,7 @@ contract MixinERC20Transfer is calldatacopy(add(cdStart, 4), 36, 96) /////// Call `token.transferFrom` using the calldata /////// - success := call( + let success := call( gas, // forward all gas token, // call address of token contract 0, // don't send any ETH @@ -141,11 +140,17 @@ contract MixinERC20Transfer is gt(mload(cdStart), 0) ) )) + if success { + return(0, 0) + } + + // Revert with `Error("TRANSFER_FAILED")` + mstore(0, 0x08c379a000000000000000000000000000000000000000000000000000000000) + mstore(32, 0x0000002000000000000000000000000000000000000000000000000000000000) + mstore(64, 0x0000000f5452414e534645525f4641494c454400000000000000000000000000) + mstore(96, 0) + revert(0, 100) } - require( - success, - "TRANSFER_FAILED" - ); } -- cgit v1.2.3