Initial Greeter contract
This commit is contained in:
parent
7409e7310a
commit
8b6c97b5b4
@ -1,62 +1 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
pragma solidity ^0.8.19;
|
||||
|
||||
import "./interfaces/IGreeter.sol";
|
||||
|
||||
contract Greeter is IGreeter {
|
||||
string private _greeting;
|
||||
address private _owner;
|
||||
uint256 private _greetingCount;
|
||||
|
||||
event GreetingChanged(address indexed changer, string newGreeting);
|
||||
event Greeted(address indexed greeter, string greeting);
|
||||
|
||||
error InvalidGreeting(string reason);
|
||||
error Unauthorized(address caller);
|
||||
|
||||
constructor(string memory initialGreeting) {
|
||||
if (bytes(initialGreeting).length == 0) {
|
||||
revert InvalidGreeting("Initial greeting cannot be empty");
|
||||
}
|
||||
_greeting = initialGreeting;
|
||||
_owner = msg.sender;
|
||||
_greetingCount = 0;
|
||||
}
|
||||
|
||||
function greet() external returns (string memory) {
|
||||
_greetingCount++;
|
||||
emit Greeted(msg.sender, _greeting);
|
||||
return _greeting;
|
||||
}
|
||||
|
||||
function setGreeting(string memory newGreeting) external {
|
||||
if (msg.sender != _owner) {
|
||||
revert Unauthorized(msg.sender);
|
||||
}
|
||||
|
||||
if (bytes(newGreeting).length == 0) {
|
||||
revert InvalidGreeting("New greeting cannot be empty");
|
||||
}
|
||||
|
||||
if (keccak256(bytes(newGreeting)) == keccak256(bytes(_greeting))) {
|
||||
revert InvalidGreeting("New greeting must be different");
|
||||
}
|
||||
|
||||
string memory oldGreeting = _greeting;
|
||||
_greeting = newGreeting;
|
||||
|
||||
emit GreetingChanged(msg.sender, newGreeting);
|
||||
}
|
||||
|
||||
function getGreeting() external view returns (string memory) {
|
||||
return _greeting;
|
||||
}
|
||||
|
||||
function getGreetingCount() external view returns (uint256) {
|
||||
return _greetingCount;
|
||||
}
|
||||
|
||||
function getOwner() external view returns (address) {
|
||||
return _owner;
|
||||
}
|
||||
}
|
||||
pragma solidity ^0.8.0; contract Greeter { string public greeting; constructor() { greeting = 'Hello'; } function setGreeting(string memory _greeting) public { greeting = _greeting; } function greet() public view returns (string memory) { return greeting; } }
|
||||
Loading…
Reference in New Issue
Block a user