-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #15 from oasisprotocol/CedarMist/contracts
initial import of contracts
- Loading branch information
Showing
14 changed files
with
3,696 additions
and
44 deletions.
There are no files selected for viewing
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
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
abis | ||
artifacts | ||
cache | ||
src |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
pragma solidity ^0.8.0; | ||
|
||
import { IPollACL } from "../interfaces/IPollACL.sol"; | ||
import { IPollManagerACL } from "../interfaces/IPollManagerACL.sol"; | ||
|
||
contract AllowAllACL is IPollACL, IPollManagerACL | ||
{ | ||
function supportsInterface(bytes4 interfaceId) | ||
public pure | ||
returns(bool) | ||
{ | ||
return interfaceId == type(IPollACL).interfaceId | ||
|| interfaceId == type(IPollManagerACL).interfaceId; | ||
} | ||
|
||
function canCreatePoll(address, address) | ||
external pure | ||
returns(bool) | ||
{ | ||
return true; | ||
} | ||
|
||
function onPollCreated(bytes32, address, bytes calldata) | ||
external | ||
{ | ||
// Do nothing | ||
} | ||
|
||
function onPollClosed(bytes32) | ||
external | ||
{ | ||
// Do nothing | ||
} | ||
|
||
function canManagePoll(address, bytes32, address) | ||
external pure | ||
returns(bool) | ||
{ | ||
// Anyone can manage any poll | ||
return true; | ||
} | ||
|
||
function canVoteOnPoll(address, bytes32, address, bytes calldata) | ||
external pure | ||
returns(uint) | ||
{ | ||
// Anyone can vote on any poll | ||
return 1; | ||
} | ||
} |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
pragma solidity ^0.8.0; | ||
|
||
import { IPollACL } from "../interfaces/IPollACL.sol"; | ||
import { IPollManagerACL } from "../interfaces/IPollManagerACL.sol"; | ||
|
||
contract NativeBalanceACL is IPollACL, IPollManagerACL | ||
{ | ||
struct ProposalOptions { | ||
address owner; | ||
uint256 minBalance; | ||
} | ||
|
||
mapping(bytes32 => ProposalOptions) private m_proposals; | ||
|
||
function internal_id(bytes32 in_proposalId, address in_pm) | ||
internal pure | ||
returns (bytes32) | ||
{ | ||
return keccak256(abi.encodePacked(in_proposalId, in_pm)); | ||
} | ||
|
||
function internal_getProposal(bytes32 in_proposalId, address in_pm) | ||
internal view | ||
returns (ProposalOptions storage) | ||
{ | ||
bytes32 id = internal_id(in_proposalId, in_pm); | ||
|
||
ProposalOptions storage prop = m_proposals[id]; | ||
|
||
require( prop.owner != address(0), "404" ); | ||
|
||
return prop; | ||
} | ||
|
||
function supportsInterface(bytes4 interfaceId) | ||
public pure | ||
returns(bool) | ||
{ | ||
return interfaceId == type(IPollACL).interfaceId | ||
|| interfaceId == type(IPollManagerACL).interfaceId; | ||
} | ||
|
||
function canCreatePoll(address, address) | ||
external pure | ||
returns(bool) | ||
{ | ||
return true; | ||
} | ||
|
||
function onPollCreated(bytes32 in_proposalId, address in_creator, bytes calldata in_data) | ||
external | ||
{ | ||
(uint256 minBalance) = abi.decode(in_data, (uint256)); | ||
|
||
bytes32 id = internal_id(in_proposalId, msg.sender); | ||
require( m_proposals[id].owner == address(0), "404" ); | ||
|
||
m_proposals[id] = ProposalOptions(in_creator, minBalance); | ||
} | ||
|
||
function onPollClosed(bytes32 in_proposalId) | ||
external | ||
{ | ||
bytes32 id = internal_id(in_proposalId, msg.sender); | ||
|
||
ProposalOptions storage prop = m_proposals[id]; | ||
|
||
require( prop.owner != address(0), "404" ); | ||
|
||
delete m_proposals[id]; | ||
} | ||
|
||
function canManagePoll(address in_pm, bytes32 in_proposalId, address in_who) | ||
external view | ||
returns(bool) | ||
{ | ||
ProposalOptions storage prop = internal_getProposal(in_proposalId, in_pm); | ||
|
||
return prop.owner == in_who; | ||
} | ||
|
||
function canVoteOnPoll(address in_pm, bytes32 in_proposalId, address who, bytes calldata) | ||
external view | ||
returns(uint) | ||
{ | ||
ProposalOptions storage prop = internal_getProposal(in_proposalId, in_pm); | ||
|
||
require(who.balance > prop.minBalance); | ||
|
||
return 1; | ||
} | ||
} |
Oops, something went wrong.