Skip to content

Commit d316bd7

Browse files
only register scheme can propose and be voted (#805)
* only register scheme can propose * Test * bump v Co-authored-by: benk10 <ben.kaufman10@gmail.com> Co-authored-by: benk10 <ben@daostack.io>
1 parent 0678502 commit d316bd7

File tree

4 files changed

+44
-4
lines changed

4 files changed

+44
-4
lines changed

contracts/votingMachines/VotingMachineCallbacks.sol

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import "../universalSchemes/UniversalScheme.sol";
44
import "@daostack/infra/contracts/votingMachines/GenesisProtocol.sol";
55

66

7+
78
contract VotingMachineCallbacks is VotingMachineCallbacksInterface {
89

910
struct ProposalInfo {
@@ -16,6 +17,14 @@ contract VotingMachineCallbacks is VotingMachineCallbacksInterface {
1617
_;
1718
}
1819

20+
modifier onlyRegisteredScheme(bytes32 _proposalId) {
21+
Avatar avatar = proposalsInfo[msg.sender][_proposalId].avatar;
22+
require(Controller(avatar.owner()).isSchemeRegistered(address(this), address(avatar)),
23+
"scheme is not registered"
24+
);
25+
_;
26+
}
27+
1928
// VotingMaching -> proposalId -> ProposalInfo
2029
mapping(address => mapping(bytes32 => ProposalInfo)) public proposalsInfo;
2130

@@ -67,15 +76,23 @@ contract VotingMachineCallbacks is VotingMachineCallbacksInterface {
6776
return _stakingToken.balanceOf(address(avatar));
6877
}
6978

70-
function getTotalReputationSupply(bytes32 _proposalId) external view returns(uint256) {
79+
function getTotalReputationSupply(bytes32 _proposalId)
80+
external
81+
view
82+
onlyRegisteredScheme(_proposalId)
83+
returns(uint256) {
7184
ProposalInfo memory proposal = proposalsInfo[msg.sender][_proposalId];
7285
if (proposal.avatar == Avatar(0)) {
7386
return 0;
7487
}
7588
return proposal.avatar.nativeReputation().totalSupplyAt(proposal.blockNumber);
7689
}
7790

78-
function reputationOf(address _owner, bytes32 _proposalId) external view returns(uint256) {
91+
function reputationOf(address _owner, bytes32 _proposalId)
92+
external
93+
view
94+
onlyRegisteredScheme(_proposalId)
95+
returns(uint256) {
7996
ProposalInfo memory proposal = proposalsInfo[msg.sender][_proposalId];
8097
if (proposal.avatar == Avatar(0)) {
8198
return 0;

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@daostack/arc",
3-
"version": "0.0.1-rc.48",
3+
"version": "0.0.1-rc.49",
44
"description": "A platform for building DAOs",
55
"files": [
66
"contracts/",

test/schemeregistrar.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,29 @@ contract('SchemeRegistrar', accounts => {
195195
var organizationProposal = await testSetup.schemeRegistrar.organizationsProposals(testSetup.org.avatar.address,proposalId);
196196
assert.equal(organizationProposal[2],0);//proposalType
197197
});
198+
199+
it("cannot propose in removed scheme", async function() {
200+
var testSetup = await setup(accounts);
201+
202+
var tx = await testSetup.schemeRegistrar.proposeToRemoveScheme(testSetup.org.avatar.address,testSetup.schemeRegistrar.address,helpers.NULL_HASH);
203+
var proposalId = await helpers.getValueFromLogs(tx, '_proposalId',1);
204+
var controller = await Controller.at(await testSetup.org.avatar.owner());
205+
assert.equal(await controller.isSchemeRegistered(testSetup.schemeRegistrar.address,testSetup.org.avatar.address),true);
206+
//Vote with reputation to trigger execution
207+
await testSetup.schemeRegistrarParams.votingMachine.absoluteVote.vote(proposalId,1,0,helpers.NULL_ADDRESS,{from:accounts[2]});
208+
assert.equal(await controller.isSchemeRegistered(testSetup.schemeRegistrar.address,testSetup.org.avatar.address),false);
209+
//check organizationsProposals after execution
210+
var organizationProposal = await testSetup.schemeRegistrar.organizationsProposals(testSetup.org.avatar.address,proposalId);
211+
assert.equal(organizationProposal[2],0);//proposalType
212+
213+
try {
214+
await testSetup.schemeRegistrar.proposeToRemoveScheme(testSetup.org.avatar.address,testSetup.schemeRegistrar.address,helpers.NULL_HASH);
215+
assert(false, "should fail to propose to unregistered scheme");
216+
} catch(ex){
217+
helpers.assertVMException(ex);
218+
}
219+
});
220+
198221
it("execute proposeScheme and execute -yes - autoRegisterOrganization==TRUE arc scheme", async function() {
199222
var testSetup = await setup(accounts);
200223

0 commit comments

Comments
 (0)