interface IERC20Transformer {

    /// @dev Called from `TransformERC20.transformERC20()`. This will be
    ///      delegatecalled in the context of the FlashWallet instance being used.
    /// @param callDataHash The hash of the `TransformERC20.transformERC20()` calldata.
    /// @param taker The taker address (caller of `TransformERC20.transformERC20()`).
    /// @param data Arbitrary data to pass to the transformer.
    /// @return success The success bytes (`LibERC20Transformer.TRANSFORMER_SUCCESS`).
    function transform(
        bytes32 callDataHash,
        address payable taker,
        bytes calldata data
    )
        external
        returns (bytes4 success);
}
/// @dev A transformation callback used in `TransformERC20.transformERC20()`.
function transform(
    bytes32 callDataHash,
    address payable taker,
    bytes calldata data
)
    external
    returns (bytes4 success);

/// @dev Called from `TransformERC20.transformERC20()`. This will be
///      delegatecalled in the context of the FlashWallet instance being used.
/// @param callDataHash The hash of the `TransformERC20.transformERC20()` calldata.
/// @param taker The taker address (caller of `TransformERC20.transformERC20()`).
/// @param data Arbitrary data to pass to the transformer.
/// @return success The success bytes (`LibERC20Transformer.TRANSFORMER_SUCCESS`).