summaryrefslogtreecommitdiff
path: root/Year_3
diff options
context:
space:
mode:
authorSanto Cariotti <santo@dcariotti.me>2022-06-18 10:50:48 +0200
committerSanto Cariotti <santo@dcariotti.me>2022-06-18 10:50:48 +0200
commitcb01e33790daf484f2a09419812e7f415da0f92d (patch)
tree734da5ea87777e0e5948d2d57e0250e7bc9a454d /Year_3
parentd6fdeec63a01ba43c5468ecc7c77a37347b0c953 (diff)
Ignore blockchain
Diffstat (limited to 'Year_3')
-rw-r--r--Year_3/.gitignore1
-rw-r--r--Year_3/Blockchain/RandomMoney.sol43
-rw-r--r--Year_3/Blockchain/RockPaperScissor.sol124
3 files changed, 1 insertions, 167 deletions
diff --git a/Year_3/.gitignore b/Year_3/.gitignore
new file mode 100644
index 0000000..c7e9e87
--- /dev/null
+++ b/Year_3/.gitignore
@@ -0,0 +1 @@
+Blockchain/
diff --git a/Year_3/Blockchain/RandomMoney.sol b/Year_3/Blockchain/RandomMoney.sol
deleted file mode 100644
index 2a5def4..0000000
--- a/Year_3/Blockchain/RandomMoney.sol
+++ /dev/null
@@ -1,43 +0,0 @@
-// SPDX-License-Identifier: MIT
-
-pragma solidity >0.7 <0.9;
-
-contract RandomMoney {
- uint public total;
- uint public constant minFee = 10;
- mapping(address => uint) public amounts;
- address[] private members;
-
-
- function play() public payable returns (uint) {
- require(msg.value >= minFee, "Value is less than the required minimum");
-
-
- amounts[msg.sender] += msg.value;
-
- if (amounts[msg.sender] == msg.value) {
- members.push(msg.sender);
- }
-
- total += msg.value;
-
- return total;
- }
-
- function pay() public payable {
- address payable account = payable(randomAddress());
- account.transfer(total);
- total = 0;
- }
-
- function randomAddress() internal view returns (address) {
- uint8 num = uint8(
- uint256(
- keccak256(abi.encode(block.timestamp, block.difficulty))
- ) % members.length
- );
-
- return members[num];
- }
-}
-
diff --git a/Year_3/Blockchain/RockPaperScissor.sol b/Year_3/Blockchain/RockPaperScissor.sol
deleted file mode 100644
index 528bc4c..0000000
--- a/Year_3/Blockchain/RockPaperScissor.sol
+++ /dev/null
@@ -1,124 +0,0 @@
-// SPDX-License-Identifier: MIT
-
-pragma solidity ^0.8.0;
-
-import "TrustworthyRockPaperScissorsTournamentSpecs.sol";
-
-contract TrustworthyRockPaperScissorsTournament is TrustworthyRockPaperScissorsTournamentSpecs {
- enum Move { ROCK, PAPER, SCISSOR }
- enum Status { IN_PROGRESS, END }
- struct PlayerInfo {
- address payable id;
- uint8 wins;
- Move[] games;
- uint fees;
- }
-
- mapping(Player => PlayerInfo) players;
- uint8 target;
- uint256 matchFee;
- Status status;
- Player winner;
- address payable owner;
-
- uint8 override public disputedMatches;
-
- constructor(
- address payable firstPlayer,
- address payable secondPlayer,
- uint8 targetWins,
- uint256 singleMatchFee
- ) {
- require(firstPlayer != secondPlayer, "Players must be two different addresses.");
- require(firstPlayer != address(0) && secondPlayer != address(0), "Players address are not valid.");
-
- players[Player.First].id = firstPlayer;
- players[Player.Second].id = secondPlayer;
- target = targetWins;
- matchFee = singleMatchFee;
- status = Status.IN_PROGRESS;
- disputedMatches = 0;
- owner = payable(msg.sender);
- }
-
- function moveRock() external override payable {
- move(Move.ROCK);
- }
-
- function movePaper() external override payable {
- move(Move.PAPER);
- }
-
- function moveScissor() external override payable {
- move(Move.SCISSOR);
- }
-
- modifier mustBeAPlayer() {
- require(msg.sender == players[Player.First].id || msg.sender == players[Player.Second].id, "You're not one of the players.");
- _;
- }
-
- function move(Move move_type) internal mustBeAPlayer {
- require(status != Status.END, "Game has already finish");
- require(msg.value >= matchFee, "You need to pass the minimum fee to play");
-
- Player p = (msg.sender == players[Player.First].id ? Player.First : Player.Second);
- players[p].games.push(move_type);
- players[p].fees += msg.value;
-
- checkGame();
- }
-
- function checkGame() internal {
- uint8 n = uint8(
- players[Player.First].games.length < players[Player.Second].games.length
- ? players[Player.First].games.length
- : players[Player.Second].games.length
- );
-
- for (uint8 i = disputedMatches; i < n; ++i) {
- Move p1 = players[Player.First].games[i];
- Move p2 = players[Player.Second].games[i];
-
- // Fair play
- if (p1 == p2) continue;
-
- if (
- (p1 == Move.ROCK && p2 == Move.SCISSOR) ||
- (p1 == Move.SCISSOR && p2 == Move.PAPER) ||
- (p1 == Move.PAPER && p2 == Move.ROCK)
- ) {
- players[Player.First].wins++;
- emit MatchWonBy(Player.First, i);
- } else {
- players[Player.Second].wins++;
- emit MatchWonBy(Player.Second, i);
- }
-
- disputedMatches++;
-
- if (players[Player.First].wins == target) {
- emit TournamentWonBy(Player.First);
- winner = Player.First;
- endGame();
- } else if (players[Player.Second].wins == target) {
- emit TournamentWonBy(Player.Second);
- winner = Player.Second;
- endGame();
- }
- }
- }
-
- function endGame() internal {
- require(status != Status.END, "Game has already finish");
-
- assert(players[winner].wins == target);
-
- uint total = players[Player.First].fees + players[Player.Second].fees;
- assert(total == address(this).balance);
- players[winner].id.transfer(total);
-
- status = Status.END;
- selfdestruct(owner);
- }
-}