Created
March 27, 2024 18:45
-
-
Save paxthemax/45d4f002cbc8721e82ffa56de2f911c6 to your computer and use it in GitHub Desktop.
Web2.5-example-1.sol
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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