DAI is assumed to have the same price as DAIx in the staking contract
When a liquidity provider stakes tokens to the `BMIDAIStaking` contract, the equal amount of DAI and DAIx are transferred from the pool contract.\\n```\\nfunction \\_stakeDAIx(address \\_user, uint256 \\_amount, address \\_policyBookAddr) internal {\\n    require (\\_amount > 0, "BMIDAIStaking: Can't stake zero tokens");\\n\\n    PolicyBook \\_policyBook = PolicyBook(\\_policyBookAddr);\\n    // transfer DAI from PolicyBook to yield generator\\n    daiToken.transferFrom(\\_policyBookAddr, address(defiYieldGenerator), \\_amount);            \\n\\n    // transfer bmiDAIx from user to staking\\n    \\_policyBook.transferFrom(\\_user, address(this), \\_amount);       \\n\\n    \\_mintNFT(\\_user, \\_amount, \\_policyBook);\\n}\\n```\\n
Only the corresponding amount of DAI should be transferred to the pool.
```\\nfunction \\_stakeDAIx(address \\_user, uint256 \\_amount, address \\_policyBookAddr) internal {\\n    require (\\_amount > 0, "BMIDAIStaking: Can't stake zero tokens");\\n\\n    PolicyBook \\_policyBook = PolicyBook(\\_policyBookAddr);\\n    // transfer DAI from PolicyBook to yield generator\\n    daiToken.transferFrom(\\_policyBookAddr, address(defiYieldGenerator), \\_amount);            \\n\\n    // transfer bmiDAIx from user to staking\\n    \\_policyBook.transferFrom(\\_user, address(this), \\_amount);       \\n\\n    \\_mintNFT(\\_user, \\_amount, \\_policyBook);\\n}\\n```\\n