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.