```\nfunction contribute(address \_contributor, uint256 \_value) external payable nonReentrant auth(CONTRIBUTE\_ROLE) {\n    require(state() == State.Funding, ERROR\_INVALID\_STATE);\n\n    if (contributionToken == ETH) {\n        require(msg.value == \_value, ERROR\_INVALID\_CONTRIBUTE\_VALUE);\n    } else {\n        require(msg.value == 0,      ERROR\_INVALID\_CONTRIBUTE\_VALUE);\n    }\n\n    \_contribute(\_contributor, \_value);\n}\n```\n