Skip to content

Instantly share code, notes, and snippets.

@paxthemax
Created March 27, 2024 18:45
Show Gist options
  • Save paxthemax/45d4f002cbc8721e82ffa56de2f911c6 to your computer and use it in GitHub Desktop.
Save paxthemax/45d4f002cbc8721e82ffa56de2f911c6 to your computer and use it in GitHub Desktop.
Web2.5-example-1.sol
// SPDX-License-Identifier: UNILICENSED
pragma solidity ^0.8.24;
// TASK: Favorite number, set it and retrieve it.
// TASK: Favorite number, per owner.
// TASK: Deployer! Set anyone's number. Clear anyone's number.
// TASK: List of people and their favourite numbers.
// TASK: Get a number that is tied to a name.
// TASK: Admin can be changed.
// HOMEWORK:
// Person: name, address, age, favorite number
// Name is unique, get everything else by name.
// ARRAYS, dynamic, MAPPINGS, STRUCTS
// without loops
// BONUS:
// Admin: only admin can add people and rest
// CALLDATA
// MEMORY
error NotAdmin();
contract SimpleStorage {
struct PersonNumber {
string person;
uint256 number;
}
mapping(address => uint256) public favoriteNumbers;
mapping(string => uint256) public peopleIndex;
address public admin;
PersonNumber[] public listOfPeopleAndNumbers;
event PersonNumberSet(string indexed person, uint256 number);
modifier onlyAdmin() {
if (msg.sender != admin) {
revert NotAdmin();
}
_;
}
constructor() {
admin = msg.sender;
favoriteNumbers[admin] = 5;
}
function setFavoriteNumber(uint256 favoriteNumber) public {
address guy = msg.sender;
favoriteNumbers[guy] = favoriteNumber;
}
function adminSetFavoriteNumber(address account, uint256 favoriteNumber) public onlyAdmin {
favoriteNumbers[account] = favoriteNumber;
}
function clearFavoriteNumber(address account) public onlyAdmin {
delete favoriteNumbers[account];
}
function setPersonAndNumber(string calldata person, uint256 number) public {
listOfPeopleAndNumbers.push(PersonNumber(person, number));
emit PersonNumberSet(person, number);
}
function getMyNumber(string calldata name) public view returns (uint256) {
for (uint i = 0; i < listOfPeopleAndNumbers.length; i++)
{
if (keccak256(bytes(listOfPeopleAndNumbers[i].person)) == keccak256(bytes(name))) {
return listOfPeopleAndNumbers[i].number;
}
}
return 0;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment