To interact with a smart contract via its abi we need to create a file in remix! with the extension ```.abi```. Then, ```At address``` should have the contract address.
## Memory vs Storage vs Calldata keywords
> Memory -> temporary variable which only exists during the function call. Can be changed.
> Calldata -> temporary variable which only exists during the function call. Cannot be changed.
> Storage -> permanent variable that can be changed.
If we declare a variable outside of a function, inside of a contract, it automatically is created as a storage variable.
We don't need to specify this for a ```uint256``` because it's not a special type (array, struct...).
## What Does payable Do?
In Solidity, the payable keyword allows a function to receive Ether. Without this keyword, a function cannot accept Ether, and any attempt to send Ether to it (e.g., via a transaction with a value field) will cause the transaction to revert. When you mark a function as payable, the EVM (Ethereum Virtual Machine) skips certain checks that it would otherwise perform to enforce this restriction.
> This is why when we add payable to a function, it uses less gas.