diff --git a/contracts/universalSchemes/ContributionReward.sol b/contracts/universalSchemes/ContributionReward.sol index ca9b9737..af1e9781 100644 --- a/contracts/universalSchemes/ContributionReward.sol +++ b/contracts/universalSchemes/ContributionReward.sol @@ -67,10 +67,7 @@ contract ContributionReward is UniversalScheme, VotingMachineCallbacks, Proposal mapping(address=>mapping(bytes32=>ContributionProposal)) public organizationsProposals; // A mapping from hashes to parameters (use to store a particular configuration on the controller) - // A contribution fee can be in the organization token or the scheme token or a combination struct Parameters { - // a fee (in the organization's token) that is to be paid for submitting a contribution - uint256 orgNativeTokenFee; bytes32 voteApproveParams; IntVoteInterface intVote; } @@ -100,17 +97,14 @@ contract ContributionReward is UniversalScheme, VotingMachineCallbacks, Proposal * @dev hash the parameters, save them if necessary, and return the hash value */ function setParameters( - uint256 _orgNativeTokenFee, bytes32 _voteApproveParams, IntVoteInterface _intVote ) public returns(bytes32) { bytes32 paramsHash = getParametersHash( - _orgNativeTokenFee, _voteApproveParams, _intVote ); - parameters[paramsHash].orgNativeTokenFee = _orgNativeTokenFee; parameters[paramsHash].voteApproveParams = _voteApproveParams; parameters[paramsHash].intVote = _intVote; return paramsHash; @@ -118,20 +112,16 @@ contract ContributionReward is UniversalScheme, VotingMachineCallbacks, Proposal /** * @dev return a hash of the given parameters - * @param _orgNativeTokenFee the fee for submitting a contribution in organizations native token * @param _voteApproveParams parameters for the voting machine used to approve a contribution * @param _intVote the voting machine used to approve a contribution * @return a hash of the parameters */ - // TODO: These fees are messy. Better to have a _fee and _feeToken pair, - //just as in some other contract (which one?) with some sane default function getParametersHash( - uint256 _orgNativeTokenFee, bytes32 _voteApproveParams, IntVoteInterface _intVote ) public pure returns(bytes32) { - return (keccak256(abi.encodePacked(_voteApproveParams, _orgNativeTokenFee, _intVote))); + return (keccak256(abi.encodePacked(_voteApproveParams, _intVote))); } /** @@ -161,10 +151,6 @@ contract ContributionReward is UniversalScheme, VotingMachineCallbacks, Proposal { validateProposalParams(_reputationChange, _rewards); Parameters memory controllerParams = parameters[getParametersFromController(_avatar)]; - // Pay fees for submitting the contribution: - if (controllerParams.orgNativeTokenFee > 0) { - _avatar.nativeToken().transferFrom(msg.sender, address(_avatar), controllerParams.orgNativeTokenFee); - } bytes32 contributionId = controllerParams.intVote.propose( 2, diff --git a/migrations/2_deploy_organization.js b/migrations/2_deploy_organization.js index 387e2aa2..846b5c2a 100644 --- a/migrations/2_deploy_organization.js +++ b/migrations/2_deploy_organization.js @@ -71,8 +71,8 @@ module.exports = async function(deployer) { await upgradeSchemeInst.setParameters(voteParametersHash, AbsoluteVoteInst.address); var schemeUpgradeParams = await upgradeSchemeInst.getParametersHash(voteParametersHash, AbsoluteVoteInst.address); - await contributionRewardInst.setParameters(10,voteParametersHash, AbsoluteVoteInst.address); - var contributionRewardParams = await contributionRewardInst.getParametersHash(10,voteParametersHash, AbsoluteVoteInst.address); + await contributionRewardInst.setParameters(voteParametersHash, AbsoluteVoteInst.address); + var contributionRewardParams = await contributionRewardInst.getParametersHash(voteParametersHash, AbsoluteVoteInst.address); var schemesArray = [schemeRegistrarInst.address, globalConstraintRegistrarInst.address, diff --git a/package-lock.json b/package-lock.json index 89cad49d..d4d36e68 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@daostack/arc", - "version": "0.0.1-rc.12", + "version": "0.0.1-rc.13", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 117a8ec0..469966c3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@daostack/arc", - "version": "0.0.1-rc.12", + "version": "0.0.1-rc.13", "description": "A platform for building DAOs", "files": [ "contracts/", diff --git a/test/contributionreward.js b/test/contributionreward.js index a8135533..ea1ea2f9 100644 --- a/test/contributionreward.js +++ b/test/contributionreward.js @@ -44,38 +44,34 @@ const checkRedeemedPeriodsLeft = async function( const setupContributionRewardParams = async function( contributionReward, - orgNativeTokenFee=0, accounts, genesisProtocol, token, avatar ) { var contributionRewardParams = new ContributionRewardParams(); - contributionRewardParams.orgNativeTokenFee = orgNativeTokenFee; if (genesisProtocol === true) { contributionRewardParams.votingMachine = await helpers.setupGenesisProtocol(accounts,token,avatar,helpers.NULL_ADDRESS); await contributionReward.setParameters( - contributionRewardParams.orgNativeTokenFee, contributionRewardParams.votingMachine.params, contributionRewardParams.votingMachine.genesisProtocol.address); - contributionRewardParams.paramsHash = await contributionReward.getParametersHash(contributionRewardParams.orgNativeTokenFee, + contributionRewardParams.paramsHash = await contributionReward.getParametersHash( contributionRewardParams.votingMachine.params, contributionRewardParams.votingMachine.genesisProtocol.address); } else { contributionRewardParams.votingMachine = await helpers.setupAbsoluteVote(helpers.NULL_ADDRESS,50,contributionReward.address); - await contributionReward.setParameters(contributionRewardParams.orgNativeTokenFee, + await contributionReward.setParameters( contributionRewardParams.votingMachine.params, contributionRewardParams.votingMachine.absoluteVote.address); - contributionRewardParams.paramsHash = await contributionReward.getParametersHash(contributionRewardParams.orgNativeTokenFee, + contributionRewardParams.paramsHash = await contributionReward.getParametersHash( contributionRewardParams.votingMachine.params, contributionRewardParams.votingMachine.absoluteVote.address); } return contributionRewardParams; }; -const setup = async function (accounts,orgNativeTokenFee=0,genesisProtocol = false,tokenAddress=0) { +const setup = async function (accounts,genesisProtocol = false,tokenAddress=0) { var testSetup = new helpers.TestSetup(); - testSetup.fee = 10; testSetup.standardTokenMock = await ERC20Mock.new(accounts[1],100); testSetup.contributionReward = await ContributionReward.new(); var controllerCreator = await ControllerCreator.new({gas: constants.ARC_GAS_LIMIT}); @@ -88,7 +84,6 @@ const setup = async function (accounts,orgNativeTokenFee=0,genesisProtocol = fal testSetup.org = await helpers.setupOrganizationWithArrays(testSetup.daoCreator,[accounts[0],accounts[1],accounts[2]],[1000,0,0],testSetup.reputationArray); testSetup.contributionRewardParams= await setupContributionRewardParams( testSetup.contributionReward, - orgNativeTokenFee, accounts,genesisProtocol, tokenAddress, testSetup.org.avatar); @@ -104,11 +99,11 @@ contract('ContributionReward', accounts => { var contributionReward = await ContributionReward.new(); var params = await setupContributionRewardParams(contributionReward); var parameters = await contributionReward.parameters(params.paramsHash); - assert.equal(parameters[2],params.votingMachine.absoluteVote.address); + assert.equal(parameters[1],params.votingMachine.absoluteVote.address); }); it("proposeContributionReward log", async function() { - var testSetup = await setup(accounts,0); + var testSetup = await setup(accounts); var periodLength = 1; var tx = await testSetup.contributionReward.proposeContributionReward(testSetup.org.avatar.address, "description-hash", @@ -132,29 +127,6 @@ contract('ContributionReward', accounts => { assert.equal(await helpers.getValueFromLogs(tx, '_beneficiary',0), accounts[0], "Wrong log: _beneficiary"); }); - it("proposeContributionReward fees", async function() { - var testSetup = await setup(accounts,14); - var periodLength = 1; - - var balanceBefore = await testSetup.standardTokenMock.balanceOf(testSetup.org.avatar.address); - //give approval to scheme to do the fees transfer - await testSetup.org.token.approve(testSetup.contributionReward.address,100); - var tx = await testSetup.contributionReward.proposeContributionReward(testSetup.org.avatar.address, - web3.utils.asciiToHex("description"), - 0, - [0,0,0,periodLength,0], - testSetup.standardTokenMock.address, - accounts[0], - {from:accounts[0]} - ); - assert.equal(tx.logs.length, 1); - assert.equal(tx.logs[0].event, "NewContributionProposal"); - var balance = await testSetup.org.token.balanceOf(testSetup.org.avatar.address); - assert.equal(balance.toNumber(),testSetup.contributionRewardParams.orgNativeTokenFee); - balance = await testSetup.standardTokenMock.balanceOf(testSetup.org.avatar.address); - assert.equal(balance.toNumber(),balanceBefore.toNumber()); - }); - it("proposeContributionReward check beneficiary==0", async() => { var testSetup = await setup(accounts); var beneficiary = helpers.NULL_ADDRESS; @@ -498,7 +470,7 @@ contract('ContributionReward', accounts => { it("execute proposeContributionReward via genesisProtocol and redeem using Redeemer", async function() { var standardTokenMock = await ERC20Mock.new(accounts[0],1000); - var testSetup = await setup(accounts,0,true,standardTokenMock.address); + var testSetup = await setup(accounts,true,standardTokenMock.address); var reputationReward = 12; var nativeTokenReward = 12; var ethReward = 12; @@ -545,7 +517,7 @@ contract('ContributionReward', accounts => { }); it("execute proposeContributionReward via genesisProtocol and redeem using Redeemer for negative proposal", async function() { var standardTokenMock = await ERC20Mock.new(accounts[0],1000); - var testSetup = await setup(accounts,0,true,standardTokenMock.address); + var testSetup = await setup(accounts,true,standardTokenMock.address); var reputationReward = 12; var nativeTokenReward = 12; var ethReward = 12;