Implement a smart contract using Remix
===
*By Kongphob Mangkuang* *ID:411021362*
## What we will do:
* Create a file
* Design the smart contract
* Compile the smart contract
* Connect to the network
* Deploy the smart contract
* Verify the smart contract
## Create a new file
Go to [Remix](https://remix.ethereum.org/). Navigate to FILE EXPLORER > contract and locate 1_storage.sol. Rename the file to a descriptive name such as VendingMachine.

Design the smart contract
---
Design a smart contract that can be used to buy colas from a vending machine.
```javascript=
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
contract ColaVendingMachine {
address public Owner;
mapping (address => uint) public ColaBalance;
// set the Owner as the address that deployed the contract
// set the initial vending machine balance to 20 colas
constructor() {
Owner = msg.sender;
ColaBalance[address(this)] = 20;
}
function VendingMachineBalance() public view returns (uint) {
return ColaBalance[address(this)];
}
// Let the Owner restock the vending machine
function Restock(uint amount) public {
require(msg.sender == Owner, "Only the owner can restock.");
ColaBalance[address(this)] += amount;
}
// Purchase cola from the vending machine
function Purchase(uint amount) public payable {
require(msg.value >= amount * 1 ether, "You must pay at least 1 ETH per cola");
require(ColaBalance[address(this)] >= amount, "Not enough colas in stock to complete this purchase");
ColaBalance[address(this)] -= amount;
ColaBalance[msg.sender] += amount;
}
// Let the Owner withdraw from the vending machine
function Withdraw() public {
require(msg.sender == Owner, "Only the owner can withdraw funds.");
uint balance = address(this).balance;
payable(Owner).transfer(balance);
}
}
```
> *This is a Solidity smart contract for a Cola vending machine. It allows users to purchase Cola by sending Ether, while the owner can restock and withdraw funds.*
Compile the smart contract
---
Go to SOLIDITY COMPILER and select version 0.8.11. Click on Compile to compile the smart contract.

Connect to Remix VM (London)
---
To test the smart contract, select Remix VM (London) from the DEPLOY & RUN TRANSACTIONS menu.

Deploy the smart contract
---
Click on the Deploy button. You should see a message on the bottom left indicating that this is a transaction on the Ethereum network.

Verify the smart contract
---
Once deployed, scroll down to the Deployed Contracts section and click to view the contents. The smart contract should have the following functionalities:

>* ***Purchase**: This allows users to buy colas by entering the number of colas they want to purchase and the corresponding ether value.*
>* ***Restock**: This function can only be used by the Owner of the contract to restock the vending machine.*
>* ***Withdraw**: This function can only be used by the owner to withdraw ether from the vending machine.*
>* ***ColaBalance**: This function allows users to check the total number of colas available in the vending machine.*
>* ***Owner**: This function displays the address of the contract owner.*
>* ***VendingMachineBalance**: This function allows users to check the remaining balance of cola in the vending machine.*
---
###### tags: `blockchain` `smart_contract`