This smart contract lets users transfer tokens, approve others to spend tokens, and transfer tokens on behalf of others if approved.
pragma solidity ^0.8.0;
contract SimpleToken {
mapping(address => uint256) public balances;
mapping(address => mapping(address => uint256)) public allowances;
constructor() {
balances[msg.sender] = 1000;
}
function transfer(address to, uint256 amount) public returns (bool) {
require(balances[msg.sender] >= amount, "Not enough tokens");
balances[msg.sender] -= amount;
balances[to] += amount;
return true;
}
function approve(address spender, uint256 amount) public returns (bool) {
allowances[msg.sender][spender] = amount;
return true;
}
function transferFrom(address from, address to, uint256 amount) public returns (bool) {
require(balances[from] >= amount, "Not enough tokens");
require(allowances[from][msg.sender] >= amount, "Not approved for this amount");
balances[from] -= amount;
balances[to] += amount;
allowances[from][msg.sender] -= amount;
return true;
}
}