Allow a profile manager key to add contributor profiles #236

Merged
raucao merged 1 commits from feature/profile_manager into master 2023-04-11 21:06:43 +00:00
3 changed files with 26 additions and 7 deletions

View File

@ -13,6 +13,7 @@ interface IContributionBalance {
contract Contributor is Initializable { contract Contributor is Initializable {
address public deployer; address public deployer;
address public profileManager;
IContributionBalance public contributionContract; IContributionBalance public contributionContract;
IToken public tokenContract; IToken public tokenContract;
@ -43,8 +44,9 @@ contract Contributor is Initializable {
_; _;
} }
function initialize() public initializer { function initialize(address profileManagerAddress) public initializer {
deployer = msg.sender; deployer = msg.sender;
profileManager = profileManagerAddress;
} }
function setContributionContract(address contribution) public onlyCore { function setContributionContract(address contribution) public onlyCore {
@ -87,8 +89,9 @@ contract Contributor is Initializable {
ContributorProfileUpdated(id, oldHashDigest, c.hashDigest); ContributorProfileUpdated(id, oldHashDigest, c.hashDigest);
} }
function addContributor(address account, bytes32 hashDigest, uint8 hashFunction, uint8 hashSize) public onlyCore { function addContributor(address account, bytes32 hashDigest, uint8 hashFunction, uint8 hashSize) public {
require(!addressExists(account), "Address already in use"); require(!addressExists(account), "Address already in use");
require((msg.sender == profileManager) || addressIsCore(msg.sender), "Only core and profile manager");
uint32 _id = contributorsCount + 1; uint32 _id = contributorsCount + 1;
assert(!contributors[_id].exists); // this can not be acually assert(!contributors[_id].exists); // this can not be acually
Contributor storage c = contributors[_id]; Contributor storage c = contributors[_id];

View File

@ -9,7 +9,7 @@ describe("Contribution contract", async function () {
[owner, addr1, addr2, addr3, addr4, addr5, addr6, addr7] = await ethers.getSigners(); [owner, addr1, addr2, addr3, addr4, addr5, addr6, addr7] = await ethers.getSigners();
let accounts = [owner, addr1, addr2, addr3, addr4, addr5, addr6, addr7]; let accounts = [owner, addr1, addr2, addr3, addr4, addr5, addr6, addr7];
const contributorFactory = await ethers.getContractFactory("Contributor"); const contributorFactory = await ethers.getContractFactory("Contributor");
Contributor = await upgrades.deployProxy(contributorFactory); Contributor = await upgrades.deployProxy(contributorFactory, ["0x2946fFfd31096435cb0fc927D306E1C006C5D1aF"]);
for (const account of accounts) { for (const account of accounts) {
await Contributor.addContributor(account.address, "0x99b8afd7b266e19990924a8be9099e81054b70c36b20937228a77a5cf75723b8", 18, 32); await Contributor.addContributor(account.address, "0x99b8afd7b266e19990924a8be9099e81054b70c36b20937228a77a5cf75723b8", 18, 32);
} }

View File

@ -1,14 +1,14 @@
const { expect } = require("chai"); const { expect } = require("chai");
const { ethers, upgrades } = require("hardhat"); const { ethers, upgrades } = require("hardhat");
let owner, addr1, addr2, addr3, addr4, addr5, addr6, addr7; let owner, addr1, addr2, addr3, addr4, addr5, addr6, addr7, addr8;
let Contribution, Contributor, Token; let Contribution, Contributor, Token;
describe("Contributor contract", async function () { describe("Contributor contract", async function () {
before(async function () { before(async function () {
[owner, addr1, addr2, addr3, addr4, addr5, addr6, addr7] = await ethers.getSigners(); [owner, addr1, addr2, addr3, addr4, addr5, addr6, addr7, addr8] = await ethers.getSigners();
const contributorFactory = await ethers.getContractFactory("Contributor"); const contributorFactory = await ethers.getContractFactory("Contributor");
Contributor = await upgrades.deployProxy(contributorFactory); Contributor = await upgrades.deployProxy(contributorFactory, [addr8.address]);
const contributionFactory = await ethers.getContractFactory("Contribution"); const contributionFactory = await ethers.getContractFactory("Contribution");
Contribution = await upgrades.deployProxy(contributionFactory, [40321]); Contribution = await upgrades.deployProxy(contributionFactory, [40321]);
const tokenFactory = await ethers.getContractFactory("Token"); const tokenFactory = await ethers.getContractFactory("Token");
@ -30,6 +30,10 @@ describe("Contributor contract", async function () {
expect(await Contributor.deployer()).to.equal(owner.address); expect(await Contributor.deployer()).to.equal(owner.address);
expect(await Contributor.deployer()).to.not.equal(addr1.address); expect(await Contributor.deployer()).to.not.equal(addr1.address);
}); });
it("sets a profile manager address", async function () {
expect(await Contributor.profileManager()).to.equal(addr8.address);
});
}); });
describe("add()", function () { describe("add()", function () {
@ -38,7 +42,7 @@ describe("Contributor contract", async function () {
"0x608FD4b95116Ea616990Aaeb1d4f1ce07612f261", "0x608FD4b95116Ea616990Aaeb1d4f1ce07612f261",
"0x1d9de6de5c72eedca6d7a5e8a9159e2f5fe676506aece3000acefcc821723429", "0x1d9de6de5c72eedca6d7a5e8a9159e2f5fe676506aece3000acefcc821723429",
18, 32 18, 32
)).to.be.revertedWith("Core only"); )).to.be.revertedWith("Only core and profile manager");
expect(await Contributor.contributorsCount()).to.equal(8); expect(await Contributor.contributorsCount()).to.equal(8);
}); });
@ -70,6 +74,18 @@ describe("Contributor contract", async function () {
18, 32 18, 32
)).to.emit(Contributor, "ContributorAdded").withArgs(10, "0x765E88b4F9a59C3a3b300C6eFF9E6E9fDDf9FbD9"); )).to.emit(Contributor, "ContributorAdded").withArgs(10, "0x765E88b4F9a59C3a3b300C6eFF9E6E9fDDf9FbD9");
}); });
it("allows the profile manager account to create a contributor profile", async function () {
await Contributor.connect(addr8).addContributor(
"0x954712B8703Df5255A219B139ba7BFC256E72a15",
"0x1d9de6de5c72eedca6d7a5e8a9159e2f5fe676506aece3000acefcc821723429",
18, 32
);
expect(await Contributor.contributorsCount()).to.equal(11);
const c = await Contributor.getContributorById(11);
expect(c['account']).to.equal("0x954712B8703Df5255A219B139ba7BFC256E72a15");
});
}); });
describe("withdraw()", function () { describe("withdraw()", function () {