> The immutable keyword allows variables to be set only once during the initial contract deployment.
> Constant variables are initialized at compile time, while immutable variables are initialized at deployment time.
Right now this contract costs 771423 gas to deploy.
```
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;
import {PriceConverter} from "./PriceConverter.sol";
contract FundMe {
using PriceConverter for uint256;
uint256 public minimumUsd = 5;
address[] public funders;
mapping(address => uint256) public addressToAmountFunded;
address public owner;
constructor() {
owner = msg.sender;
}
function fund() public payable {
require(
msg.value.getConversionRate() >= minimumUsd,
"Didn't send enough ETH"
);
funders.push(msg.sender);
addressToAmountFunded[msg.sender] += msg.value;
}
function withdraw() public onlyOwner {
for (
uint256 funderIndex = 0;
funderIndex < funders.length;
funderIndex++
) {
address funder = funders[funderIndex];
addressToAmountFunded[funder] = 0;
}
funders = new address[](0);
(bool callSuccess, ) = payable(msg.sender).call{
value: address(this).balance
}("");
require(callSuccess, "Send failed");
}
modifier onlyOwner() {
require(msg.sender == owner, "Sender is not owner");
_;
}
}
```
> If we change the minimumUsd value to be a constant we save 23k gas