Skip to content

Commit

Permalink
redeploy with Permit2Vault as separate contract
Browse files Browse the repository at this point in the history
  • Loading branch information
lorbke committed Nov 16, 2024
1 parent 754c393 commit 38bd43c
Show file tree
Hide file tree
Showing 8 changed files with 930 additions and 325 deletions.
104 changes: 104 additions & 0 deletions packages/foundry/broadcast/Deploy.s.sol/480/run-1731798716.json

Large diffs are not rendered by default.

82 changes: 63 additions & 19 deletions packages/foundry/broadcast/Deploy.s.sol/480/run-latest.json

Large diffs are not rendered by default.

23 changes: 19 additions & 4 deletions packages/foundry/contracts/HumanOracleV1.sol
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;

import {IWorldID} from "../lib/world-id-onchain-template/contracts/src/interfaces/IWorldID.sol";
import {WorldIdRegister} from "./WorldIdRegister.sol";
import {Permit2Vault} from "./Permit2Vault.sol";
import {ByteHasher} from "./ByteHasher.sol";
import {IERC20} from "../interfaces/IERC20.sol";
// import "forge-std/console.sol";

contract HumanOracleV1 is WorldIdRegister, Permit2Vault {
contract HumanOracleV1 is WorldIdRegister {

// ====================
// ====== Structs =====
Expand Down Expand Up @@ -42,6 +42,8 @@ contract HumanOracleV1 is WorldIdRegister, Permit2Vault {

// private
mapping (uint256 => bool) private registeredNullifierHashes;
IERC20 public worldToken;
Permit2Vault public vault;


// ====================
Expand Down Expand Up @@ -100,7 +102,9 @@ contract HumanOracleV1 is WorldIdRegister, Permit2Vault {
// === Constructor ====
// ====================

constructor(address _worldIdAddr, uint256 _groupId, string memory _appId, string memory _action, address _permit, address _owner) WorldIdRegister(_worldIdAddr, _groupId, _appId, _action) Permit2Vault(_permit, _owner) {
constructor(address _worldIdAddr, uint256 _groupId, string memory _appId, string memory _action, address _worldTokenAddr, address _vault) WorldIdRegister(_worldIdAddr, _groupId, _appId, _action) {
worldToken = IERC20(_worldTokenAddr);
vault = Permit2Vault(_vault);
}

// ====================
Expand All @@ -109,10 +113,18 @@ contract HumanOracleV1 is WorldIdRegister, Permit2Vault {

// external

function submitVotingDecisionWithStake(uint256 voteId, uint256 answerIndex, uint256 amount) userExists() hasNotVoted(voteId) voteActive(voteId) external {
function submitVotingDecisionWithStake(
uint256 voteId,
uint256 answerIndex,
uint256 amount,
uint256 nonce,
uint256 deadline,
bytes calldata signature
) userExists() hasNotVoted(voteId) voteActive(voteId) external {
require(amount <= 5, "max staking amount is 5");
address userAddr = address(msg.sender);
stakeForAnswer(userAddr, voteId, answerIndex, amount);
vault.depositERC20(worldToken, amount, nonce, deadline, signature);
emit VoteSubmitted(userAddr, voteId, answerIndex, amount);
}

Expand All @@ -121,6 +133,7 @@ contract HumanOracleV1 is WorldIdRegister, Permit2Vault {
require(!hasUserClaimedForVote(userAddr, voteId), "user already claimed");
setUserHasClaimedToTrueForVote(userAddr, voteId);
uint256 payout = getStakeResolvedUserAmount(userAddr, voteId);
vault.withdrawERC20(worldToken, payout);
emit RewardClaimed(userAddr, voteId, payout);
return payout;
}
Expand All @@ -146,6 +159,8 @@ contract HumanOracleV1 is WorldIdRegister, Permit2Vault {

createNewStake(voteId, bounty);

vault.depositERC20Regular(worldToken, bounty);

emit VoteCreated(voteId, getVoteQuestion(voteId), getVoteStartBlock(voteId), getVoteDurationInBlocks(voteId));
}

Expand Down
Loading

0 comments on commit 38bd43c

Please sign in to comment.