Skip to content

Commit

Permalink
redeploy with additional (untested) getter functions
Browse files Browse the repository at this point in the history
  • Loading branch information
lorbke committed Nov 16, 2024
1 parent 6fb4f13 commit 21ea151
Show file tree
Hide file tree
Showing 8 changed files with 616 additions and 20 deletions.
58 changes: 58 additions & 0 deletions packages/foundry/broadcast/Deploy.s.sol/480/run-1731772700.json

Large diffs are not rendered by default.

36 changes: 18 additions & 18 deletions packages/foundry/broadcast/Deploy.s.sol/480/run-latest.json

Large diffs are not rendered by default.

33 changes: 33 additions & 0 deletions packages/foundry/contracts/HumanOracle.sol
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ contract HumanOracle {
struct Stake {
Option[] answers;
uint256 totalStake;
mapping (address => bool) hasUserClaimed;
}

struct Vote {
Expand Down Expand Up @@ -159,6 +160,7 @@ contract HumanOracle {

function claimRewardForVote(uint256 voteId) voteEnded(voteId) external returns (uint256) {
address userAddr = address(msg.sender);
setUserHasClaimedToTrueForVote(userAddr, voteId);
uint256 payout = getStakeResolvedUserAmount(userAddr, voteId);
emit RewardClaimed(userAddr, voteId, payout);
return payout;
Expand Down Expand Up @@ -224,6 +226,29 @@ contract HumanOracle {
return (ids, questions, totalStakes);
}

function isVotingOver(uint256 voteId) external view returns (bool) {
if (block.number > getVoteEndBlock(voteId)) {
return true;
} else {
return false;
}
}

function hasUserVotedForVote(uint256 voteId) external view returns (bool) {
address userAddr = address(msg.sender);
uint256 answerCount = getStakeAnswerCount(voteId);
for (uint i = 0; i < answerCount; i++) {
if (hasUserVotedForStakeAnswer(userAddr, voteId, i)) {
return true;
}
}
return false;
}

function getUserHasClaimedForVote(address userAddr, uint256 voteId) external view returns (bool) {
return stakesForVoteIds[voteId].hasUserClaimed[userAddr];
}

// internal

// stake related
Expand All @@ -241,6 +266,10 @@ contract HumanOracle {
stakesForVoteIds[voteId].totalStake += amount;
}

function setUserHasClaimedToTrueForVote(address userAddr, uint256 voteId) internal {
stakesForVoteIds[voteId].hasUserClaimed[userAddr] = true;
}

function getStakeResolvedUserAmount(address userAddr, uint256 voteId) internal view returns (uint256 amount) {
uint256 highestStakeAnswerIndex = getStakeHighestAnswerIndex(voteId);
if (!hasUserVotedForStakeAnswer(userAddr, voteId, highestStakeAnswerIndex)) {
Expand Down Expand Up @@ -312,4 +341,8 @@ contract HumanOracle {
function getVoteDurationInBlocks(uint256 voteId) internal view returns (uint256 durationInBlocks) {
return votes[voteId].durationInBlocks;
}

function getVoteEndBlock(uint256 voteId) internal view returns (uint256 endBlock) {
return getVoteStartBlock(voteId) + getVoteDurationInBlocks(voteId);
}
}
12 changes: 12 additions & 0 deletions packages/foundry/contractsToVerify/ByteHasher.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.28;

library ByteHasher {
/// @dev Creates a keccak256 hash of a bytestring.
/// @param value The bytestring to hash
/// @return The hash of the specified value
/// @dev `>> 8` makes sure that the result is included in our field
function hashToField(bytes memory value) internal pure returns (uint256) {
return uint256(keccak256(abi.encodePacked(value))) >> 8;
}
}
Loading

0 comments on commit 21ea151

Please sign in to comment.