Solidity, like other programming languages, has a variety of data types and variables used to store and manipulate data. Understanding these basics is crucial for writing smart contracts.
Primitive Data Types:
uint: Unsigned integer (positive only).
int: Signed integer (can be positive or negative).
modifier onlyOwner() {
require(msg.sender == owner, "Not the contract owner");
_;
}
function changeOwner(address newOwner) public onlyOwner {
owner = newOwner;
}
modifier isAdult(uint256 age) {
require(age >= 18, "Not an adult");
_;
}
function enterBar(uint256 age) public isAdult(age) {
// code for entering the bar
}
function checkNumber(uint256 num) public pure returns (string memory) {
if (num > 10) {
return "Greater than 10";
} else {
return "10 or less";
}
}
uint256[] public numbers;
function addNumber(uint256 num) public {
numbers.push(num);
}
mapping(address => uint256) public balances;
function updateBalance(address user, uint256 newBalance) public {
balances[user] = newBalance;
}
struct User {
string name;
uint256 age;
}
User public user;
function setUser(string memory name, uint256 age) public {
user = User(name, age);
}
event UserCreated(address indexed userAddress, string name);
function createUser(string memory name) public {
emit UserCreated(msg.sender, name);
}
function sendEther(address payable recipient) public payable {
recipient.transfer(msg.value);
}
error NotEnoughFunds(uint256 available, uint256 required);
function withdraw(uint256 amount) public {
if (amount > address(this).balance) {
revert NotEnoughFunds(address(this).balance, amount);
}
}
contract Parent {
function sayHello() public pure returns (string memory) {
return "Hello from Parent";
}
}
contract Child is Parent {
function sayHelloFromChild() public pure returns (string memory) {
return "Hello from Child";
}
}
contract ExternalContract {
function externalFunction() public pure returns (string memory) {
return "Called from another contract";
}
}
contract MyContract {
ExternalContract externalContract;
constructor(address _externalContractAddress) {
externalContract = ExternalContract(_externalContractAddress);
}
function callExternalFunction() public view returns (string memory) {
return externalContract.externalFunction();
}
}
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
}
contract MyToken is IERC20 {
// Implement the functions defined in the interface
}