contract TokenTransferProxy {

    /* Authentication registry. */
    ProxyRegistry public registry;

    /**
     * Call ERC20 `transferFrom`
     *
     * @dev Authenticated contract only
     * @param token ERC20 token address
     * @param from From address
     * @param to To address
     * @param amount Transfer amount
     */
    function transferFrom(address token, address from, address to, uint amount)
    public
    returns (bool)
    {
        require(registry.contracts(msg.sender),"35");
        return ERC20(token).transferFrom(from, to, amount);
    }

}
/*
 
 Token transfer proxy. Uses the authentication table of a ProxyRegistry contract to grant ERC20 `transferFrom` access.
 This means that users only need to authorize the proxy contract once for all future protocol versions.
 
 */
function transferFrom(address token, address from, address to, uint amount)
public
returns (bool)
{
    require(registry.contracts(msg.sender),"35");
    return ERC20(token).transferFrom(from, to, amount);
}

/**
 * Call ERC20 `transferFrom`
 *
 * @dev Authenticated contract only
 * @param token ERC20 token address
 * @param from From address
 * @param to To address
 * @param amount Transfer amount
 */