```\nFile: Curve2TokenPoolMixin.sol\nabstract contract Curve2TokenPoolMixin is CurvePoolMixin {\n..SNIP..\n    constructor(\n        NotionalProxy notional_,\n        ConvexVaultDeploymentParams memory params\n    ) CurvePoolMixin(notional_, params) {\n        address primaryToken = _getNotionalUnderlyingToken(params.baseParams.primaryBorrowCurrencyId);\n\n        PRIMARY_TOKEN = primaryToken;\n\n        // Curve uses ALT_ETH_ADDRESS\n        if (primaryToken == Deployments.ETH_ADDRESS) {\n            primaryToken = Deployments.ALT_ETH_ADDRESS;\n        }\n\n        address token0 = CURVE_POOL.coins(0);\n        address token1 = CURVE_POOL.coins(1);\n        \n        uint8 primaryIndex;\n        address secondaryToken;\n        if (token0 == primaryToken) {\n            primaryIndex = 0;\n            secondaryToken = token1;\n        } else {\n            primaryIndex = 1;\n            secondaryToken = token0;\n        }\n\n        if (secondaryToken == Deployments.ALT_ETH_ADDRESS) {\n            secondaryToken = Deployments.ETH_ADDRESS;\n        }\n\n        PRIMARY_INDEX = primaryIndex;\n        SECONDARY_TOKEN = secondaryToken;\n```\n