contract VBTC is VTokenBase {
    constructor(address _controller)
        public
        VTokenBase(
            "VBTC Pool",
            "VBTC",
            "WBTC-A",
            0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599,
            _controller
        )
    {}

    /**
     * @dev Convert to 18 decimal from 8 decimal value.
     */
    function convertTo18(uint256 amount) public override pure returns (uint256) {
        return amount.mul(10**10);
    }

    /**
     * @dev Convert to 8 decimal from 18 decimal value.
     */
    function convertFrom18(uint256 amount) public override pure returns (uint256) {
        return amount.div(10**10);
    }

    /**
     * @dev Receives WBTC and grants new tokens to the sender depending on the
     * value of each contract's share.
     */
    function deposit(uint256 amount) public override nonReentrant {
        // For test
        require(totalSupply() < 2e18, "Above test limit");
        _deposit(amount);
    }

    function withdraw(uint256 shares) public override nonReentrant {
        _withdraw(shares);
    }

    function sweepErc20(address erc20) public {
        _sweepErc20(erc20);
    }

    function _afterBurning(uint256 amount) internal override {
        _withdrawCollateral(amount);
        token.transfer(_msgSender(), amount);
    }

    function _beforeMinting(uint256 amount) internal override {
        token.transferFrom(_msgSender(), address(this), amount);
    }
}
function deposit(uint256 amount) public override nonReentrant {
    // For test
    require(totalSupply() < 2e18, "Above test limit");
    _deposit(amount);
}

/**
 * @dev Receives WBTC and grants new tokens to the sender depending on the
 * value of each contract's share.
 */