From 83fadd3a35ee2c8120b7cf6b508f81a0143511ad Mon Sep 17 00:00:00 2001 From: valentinpollart Date: Wed, 20 Apr 2022 12:56:40 +0200 Subject: [PATCH 01/25] feat: voting first draft --- contracts/Voting.sol | 130 +++++++++++++++++++++++++++++++++++++++++++ test/Voting.spec.ts | 57 +++++++++++++++++++ typings/hardhat.d.ts | 9 +++ 3 files changed, 196 insertions(+) create mode 100644 contracts/Voting.sol create mode 100644 test/Voting.spec.ts diff --git a/contracts/Voting.sol b/contracts/Voting.sol new file mode 100644 index 0000000..2a14fc9 --- /dev/null +++ b/contracts/Voting.sol @@ -0,0 +1,130 @@ +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/access/Ownable.sol"; + +// Can a voter change his/her vote ? --> Yes +// Can a voter who grant proxy to somebody can still vote ? Can s.he change proxy voter vote ? --> +// Can a proxy voter change original voter vote ? +// Is there a limit of delegate votes per proxy voters ? +// Can a voter grant proxy to more than one person on a given tag ? + +// If A grant proxy to B, and if A and B call vote and reach the vote verification simultaneously, both A and B might register a vote for A +// ==> Could be solved by registering voters address instead of incrementing a count, but scales badly. + +// Currently, order is not kept for tags, causing index issues, 2 solutions : +// - remove reference to tag index and use value => forces to check each time there's a reference to a tag to verify it is a member of tag list. +// - do not change indexes at tag removal => residual value (such as empty string) will be left in the tag list. +// ==> Should owner even be able to remove a tag ? + +// TODO: Verify if the voter has enough DPS to vote. (25k DPS) + +contract Voting is Ownable { + string[] public tags; + + struct Proposal { + string statement; + uint32 votes; + } + + struct Ballot { + string subject; + bool closed; + uint32 tagIndex; + uint32 proposalCount; + + } + + struct Grant { + address voter; + uint256 amount; + } + + Ballot[] public ballots; + + Proposal[][] public choices; + + uint32[][] private results; + + mapping(uint32 => mapping(address => bool)) hasVoted; + + mapping(address => mapping(uint32 => Grant[])) private delegates; // proxy => tag => {voter, amount}[] + + mapping(address => mapping(uint32 => Grant[])) private proxyVoters; // voter => tag => {proxy, amount}[] + + function addTag(string memory name) external onlyOwner { + tags.push(name); + } + + function removeTag(uint32 tagIndex) external onlyOwner { + require(tags.length > tagIndex, 'Voting: Tag index is too high.'); + tags[tagIndex] = tags[tags.length - 1]; + tags.pop(); + } + + function createBallot(string memory subject, uint32 tagIndex, Proposal[] memory proposals) external onlyOwner { + require(tags.length > tagIndex, 'Voting: Tag index is too high.'); + Ballot memory ballot = Ballot(subject, false, tagIndex, proposals.length); + for (uint i = 0; i < proposals.length; i++) { + ballot.proposals[i] = proposals[i]; + } + ballots.push(ballot); + } + + function closeBallot(uint32 ballotIndex) external onlyOwner { + require(ballots.length > ballotIndex, 'Voting: Ballot index is too high.'); + ballots[ballotIndex].closed = true; + } + + + function vote(uint32 ballotIndex, uint32 proposalIndex) external { + require(ballots.length > ballotIndex, 'Voting: Ballot index is too high.'); + require(!ballots[ballotIndex].closed, 'Voting: Ballot is closed.'); + require(ballots[ballotIndex].proposals.length > proposalIndex, 'Voting: Proposal index is too high.'); + + // A donne délégation à B + + if (!hasVoted[ballotIndex][msg.sender]) { // A n'a pas déjà voté + hasVoted[ballotIndex][msg.sender] = true; + results[ballotIndex][proposalIndex] ++; // sender vote + } + + + address[] memory _delegates = delegates[msg.sender][ballots[ballotIndex].tagIndex]; + for (uint i = 0; i < _delegates.length; i++) { + if(!hasVoted[ballotIndex][_delegates[i]]) { // A n'a pas déjà voté + hasVoted[ballotIndex][_delegates[i]] = true; + results[ballotIndex][proposalIndex] ++; // proxy vote + } + } + } + + function grantProxy(address to, uint32 tagIndex) external { + require(tags.length > tagIndex, 'Voting: Tag index is too high'); + + proxyVoters[msg.sender][tagIndex] = to; + delegates[to][tagIndex].push(msg.sender); + } + + function removeProxy(uint32 tagIndex) external { + require(tags.length > tagIndex, 'Voting: Tag index is too high'); + require(proxyVoters[msg.sender][tagIndex] != address(0), 'Voting: No grant given for this tag.'); + + address proxy = proxyVoters[msg.sender][tagIndex]; + proxyVoters[msg.sender][tagIndex] = address(0); + + address[] memory grants = delegates[proxy][tagIndex]; + for (uint i = 0; i < grants.length; i++) { + if(grants[i] == msg.sender) { + delegates[proxy][tagIndex][i] = delegates[proxy][tagIndex][grants.length- 1]; + delegates[proxy][tagIndex].pop(); + return; + } + } + } + + function showResults(uint32 ballotIndex) external view returns(uint32[] memory) { + require(ballots.length > ballotIndex, 'Voting: Ballot index is too high'); + require(ballots[ballotIndex].closed, 'Voting: Ballot is still open.'); + return results[ballotIndex]; + } +} diff --git a/test/Voting.spec.ts b/test/Voting.spec.ts new file mode 100644 index 0000000..d79d08d --- /dev/null +++ b/test/Voting.spec.ts @@ -0,0 +1,57 @@ +import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import setup from './testing/setup'; + +describe('Voting', async () => { + let accounts: SignerWithAddress[]; + + beforeEach(async () => { + ({ accounts } = await setup()); + }); + + describe('addTag', () => { + it('should add a tag to the list', async () => { + + }) + }); + + describe('removeTag', () => { + it('should throw if tag does not exist', () => {}) + it('should remove a tag from the list', () => { + + }) + }); + + describe('createBallot', () => { + it('should throw if tag does not exist', ()=> {}); + it('should create a ballot', ()=>{}); + }); + + describe('closeBallot', ()=> { + it('should throw if ballot does not exist', ()=>{}); + it('should close the ballot', ()=>{}); + }); + + describe('vote', ()=>{ + it('should throw if ballot does not exist', ()=>{}); + it('should throw if ballot is closed', ()=>{}); + it('should throw if proposal does not exist', ()=>{}); + it('should vote', ()=>{}); + }); + + describe('grantProxy', ()=>{ + it('should throw if tag does not exist', ()=>{}); + it('should register delegation'); + }); + + describe('removeProxy', ()=>{ + it('should throw if tag does not exist', ()=>{}); + it('should throw if sender has not granted proxy for the tag', ()=>{}); + it('should remove proxy', ()=>{}); + }); + + describe('showResults', ()=>{ + it('should throw of ballot does not exist', ()=>{}); + it('should throw if ballot is not closed', ()=>{}); + it('should show results', ()=>{}); + }); +}) \ No newline at end of file diff --git a/typings/hardhat.d.ts b/typings/hardhat.d.ts index 584d553..f613c11 100644 --- a/typings/hardhat.d.ts +++ b/typings/hardhat.d.ts @@ -104,6 +104,10 @@ declare module "hardhat/types/runtime" { name: "IERC20Metadata", signerOrOptions?: ethers.Signer | FactoryOptions ): Promise; + getContractFactory( + name: "Voting", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; getContractAt( name: "AggregatorV3Interface", @@ -220,6 +224,11 @@ declare module "hardhat/types/runtime" { address: string, signer?: ethers.Signer ): Promise; + getContractAt( + name: "Voting", + address: string, + signer?: ethers.Signer + ): Promise; // default types getContractFactory( From 3efc9a3cdcd982d467c72c17e15a79e1bfe08dd6 Mon Sep 17 00:00:00 2001 From: valentinpollart Date: Wed, 20 Apr 2022 18:16:46 +0200 Subject: [PATCH 02/25] feat: second iteration --- contracts/Voting.sol | 156 ++++++++++++++++++++++++++++--------------- 1 file changed, 101 insertions(+), 55 deletions(-) diff --git a/contracts/Voting.sol b/contracts/Voting.sol index 2a14fc9..8276af8 100644 --- a/contracts/Voting.sol +++ b/contracts/Voting.sol @@ -1,12 +1,18 @@ pragma solidity ^0.8.0; import "@openzeppelin/contracts/access/Ownable.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; // Can a voter change his/her vote ? --> Yes -// Can a voter who grant proxy to somebody can still vote ? Can s.he change proxy voter vote ? --> +// Can a voter who grant proxy to somebody can still vote ? --> No +// Can s.he change proxy voter vote ? --> // Can a proxy voter change original voter vote ? // Is there a limit of delegate votes per proxy voters ? // Can a voter grant proxy to more than one person on a given tag ? +// Do we need to have a started flag so admins can create a vote and start it afterwards ? --> No + +// Can a voter delegate to a voter that has less than 25k DPS ? --> No +// Is the 25k DPS limit for delegating balance DPS or undelegated DPS ? --> DPS balance // If A grant proxy to B, and if A and B call vote and reach the vote verification simultaneously, both A and B might register a vote for A // ==> Could be solved by registering voters address instead of incrementing a count, but scales badly. @@ -16,40 +22,66 @@ import "@openzeppelin/contracts/access/Ownable.sol"; // - do not change indexes at tag removal => residual value (such as empty string) will be left in the tag list. // ==> Should owner even be able to remove a tag ? -// TODO: Verify if the voter has enough DPS to vote. (25k DPS) +// Is granting recursive (if A grants proxy to B and B to C, does C has voting power of B+C or A+B+C ?) + +// Add/remove choices ? + +// A a voté 1 +// B a voté 2 + +// voters = address[] +// mapping(address => uint32) results +// results[C] == 0 contract Voting is Ownable { - string[] public tags; + IERC20Metadata public immutable DPS; - struct Proposal { - string statement; - uint32 votes; - } + string[] public tags; struct Ballot { string subject; bool closed; uint32 tagIndex; - uint32 proposalCount; + string[] choices; + } + struct Grants { + mapping(address => uint32) voterIndex; + mapping(uint32 => address) indexVoter; + uint32 grantCount; } - struct Grant { - address voter; - uint256 amount; + struct Vote { + uint32 choiceIndex; + bool hasVoted; + } + + struct Result { + address[] voters; + mapping(address => Vote) votes; } Ballot[] public ballots; - Proposal[][] public choices; + string[][] public choices; + + Result[] private results; + + mapping(uint32 => mapping(uint32 => uint256)) public resultStorage; - uint32[][] private results; + mapping(address => mapping(uint32 => Grants)) private delegates; // proxy => tag => voters + // proxyAddress => tagIndexA => [addressA1, addressA2, ... ] + // => tagIndexB => [addressB1, addressB2, ... ] - mapping(uint32 => mapping(address => bool)) hasVoted; + mapping(address => mapping(uint32 => address)) private proxyVoters; // voter => tag => proxy - mapping(address => mapping(uint32 => Grant[])) private delegates; // proxy => tag => {voter, amount}[] + constructor( + IERC20Metadata _DPS + ) { + require(address(_DPS) != address(0), "Sale: token is zero"); - mapping(address => mapping(uint32 => Grant[])) private proxyVoters; // voter => tag => {proxy, amount}[] + DPS = _DPS; + } function addTag(string memory name) external onlyOwner { tags.push(name); @@ -61,13 +93,15 @@ contract Voting is Ownable { tags.pop(); } - function createBallot(string memory subject, uint32 tagIndex, Proposal[] memory proposals) external onlyOwner { + function createBallot(string memory subject, uint32 tagIndex, string[] memory _choices) external onlyOwner { require(tags.length > tagIndex, 'Voting: Tag index is too high.'); - Ballot memory ballot = Ballot(subject, false, tagIndex, proposals.length); - for (uint i = 0; i < proposals.length; i++) { - ballot.proposals[i] = proposals[i]; + + uint32 memory ballotId = ballots.length; + ballots.push(Ballot(subject, false, tagIndex)); + for (uint i = 0; i < _choices.length; i++) { + choices[ballotId].push(_choices[i]); } - ballots.push(ballot); + } function closeBallot(uint32 ballotIndex) external onlyOwner { @@ -76,55 +110,67 @@ contract Voting is Ownable { } - function vote(uint32 ballotIndex, uint32 proposalIndex) external { + function vote(uint32 ballotIndex, uint32 choiceIndex) external { require(ballots.length > ballotIndex, 'Voting: Ballot index is too high.'); require(!ballots[ballotIndex].closed, 'Voting: Ballot is closed.'); - require(ballots[ballotIndex].proposals.length > proposalIndex, 'Voting: Proposal index is too high.'); + require(choices[ballotIndex].length > choiceIndex, 'Voting: Choice index is too high.'); - // A donne délégation à B + require(proxyVoters[msg.sender][ballots[ballotIndex].tagIndex] == address(0), 'Voting: Vote is delegated.'); // Verify that voter has not granted proxy to somebody. + require(DPS.balanceOf(msg.sender) > 25e3 * 1e18, 'Voting: Not enough DPS to vote.'); // 25k DPS limit - if (!hasVoted[ballotIndex][msg.sender]) { // A n'a pas déjà voté - hasVoted[ballotIndex][msg.sender] = true; - results[ballotIndex][proposalIndex] ++; // sender vote + if(!results[ballotIndex].votes[msg.sender].hasVoted) { + results[ballotIndex].votes[msg.sender].hasVoted = true; + results[ballotIndex].voters.push(msg.sender); } + results[ballotIndex].votes[msg.sender].choiceIndex = choiceIndex; + } - address[] memory _delegates = delegates[msg.sender][ballots[ballotIndex].tagIndex]; - for (uint i = 0; i < _delegates.length; i++) { - if(!hasVoted[ballotIndex][_delegates[i]]) { // A n'a pas déjà voté - hasVoted[ballotIndex][_delegates[i]] = true; - results[ballotIndex][proposalIndex] ++; // proxy vote - } + function totalProxyAmount(address voter, uint32 tagIndex) public view returns (uint256) { + require(tags.length > tagIndex, 'Voting: Tag index is too high'); + uint256 memory total = DPS.balanceOf(voter); + for(uint i = 0; i < delegates[voter][tagIndex].length; i++) { + total += DPS.balanceOf(delegates[voter][tagIndex][i]); } + return total; } - function grantProxy(address to, uint32 tagIndex) external { - require(tags.length > tagIndex, 'Voting: Tag index is too high'); + function close(uint32 ballotIndex) external onlyOwner { + require(ballots.length > ballotIndex, 'Voting: Ballot index is too high'); + require(ballots[ballotIndex].closed, 'Voting: Ballot is still open.'); - proxyVoters[msg.sender][tagIndex] = to; - delegates[to][tagIndex].push(msg.sender); + ballots[ballotIndex].closed = true; + + Result memory result = results[ballotIndex]; + uint32 memory tagIndex= ballots[ballotIndex].tagIndex; + + for(uint i = 0; i < result.voters.length; i++) { // if A has granted proxy to B + address memory voter = result.voters[i]; + resultStorage[ballotIndex][result.votes[voter].choiceIndex] = totalProxyAmount(voter, tagIndex); + } } - function removeProxy(uint32 tagIndex) external { + function grantProxy(address to, uint32 tagIndex) external { require(tags.length > tagIndex, 'Voting: Tag index is too high'); - require(proxyVoters[msg.sender][tagIndex] != address(0), 'Voting: No grant given for this tag.'); - - address proxy = proxyVoters[msg.sender][tagIndex]; - proxyVoters[msg.sender][tagIndex] = address(0); - - address[] memory grants = delegates[proxy][tagIndex]; - for (uint i = 0; i < grants.length; i++) { - if(grants[i] == msg.sender) { - delegates[proxy][tagIndex][i] = delegates[proxy][tagIndex][grants.length- 1]; - delegates[proxy][tagIndex].pop(); - return; - } + require(DPS.balanceOf(msg.sender) > 0, 'Voting: Not enough DPS to delegate.'); + require(DPS.balanceOf(to) > 25e3 * 1e18, 'Voting: Proxy has not enough DPS.'); + + if(proxyVoters[msg.sender][tagIndex] != address(0)) { + uint32 memory formerDelegate = delegates[proxyVoters[msg.sender][tagIndex]][tagIndex]; + uint32 memory senderIndex = formerDelegate.voterIndex[msg.sender]; + formerDelegate.indexVoter[senderIndex] = formerDelegate.indexVoter[formerDelegate.grantCount - 1]; + formerDelegate.indexVoter[formerDelegate.grantCount - 1] = address(0); + formerDelegate.voterIndex[msg.sender] = -1; + formerDelegate.grantCount--; } - } + + proxyVoters[msg.sender][tagIndex] = to; - function showResults(uint32 ballotIndex) external view returns(uint32[] memory) { - require(ballots.length > ballotIndex, 'Voting: Ballot index is too high'); - require(ballots[ballotIndex].closed, 'Voting: Ballot is still open.'); - return results[ballotIndex]; + if(to != address(0)) { + uint32 memory newDelegate = delegates[to][tagIndex]; + newDelegate.voterIndex[msg.sender] = newDelegate.grantCount; + newDelegate.indexVoter[newDelegate.grantCount] = msg.sender; + newDelegate.grantCount++; + } } } From 1a3ee3cc5aa38b09871a56242771f06005508c0f Mon Sep 17 00:00:00 2001 From: valentinpollart Date: Thu, 21 Apr 2022 15:18:47 +0200 Subject: [PATCH 03/25] feat: implement full unit test suit for voting) --- contracts/Voting.sol | 88 +- contracts/testing/ExposedVoting.sol | 33 + test/Voting.spec.ts | 198 ++++- typings/contracts/Voting.ts | 673 +++++++++++++++ typings/contracts/testing/ExposedVoting.ts | 798 ++++++++++++++++++ .../factories/contracts/Voting__factory.ts | 427 ++++++++++ .../testing/ExposedVoting__factory.ts | 524 ++++++++++++ typings/hardhat.d.ts | 9 + 8 files changed, 2676 insertions(+), 74 deletions(-) create mode 100644 contracts/testing/ExposedVoting.sol create mode 100644 typings/contracts/Voting.ts create mode 100644 typings/contracts/testing/ExposedVoting.ts create mode 100644 typings/factories/contracts/Voting__factory.ts create mode 100644 typings/factories/contracts/testing/ExposedVoting__factory.ts diff --git a/contracts/Voting.sol b/contracts/Voting.sol index 8276af8..8777c5b 100644 --- a/contracts/Voting.sol +++ b/contracts/Voting.sol @@ -42,7 +42,6 @@ contract Voting is Ownable { string subject; bool closed; uint32 tagIndex; - string[] choices; } struct Grants { @@ -65,20 +64,18 @@ contract Voting is Ownable { string[][] public choices; - Result[] private results; + Result[] internal results; - mapping(uint32 => mapping(uint32 => uint256)) public resultStorage; + uint256[][] public resultStorage; - mapping(address => mapping(uint32 => Grants)) private delegates; // proxy => tag => voters - // proxyAddress => tagIndexA => [addressA1, addressA2, ... ] - // => tagIndexB => [addressB1, addressB2, ... ] + mapping(address => mapping(uint32 => Grants)) internal delegates; // proxy => tag => voters - mapping(address => mapping(uint32 => address)) private proxyVoters; // voter => tag => proxy + mapping(address => mapping(uint32 => address)) internal proxyVoters; // voter => tag => proxy constructor( IERC20Metadata _DPS ) { - require(address(_DPS) != address(0), "Sale: token is zero"); + require(address(_DPS) != address(0), "Vote: DPS address is zero."); DPS = _DPS; } @@ -87,28 +84,38 @@ contract Voting is Ownable { tags.push(name); } - function removeTag(uint32 tagIndex) external onlyOwner { - require(tags.length > tagIndex, 'Voting: Tag index is too high.'); - tags[tagIndex] = tags[tags.length - 1]; - tags.pop(); + function getTags() external view returns(string[] memory){ + return tags; } function createBallot(string memory subject, uint32 tagIndex, string[] memory _choices) external onlyOwner { require(tags.length > tagIndex, 'Voting: Tag index is too high.'); - uint32 memory ballotId = ballots.length; ballots.push(Ballot(subject, false, tagIndex)); - for (uint i = 0; i < _choices.length; i++) { - choices[ballotId].push(_choices[i]); + choices.push(_choices); + results.push(); + resultStorage.push(); + for(uint i = 0; i < _choices.length; i++){ + resultStorage[resultStorage.length - 1].push(0); } + } + function getBallots() external view returns(Ballot[] memory) { + return ballots; } - function closeBallot(uint32 ballotIndex) external onlyOwner { - require(ballots.length > ballotIndex, 'Voting: Ballot index is too high.'); - ballots[ballotIndex].closed = true; + function getChoices() external view returns(string[][] memory) { + return choices; } + function getAllResults() external view returns (uint256[][] memory) { + return resultStorage; + } + + function getBallotResult(uint256 ballotIndex) external view returns(uint256[] memory) { + require(ballots.length > ballotIndex, 'Voting: Ballot index is too high.'); + return resultStorage[ballotIndex]; + } function vote(uint32 ballotIndex, uint32 choiceIndex) external { require(ballots.length > ballotIndex, 'Voting: Ballot index is too high.'); @@ -116,7 +123,7 @@ contract Voting is Ownable { require(choices[ballotIndex].length > choiceIndex, 'Voting: Choice index is too high.'); require(proxyVoters[msg.sender][ballots[ballotIndex].tagIndex] == address(0), 'Voting: Vote is delegated.'); // Verify that voter has not granted proxy to somebody. - require(DPS.balanceOf(msg.sender) > 25e3 * 1e18, 'Voting: Not enough DPS to vote.'); // 25k DPS limit + require(DPS.balanceOf(msg.sender) >= 25e3 * 1e18, 'Voting: Not enough DPS to vote.'); // 25k DPS limit if(!results[ballotIndex].votes[msg.sender].hasVoted) { results[ballotIndex].votes[msg.sender].hasVoted = true; @@ -128,49 +135,48 @@ contract Voting is Ownable { function totalProxyAmount(address voter, uint32 tagIndex) public view returns (uint256) { require(tags.length > tagIndex, 'Voting: Tag index is too high'); - uint256 memory total = DPS.balanceOf(voter); - for(uint i = 0; i < delegates[voter][tagIndex].length; i++) { - total += DPS.balanceOf(delegates[voter][tagIndex][i]); + uint256 total = DPS.balanceOf(voter); + for(uint32 i = 0; i < delegates[voter][tagIndex].grantCount; i++) { + total += DPS.balanceOf(delegates[voter][tagIndex].indexVoter[i]); } return total; } - function close(uint32 ballotIndex) external onlyOwner { - require(ballots.length > ballotIndex, 'Voting: Ballot index is too high'); - require(ballots[ballotIndex].closed, 'Voting: Ballot is still open.'); + function closeBallot(uint32 ballotIndex) external onlyOwner { + require(ballots.length > ballotIndex, 'Voting: Ballot index is too high.'); + require(!ballots[ballotIndex].closed, 'Voting: Ballot already closed.'); ballots[ballotIndex].closed = true; - Result memory result = results[ballotIndex]; - uint32 memory tagIndex= ballots[ballotIndex].tagIndex; + Result storage result = results[ballotIndex]; + uint32 tagIndex = ballots[ballotIndex].tagIndex; for(uint i = 0; i < result.voters.length; i++) { // if A has granted proxy to B - address memory voter = result.voters[i]; - resultStorage[ballotIndex][result.votes[voter].choiceIndex] = totalProxyAmount(voter, tagIndex); + address voter = result.voters[i]; + resultStorage[ballotIndex][result.votes[voter].choiceIndex] += totalProxyAmount(voter, tagIndex); } } function grantProxy(address to, uint32 tagIndex) external { require(tags.length > tagIndex, 'Voting: Tag index is too high'); - require(DPS.balanceOf(msg.sender) > 0, 'Voting: Not enough DPS to delegate.'); - require(DPS.balanceOf(to) > 25e3 * 1e18, 'Voting: Proxy has not enough DPS.'); + require(DPS.balanceOf(to) >= 25e3 * 1e18 || to == address(0), 'Voting: Proxy has not enough DPS.'); if(proxyVoters[msg.sender][tagIndex] != address(0)) { - uint32 memory formerDelegate = delegates[proxyVoters[msg.sender][tagIndex]][tagIndex]; - uint32 memory senderIndex = formerDelegate.voterIndex[msg.sender]; - formerDelegate.indexVoter[senderIndex] = formerDelegate.indexVoter[formerDelegate.grantCount - 1]; - formerDelegate.indexVoter[formerDelegate.grantCount - 1] = address(0); - formerDelegate.voterIndex[msg.sender] = -1; - formerDelegate.grantCount--; + Grants storage formerDelegateGrants = delegates[proxyVoters[msg.sender][tagIndex]][tagIndex]; + uint32 senderIndex = formerDelegateGrants.voterIndex[msg.sender]; + formerDelegateGrants.indexVoter[senderIndex] = formerDelegateGrants.indexVoter[formerDelegateGrants.grantCount - 1]; + formerDelegateGrants.indexVoter[formerDelegateGrants.grantCount - 1] = address(0); + formerDelegateGrants.voterIndex[msg.sender] = 0; + formerDelegateGrants.grantCount--; } proxyVoters[msg.sender][tagIndex] = to; if(to != address(0)) { - uint32 memory newDelegate = delegates[to][tagIndex]; - newDelegate.voterIndex[msg.sender] = newDelegate.grantCount; - newDelegate.indexVoter[newDelegate.grantCount] = msg.sender; - newDelegate.grantCount++; + Grants storage newDelegateGrants = delegates[to][tagIndex]; + newDelegateGrants.voterIndex[msg.sender] = newDelegateGrants.grantCount; + newDelegateGrants.indexVoter[newDelegateGrants.grantCount] = msg.sender; + newDelegateGrants.grantCount++; } } } diff --git a/contracts/testing/ExposedVoting.sol b/contracts/testing/ExposedVoting.sol new file mode 100644 index 0000000..928a865 --- /dev/null +++ b/contracts/testing/ExposedVoting.sol @@ -0,0 +1,33 @@ +pragma solidity ^0.8.0; + +import "../Voting.sol"; + +contract ExposedVoting is Voting { + + constructor(IERC20Metadata _DPS) Voting(_DPS) {} + + struct ResultSample { + address voter; + Vote vote; + } + + function _results(uint256 index) external view returns(ResultSample[] memory) { + ResultSample[] memory samples = new ResultSample[](results[index].voters.length); + for(uint i = 0; i < results[index].voters.length; i++) { + samples[i] = ResultSample(results[index].voters[i], results[index].votes[results[index].voters[i]]); + } + return samples; + } + + function _delegates(address to, uint32 tagIndex) external view returns(address[] memory) { + address[] memory proxies = new address[](delegates[to][tagIndex].grantCount); + for(uint32 i = 0; i < delegates[to][tagIndex].grantCount; i++) { + proxies[i] = delegates[to][tagIndex].indexVoter[i]; + } + return proxies; + } + + function _proxyVoters(address from, uint32 tagIndex) external view returns(address) { + return proxyVoters[from][tagIndex]; + } +} diff --git a/test/Voting.spec.ts b/test/Voting.spec.ts index d79d08d..d3f95c6 100644 --- a/test/Voting.spec.ts +++ b/test/Voting.spec.ts @@ -1,57 +1,189 @@ +import { expect } from 'chai'; +import { BigNumber } from '@ethersproject/bignumber'; +import { parseUnits } from '@ethersproject/units'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { ZERO_ADDRESS } from '../lib/constants'; +import { DeepSquare, ExposedVoting, ExposedVoting__factory } from '../typings'; +import { ERC20Agent } from './testing/ERC20Agent'; import setup from './testing/setup'; -describe('Voting', async () => { +describe.only('Voting', async () => { + let owner: SignerWithAddress; let accounts: SignerWithAddress[]; + let DPS: DeepSquare; + let Voting: ExposedVoting; + let agentDPS: ERC20Agent; beforeEach(async () => { - ({ accounts } = await setup()); - }); + ({ owner, accounts, DPS, agentDPS } = await setup()); - describe('addTag', () => { - it('should add a tag to the list', async () => { - - }) + Voting = await new ExposedVoting__factory(owner).deploy(DPS.address); }); - describe('removeTag', () => { - it('should throw if tag does not exist', () => {}) - it('should remove a tag from the list', () => { + describe('constructor', () => { + it('should revert if the DPS contract is the zero address', async () => { + await expect(new ExposedVoting__factory(owner).deploy(ZERO_ADDRESS)).to.be.revertedWith( + 'Vote: DPS address is zero.', + ); + }); + }); - }) + describe('addTag', () => { + it('should add a tag to the list', async () => { + await Voting.addTag('foo'); + await Voting.addTag('bar'); + expect(await Voting.getTags()).to.deep.equals(['foo', 'bar']); + }); }); describe('createBallot', () => { - it('should throw if tag does not exist', ()=> {}); - it('should create a ballot', ()=>{}); + it('should throw if tag does not exist', async () => { + await expect(Voting.createBallot('foo', BigNumber.from(1), ['bar', 'baz'])).to.revertedWith( + 'Voting: Tag index is too high.', + ); + }); + it('should create a ballot', async () => { + await Voting.addTag('foo'); + await Voting.createBallot('bar', BigNumber.from(0), ['baz', 'qux']); + expect(await Voting.getBallots()).to.deep.equals([['bar', false, 0]]); + expect(await Voting.getChoices()).to.deep.equals([['baz', 'qux']]); + }); }); - describe('closeBallot', ()=> { - it('should throw if ballot does not exist', ()=>{}); - it('should close the ballot', ()=>{}); + describe('closeBallot', () => { + beforeEach(async () => { + await Voting.addTag('foo'); + await Voting.createBallot('bar', BigNumber.from(0), ['baz', 'qux']); + }); + + it('should throw if ballot does not exist', async () => { + await expect(Voting.closeBallot(BigNumber.from(1))).to.revertedWith('Voting: Ballot index is too high.'); + }); + it('should close the ballot', async () => { + await Voting.closeBallot(BigNumber.from(0)); + expect(await Voting.getBallots()).to.deep.equals([['bar', true, 0]]); + }); }); - describe('vote', ()=>{ - it('should throw if ballot does not exist', ()=>{}); - it('should throw if ballot is closed', ()=>{}); - it('should throw if proposal does not exist', ()=>{}); - it('should vote', ()=>{}); + describe('vote', () => { + beforeEach(async () => { + await Voting.addTag('foo'); + await Voting.createBallot('bar', BigNumber.from(0), ['baz', 'qux']); + }); + + it('should throw if ballot does not exist', async () => { + await expect(Voting.connect(accounts[0]).vote(BigNumber.from(1), BigNumber.from(0))).to.revertedWith( + 'Voting: Ballot index is too high.', + ); + }); + it('should throw if ballot is closed', async () => { + await Voting.closeBallot(BigNumber.from(0)); + await expect(Voting.connect(accounts[0]).vote(BigNumber.from(0), BigNumber.from(0))).to.revertedWith( + 'Voting: Ballot is closed.', + ); + }); + it('should throw if proposal does not exist', async () => { + await expect(Voting.connect(accounts[0]).vote(BigNumber.from(0), BigNumber.from(2))).to.revertedWith( + 'Voting: Choice index is too high.', + ); + }); + it('should throw if voter has granted proxy on the tag', async () => { + await agentDPS.transfer(accounts[1], 25000, 18); + await Voting.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0)); + await expect(Voting.connect(accounts[0]).vote(BigNumber.from(0), BigNumber.from(0))).to.revertedWith( + 'Voting: Vote is delegated.', + ); + }); + it('should throw if voter has less than 25k DPS', async () => { + await expect(Voting.connect(accounts[0]).vote(BigNumber.from(0), BigNumber.from(0))).to.revertedWith( + 'Voting: Not enough DPS to vote.', + ); + }); + it('should vote', async () => { + await agentDPS.transfer(accounts[0], 25000, 18); + await Voting.connect(accounts[0]).vote(BigNumber.from(0), BigNumber.from(0)); + expect(await Voting._results(BigNumber.from(0))).to.deep.equals([[accounts[0].address, [0, true]]]); // How can we check private state variable values? + }); }); - describe('grantProxy', ()=>{ - it('should throw if tag does not exist', ()=>{}); - it('should register delegation'); + describe('grantProxy', () => { + it('should throw if tag does not exist', async () => { + await expect(Voting.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0))).to.revertedWith( + 'Voting: Tag index is too high', + ); + }); + it('should throw if delegate has less than 25k DPS', async () => { + await Voting.addTag('foo'); + await expect(Voting.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0))).to.revertedWith( + 'Voting: Proxy has not enough DPS.', + ); + }); + it('should register delegation', async () => { + await Voting.addTag('foo'); + await agentDPS.transfer(accounts[1], 25000, 18); + await Voting.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0)); + expect(await Voting._delegates(accounts[1].address, BigNumber.from(0))).to.deep.equals([accounts[0].address]); + expect(await Voting._proxyVoters(accounts[0].address, BigNumber.from(0))).to.equals(accounts[1].address); + }); + it('should change delegation', async () => { + await Voting.addTag('foo'); + await agentDPS.transfer(accounts[1], 25000, 18); + await Voting.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0)); + await agentDPS.transfer(accounts[2], 25000, 18); + await Voting.connect(accounts[0]).grantProxy(accounts[2].address, BigNumber.from(0)); + expect(await Voting._delegates(accounts[1].address, BigNumber.from(0))).to.deep.equals([]); + expect(await Voting._delegates(accounts[2].address, BigNumber.from(0))).to.deep.equals([accounts[0].address]); + expect(await Voting._proxyVoters(accounts[0].address, BigNumber.from(0))).to.equals(accounts[2].address); + }); + it('should remove delegation', async () => { + await Voting.addTag('foo'); + await agentDPS.transfer(accounts[1], 25000, 18); + await Voting.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0)); + await Voting.connect(accounts[0]).grantProxy(ZERO_ADDRESS, BigNumber.from(0)); + expect(await Voting._delegates(accounts[1].address, BigNumber.from(0))).to.deep.equals([]); + expect(await Voting._proxyVoters(accounts[0].address, BigNumber.from(0))).to.equals(ZERO_ADDRESS); + }); }); - describe('removeProxy', ()=>{ - it('should throw if tag does not exist', ()=>{}); - it('should throw if sender has not granted proxy for the tag', ()=>{}); - it('should remove proxy', ()=>{}); + describe('totalProxyAmount', () => { + it('should throw if tag does not exist', async () => { + await expect(Voting.totalProxyAmount(accounts[1].address, BigNumber.from(0))).to.revertedWith( + 'Voting: Tag index is too high', + ); + }); + it('should returns total proxy vote power', async () => { + await Voting.addTag('foo'); + await agentDPS.transfer(accounts[0], 25000, 18); + await agentDPS.transfer(accounts[1], 25000, 18); + await Voting.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0)); + expect(await Voting.totalProxyAmount(accounts[1].address, BigNumber.from(0))).to.equals(parseUnits('50000', 18)); + }); }); - describe('showResults', ()=>{ - it('should throw of ballot does not exist', ()=>{}); - it('should throw if ballot is not closed', ()=>{}); - it('should show results', ()=>{}); + describe('closeBallot', async () => { + it('should throw of ballot does not exist', async () => { + await expect(Voting.closeBallot(BigNumber.from(0))).to.revertedWith('Voting: Ballot index is too high.'); + }); + it('should throw if ballot is not closed', async () => { + await Voting.addTag('foo'); + await Voting.createBallot('bar', BigNumber.from(0), ['baz', 'qux']); + await Voting.closeBallot(BigNumber.from(0)); + await expect(Voting.closeBallot(BigNumber.from(0))).to.revertedWith('Voting: Ballot already closed.'); + }); + it('should show results', async () => { + await Voting.addTag('foo'); + await Voting.createBallot('bar', BigNumber.from(0), ['baz', 'qux']); + await agentDPS.transfer(accounts[0], 25000, 18); + await agentDPS.transfer(accounts[1], 25000, 18); + await agentDPS.transfer(accounts[2], 25000, 18); + await Voting.connect(accounts[2]).grantProxy(accounts[1].address, BigNumber.from(0)); + await Voting.connect(accounts[0]).vote(BigNumber.from(0), BigNumber.from(0)); + await Voting.connect(accounts[1]).vote(BigNumber.from(0), BigNumber.from(1)); + await Voting.closeBallot(BigNumber.from(0)); + expect(await Voting.getBallotResult(BigNumber.from(0))).to.deep.equals([ + parseUnits('25000', 18), + parseUnits('50000', 18), + ]); + }); }); -}) \ No newline at end of file +}); diff --git a/typings/contracts/Voting.ts b/typings/contracts/Voting.ts new file mode 100644 index 0000000..ba7d313 --- /dev/null +++ b/typings/contracts/Voting.ts @@ -0,0 +1,673 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, +} from "../common"; + +export declare namespace Voting { + export type BallotStruct = { + subject: string; + closed: boolean; + tagIndex: BigNumberish; + }; + + export type BallotStructOutput = [string, boolean, number] & { + subject: string; + closed: boolean; + tagIndex: number; + }; +} + +export interface VotingInterface extends utils.Interface { + functions: { + "DPS()": FunctionFragment; + "addTag(string)": FunctionFragment; + "ballots(uint256)": FunctionFragment; + "choices(uint256,uint256)": FunctionFragment; + "closeBallot(uint32)": FunctionFragment; + "createBallot(string,uint32,string[])": FunctionFragment; + "getAllResults()": FunctionFragment; + "getBallotResult(uint256)": FunctionFragment; + "getBallots()": FunctionFragment; + "getChoices()": FunctionFragment; + "getTags()": FunctionFragment; + "grantProxy(address,uint32)": FunctionFragment; + "owner()": FunctionFragment; + "renounceOwnership()": FunctionFragment; + "resultStorage(uint256,uint256)": FunctionFragment; + "tags(uint256)": FunctionFragment; + "totalProxyAmount(address,uint32)": FunctionFragment; + "transferOwnership(address)": FunctionFragment; + "vote(uint32,uint32)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "DPS" + | "addTag" + | "ballots" + | "choices" + | "closeBallot" + | "createBallot" + | "getAllResults" + | "getBallotResult" + | "getBallots" + | "getChoices" + | "getTags" + | "grantProxy" + | "owner" + | "renounceOwnership" + | "resultStorage" + | "tags" + | "totalProxyAmount" + | "transferOwnership" + | "vote" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "DPS", values?: undefined): string; + encodeFunctionData(functionFragment: "addTag", values: [string]): string; + encodeFunctionData( + functionFragment: "ballots", + values: [BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "choices", + values: [BigNumberish, BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "closeBallot", + values: [BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "createBallot", + values: [string, BigNumberish, string[]] + ): string; + encodeFunctionData( + functionFragment: "getAllResults", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getBallotResult", + values: [BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "getBallots", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getChoices", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "getTags", values?: undefined): string; + encodeFunctionData( + functionFragment: "grantProxy", + values: [string, BigNumberish] + ): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData( + functionFragment: "renounceOwnership", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "resultStorage", + values: [BigNumberish, BigNumberish] + ): string; + encodeFunctionData(functionFragment: "tags", values: [BigNumberish]): string; + encodeFunctionData( + functionFragment: "totalProxyAmount", + values: [string, BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "transferOwnership", + values: [string] + ): string; + encodeFunctionData( + functionFragment: "vote", + values: [BigNumberish, BigNumberish] + ): string; + + decodeFunctionResult(functionFragment: "DPS", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "addTag", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "ballots", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "choices", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "closeBallot", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "createBallot", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getAllResults", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getBallotResult", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getBallots", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getChoices", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getTags", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "grantProxy", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "renounceOwnership", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "resultStorage", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "tags", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "totalProxyAmount", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "transferOwnership", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "vote", data: BytesLike): Result; + + events: { + "OwnershipTransferred(address,address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; +} + +export interface OwnershipTransferredEventObject { + previousOwner: string; + newOwner: string; +} +export type OwnershipTransferredEvent = TypedEvent< + [string, string], + OwnershipTransferredEventObject +>; + +export type OwnershipTransferredEventFilter = + TypedEventFilter; + +export interface Voting extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: VotingInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + DPS(overrides?: CallOverrides): Promise<[string]>; + + addTag( + name: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + ballots( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise< + [string, boolean, number] & { + subject: string; + closed: boolean; + tagIndex: number; + } + >; + + choices( + arg0: BigNumberish, + arg1: BigNumberish, + overrides?: CallOverrides + ): Promise<[string]>; + + closeBallot( + ballotIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + createBallot( + subject: string, + tagIndex: BigNumberish, + _choices: string[], + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + getAllResults(overrides?: CallOverrides): Promise<[BigNumber[][]]>; + + getBallotResult( + ballotIndex: BigNumberish, + overrides?: CallOverrides + ): Promise<[BigNumber[]]>; + + getBallots( + overrides?: CallOverrides + ): Promise<[Voting.BallotStructOutput[]]>; + + getChoices(overrides?: CallOverrides): Promise<[string[][]]>; + + getTags(overrides?: CallOverrides): Promise<[string[]]>; + + grantProxy( + to: string, + tagIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + owner(overrides?: CallOverrides): Promise<[string]>; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + resultStorage( + arg0: BigNumberish, + arg1: BigNumberish, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + tags(arg0: BigNumberish, overrides?: CallOverrides): Promise<[string]>; + + totalProxyAmount( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + vote( + ballotIndex: BigNumberish, + choiceIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + DPS(overrides?: CallOverrides): Promise; + + addTag( + name: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + ballots( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise< + [string, boolean, number] & { + subject: string; + closed: boolean; + tagIndex: number; + } + >; + + choices( + arg0: BigNumberish, + arg1: BigNumberish, + overrides?: CallOverrides + ): Promise; + + closeBallot( + ballotIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + createBallot( + subject: string, + tagIndex: BigNumberish, + _choices: string[], + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + getAllResults(overrides?: CallOverrides): Promise; + + getBallotResult( + ballotIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + getBallots(overrides?: CallOverrides): Promise; + + getChoices(overrides?: CallOverrides): Promise; + + getTags(overrides?: CallOverrides): Promise; + + grantProxy( + to: string, + tagIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + resultStorage( + arg0: BigNumberish, + arg1: BigNumberish, + overrides?: CallOverrides + ): Promise; + + tags(arg0: BigNumberish, overrides?: CallOverrides): Promise; + + totalProxyAmount( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + vote( + ballotIndex: BigNumberish, + choiceIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + callStatic: { + DPS(overrides?: CallOverrides): Promise; + + addTag(name: string, overrides?: CallOverrides): Promise; + + ballots( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise< + [string, boolean, number] & { + subject: string; + closed: boolean; + tagIndex: number; + } + >; + + choices( + arg0: BigNumberish, + arg1: BigNumberish, + overrides?: CallOverrides + ): Promise; + + closeBallot( + ballotIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + createBallot( + subject: string, + tagIndex: BigNumberish, + _choices: string[], + overrides?: CallOverrides + ): Promise; + + getAllResults(overrides?: CallOverrides): Promise; + + getBallotResult( + ballotIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + getBallots(overrides?: CallOverrides): Promise; + + getChoices(overrides?: CallOverrides): Promise; + + getTags(overrides?: CallOverrides): Promise; + + grantProxy( + to: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + renounceOwnership(overrides?: CallOverrides): Promise; + + resultStorage( + arg0: BigNumberish, + arg1: BigNumberish, + overrides?: CallOverrides + ): Promise; + + tags(arg0: BigNumberish, overrides?: CallOverrides): Promise; + + totalProxyAmount( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: CallOverrides + ): Promise; + + vote( + ballotIndex: BigNumberish, + choiceIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "OwnershipTransferred(address,address)"( + previousOwner?: string | null, + newOwner?: string | null + ): OwnershipTransferredEventFilter; + OwnershipTransferred( + previousOwner?: string | null, + newOwner?: string | null + ): OwnershipTransferredEventFilter; + }; + + estimateGas: { + DPS(overrides?: CallOverrides): Promise; + + addTag( + name: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + ballots(arg0: BigNumberish, overrides?: CallOverrides): Promise; + + choices( + arg0: BigNumberish, + arg1: BigNumberish, + overrides?: CallOverrides + ): Promise; + + closeBallot( + ballotIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + createBallot( + subject: string, + tagIndex: BigNumberish, + _choices: string[], + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + getAllResults(overrides?: CallOverrides): Promise; + + getBallotResult( + ballotIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + getBallots(overrides?: CallOverrides): Promise; + + getChoices(overrides?: CallOverrides): Promise; + + getTags(overrides?: CallOverrides): Promise; + + grantProxy( + to: string, + tagIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + resultStorage( + arg0: BigNumberish, + arg1: BigNumberish, + overrides?: CallOverrides + ): Promise; + + tags(arg0: BigNumberish, overrides?: CallOverrides): Promise; + + totalProxyAmount( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + vote( + ballotIndex: BigNumberish, + choiceIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + populateTransaction: { + DPS(overrides?: CallOverrides): Promise; + + addTag( + name: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + ballots( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise; + + choices( + arg0: BigNumberish, + arg1: BigNumberish, + overrides?: CallOverrides + ): Promise; + + closeBallot( + ballotIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + createBallot( + subject: string, + tagIndex: BigNumberish, + _choices: string[], + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + getAllResults(overrides?: CallOverrides): Promise; + + getBallotResult( + ballotIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + getBallots(overrides?: CallOverrides): Promise; + + getChoices(overrides?: CallOverrides): Promise; + + getTags(overrides?: CallOverrides): Promise; + + grantProxy( + to: string, + tagIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + resultStorage( + arg0: BigNumberish, + arg1: BigNumberish, + overrides?: CallOverrides + ): Promise; + + tags( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise; + + totalProxyAmount( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + vote( + ballotIndex: BigNumberish, + choiceIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; +} diff --git a/typings/contracts/testing/ExposedVoting.ts b/typings/contracts/testing/ExposedVoting.ts new file mode 100644 index 0000000..2190f5d --- /dev/null +++ b/typings/contracts/testing/ExposedVoting.ts @@ -0,0 +1,798 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, +} from "../../common"; + +export declare namespace Voting { + export type VoteStruct = { choiceIndex: BigNumberish; hasVoted: boolean }; + + export type VoteStructOutput = [number, boolean] & { + choiceIndex: number; + hasVoted: boolean; + }; + + export type BallotStruct = { + subject: string; + closed: boolean; + tagIndex: BigNumberish; + }; + + export type BallotStructOutput = [string, boolean, number] & { + subject: string; + closed: boolean; + tagIndex: number; + }; +} + +export declare namespace ExposedVoting { + export type ResultSampleStruct = { voter: string; vote: Voting.VoteStruct }; + + export type ResultSampleStructOutput = [string, Voting.VoteStructOutput] & { + voter: string; + vote: Voting.VoteStructOutput; + }; +} + +export interface ExposedVotingInterface extends utils.Interface { + functions: { + "DPS()": FunctionFragment; + "_delegates(address,uint32)": FunctionFragment; + "_proxyVoters(address,uint32)": FunctionFragment; + "_results(uint256)": FunctionFragment; + "addTag(string)": FunctionFragment; + "ballots(uint256)": FunctionFragment; + "choices(uint256,uint256)": FunctionFragment; + "closeBallot(uint32)": FunctionFragment; + "createBallot(string,uint32,string[])": FunctionFragment; + "getAllResults()": FunctionFragment; + "getBallotResult(uint256)": FunctionFragment; + "getBallots()": FunctionFragment; + "getChoices()": FunctionFragment; + "getTags()": FunctionFragment; + "grantProxy(address,uint32)": FunctionFragment; + "owner()": FunctionFragment; + "renounceOwnership()": FunctionFragment; + "resultStorage(uint256,uint256)": FunctionFragment; + "tags(uint256)": FunctionFragment; + "totalProxyAmount(address,uint32)": FunctionFragment; + "transferOwnership(address)": FunctionFragment; + "vote(uint32,uint32)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "DPS" + | "_delegates" + | "_proxyVoters" + | "_results" + | "addTag" + | "ballots" + | "choices" + | "closeBallot" + | "createBallot" + | "getAllResults" + | "getBallotResult" + | "getBallots" + | "getChoices" + | "getTags" + | "grantProxy" + | "owner" + | "renounceOwnership" + | "resultStorage" + | "tags" + | "totalProxyAmount" + | "transferOwnership" + | "vote" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "DPS", values?: undefined): string; + encodeFunctionData( + functionFragment: "_delegates", + values: [string, BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "_proxyVoters", + values: [string, BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "_results", + values: [BigNumberish] + ): string; + encodeFunctionData(functionFragment: "addTag", values: [string]): string; + encodeFunctionData( + functionFragment: "ballots", + values: [BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "choices", + values: [BigNumberish, BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "closeBallot", + values: [BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "createBallot", + values: [string, BigNumberish, string[]] + ): string; + encodeFunctionData( + functionFragment: "getAllResults", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getBallotResult", + values: [BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "getBallots", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getChoices", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "getTags", values?: undefined): string; + encodeFunctionData( + functionFragment: "grantProxy", + values: [string, BigNumberish] + ): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData( + functionFragment: "renounceOwnership", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "resultStorage", + values: [BigNumberish, BigNumberish] + ): string; + encodeFunctionData(functionFragment: "tags", values: [BigNumberish]): string; + encodeFunctionData( + functionFragment: "totalProxyAmount", + values: [string, BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "transferOwnership", + values: [string] + ): string; + encodeFunctionData( + functionFragment: "vote", + values: [BigNumberish, BigNumberish] + ): string; + + decodeFunctionResult(functionFragment: "DPS", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "_delegates", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "_proxyVoters", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "_results", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "addTag", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "ballots", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "choices", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "closeBallot", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "createBallot", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getAllResults", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getBallotResult", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getBallots", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getChoices", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getTags", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "grantProxy", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "renounceOwnership", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "resultStorage", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "tags", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "totalProxyAmount", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "transferOwnership", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "vote", data: BytesLike): Result; + + events: { + "OwnershipTransferred(address,address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; +} + +export interface OwnershipTransferredEventObject { + previousOwner: string; + newOwner: string; +} +export type OwnershipTransferredEvent = TypedEvent< + [string, string], + OwnershipTransferredEventObject +>; + +export type OwnershipTransferredEventFilter = + TypedEventFilter; + +export interface ExposedVoting extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: ExposedVotingInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + DPS(overrides?: CallOverrides): Promise<[string]>; + + _delegates( + to: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise<[string[]]>; + + _proxyVoters( + from: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise<[string]>; + + _results( + index: BigNumberish, + overrides?: CallOverrides + ): Promise<[ExposedVoting.ResultSampleStructOutput[]]>; + + addTag( + name: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + ballots( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise< + [string, boolean, number] & { + subject: string; + closed: boolean; + tagIndex: number; + } + >; + + choices( + arg0: BigNumberish, + arg1: BigNumberish, + overrides?: CallOverrides + ): Promise<[string]>; + + closeBallot( + ballotIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + createBallot( + subject: string, + tagIndex: BigNumberish, + _choices: string[], + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + getAllResults(overrides?: CallOverrides): Promise<[BigNumber[][]]>; + + getBallotResult( + ballotIndex: BigNumberish, + overrides?: CallOverrides + ): Promise<[BigNumber[]]>; + + getBallots( + overrides?: CallOverrides + ): Promise<[Voting.BallotStructOutput[]]>; + + getChoices(overrides?: CallOverrides): Promise<[string[][]]>; + + getTags(overrides?: CallOverrides): Promise<[string[]]>; + + grantProxy( + to: string, + tagIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + owner(overrides?: CallOverrides): Promise<[string]>; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + resultStorage( + arg0: BigNumberish, + arg1: BigNumberish, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + tags(arg0: BigNumberish, overrides?: CallOverrides): Promise<[string]>; + + totalProxyAmount( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + vote( + ballotIndex: BigNumberish, + choiceIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + DPS(overrides?: CallOverrides): Promise; + + _delegates( + to: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + _proxyVoters( + from: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + _results( + index: BigNumberish, + overrides?: CallOverrides + ): Promise; + + addTag( + name: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + ballots( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise< + [string, boolean, number] & { + subject: string; + closed: boolean; + tagIndex: number; + } + >; + + choices( + arg0: BigNumberish, + arg1: BigNumberish, + overrides?: CallOverrides + ): Promise; + + closeBallot( + ballotIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + createBallot( + subject: string, + tagIndex: BigNumberish, + _choices: string[], + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + getAllResults(overrides?: CallOverrides): Promise; + + getBallotResult( + ballotIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + getBallots(overrides?: CallOverrides): Promise; + + getChoices(overrides?: CallOverrides): Promise; + + getTags(overrides?: CallOverrides): Promise; + + grantProxy( + to: string, + tagIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + resultStorage( + arg0: BigNumberish, + arg1: BigNumberish, + overrides?: CallOverrides + ): Promise; + + tags(arg0: BigNumberish, overrides?: CallOverrides): Promise; + + totalProxyAmount( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + vote( + ballotIndex: BigNumberish, + choiceIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + callStatic: { + DPS(overrides?: CallOverrides): Promise; + + _delegates( + to: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + _proxyVoters( + from: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + _results( + index: BigNumberish, + overrides?: CallOverrides + ): Promise; + + addTag(name: string, overrides?: CallOverrides): Promise; + + ballots( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise< + [string, boolean, number] & { + subject: string; + closed: boolean; + tagIndex: number; + } + >; + + choices( + arg0: BigNumberish, + arg1: BigNumberish, + overrides?: CallOverrides + ): Promise; + + closeBallot( + ballotIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + createBallot( + subject: string, + tagIndex: BigNumberish, + _choices: string[], + overrides?: CallOverrides + ): Promise; + + getAllResults(overrides?: CallOverrides): Promise; + + getBallotResult( + ballotIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + getBallots(overrides?: CallOverrides): Promise; + + getChoices(overrides?: CallOverrides): Promise; + + getTags(overrides?: CallOverrides): Promise; + + grantProxy( + to: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + renounceOwnership(overrides?: CallOverrides): Promise; + + resultStorage( + arg0: BigNumberish, + arg1: BigNumberish, + overrides?: CallOverrides + ): Promise; + + tags(arg0: BigNumberish, overrides?: CallOverrides): Promise; + + totalProxyAmount( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: CallOverrides + ): Promise; + + vote( + ballotIndex: BigNumberish, + choiceIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "OwnershipTransferred(address,address)"( + previousOwner?: string | null, + newOwner?: string | null + ): OwnershipTransferredEventFilter; + OwnershipTransferred( + previousOwner?: string | null, + newOwner?: string | null + ): OwnershipTransferredEventFilter; + }; + + estimateGas: { + DPS(overrides?: CallOverrides): Promise; + + _delegates( + to: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + _proxyVoters( + from: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + _results( + index: BigNumberish, + overrides?: CallOverrides + ): Promise; + + addTag( + name: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + ballots(arg0: BigNumberish, overrides?: CallOverrides): Promise; + + choices( + arg0: BigNumberish, + arg1: BigNumberish, + overrides?: CallOverrides + ): Promise; + + closeBallot( + ballotIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + createBallot( + subject: string, + tagIndex: BigNumberish, + _choices: string[], + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + getAllResults(overrides?: CallOverrides): Promise; + + getBallotResult( + ballotIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + getBallots(overrides?: CallOverrides): Promise; + + getChoices(overrides?: CallOverrides): Promise; + + getTags(overrides?: CallOverrides): Promise; + + grantProxy( + to: string, + tagIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + resultStorage( + arg0: BigNumberish, + arg1: BigNumberish, + overrides?: CallOverrides + ): Promise; + + tags(arg0: BigNumberish, overrides?: CallOverrides): Promise; + + totalProxyAmount( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + vote( + ballotIndex: BigNumberish, + choiceIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + populateTransaction: { + DPS(overrides?: CallOverrides): Promise; + + _delegates( + to: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + _proxyVoters( + from: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + _results( + index: BigNumberish, + overrides?: CallOverrides + ): Promise; + + addTag( + name: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + ballots( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise; + + choices( + arg0: BigNumberish, + arg1: BigNumberish, + overrides?: CallOverrides + ): Promise; + + closeBallot( + ballotIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + createBallot( + subject: string, + tagIndex: BigNumberish, + _choices: string[], + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + getAllResults(overrides?: CallOverrides): Promise; + + getBallotResult( + ballotIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + getBallots(overrides?: CallOverrides): Promise; + + getChoices(overrides?: CallOverrides): Promise; + + getTags(overrides?: CallOverrides): Promise; + + grantProxy( + to: string, + tagIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + resultStorage( + arg0: BigNumberish, + arg1: BigNumberish, + overrides?: CallOverrides + ): Promise; + + tags( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise; + + totalProxyAmount( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + vote( + ballotIndex: BigNumberish, + choiceIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; +} diff --git a/typings/factories/contracts/Voting__factory.ts b/typings/factories/contracts/Voting__factory.ts new file mode 100644 index 0000000..bd4d560 --- /dev/null +++ b/typings/factories/contracts/Voting__factory.ts @@ -0,0 +1,427 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { Voting, VotingInterface } from "../../contracts/Voting"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IERC20Metadata", + name: "_DPS", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + inputs: [], + name: "DPS", + outputs: [ + { + internalType: "contract IERC20Metadata", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "string", + name: "name", + type: "string", + }, + ], + name: "addTag", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "ballots", + outputs: [ + { + internalType: "string", + name: "subject", + type: "string", + }, + { + internalType: "bool", + name: "closed", + type: "bool", + }, + { + internalType: "uint32", + name: "tagIndex", + type: "uint32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "choices", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint32", + name: "ballotIndex", + type: "uint32", + }, + ], + name: "closeBallot", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "string", + name: "subject", + type: "string", + }, + { + internalType: "uint32", + name: "tagIndex", + type: "uint32", + }, + { + internalType: "string[]", + name: "_choices", + type: "string[]", + }, + ], + name: "createBallot", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getAllResults", + outputs: [ + { + internalType: "uint256[][]", + name: "", + type: "uint256[][]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "ballotIndex", + type: "uint256", + }, + ], + name: "getBallotResult", + outputs: [ + { + internalType: "uint256[]", + name: "", + type: "uint256[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getBallots", + outputs: [ + { + components: [ + { + internalType: "string", + name: "subject", + type: "string", + }, + { + internalType: "bool", + name: "closed", + type: "bool", + }, + { + internalType: "uint32", + name: "tagIndex", + type: "uint32", + }, + ], + internalType: "struct Voting.Ballot[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getChoices", + outputs: [ + { + internalType: "string[][]", + name: "", + type: "string[][]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getTags", + outputs: [ + { + internalType: "string[]", + name: "", + type: "string[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint32", + name: "tagIndex", + type: "uint32", + }, + ], + name: "grantProxy", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "resultStorage", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "tags", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "voter", + type: "address", + }, + { + internalType: "uint32", + name: "tagIndex", + type: "uint32", + }, + ], + name: "totalProxyAmount", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint32", + name: "ballotIndex", + type: "uint32", + }, + { + internalType: "uint32", + name: "choiceIndex", + type: "uint32", + }, + ], + name: "vote", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +]; + +const _bytecode = + "0x60a06040523480156200001157600080fd5b50604051620022bc380380620022bc8339810160408190526200003491620000fc565b6200003f33620000ac565b6001600160a01b0381166200009a5760405162461bcd60e51b815260206004820152601a60248201527f566f74653a204450532061646472657373206973207a65726f2e000000000000604482015260640160405180910390fd5b6001600160a01b03166080526200012e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156200010f57600080fd5b81516001600160a01b03811681146200012757600080fd5b9392505050565b60805161215662000166600039600081816102ac0152818161064e0152818161075a01528181610981015261121301526121566000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806398c81bbf116100ad578063de0cc45b11610071578063de0cc45b1461027f578063eb87c6dc14610292578063ef4e06ec146102a7578063f2fde38b146102ce578063f50ea7ff146102e157600080fd5b806398c81bbf1461020f578063995d9ab714610224578063cb8f344814610239578063ce65c4e31461024c578063cff9293a1461026c57600080fd5b80635c632b38116100f45780635c632b3814610198578063715018a6146101ba57806374773a45146101c257806376d9be08146101d55780638da5cb5b146101ea57600080fd5b806320822abc1461012657806324db32ac1461014f57806337dc3dfa14610164578063471a980114610177575b600080fd5b610139610134366004611a0f565b6102f4565b6040516101469190611a75565b60405180910390f35b61016261015d366004611b5f565b6103a0565b005b610139610172366004611c56565b61058e565b61018a610185366004611c8f565b6105d2565b604051908152602001610146565b6101ab6101a6366004611a0f565b6107fc565b60405161014693929190611cc2565b6101626108c9565b6101626101d0366004611c8f565b6108ff565b6101dd610cc5565b6040516101469190611d2d565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610146565b610217610d5e565b6040516101469190611de4565b61022c610e75565b6040516101469190611e39565b61018a610247366004611c56565b610f45565b61025f61025a366004611a0f565b610f82565b6040516101469190611e4c565b61016261027a366004611e5f565b611019565b61016261028d366004611e7b565b611421565b61029a61148d565b6040516101469190611eb8565b6101f77f000000000000000000000000000000000000000000000000000000000000000081565b6101626102dc366004611f41565b61159d565b6101626102ef366004611f5c565b611638565b6001818154811061030457600080fd5b90600052602060002001600091509050805461031f90611f77565b80601f016020809104026020016040519081016040528092919081815260200182805461034b90611f77565b80156103985780601f1061036d57610100808354040283529160200191610398565b820191906000526020600020905b81548152906001019060200180831161037b57829003601f168201915b505050505081565b6000546001600160a01b031633146103d35760405162461bcd60e51b81526004016103ca90611fb2565b60405180910390fd5b60015463ffffffff83161061042a5760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2054616720696e64657820697320746f6f20686967682e000060448201526064016103ca565b604080516060810182528481526000602080830182905263ffffffff8616938301939093526002805460018101825591819052825180519394929091027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace019261049792849201906118c6565b506020828101516001928301805460409095015163ffffffff166101000264ffffffff00199215159290921664ffffffffff1990951694909417179092556003805491820181556000528251610514927fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b9092019184019061194a565b5060048054600190810190915560058054909101815560009081525b8151811015610588576005805461054990600190611ffd565b8154811061055957610559612014565b6000918252602080832090910180546001810182559083529082200155806105808161202a565b915050610530565b50505050565b6003828154811061059e57600080fd5b9060005260206000200181815481106105b657600080fd5b9060005260206000200160009150915050805461031f90611f77565b60015460009063ffffffff83161061062c5760405162461bcd60e51b815260206004820152601d60248201527f566f74696e673a2054616720696e64657820697320746f6f206869676800000060448201526064016103ca565b6040516370a0823160e01b81526001600160a01b0384811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b15801561069257600080fd5b505afa1580156106a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ca9190612045565b905060005b6001600160a01b038516600090815260066020908152604080832063ffffffff8089168552925290912060020154811690821610156107f4576001600160a01b03858116600090815260066020908152604080832063ffffffff89811685529083528184209086168452600101909152908190205490516370a0823160e01b815290821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b15801561079e57600080fd5b505afa1580156107b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d69190612045565b6107e0908361205e565b9150806107ec81612076565b9150506106cf565b509392505050565b6002818154811061080c57600080fd5b906000526020600020906002020160009150905080600001805461082f90611f77565b80601f016020809104026020016040519081016040528092919081815260200182805461085b90611f77565b80156108a85780601f1061087d576101008083540402835291602001916108a8565b820191906000526020600020905b81548152906001019060200180831161088b57829003601f168201915b5050506001909301549192505060ff81169063ffffffff6101009091041683565b6000546001600160a01b031633146108f35760405162461bcd60e51b81526004016103ca90611fb2565b6108fd6000611876565b565b60015463ffffffff8216106109565760405162461bcd60e51b815260206004820152601d60248201527f566f74696e673a2054616720696e64657820697320746f6f206869676800000060448201526064016103ca565b6040516370a0823160e01b81526001600160a01b03838116600483015269054b40b1f852bda00000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b1580156109c557600080fd5b505afa1580156109d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fd9190612045565b101580610a1157506001600160a01b038216155b610a675760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2050726f787920686173206e6f7420656e6f756768204450536044820152601760f91b60648201526084016103ca565b33600090815260076020908152604080832063ffffffff851684529091529020546001600160a01b031615610bdf5733600081815260076020908152604080832063ffffffff808716808652918452828520546001600160a01b0316855260068452828520918552908352818420948452918490528220546002840154908216926001858101939192610afa921661209a565b63ffffffff90811682526020808301939093526040918201600090812054858316825260018781019586905293822080546001600160a01b0319166001600160a01b0390921691909117905560028601549093928492610b5a921661209a565b63ffffffff90811682526020808301939093526040918201600090812080546001600160a01b0319166001600160a01b039690961695909517909455338452918590528220805463ffffffff1916905560028401805490911691610bbd836120bf565b91906101000a81548163ffffffff021916908363ffffffff1602179055505050505b33600090815260076020908152604080832063ffffffff85168452909152902080546001600160a01b0319166001600160a01b03841690811790915515610cc1576001600160a01b038216600090815260066020908152604080832063ffffffff808616855290835281842060028101805433808852838752858820805463ffffffff1916928616929092179091558154841687526001830190955292852080546001600160a01b03191690941790935581549293921691610ca083612076565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505b5050565b60606005805480602002602001604051908101604052809291908181526020016000905b82821015610d5557600084815260209081902083018054604080518285028101850190915281815292830182828015610d4157602002820191906000526020600020905b815481526020019060010190808311610d2d575b505050505081526020019060010190610ce9565b50505050905090565b60606003805480602002602001604051908101604052809291908181526020016000905b82821015610d5557838290600052602060002001805480602002602001604051908101604052809291908181526020016000905b82821015610e62578382906000526020600020018054610dd590611f77565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0190611f77565b8015610e4e5780601f10610e2357610100808354040283529160200191610e4e565b820191906000526020600020905b815481529060010190602001808311610e3157829003601f168201915b505050505081526020019060010190610db6565b5050505081526020019060010190610d82565b60606001805480602002602001604051908101604052809291908181526020016000905b82821015610d55578382906000526020600020018054610eb890611f77565b80601f0160208091040260200160405190810160405280929190818152602001828054610ee490611f77565b8015610f315780601f10610f0657610100808354040283529160200191610f31565b820191906000526020600020905b815481529060010190602001808311610f1457829003601f168201915b505050505081526020019060010190610e99565b60058281548110610f5557600080fd5b906000526020600020018181548110610f6d57600080fd5b90600052602060002001600091509150505481565b6002546060908210610fa65760405162461bcd60e51b81526004016103ca906120df565b60058281548110610fb957610fb9612014565b9060005260206000200180548060200260200160405190810160405280929190818152602001828054801561100d57602002820191906000526020600020905b815481526020019060010190808311610ff9575b50505050509050919050565b60025463ffffffff8316106110405760405162461bcd60e51b81526004016103ca906120df565b60028263ffffffff168154811061105957611059612014565b600091825260209091206001600290920201015460ff16156110bd5760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e0000000000000060448201526064016103ca565b8063ffffffff1660038363ffffffff16815481106110dd576110dd612014565b600091825260209091200154116111405760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2043686f69636520696e64657820697320746f6f20686967686044820152601760f91b60648201526084016103ca565b3360009081526007602052604081206002805483919063ffffffff871690811061116c5761116c612014565b6000918252602080832060029290920290910160010154610100900463ffffffff1683528201929092526040019020546001600160a01b0316146111f25760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e00000000000060448201526064016103ca565b6040516370a0823160e01b815233600482015269054b40b1f852bda00000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561125d57600080fd5b505afa158015611271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112959190612045565b10156112e35760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e0060448201526064016103ca565b60048263ffffffff16815481106112fc576112fc612014565b6000918252602080832033845260029290920290910160010190526040902054640100000000900460ff166113cc57600160048363ffffffff168154811061134657611346612014565b6000918252602080832033845260016002909302019190910190526040902080549115156401000000000264ff00000000199092169190911790556004805463ffffffff841690811061139b5761139b612014565b600091825260208083206002909202909101805460018101825590835291200180546001600160a01b031916331790555b8060048363ffffffff16815481106113e6576113e6612014565b60009182526020808320338452600292909202909101600101905260409020805463ffffffff191663ffffffff929092169190911790555050565b6000546001600160a01b0316331461144b5760405162461bcd60e51b81526004016103ca90611fb2565b6001805480820182556000919091528151610cc1917fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6019060208401906118c6565b60606002805480602002602001604051908101604052809291908181526020016000905b82821015610d5557838290600052602060002090600202016040518060600160405290816000820180546114e490611f77565b80601f016020809104026020016040519081016040528092919081815260200182805461151090611f77565b801561155d5780601f106115325761010080835404028352916020019161155d565b820191906000526020600020905b81548152906001019060200180831161154057829003601f168201915b505050918352505060019182015460ff8116151560208084019190915261010090910463ffffffff166040909201919091529183529290920191016114b1565b6000546001600160a01b031633146115c75760405162461bcd60e51b81526004016103ca90611fb2565b6001600160a01b03811661162c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103ca565b61163581611876565b50565b6000546001600160a01b031633146116625760405162461bcd60e51b81526004016103ca90611fb2565b60025463ffffffff8216106116895760405162461bcd60e51b81526004016103ca906120df565b60028163ffffffff16815481106116a2576116a2612014565b600091825260209091206001600290920201015460ff16156117065760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e000060448201526064016103ca565b600160028263ffffffff168154811061172157611721612014565b60009182526020822060029190910201600101805460ff1916921515929092179091556004805463ffffffff841690811061175e5761175e612014565b90600052602060002090600202019050600060028363ffffffff168154811061178957611789612014565b6000918252602082206001600290920201015463ffffffff6101009091041691505b82548110156105885760008360000182815481106117cb576117cb612014565b6000918252602090912001546001600160a01b031690506117ec81846105d2565b60058663ffffffff168154811061180557611805612014565b600091825260208083206001600160a01b03861684526001890190915260409092205491018054909163ffffffff1690811061184357611843612014565b90600052602060002001600082825461185c919061205e565b9091555082915061186e90508161202a565b9150506117ab565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8280546118d290611f77565b90600052602060002090601f0160209004810192826118f4576000855561193a565b82601f1061190d57805160ff191683800117855561193a565b8280016001018555821561193a579182015b8281111561193a57825182559160200191906001019061191f565b506119469291506119a3565b5090565b828054828255906000526020600020908101928215611997579160200282015b8281111561199757825180516119879184916020909101906118c6565b509160200191906001019061196a565b506119469291506119b8565b5b8082111561194657600081556001016119a4565b808211156119465760006119cc82826119d5565b506001016119b8565b5080546119e190611f77565b6000825580601f106119f1575050565b601f01602090049060005260206000209081019061163591906119a3565b600060208284031215611a2157600080fd5b5035919050565b6000815180845260005b81811015611a4e57602081850181015186830182015201611a32565b81811115611a60576000602083870101525b50601f01601f19169290920160200192915050565b602081526000611a886020830184611a28565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611ace57611ace611a8f565b604052919050565b600082601f830112611ae757600080fd5b813567ffffffffffffffff811115611b0157611b01611a8f565b611b14601f8201601f1916602001611aa5565b818152846020838601011115611b2957600080fd5b816020850160208301376000918101602001919091529392505050565b803563ffffffff81168114611b5a57600080fd5b919050565b600080600060608486031215611b7457600080fd5b833567ffffffffffffffff80821115611b8c57600080fd5b611b9887838801611ad6565b945060209150611ba9828701611b46565b9350604086013581811115611bbd57600080fd5b8601601f81018813611bce57600080fd5b803582811115611be057611be0611a8f565b8060051b611bef858201611aa5565b918252828101850191858101908b841115611c0957600080fd5b86850192505b83831015611c4557823586811115611c275760008081fd5b611c358d8983890101611ad6565b8352509186019190860190611c0f565b809750505050505050509250925092565b60008060408385031215611c6957600080fd5b50508035926020909101359150565b80356001600160a01b0381168114611b5a57600080fd5b60008060408385031215611ca257600080fd5b611cab83611c78565b9150611cb960208401611b46565b90509250929050565b606081526000611cd56060830186611a28565b93151560208301525063ffffffff91909116604090910152919050565b600081518084526020808501945080840160005b83811015611d2257815187529582019590820190600101611d06565b509495945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015611d8257603f19888603018452611d70858351611cf2565b94509285019290850190600101611d54565b5092979650505050505050565b600081518084526020808501808196508360051b8101915082860160005b85811015611dd7578284038952611dc5848351611a28565b98850198935090840190600101611dad565b5091979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015611d8257603f19888603018452611e27858351611d8f565b94509285019290850190600101611e0b565b602081526000611a886020830184611d8f565b602081526000611a886020830184611cf2565b60008060408385031215611e7257600080fd5b611cab83611b46565b600060208284031215611e8d57600080fd5b813567ffffffffffffffff811115611ea457600080fd5b611eb084828501611ad6565b949350505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015611f3357603f19898403018552815160608151818652611f0582870182611a28565b838b01511515878c01529289015163ffffffff16958901959095525094870194925090860190600101611edf565b509098975050505050505050565b600060208284031215611f5357600080fd5b611a8882611c78565b600060208284031215611f6e57600080fd5b611a8882611b46565b600181811c90821680611f8b57607f821691505b60208210811415611fac57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008282101561200f5761200f611fe7565b500390565b634e487b7160e01b600052603260045260246000fd5b600060001982141561203e5761203e611fe7565b5060010190565b60006020828403121561205757600080fd5b5051919050565b6000821982111561207157612071611fe7565b500190565b600063ffffffff8083168181141561209057612090611fe7565b6001019392505050565b600063ffffffff838116908316818110156120b7576120b7611fe7565b039392505050565b600063ffffffff8216806120d5576120d5611fe7565b6000190192915050565b60208082526021908201527f566f74696e673a2042616c6c6f7420696e64657820697320746f6f20686967686040820152601760f91b60608201526080019056fea264697066735822122027513b6c4d73ee0cc009aa9ad6fc35ca676dcf169833402a6af04391e6ecd77564736f6c63430008090033"; + +type VotingConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: VotingConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class Voting__factory extends ContractFactory { + constructor(...args: VotingConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _DPS: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise { + return super.deploy(_DPS, overrides || {}) as Promise; + } + override getDeployTransaction( + _DPS: string, + overrides?: Overrides & { from?: string | Promise } + ): TransactionRequest { + return super.getDeployTransaction(_DPS, overrides || {}); + } + override attach(address: string): Voting { + return super.attach(address) as Voting; + } + override connect(signer: Signer): Voting__factory { + return super.connect(signer) as Voting__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): VotingInterface { + return new utils.Interface(_abi) as VotingInterface; + } + static connect(address: string, signerOrProvider: Signer | Provider): Voting { + return new Contract(address, _abi, signerOrProvider) as Voting; + } +} diff --git a/typings/factories/contracts/testing/ExposedVoting__factory.ts b/typings/factories/contracts/testing/ExposedVoting__factory.ts new file mode 100644 index 0000000..88646ef --- /dev/null +++ b/typings/factories/contracts/testing/ExposedVoting__factory.ts @@ -0,0 +1,524 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { + ExposedVoting, + ExposedVotingInterface, +} from "../../../contracts/testing/ExposedVoting"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IERC20Metadata", + name: "_DPS", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + inputs: [], + name: "DPS", + outputs: [ + { + internalType: "contract IERC20Metadata", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint32", + name: "tagIndex", + type: "uint32", + }, + ], + name: "_delegates", + outputs: [ + { + internalType: "address[]", + name: "", + type: "address[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address", + }, + { + internalType: "uint32", + name: "tagIndex", + type: "uint32", + }, + ], + name: "_proxyVoters", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "index", + type: "uint256", + }, + ], + name: "_results", + outputs: [ + { + components: [ + { + internalType: "address", + name: "voter", + type: "address", + }, + { + components: [ + { + internalType: "uint32", + name: "choiceIndex", + type: "uint32", + }, + { + internalType: "bool", + name: "hasVoted", + type: "bool", + }, + ], + internalType: "struct Voting.Vote", + name: "vote", + type: "tuple", + }, + ], + internalType: "struct ExposedVoting.ResultSample[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "string", + name: "name", + type: "string", + }, + ], + name: "addTag", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "ballots", + outputs: [ + { + internalType: "string", + name: "subject", + type: "string", + }, + { + internalType: "bool", + name: "closed", + type: "bool", + }, + { + internalType: "uint32", + name: "tagIndex", + type: "uint32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "choices", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint32", + name: "ballotIndex", + type: "uint32", + }, + ], + name: "closeBallot", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "string", + name: "subject", + type: "string", + }, + { + internalType: "uint32", + name: "tagIndex", + type: "uint32", + }, + { + internalType: "string[]", + name: "_choices", + type: "string[]", + }, + ], + name: "createBallot", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getAllResults", + outputs: [ + { + internalType: "uint256[][]", + name: "", + type: "uint256[][]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "ballotIndex", + type: "uint256", + }, + ], + name: "getBallotResult", + outputs: [ + { + internalType: "uint256[]", + name: "", + type: "uint256[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getBallots", + outputs: [ + { + components: [ + { + internalType: "string", + name: "subject", + type: "string", + }, + { + internalType: "bool", + name: "closed", + type: "bool", + }, + { + internalType: "uint32", + name: "tagIndex", + type: "uint32", + }, + ], + internalType: "struct Voting.Ballot[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getChoices", + outputs: [ + { + internalType: "string[][]", + name: "", + type: "string[][]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getTags", + outputs: [ + { + internalType: "string[]", + name: "", + type: "string[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint32", + name: "tagIndex", + type: "uint32", + }, + ], + name: "grantProxy", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "resultStorage", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "tags", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "voter", + type: "address", + }, + { + internalType: "uint32", + name: "tagIndex", + type: "uint32", + }, + ], + name: "totalProxyAmount", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint32", + name: "ballotIndex", + type: "uint32", + }, + { + internalType: "uint32", + name: "choiceIndex", + type: "uint32", + }, + ], + name: "vote", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +]; + +const _bytecode = + "0x60a06040523480156200001157600080fd5b5060405162002779380380620027798339810160408190526200003491620000fe565b806200004033620000ae565b6001600160a01b0381166200009b5760405162461bcd60e51b815260206004820152601a60248201527f566f74653a204450532061646472657373206973207a65726f2e000000000000604482015260640160405180910390fd5b6001600160a01b03166080525062000130565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156200011157600080fd5b81516001600160a01b03811681146200012957600080fd5b9392505050565b608051612611620001686000396000818161034b015281816108250152818161093101528181610b5001526115ce01526126116000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c8063995d9ab7116100b8578063cff9293a1161007c578063cff9293a1461030b578063de0cc45b1461031e578063eb87c6dc14610331578063ef4e06ec14610346578063f2fde38b1461036d578063f50ea7ff1461038057600080fd5b8063995d9ab714610265578063c43e163d1461027a578063cb8f3448146102b8578063cc71df1a146102cb578063ce65c4e3146102eb57600080fd5b80635c632b381161010a5780635c632b38146101d9578063715018a6146101fb57806374773a451461020357806376d9be08146102165780638da5cb5b1461022b57806398c81bbf1461025057600080fd5b80631d700c531461014757806320822abc1461017057806324db32ac1461019057806337dc3dfa146101a5578063471a9801146101b8575b600080fd5b61015a610155366004611e3f565b610393565b6040516101679190611e72565b60405180910390f35b61018361017e366004611ebf565b6104cb565b6040516101679190611f25565b6101a361019e366004611ff6565b610577565b005b6101836101b33660046120ed565b610765565b6101cb6101c6366004611e3f565b6107a9565b604051908152602001610167565b6101ec6101e7366004611ebf565b6109cb565b6040516101679392919061210f565b6101a3610a98565b6101a3610211366004611e3f565b610ace565b61021e610e94565b604051610167919061217a565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610167565b610258610f2d565b6040516101679190612234565b61026d611044565b6040516101679190612289565b610238610288366004611e3f565b6001600160a01b03918216600090815260076020908152604080832063ffffffff94909416835292905220541690565b6101cb6102c63660046120ed565b611114565b6102de6102d9366004611ebf565b611151565b604051610167919061229c565b6102fe6102f9366004611ebf565b61133d565b6040516101679190612307565b6101a361031936600461231a565b6113d4565b6101a361032c366004612336565b6117dc565b610339611848565b6040516101679190612373565b6102387f000000000000000000000000000000000000000000000000000000000000000081565b6101a361037b3660046123fc565b611958565b6101a361038e366004612417565b6119f3565b6001600160a01b038216600090815260066020908152604080832063ffffffff80861685529252822060020154606092911667ffffffffffffffff8111156103dd576103dd611f3f565b604051908082528060200260200182016040528015610406578160200160208202803683370190505b50905060005b6001600160a01b038516600090815260066020908152604080832063ffffffff8089168552925290912060020154811690821610156104c3576001600160a01b03808616600090815260066020908152604080832063ffffffff808a1685529083528184209086168085526001909101909252909120548451921691849190811061049957610499612432565b6001600160a01b0390921660209283029190910190910152806104bb8161245e565b91505061040c565b509392505050565b600181815481106104db57600080fd5b9060005260206000200160009150905080546104f690612482565b80601f016020809104026020016040519081016040528092919081815260200182805461052290612482565b801561056f5780601f106105445761010080835404028352916020019161056f565b820191906000526020600020905b81548152906001019060200180831161055257829003601f168201915b505050505081565b6000546001600160a01b031633146105aa5760405162461bcd60e51b81526004016105a1906124bd565b60405180910390fd5b60015463ffffffff8316106106015760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2054616720696e64657820697320746f6f20686967682e000060448201526064016105a1565b604080516060810182528481526000602080830182905263ffffffff8616938301939093526002805460018101825591819052825180519394929091027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace019261066e9284920190611c81565b506020828101516001928301805460409095015163ffffffff166101000264ffffffff00199215159290921664ffffffffff19909516949094171790925560038054918201815560005282516106eb927fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90920191840190611d05565b5060048054600190810190915560058054909101815560009081525b815181101561075f5760058054610720906001906124f2565b8154811061073057610730612432565b60009182526020808320909101805460018101825590835290822001558061075781612509565b915050610707565b50505050565b6003828154811061077557600080fd5b90600052602060002001818154811061078d57600080fd5b906000526020600020016000915091505080546104f690612482565b60015460009063ffffffff8316106108035760405162461bcd60e51b815260206004820152601d60248201527f566f74696e673a2054616720696e64657820697320746f6f206869676800000060448201526064016105a1565b6040516370a0823160e01b81526001600160a01b0384811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b15801561086957600080fd5b505afa15801561087d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a19190612524565b905060005b6001600160a01b038516600090815260066020908152604080832063ffffffff8089168552925290912060020154811690821610156104c3576001600160a01b03858116600090815260066020908152604080832063ffffffff89811685529083528184209086168452600101909152908190205490516370a0823160e01b815290821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b15801561097557600080fd5b505afa158015610989573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ad9190612524565b6109b7908361253d565b9150806109c38161245e565b9150506108a6565b600281815481106109db57600080fd5b90600052602060002090600202016000915090508060000180546109fe90612482565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2a90612482565b8015610a775780601f10610a4c57610100808354040283529160200191610a77565b820191906000526020600020905b815481529060010190602001808311610a5a57829003601f168201915b5050506001909301549192505060ff81169063ffffffff6101009091041683565b6000546001600160a01b03163314610ac25760405162461bcd60e51b81526004016105a1906124bd565b610acc6000611c31565b565b60015463ffffffff821610610b255760405162461bcd60e51b815260206004820152601d60248201527f566f74696e673a2054616720696e64657820697320746f6f206869676800000060448201526064016105a1565b6040516370a0823160e01b81526001600160a01b03838116600483015269054b40b1f852bda00000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b158015610b9457600080fd5b505afa158015610ba8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcc9190612524565b101580610be057506001600160a01b038216155b610c365760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2050726f787920686173206e6f7420656e6f756768204450536044820152601760f91b60648201526084016105a1565b33600090815260076020908152604080832063ffffffff851684529091529020546001600160a01b031615610dae5733600081815260076020908152604080832063ffffffff808716808652918452828520546001600160a01b0316855260068452828520918552908352818420948452918490528220546002840154908216926001858101939192610cc99216612555565b63ffffffff90811682526020808301939093526040918201600090812054858316825260018781019586905293822080546001600160a01b0319166001600160a01b0390921691909117905560028601549093928492610d299216612555565b63ffffffff90811682526020808301939093526040918201600090812080546001600160a01b0319166001600160a01b039690961695909517909455338452918590528220805463ffffffff1916905560028401805490911691610d8c8361257a565b91906101000a81548163ffffffff021916908363ffffffff1602179055505050505b33600090815260076020908152604080832063ffffffff85168452909152902080546001600160a01b0319166001600160a01b03841690811790915515610e90576001600160a01b038216600090815260066020908152604080832063ffffffff808616855290835281842060028101805433808852838752858820805463ffffffff1916928616929092179091558154841687526001830190955292852080546001600160a01b03191690941790935581549293921691610e6f8361245e565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505b5050565b60606005805480602002602001604051908101604052809291908181526020016000905b82821015610f2457600084815260209081902083018054604080518285028101850190915281815292830182828015610f1057602002820191906000526020600020905b815481526020019060010190808311610efc575b505050505081526020019060010190610eb8565b50505050905090565b60606003805480602002602001604051908101604052809291908181526020016000905b82821015610f2457838290600052602060002001805480602002602001604051908101604052809291908181526020016000905b82821015611031578382906000526020600020018054610fa490612482565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd090612482565b801561101d5780601f10610ff25761010080835404028352916020019161101d565b820191906000526020600020905b81548152906001019060200180831161100057829003601f168201915b505050505081526020019060010190610f85565b5050505081526020019060010190610f51565b60606001805480602002602001604051908101604052809291908181526020016000905b82821015610f2457838290600052602060002001805461108790612482565b80601f01602080910402602001604051908101604052809291908181526020018280546110b390612482565b80156111005780601f106110d557610100808354040283529160200191611100565b820191906000526020600020905b8154815290600101906020018083116110e357829003601f168201915b505050505081526020019060010190611068565b6005828154811061112457600080fd5b90600052602060002001818154811061113c57600080fd5b90600052602060002001600091509150505481565b606060006004838154811061116857611168612432565b600091825260209091206002909102015467ffffffffffffffff81111561119157611191611f3f565b6040519080825280602002602001820160405280156111ca57816020015b6111b7611d5e565b8152602001906001900390816111af5790505b50905060005b600484815481106111e3576111e3612432565b60009182526020909120600290910201548110156113365760405180604001604052806004868154811061121957611219612432565b9060005260206000209060020201600001838154811061123b5761123b612432565b600091825260209182902001546001600160a01b031682526004805492909101918790811061126c5761126c612432565b906000526020600020906002020160010160006004888154811061129257611292612432565b906000526020600020906002020160000185815481106112b4576112b4612432565b60009182526020808320909101546001600160a01b03168352828101939093526040918201902081518083019092525463ffffffff8116825260ff640100000000909104161515918101919091529052825183908390811061131857611318612432565b6020026020010181905250808061132e90612509565b9150506111d0565b5092915050565b60025460609082106113615760405162461bcd60e51b81526004016105a19061259a565b6005828154811061137457611374612432565b906000526020600020018054806020026020016040519081016040528092919081815260200182805480156113c857602002820191906000526020600020905b8154815260200190600101908083116113b4575b50505050509050919050565b60025463ffffffff8316106113fb5760405162461bcd60e51b81526004016105a19061259a565b60028263ffffffff168154811061141457611414612432565b600091825260209091206001600290920201015460ff16156114785760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e0000000000000060448201526064016105a1565b8063ffffffff1660038363ffffffff168154811061149857611498612432565b600091825260209091200154116114fb5760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2043686f69636520696e64657820697320746f6f20686967686044820152601760f91b60648201526084016105a1565b3360009081526007602052604081206002805483919063ffffffff871690811061152757611527612432565b6000918252602080832060029290920290910160010154610100900463ffffffff1683528201929092526040019020546001600160a01b0316146115ad5760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e00000000000060448201526064016105a1565b6040516370a0823160e01b815233600482015269054b40b1f852bda00000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561161857600080fd5b505afa15801561162c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116509190612524565b101561169e5760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e0060448201526064016105a1565b60048263ffffffff16815481106116b7576116b7612432565b6000918252602080832033845260029290920290910160010190526040902054640100000000900460ff1661178757600160048363ffffffff168154811061170157611701612432565b6000918252602080832033845260016002909302019190910190526040902080549115156401000000000264ff00000000199092169190911790556004805463ffffffff841690811061175657611756612432565b600091825260208083206002909202909101805460018101825590835291200180546001600160a01b031916331790555b8060048363ffffffff16815481106117a1576117a1612432565b60009182526020808320338452600292909202909101600101905260409020805463ffffffff191663ffffffff929092169190911790555050565b6000546001600160a01b031633146118065760405162461bcd60e51b81526004016105a1906124bd565b6001805480820182556000919091528151610e90917fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601906020840190611c81565b60606002805480602002602001604051908101604052809291908181526020016000905b82821015610f24578382906000526020600020906002020160405180606001604052908160008201805461189f90612482565b80601f01602080910402602001604051908101604052809291908181526020018280546118cb90612482565b80156119185780601f106118ed57610100808354040283529160200191611918565b820191906000526020600020905b8154815290600101906020018083116118fb57829003601f168201915b505050918352505060019182015460ff8116151560208084019190915261010090910463ffffffff1660409092019190915291835292909201910161186c565b6000546001600160a01b031633146119825760405162461bcd60e51b81526004016105a1906124bd565b6001600160a01b0381166119e75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105a1565b6119f081611c31565b50565b6000546001600160a01b03163314611a1d5760405162461bcd60e51b81526004016105a1906124bd565b60025463ffffffff821610611a445760405162461bcd60e51b81526004016105a19061259a565b60028163ffffffff1681548110611a5d57611a5d612432565b600091825260209091206001600290920201015460ff1615611ac15760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e000060448201526064016105a1565b600160028263ffffffff1681548110611adc57611adc612432565b60009182526020822060029190910201600101805460ff1916921515929092179091556004805463ffffffff8416908110611b1957611b19612432565b90600052602060002090600202019050600060028363ffffffff1681548110611b4457611b44612432565b6000918252602082206001600290920201015463ffffffff6101009091041691505b825481101561075f576000836000018281548110611b8657611b86612432565b6000918252602090912001546001600160a01b03169050611ba781846107a9565b60058663ffffffff1681548110611bc057611bc0612432565b600091825260208083206001600160a01b03861684526001890190915260409092205491018054909163ffffffff16908110611bfe57611bfe612432565b906000526020600020016000828254611c17919061253d565b90915550829150611c29905081612509565b915050611b66565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054611c8d90612482565b90600052602060002090601f016020900481019282611caf5760008555611cf5565b82601f10611cc857805160ff1916838001178555611cf5565b82800160010185558215611cf5579182015b82811115611cf5578251825591602001919060010190611cda565b50611d01929150611da3565b5090565b828054828255906000526020600020908101928215611d52579160200282015b82811115611d525782518051611d42918491602090910190611c81565b5091602001919060010190611d25565b50611d01929150611db8565b604051806040016040528060006001600160a01b03168152602001611d9e6040518060400160405280600063ffffffff1681526020016000151581525090565b905290565b5b80821115611d015760008155600101611da4565b80821115611d01576000611dcc8282611dd5565b50600101611db8565b508054611de190612482565b6000825580601f10611df1575050565b601f0160209004906000526020600020908101906119f09190611da3565b80356001600160a01b0381168114611e2657600080fd5b919050565b803563ffffffff81168114611e2657600080fd5b60008060408385031215611e5257600080fd5b611e5b83611e0f565b9150611e6960208401611e2b565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015611eb35783516001600160a01b031683529284019291840191600101611e8e565b50909695505050505050565b600060208284031215611ed157600080fd5b5035919050565b6000815180845260005b81811015611efe57602081850181015186830182015201611ee2565b81811115611f10576000602083870101525b50601f01601f19169290920160200192915050565b602081526000611f386020830184611ed8565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611f7e57611f7e611f3f565b604052919050565b600082601f830112611f9757600080fd5b813567ffffffffffffffff811115611fb157611fb1611f3f565b611fc4601f8201601f1916602001611f55565b818152846020838601011115611fd957600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561200b57600080fd5b833567ffffffffffffffff8082111561202357600080fd5b61202f87838801611f86565b945060209150612040828701611e2b565b935060408601358181111561205457600080fd5b8601601f8101881361206557600080fd5b80358281111561207757612077611f3f565b8060051b612086858201611f55565b918252828101850191858101908b8411156120a057600080fd5b86850192505b838310156120dc578235868111156120be5760008081fd5b6120cc8d8983890101611f86565b83525091860191908601906120a6565b809750505050505050509250925092565b6000806040838503121561210057600080fd5b50508035926020909101359150565b6060815260006121226060830186611ed8565b93151560208301525063ffffffff91909116604090910152919050565b600081518084526020808501945080840160005b8381101561216f57815187529582019590820190600101612153565b509495945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156121cf57603f198886030184526121bd85835161213f565b945092850192908501906001016121a1565b5092979650505050505050565b600082825180855260208086019550808260051b84010181860160005b8481101561222757601f19868403018952612215838351611ed8565b988401989250908301906001016121f9565b5090979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156121cf57603f198886030184526122778583516121dc565b9450928501929085019060010161225b565b602081526000611f3860208301846121dc565b602080825282518282018190526000919060409081850190868401855b828110156122fa57815180516001600160a01b03168552860151805163ffffffff1687860152860151151585850152606090930192908501906001016122b9565b5091979650505050505050565b602081526000611f38602083018461213f565b6000806040838503121561232d57600080fd5b611e5b83611e2b565b60006020828403121561234857600080fd5b813567ffffffffffffffff81111561235f57600080fd5b61236b84828501611f86565b949350505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156123ee57603f198984030185528151606081518186526123c082870182611ed8565b838b01511515878c01529289015163ffffffff1695890195909552509487019492509086019060010161239a565b509098975050505050505050565b60006020828403121561240e57600080fd5b611f3882611e0f565b60006020828403121561242957600080fd5b611f3882611e2b565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600063ffffffff8083168181141561247857612478612448565b6001019392505050565b600181811c9082168061249657607f821691505b602082108114156124b757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008282101561250457612504612448565b500390565b600060001982141561251d5761251d612448565b5060010190565b60006020828403121561253657600080fd5b5051919050565b6000821982111561255057612550612448565b500190565b600063ffffffff8381169083168181101561257257612572612448565b039392505050565b600063ffffffff82168061259057612590612448565b6000190192915050565b60208082526021908201527f566f74696e673a2042616c6c6f7420696e64657820697320746f6f20686967686040820152601760f91b60608201526080019056fea26469706673582212207d4fe7b5e2748731ea3f0579cbfd3b6f1fda39e14d5439deaed2483d5b41c9fc64736f6c63430008090033"; + +type ExposedVotingConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: ExposedVotingConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class ExposedVoting__factory extends ContractFactory { + constructor(...args: ExposedVotingConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _DPS: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise { + return super.deploy(_DPS, overrides || {}) as Promise; + } + override getDeployTransaction( + _DPS: string, + overrides?: Overrides & { from?: string | Promise } + ): TransactionRequest { + return super.getDeployTransaction(_DPS, overrides || {}); + } + override attach(address: string): ExposedVoting { + return super.attach(address) as ExposedVoting; + } + override connect(signer: Signer): ExposedVoting__factory { + return super.connect(signer) as ExposedVoting__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): ExposedVotingInterface { + return new utils.Interface(_abi) as ExposedVotingInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): ExposedVoting { + return new Contract(address, _abi, signerOrProvider) as ExposedVoting; + } +} diff --git a/typings/hardhat.d.ts b/typings/hardhat.d.ts index f613c11..8127a44 100644 --- a/typings/hardhat.d.ts +++ b/typings/hardhat.d.ts @@ -84,6 +84,10 @@ declare module "hardhat/types/runtime" { name: "SpenderSecurity", signerOrOptions?: ethers.Signer | FactoryOptions ): Promise; + getContractFactory( + name: "ExposedVoting", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; getContractFactory( name: "BridgeToken", signerOrOptions?: ethers.Signer | FactoryOptions @@ -199,6 +203,11 @@ declare module "hardhat/types/runtime" { address: string, signer?: ethers.Signer ): Promise; + getContractAt( + name: "ExposedVoting", + address: string, + signer?: ethers.Signer + ): Promise; getContractAt( name: "BridgeToken", address: string, From 72b75de7c40466382c42db086e1a0b0ea7709dd1 Mon Sep 17 00:00:00 2001 From: valentinpollart Date: Thu, 21 Apr 2022 18:53:51 +0200 Subject: [PATCH 04/25] feat: rewrite contra cts to use clone fact ory pattern --- contracts/Ballot.sol | 109 +++++ contracts/Voting.sol | 182 -------- contracts/VotingProxy.sol | 66 +++ contracts/factories/BallotFactory.sol | 59 +++ contracts/testing/ExposedBallot.sol | 25 + contracts/testing/ExposedVoting.sol | 33 -- contracts/testing/ExposedVotingProxy.sol | 21 + pnpm-lock.yaml | 100 +++- test/Ballot.spec.ts | 123 +++++ test/BallotFactory.spec.ts | 65 +++ test/Voting.spec.ts | 189 -------- test/VotingProxy.spec.ts | 109 +++++ .../factories/contracts/Ballot__factory.ts | 300 ++++++++++++ .../contracts/VotingProxy__factory.ts | 232 ++++++++++ .../factories/contracts/Voting__factory.ts | 427 ------------------ .../factories/BallotFactory__factory.ts | 262 +++++++++++ typings/hardhat.d.ts | 43 +- 17 files changed, 1482 insertions(+), 863 deletions(-) create mode 100644 contracts/Ballot.sol delete mode 100644 contracts/Voting.sol create mode 100644 contracts/VotingProxy.sol create mode 100644 contracts/factories/BallotFactory.sol create mode 100644 contracts/testing/ExposedBallot.sol delete mode 100644 contracts/testing/ExposedVoting.sol create mode 100644 contracts/testing/ExposedVotingProxy.sol create mode 100644 test/Ballot.spec.ts create mode 100644 test/BallotFactory.spec.ts delete mode 100644 test/Voting.spec.ts create mode 100644 test/VotingProxy.spec.ts create mode 100644 typings/factories/contracts/Ballot__factory.ts create mode 100644 typings/factories/contracts/VotingProxy__factory.ts delete mode 100644 typings/factories/contracts/Voting__factory.ts create mode 100644 typings/factories/contracts/factories/BallotFactory__factory.ts diff --git a/contracts/Ballot.sol b/contracts/Ballot.sol new file mode 100644 index 0000000..4b181a8 --- /dev/null +++ b/contracts/Ballot.sol @@ -0,0 +1,109 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/access/Ownable.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; +import "./VotingProxy.sol"; + +// Can a voter change his/her vote ? --> Yes +// Can a voter who grant proxy to somebody can still vote ? --> No +// Can s.he change proxy voter vote ? --> +// Can a proxy voter change original voter vote ? +// Is there a limit of delegate votes per proxy voters ? +// Can a voter grant proxy to more than one person on a given tag ? +// Do we need to have a started flag so admins can create a vote and start it afterwards ? --> No + +// Can a voter delegate to a voter that has less than 25k DPS ? --> No +// Is the 25k DPS limit for delegating balance DPS or undelegated DPS ? --> DPS balance + +// If A grant proxy to B, and if A and B call vote and reach the vote verification simultaneously, both A and B might register a vote for A +// ==> Could be solved by registering voters address instead of incrementing a count, but scales badly. + +// Currently, order is not kept for tags, causing index issues, 2 solutions : +// - remove reference to tag index and use value => forces to check each time there's a reference to a tag to verify it is a member of tag list. +// - do not change indexes at tag removal => residual value (such as empty string) will be left in the tag list. +// ==> Should owner even be able to remove a tag ? + +// Is granting recursive (if A grants proxy to B and B to C, does C has voting power of B+C or A+B+C ?) + +// Add/remove choices ? + +// A a voté 1 +// B a voté 2 + +// voters = address[] +// mapping(address => uint32) results +// results[C] == 0 + +contract Ballot is Ownable { + IERC20Metadata public immutable DPS; + VotingProxy public proxy; + + struct Vote { + uint32 choiceIndex; + bool hasVoted; + } + + string public subject; + bool public closed; + uint32 public tagIndex; + string[] public choices; + uint256[] public resultStorage; + + address[] internal voters; + mapping(address => Vote) internal votes; + + constructor( + IERC20Metadata _DPS, + VotingProxy _proxy + ) { + require(address(_DPS) != address(0), "Vote: DPS address is zero."); + DPS = _DPS; + proxy = _proxy; + } + + function init(string memory _subject, uint32 _tagIndex, string[] memory _choices) external onlyOwner { + subject = _subject; + tagIndex = _tagIndex; + closed = false; + choices = _choices; + } + + function getChoices() external view returns(string[] memory) { + return choices; + } + + function getResults() external view returns (uint256[] memory) { + return resultStorage; + } + + function vote(uint32 choiceIndex) external { + require(!closed, 'Voting: Ballot is closed.'); + require(choices.length > choiceIndex, 'Voting: Choice index is too high.'); + + require(proxy.hasDelegated(msg.sender,tagIndex) , 'Voting: Vote is delegated.'); // Verify that voter has not granted proxy to somebody. + + require(DPS.balanceOf(msg.sender) >= 25e3 * 1e18, 'Voting: Not enough DPS to vote.'); // 25k DPS limit + + if(!votes[msg.sender].hasVoted) { + votes[msg.sender].hasVoted = true; + voters.push(msg.sender); + } + + votes[msg.sender].choiceIndex = choiceIndex; + } + + function closeBallot() external onlyOwner { + require(!closed, 'Voting: Ballot already closed.'); + + closed = true; + + for(uint i = 0; i < voters.length; i++) { // if A has granted proxy to B + address voter = voters[i]; + resultStorage[votes[voter].choiceIndex] += DPS.balanceOf(msg.sender) + proxy.proxyAmount(voter, tagIndex); + } + } + + +} diff --git a/contracts/Voting.sol b/contracts/Voting.sol deleted file mode 100644 index 8777c5b..0000000 --- a/contracts/Voting.sol +++ /dev/null @@ -1,182 +0,0 @@ -pragma solidity ^0.8.0; - -import "@openzeppelin/contracts/access/Ownable.sol"; -import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; - -// Can a voter change his/her vote ? --> Yes -// Can a voter who grant proxy to somebody can still vote ? --> No -// Can s.he change proxy voter vote ? --> -// Can a proxy voter change original voter vote ? -// Is there a limit of delegate votes per proxy voters ? -// Can a voter grant proxy to more than one person on a given tag ? -// Do we need to have a started flag so admins can create a vote and start it afterwards ? --> No - -// Can a voter delegate to a voter that has less than 25k DPS ? --> No -// Is the 25k DPS limit for delegating balance DPS or undelegated DPS ? --> DPS balance - -// If A grant proxy to B, and if A and B call vote and reach the vote verification simultaneously, both A and B might register a vote for A -// ==> Could be solved by registering voters address instead of incrementing a count, but scales badly. - -// Currently, order is not kept for tags, causing index issues, 2 solutions : -// - remove reference to tag index and use value => forces to check each time there's a reference to a tag to verify it is a member of tag list. -// - do not change indexes at tag removal => residual value (such as empty string) will be left in the tag list. -// ==> Should owner even be able to remove a tag ? - -// Is granting recursive (if A grants proxy to B and B to C, does C has voting power of B+C or A+B+C ?) - -// Add/remove choices ? - -// A a voté 1 -// B a voté 2 - -// voters = address[] -// mapping(address => uint32) results -// results[C] == 0 - -contract Voting is Ownable { - IERC20Metadata public immutable DPS; - - string[] public tags; - - struct Ballot { - string subject; - bool closed; - uint32 tagIndex; - } - - struct Grants { - mapping(address => uint32) voterIndex; - mapping(uint32 => address) indexVoter; - uint32 grantCount; - } - - struct Vote { - uint32 choiceIndex; - bool hasVoted; - } - - struct Result { - address[] voters; - mapping(address => Vote) votes; - } - - Ballot[] public ballots; - - string[][] public choices; - - Result[] internal results; - - uint256[][] public resultStorage; - - mapping(address => mapping(uint32 => Grants)) internal delegates; // proxy => tag => voters - - mapping(address => mapping(uint32 => address)) internal proxyVoters; // voter => tag => proxy - - constructor( - IERC20Metadata _DPS - ) { - require(address(_DPS) != address(0), "Vote: DPS address is zero."); - - DPS = _DPS; - } - - function addTag(string memory name) external onlyOwner { - tags.push(name); - } - - function getTags() external view returns(string[] memory){ - return tags; - } - - function createBallot(string memory subject, uint32 tagIndex, string[] memory _choices) external onlyOwner { - require(tags.length > tagIndex, 'Voting: Tag index is too high.'); - - ballots.push(Ballot(subject, false, tagIndex)); - choices.push(_choices); - results.push(); - resultStorage.push(); - for(uint i = 0; i < _choices.length; i++){ - resultStorage[resultStorage.length - 1].push(0); - } - } - - function getBallots() external view returns(Ballot[] memory) { - return ballots; - } - - function getChoices() external view returns(string[][] memory) { - return choices; - } - - function getAllResults() external view returns (uint256[][] memory) { - return resultStorage; - } - - function getBallotResult(uint256 ballotIndex) external view returns(uint256[] memory) { - require(ballots.length > ballotIndex, 'Voting: Ballot index is too high.'); - return resultStorage[ballotIndex]; - } - - function vote(uint32 ballotIndex, uint32 choiceIndex) external { - require(ballots.length > ballotIndex, 'Voting: Ballot index is too high.'); - require(!ballots[ballotIndex].closed, 'Voting: Ballot is closed.'); - require(choices[ballotIndex].length > choiceIndex, 'Voting: Choice index is too high.'); - - require(proxyVoters[msg.sender][ballots[ballotIndex].tagIndex] == address(0), 'Voting: Vote is delegated.'); // Verify that voter has not granted proxy to somebody. - require(DPS.balanceOf(msg.sender) >= 25e3 * 1e18, 'Voting: Not enough DPS to vote.'); // 25k DPS limit - - if(!results[ballotIndex].votes[msg.sender].hasVoted) { - results[ballotIndex].votes[msg.sender].hasVoted = true; - results[ballotIndex].voters.push(msg.sender); - } - - results[ballotIndex].votes[msg.sender].choiceIndex = choiceIndex; - } - - function totalProxyAmount(address voter, uint32 tagIndex) public view returns (uint256) { - require(tags.length > tagIndex, 'Voting: Tag index is too high'); - uint256 total = DPS.balanceOf(voter); - for(uint32 i = 0; i < delegates[voter][tagIndex].grantCount; i++) { - total += DPS.balanceOf(delegates[voter][tagIndex].indexVoter[i]); - } - return total; - } - - function closeBallot(uint32 ballotIndex) external onlyOwner { - require(ballots.length > ballotIndex, 'Voting: Ballot index is too high.'); - require(!ballots[ballotIndex].closed, 'Voting: Ballot already closed.'); - - ballots[ballotIndex].closed = true; - - Result storage result = results[ballotIndex]; - uint32 tagIndex = ballots[ballotIndex].tagIndex; - - for(uint i = 0; i < result.voters.length; i++) { // if A has granted proxy to B - address voter = result.voters[i]; - resultStorage[ballotIndex][result.votes[voter].choiceIndex] += totalProxyAmount(voter, tagIndex); - } - } - - function grantProxy(address to, uint32 tagIndex) external { - require(tags.length > tagIndex, 'Voting: Tag index is too high'); - require(DPS.balanceOf(to) >= 25e3 * 1e18 || to == address(0), 'Voting: Proxy has not enough DPS.'); - - if(proxyVoters[msg.sender][tagIndex] != address(0)) { - Grants storage formerDelegateGrants = delegates[proxyVoters[msg.sender][tagIndex]][tagIndex]; - uint32 senderIndex = formerDelegateGrants.voterIndex[msg.sender]; - formerDelegateGrants.indexVoter[senderIndex] = formerDelegateGrants.indexVoter[formerDelegateGrants.grantCount - 1]; - formerDelegateGrants.indexVoter[formerDelegateGrants.grantCount - 1] = address(0); - formerDelegateGrants.voterIndex[msg.sender] = 0; - formerDelegateGrants.grantCount--; - } - - proxyVoters[msg.sender][tagIndex] = to; - - if(to != address(0)) { - Grants storage newDelegateGrants = delegates[to][tagIndex]; - newDelegateGrants.voterIndex[msg.sender] = newDelegateGrants.grantCount; - newDelegateGrants.indexVoter[newDelegateGrants.grantCount] = msg.sender; - newDelegateGrants.grantCount++; - } - } -} diff --git a/contracts/VotingProxy.sol b/contracts/VotingProxy.sol new file mode 100644 index 0000000..f530105 --- /dev/null +++ b/contracts/VotingProxy.sol @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; +import "./factories/BallotFactory.sol"; + +contract VotingProxy is Ownable{ + IERC20Metadata public immutable DPS; + BallotFactory public ballotFactory; + + struct Grants { + mapping(address => uint32) voterIndex; + mapping(uint32 => address) indexVoter; + uint32 grantCount; + } + + mapping(address => mapping(uint32 => Grants)) internal delegates; // proxy => tag => voters + + mapping(address => mapping(uint32 => address)) internal proxyVoters; // voter => tag => proxy + + constructor(IERC20Metadata _DPS) { + require(address(_DPS) != address(0), "Vote: DPS address is zero."); + DPS = _DPS; + } + + function setBallotFactory(BallotFactory _ballotFactory) external onlyOwner { + ballotFactory = _ballotFactory; + } + + function grantProxy(address to, uint32 tagIndex) external { + require(ballotFactory.getTags().length > tagIndex, 'Voting: Tag index is too high'); + require(DPS.balanceOf(to) >= 25e3 * 1e18 || to == address(0), 'Voting: Proxy has not enough DPS.'); + + if(proxyVoters[msg.sender][tagIndex] != address(0)) { + Grants storage formerDelegateGrants = delegates[proxyVoters[msg.sender][tagIndex]][tagIndex]; + uint32 senderIndex = formerDelegateGrants.voterIndex[msg.sender]; + formerDelegateGrants.indexVoter[senderIndex] = formerDelegateGrants.indexVoter[formerDelegateGrants.grantCount - 1]; + formerDelegateGrants.indexVoter[formerDelegateGrants.grantCount - 1] = address(0); + formerDelegateGrants.voterIndex[msg.sender] = 0; + formerDelegateGrants.grantCount--; + } + + proxyVoters[msg.sender][tagIndex] = to; + + if(to != address(0)) { + Grants storage newDelegateGrants = delegates[to][tagIndex]; + newDelegateGrants.voterIndex[msg.sender] = newDelegateGrants.grantCount; + newDelegateGrants.indexVoter[newDelegateGrants.grantCount] = msg.sender; + newDelegateGrants.grantCount++; + } + } + + function proxyAmount(address voter, uint32 tagIndex) public view returns (uint256) { + require(ballotFactory.getTags().length > tagIndex, 'Voting: Tag index is too high'); + uint256 total; + for(uint32 i = 0; i < delegates[voter][tagIndex].grantCount; i++) { + total += DPS.balanceOf(delegates[voter][tagIndex].indexVoter[i]); + } + return total; + } + + function hasDelegated(address voter, uint32 tagIndex) external view returns (bool) { + return proxyVoters[voter][tagIndex] != address(0); + } +} diff --git a/contracts/factories/BallotFactory.sol b/contracts/factories/BallotFactory.sol new file mode 100644 index 0000000..6fd9591 --- /dev/null +++ b/contracts/factories/BallotFactory.sol @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/access/Ownable.sol"; + +contract BallotFactory is Ownable { + address[] public ballotAddresses; + address public masterAddress; + + string[] public tags; + + constructor(address _masterAddress){ + require(_masterAddress != address(0), 'BallotFactory: Master address should not be zero address'); + masterAddress = _masterAddress; + } + + function createBallot(string memory subject, uint32 tagIndex, string[] memory _choices) external onlyOwner returns(address){ + require(tags.length > tagIndex, 'BallotFactory: Tag index is too high.'); + + address cloneAddress; + + address master = masterAddress; + + assembly { + let ptr := mload(0x40) + mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000) + mstore(add(ptr, 0x14), shl(0x60, master)) + mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000) + cloneAddress := create(0, ptr, 0x37) + } + + require(cloneAddress != address(0), "BallotFactory: Ballot clone creation failed"); + + (bool success, ) = cloneAddress.call(abi.encodeWithSignature("init(string,uint32,string[])", subject, tagIndex, _choices)); + require(success, "BallotFactory: Ballot clone initialization failed."); + + ballotAddresses.push(cloneAddress); + + return cloneAddress; + } + + function setMasterAddress(address newAddress) external onlyOwner { + require(masterAddress != address(0), 'BallotFactory: Master address should not be zero address'); + masterAddress = newAddress; + } + + function getBallots() external view returns (address[] memory) { + return ballotAddresses; + } + + function getTags() external view returns(string[] memory) { + return tags; + } + + function addTag(string memory name) external onlyOwner { + tags.push(name); + } +} diff --git a/contracts/testing/ExposedBallot.sol b/contracts/testing/ExposedBallot.sol new file mode 100644 index 0000000..dbf3412 --- /dev/null +++ b/contracts/testing/ExposedBallot.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import "../Ballot.sol"; + +contract ExposedBallot is Ballot { + + constructor(IERC20Metadata _DPS, VotingProxy _proxy) Ballot(_DPS, _proxy) {} + + struct ResultSample { + address voter; + Vote vote; + } + + function _results() external view returns(ResultSample[] memory) { + ResultSample[] memory samples = new ResultSample[](voters.length); + for(uint i = 0; i < voters.length; i++) { + samples[i] = ResultSample(voters[i], votes[voters[i]]); + } + return samples; + } + + +} diff --git a/contracts/testing/ExposedVoting.sol b/contracts/testing/ExposedVoting.sol deleted file mode 100644 index 928a865..0000000 --- a/contracts/testing/ExposedVoting.sol +++ /dev/null @@ -1,33 +0,0 @@ -pragma solidity ^0.8.0; - -import "../Voting.sol"; - -contract ExposedVoting is Voting { - - constructor(IERC20Metadata _DPS) Voting(_DPS) {} - - struct ResultSample { - address voter; - Vote vote; - } - - function _results(uint256 index) external view returns(ResultSample[] memory) { - ResultSample[] memory samples = new ResultSample[](results[index].voters.length); - for(uint i = 0; i < results[index].voters.length; i++) { - samples[i] = ResultSample(results[index].voters[i], results[index].votes[results[index].voters[i]]); - } - return samples; - } - - function _delegates(address to, uint32 tagIndex) external view returns(address[] memory) { - address[] memory proxies = new address[](delegates[to][tagIndex].grantCount); - for(uint32 i = 0; i < delegates[to][tagIndex].grantCount; i++) { - proxies[i] = delegates[to][tagIndex].indexVoter[i]; - } - return proxies; - } - - function _proxyVoters(address from, uint32 tagIndex) external view returns(address) { - return proxyVoters[from][tagIndex]; - } -} diff --git a/contracts/testing/ExposedVotingProxy.sol b/contracts/testing/ExposedVotingProxy.sol new file mode 100644 index 0000000..1e2ec97 --- /dev/null +++ b/contracts/testing/ExposedVotingProxy.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import "../VotingProxy.sol"; + +contract ExposedVotingProxy is VotingProxy{ + constructor(IERC20Metadata _DPS) VotingProxy(_DPS) {} + + function _delegates(address to, uint32 tagIndex) external view returns(address[] memory) { + address[] memory proxies = new address[](delegates[to][tagIndex].grantCount); + for(uint32 i = 0; i < delegates[to][tagIndex].grantCount; i++) { + proxies[i] = delegates[to][tagIndex].indexVoter[i]; + } + return proxies; + } + + function _proxyVoters(address from, uint32 tagIndex) external view returns(address) { + return proxyVoters[from][tagIndex]; + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 849c6c1..873126d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,6 +15,7 @@ specifiers: '@nomiclabs/hardhat-etherscan': 3.0.3 '@nomiclabs/hardhat-waffle': 2.0.3 '@openzeppelin/contracts': ^4.5.0 + '@optionality.io/clone-factory': ^0.2.1 '@swc/core': ^1.2.165 '@trivago/prettier-plugin-sort-imports': ^3.2.0 '@typechain/ethers-v5': ^10.0.0 @@ -46,6 +47,9 @@ specifiers: typechain: ^8.0.0 typescript: ^4.6.3 +dependencies: + '@optionality.io/clone-factory': 0.2.1 + devDependencies: '@chainlink/contracts': 0.4.0 '@deepsquare/prettier-config': 1.0.3_f567791dde62d616184f017118cbdb83 @@ -1003,6 +1007,12 @@ packages: resolution: {integrity: sha512-fdkzKPYMjrRiPK6K4y64e6GzULR7R7RwxSigHS8DDp7aWDeoReqsQI+cxHV1UuhAqX69L1lAaWDxenfP+xiqzA==} dev: true + /@optionality.io/clone-factory/0.2.1: + resolution: {integrity: sha512-1cBrIaMwaHcR0jpFuSQKHdwC6l2hVDvUOc97QKiXxCZeLLcKbLiwFUTKqIiBMx0Q77dFS6o0xlOMupzF83f3VA==} + dependencies: + r2pipe-promise: 1.6.1 + dev: false + /@resolver-engine/core/0.3.3: resolution: {integrity: sha512-eB8nEbKDJJBi5p5SrvrvILn4a0h42bKtbCTri3ZxCGt6UvoQyp7HnGOfki944bUjBSHKK3RvgfViHn+kqdXtnQ==} dependencies: @@ -1765,6 +1775,18 @@ packages: acorn: 8.7.0 dev: true + /acorn-loose/6.1.0: + resolution: {integrity: sha512-FHhXoiF0Uch3IqsrnPpWwCtiv5PYvipTpT1k9lDMgQVVYc9iDuSl5zdJV358aI8twfHCYMFBRVYvAVki9wC/ng==} + engines: {node: '>=0.4.0'} + dependencies: + acorn: 6.4.2 + dev: false + + /acorn-walk/6.2.0: + resolution: {integrity: sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==} + engines: {node: '>=0.4.0'} + dev: false + /acorn-walk/8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} @@ -1774,7 +1796,6 @@ packages: resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==} engines: {node: '>=0.4.0'} hasBin: true - dev: true /acorn/8.7.0: resolution: {integrity: sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==} @@ -2553,7 +2574,6 @@ packages: /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true /base-x/3.0.9: resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} @@ -2666,7 +2686,6 @@ packages: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true /braces/2.3.2: resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} @@ -3221,7 +3240,6 @@ packages: /concat-map/0.0.1: resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} - dev: true /concat-stream/1.6.2: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} @@ -3294,7 +3312,6 @@ packages: /core-util-is/1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: true /cors/2.8.5: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} @@ -3752,6 +3769,16 @@ packages: once: 1.4.0 dev: true + /enhanced-resolve/2.3.0: + resolution: {integrity: sha1-oRXDJQS2MC6Fp2Jp16V8zdli41k=} + engines: {node: '>=0.6'} + dependencies: + graceful-fs: 4.2.10 + memory-fs: 0.3.0 + object-assign: 4.1.1 + tapable: 0.2.9 + dev: false + /enquirer/2.3.6: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} engines: {node: '>=8.6'} @@ -3769,7 +3796,6 @@ packages: hasBin: true dependencies: prr: 1.0.1 - dev: true /error-ex/1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -5064,7 +5090,6 @@ packages: /fs.realpath/1.0.0: resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} - dev: true /fsevents/2.1.3: resolution: {integrity: sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==} @@ -5239,7 +5264,7 @@ packages: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.0.4 + minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 dev: true @@ -5264,7 +5289,6 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true /global-modules/2.0.0: resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} @@ -5371,7 +5395,6 @@ packages: /graceful-fs/4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} - dev: true /growl/1.10.5: resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} @@ -5758,11 +5781,9 @@ packages: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true /inherits/2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true /ini/1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} @@ -6149,7 +6170,6 @@ packages: /isarray/1.0.0: resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=} - dev: true /isexe/2.0.0: resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} @@ -6802,6 +6822,13 @@ packages: safe-buffer: 5.2.1 dev: true + /memory-fs/0.3.0: + resolution: {integrity: sha1-e8xrYp46Q+hx1+Kaymrop/FcuyA=} + dependencies: + errno: 0.1.8 + readable-stream: 2.3.7 + dev: false + /memorystream/0.3.1: resolution: {integrity: sha1-htcJCzDORV1j+64S3aUaR93K+bI=} engines: {node: '>= 0.10.0'} @@ -6944,7 +6971,6 @@ packages: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 - dev: true /minimatch/4.2.1: resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==} @@ -7281,7 +7307,6 @@ packages: /object-assign/4.1.1: resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=} engines: {node: '>=0.10.0'} - dev: true /object-copy/0.1.0: resolution: {integrity: sha1-fn2Fi3gb18mRpBupde04EnVOmYw=} @@ -7391,7 +7416,6 @@ packages: resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} dependencies: wrappy: 1.0.2 - dev: true /onetime/2.0.1: resolution: {integrity: sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=} @@ -7643,7 +7667,6 @@ packages: /path-is-absolute/1.0.1: resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} engines: {node: '>=0.10.0'} - dev: true /path-is-inside/1.0.2: resolution: {integrity: sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=} @@ -7809,7 +7832,6 @@ packages: /process-nextick-args/2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: true /process/0.11.10: resolution: {integrity: sha1-czIwDoQBYb2j5podHZGn1LwW8YI=} @@ -7845,7 +7867,6 @@ packages: /prr/1.0.1: resolution: {integrity: sha1-0/wRS6BplaRexok/SEzrHXj19HY=} - dev: true /pseudomap/1.0.2: resolution: {integrity: sha1-8FKijacOYYkX7wqKw0wa5aaChrM=} @@ -7964,6 +7985,19 @@ packages: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true + /r2pipe-promise/1.6.1: + resolution: {integrity: sha512-wpIBh4OCKdthQNmd4I6GPIN1MP+L/FytvOTBXUqskNEXvKE8Jwe15/xogDdc483exiRwZFF62WYf0h0R+WZM6Q==} + dependencies: + r2pipe: 2.8.0 + dev: false + + /r2pipe/2.8.0: + resolution: {integrity: sha512-AgIEGHAlOSRFq52N83def7ikaTS/C+uPqQFbjYb2l8RVc4GnzlLHIpD9XShQoe/C7CawPeA21vX9Sng7GQbngQ==} + engines: {iojs: '>= 1.0.0', node: '>= 4.2.0'} + dependencies: + tern: 0.24.3 + dev: false + /randombytes/2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: @@ -8038,7 +8072,6 @@ packages: safe-buffer: 5.1.2 string_decoder: 1.1.1 util-deprecate: 1.0.2 - dev: true /readable-stream/3.6.0: resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} @@ -8247,6 +8280,11 @@ packages: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} dev: true + /resolve-from/2.0.0: + resolution: {integrity: sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=} + engines: {node: '>=0.10.0'} + dev: false + /resolve-from/3.0.0: resolution: {integrity: sha1-six699nWiBvItuZTM17rywoYh0g=} engines: {node: '>=4'} @@ -8370,7 +8408,6 @@ packages: /safe-buffer/5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: true /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} @@ -8991,7 +9028,6 @@ packages: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 - dev: true /string_decoder/1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} @@ -9147,6 +9183,11 @@ packages: string-width: 3.1.0 dev: true + /tapable/0.2.9: + resolution: {integrity: sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A==} + engines: {node: '>=0.6'} + dev: false + /tape/4.15.1: resolution: {integrity: sha512-k7F5pyr91n9D/yjSJwbLLYDCrTWXxMSXbbmHX2n334lSIc2rxeXyFkaBv4UuUd2gBYMrAOalPutAiCxC6q1qbw==} hasBin: true @@ -9181,6 +9222,19 @@ packages: yallist: 3.1.1 dev: true + /tern/0.24.3: + resolution: {integrity: sha512-Z8uvtdWIlFn1GWy0HW5FhZ8VDryZwoJUdnjZU25C7/PBOltLIn1uv+WF3rVq6S1761YbsmbZYRP/l0ZJBCkvrw==} + hasBin: true + dependencies: + acorn: 6.4.2 + acorn-loose: 6.1.0 + acorn-walk: 6.2.0 + enhanced-resolve: 2.3.0 + glob: 7.2.0 + minimatch: 3.1.2 + resolve-from: 2.0.0 + dev: false + /test-value/2.1.0: resolution: {integrity: sha1-Edpv9nDzRxpztiXKTz/c97t0gpE=} engines: {node: '>=0.10.0'} @@ -9691,7 +9745,6 @@ packages: /util-deprecate/1.0.2: resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} - dev: true /util.promisify/1.1.1: resolution: {integrity: sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==} @@ -10452,7 +10505,6 @@ packages: /wrappy/1.0.2: resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} - dev: true /write/1.0.3: resolution: {integrity: sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==} diff --git a/test/Ballot.spec.ts b/test/Ballot.spec.ts new file mode 100644 index 0000000..284393e --- /dev/null +++ b/test/Ballot.spec.ts @@ -0,0 +1,123 @@ +import { expect } from 'chai'; +import { BigNumber } from '@ethersproject/bignumber'; +import { parseUnits } from '@ethersproject/units'; +import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { ZERO_ADDRESS } from '../lib/constants'; +import { + BallotFactory, + BallotFactory__factory, + DeepSquare, + ExposedBallot, + ExposedBallot__factory, + ExposedVotingProxy, + ExposedVotingProxy__factory, +} from '../typings'; +import { ERC20Agent } from './testing/ERC20Agent'; +import setup from './testing/setup'; + +describe.only('Ballot', async () => { + let owner: SignerWithAddress; + let accounts: SignerWithAddress[]; + let DPS: DeepSquare; + let ballot: ExposedBallot; + let agentDPS: ERC20Agent; + let votingProxy: ExposedVotingProxy; + let ballotMaster: ExposedBallot; + let ballotFactory: BallotFactory; + + beforeEach(async () => { + ({ owner, accounts, DPS, agentDPS } = await setup()); + votingProxy = await new ExposedVotingProxy__factory(owner).deploy(DPS.address); + ballotMaster = await new ExposedBallot__factory(owner).deploy(DPS.address, votingProxy.address); + ballotFactory = await new BallotFactory__factory(owner).deploy(ballotMaster.address); + await votingProxy.setBallotFactory(ballotFactory.address); + }); + + describe('constructor', () => { + it('should revert if the DPS contract is the zero address', async () => { + await expect(new ExposedBallot__factory(owner).deploy(ZERO_ADDRESS, votingProxy.address)).to.be.revertedWith( + 'Vote: DPS address is zero.', + ); + }); + }); + + describe('closeBallot', () => { + beforeEach(async () => { + await ballotFactory.addTag('foo'); + await ballotFactory.createBallot('bar', BigNumber.from(0), ['baz', 'qux']); + // fetch created ballot + }); + + it('should throw if ballot does not exist', async () => { + await expect(ballot.closeBallot()).to.revertedWith('Voting: Ballot index is too high.'); + }); + it('should close the ballot', async () => { + await ballot.closeBallot(); + expect(await ballot.closed()).to.deep.equals(true); + }); + }); + + describe('vote', () => { + beforeEach(async () => { + await ballotFactory.addTag('foo'); + await ballotFactory.createBallot('bar', BigNumber.from(0), ['baz', 'qux']); + // fetch created ballot + }); + + it('should throw if ballot does not exist', async () => { + await expect(ballot.connect(accounts[0]).vote(BigNumber.from(0))).to.revertedWith( + 'Voting: Ballot index is too high.', + ); + }); + it('should throw if ballot is closed', async () => { + await ballot.closeBallot(); + await expect(ballot.connect(accounts[0]).vote(BigNumber.from(0))).to.revertedWith('Voting: Ballot is closed.'); + }); + it('should throw if proposal does not exist', async () => { + await expect(ballot.connect(accounts[0]).vote(BigNumber.from(2))).to.revertedWith( + 'Voting: Choice index is too high.', + ); + }); + it('should throw if voter has granted proxy on the tag', async () => { + await agentDPS.transfer(accounts[1], 25000, 18); + await votingProxy.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0)); + await expect(ballot.connect(accounts[0]).vote(BigNumber.from(0))).to.revertedWith('Voting: Vote is delegated.'); + }); + it('should throw if voter has less than 25k DPS', async () => { + await expect(ballot.connect(accounts[0]).vote(BigNumber.from(0))).to.revertedWith( + 'Voting: Not enough DPS to vote.', + ); + }); + it('should vote', async () => { + await agentDPS.transfer(accounts[0], 25000, 18); + await ballot.connect(accounts[0]).vote(BigNumber.from(0)); + expect(await ballot._results()).to.deep.equals([accounts[0].address, [0, true]]); // How can we check private state variable values? + }); + }); + + describe('closeBallot', async () => { + it('should throw of ballot does not exist', async () => { + await expect(ballot.closeBallot()).to.revertedWith('Voting: Ballot index is too high.'); + }); + it('should throw if ballot is not closed', async () => { + await ballotFactory.addTag('foo'); + await ballotFactory.createBallot('bar', BigNumber.from(0), ['baz', 'qux']); + // fetch created ballot + await ballot.closeBallot(); + await expect(ballot.closeBallot()).to.revertedWith('Voting: Ballot already closed.'); + }); + it('should show results', async () => { + await ballotFactory.addTag('foo'); + await ballotFactory.createBallot('bar', BigNumber.from(0), ['baz', 'qux']); + // fetch created ballot + await agentDPS.transfer(accounts[0], 25000, 18); + await agentDPS.transfer(accounts[1], 25000, 18); + await agentDPS.transfer(accounts[2], 25000, 18); + await votingProxy.connect(accounts[2]).grantProxy(accounts[1].address, BigNumber.from(0)); + await ballot.connect(accounts[0]).vote(BigNumber.from(0)); + await ballot.connect(accounts[1]).vote(BigNumber.from(1)); + await ballot.closeBallot(); + expect(await ballot.getResults()).to.deep.equals([parseUnits('25000', 18), parseUnits('50000', 18)]); + }); + }); +}); diff --git a/test/BallotFactory.spec.ts b/test/BallotFactory.spec.ts new file mode 100644 index 0000000..8fc0b09 --- /dev/null +++ b/test/BallotFactory.spec.ts @@ -0,0 +1,65 @@ +import { expect } from 'chai'; +import { BigNumber } from '@ethersproject/bignumber'; +import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { ZERO_ADDRESS } from '../lib/constants'; +import { + Ballot, Ballot__factory, + BallotFactory, BallotFactory__factory, + DeepSquare, + ExposedBallot, ExposedBallot__factory, + ExposedVoting, + ExposedVoting__factory, + ExposedVotingProxy, ExposedVotingProxy__factory +} from '../typings'; +import { ERC20Agent } from './testing/ERC20Agent'; +import setup from './testing/setup'; + +describe.only('Ballot', async () => { + let owner: SignerWithAddress; + let accounts: SignerWithAddress[]; + let DPS: DeepSquare; + let ballot: ExposedBallot; + let agentDPS: ERC20Agent; + let votingProxy: ExposedVotingProxy; + let ballotMaster: ExposedBallot; + let ballotFactory: BallotFactory; + + beforeEach(async () => { + ({ owner, accounts, DPS, agentDPS } = await setup()); + votingProxy = await new ExposedVotingProxy__factory(owner).deploy(DPS.address); + ballotMaster = await new ExposedBallot__factory(owner).deploy(DPS.address, votingProxy.address); + ballotFactory = await new BallotFactory__factory(owner).deploy(ballotMaster.address); + await votingProxy.setBallotFactory(ballotFactory.address); + ballot = await ballotFactory.createBallot(); + }); + + describe('constructor', () => { + it('should revert if the DPS contract is the zero address', async () => { + await expect(new ExposedVoting__factory(owner).deploy(ZERO_ADDRESS)).to.be.revertedWith( + 'Vote: DPS address is zero.', + ); + }); + }); + + describe('addTag', () => { + it('should add a tag to the list', async () => { + await ballot.addTag('foo'); + await ballot.addTag('bar'); + expect(await ballot.getTags()).to.deep.equals(['foo', 'bar']); + }); + }); + + describe('createBallot', () => { + it('should throw if tag does not exist', async () => { + await expect(ballot.createBallot('foo', BigNumber.from(1), ['bar', 'baz'])).to.revertedWith( + 'Voting: Tag index is too high.', + ); + }); + it('should create a ballot', async () => { + await ballot.addTag('foo'); + await ballot.createBallot('bar', BigNumber.from(0), ['baz', 'qux']); + expect(await ballot.getBallots()).to.deep.equals([['bar', false, 0]]); + expect(await ballot.getChoices()).to.deep.equals([['baz', 'qux']]); + }); + }); +}); diff --git a/test/Voting.spec.ts b/test/Voting.spec.ts deleted file mode 100644 index d3f95c6..0000000 --- a/test/Voting.spec.ts +++ /dev/null @@ -1,189 +0,0 @@ -import { expect } from 'chai'; -import { BigNumber } from '@ethersproject/bignumber'; -import { parseUnits } from '@ethersproject/units'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; -import { ZERO_ADDRESS } from '../lib/constants'; -import { DeepSquare, ExposedVoting, ExposedVoting__factory } from '../typings'; -import { ERC20Agent } from './testing/ERC20Agent'; -import setup from './testing/setup'; - -describe.only('Voting', async () => { - let owner: SignerWithAddress; - let accounts: SignerWithAddress[]; - let DPS: DeepSquare; - let Voting: ExposedVoting; - let agentDPS: ERC20Agent; - - beforeEach(async () => { - ({ owner, accounts, DPS, agentDPS } = await setup()); - - Voting = await new ExposedVoting__factory(owner).deploy(DPS.address); - }); - - describe('constructor', () => { - it('should revert if the DPS contract is the zero address', async () => { - await expect(new ExposedVoting__factory(owner).deploy(ZERO_ADDRESS)).to.be.revertedWith( - 'Vote: DPS address is zero.', - ); - }); - }); - - describe('addTag', () => { - it('should add a tag to the list', async () => { - await Voting.addTag('foo'); - await Voting.addTag('bar'); - expect(await Voting.getTags()).to.deep.equals(['foo', 'bar']); - }); - }); - - describe('createBallot', () => { - it('should throw if tag does not exist', async () => { - await expect(Voting.createBallot('foo', BigNumber.from(1), ['bar', 'baz'])).to.revertedWith( - 'Voting: Tag index is too high.', - ); - }); - it('should create a ballot', async () => { - await Voting.addTag('foo'); - await Voting.createBallot('bar', BigNumber.from(0), ['baz', 'qux']); - expect(await Voting.getBallots()).to.deep.equals([['bar', false, 0]]); - expect(await Voting.getChoices()).to.deep.equals([['baz', 'qux']]); - }); - }); - - describe('closeBallot', () => { - beforeEach(async () => { - await Voting.addTag('foo'); - await Voting.createBallot('bar', BigNumber.from(0), ['baz', 'qux']); - }); - - it('should throw if ballot does not exist', async () => { - await expect(Voting.closeBallot(BigNumber.from(1))).to.revertedWith('Voting: Ballot index is too high.'); - }); - it('should close the ballot', async () => { - await Voting.closeBallot(BigNumber.from(0)); - expect(await Voting.getBallots()).to.deep.equals([['bar', true, 0]]); - }); - }); - - describe('vote', () => { - beforeEach(async () => { - await Voting.addTag('foo'); - await Voting.createBallot('bar', BigNumber.from(0), ['baz', 'qux']); - }); - - it('should throw if ballot does not exist', async () => { - await expect(Voting.connect(accounts[0]).vote(BigNumber.from(1), BigNumber.from(0))).to.revertedWith( - 'Voting: Ballot index is too high.', - ); - }); - it('should throw if ballot is closed', async () => { - await Voting.closeBallot(BigNumber.from(0)); - await expect(Voting.connect(accounts[0]).vote(BigNumber.from(0), BigNumber.from(0))).to.revertedWith( - 'Voting: Ballot is closed.', - ); - }); - it('should throw if proposal does not exist', async () => { - await expect(Voting.connect(accounts[0]).vote(BigNumber.from(0), BigNumber.from(2))).to.revertedWith( - 'Voting: Choice index is too high.', - ); - }); - it('should throw if voter has granted proxy on the tag', async () => { - await agentDPS.transfer(accounts[1], 25000, 18); - await Voting.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0)); - await expect(Voting.connect(accounts[0]).vote(BigNumber.from(0), BigNumber.from(0))).to.revertedWith( - 'Voting: Vote is delegated.', - ); - }); - it('should throw if voter has less than 25k DPS', async () => { - await expect(Voting.connect(accounts[0]).vote(BigNumber.from(0), BigNumber.from(0))).to.revertedWith( - 'Voting: Not enough DPS to vote.', - ); - }); - it('should vote', async () => { - await agentDPS.transfer(accounts[0], 25000, 18); - await Voting.connect(accounts[0]).vote(BigNumber.from(0), BigNumber.from(0)); - expect(await Voting._results(BigNumber.from(0))).to.deep.equals([[accounts[0].address, [0, true]]]); // How can we check private state variable values? - }); - }); - - describe('grantProxy', () => { - it('should throw if tag does not exist', async () => { - await expect(Voting.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0))).to.revertedWith( - 'Voting: Tag index is too high', - ); - }); - it('should throw if delegate has less than 25k DPS', async () => { - await Voting.addTag('foo'); - await expect(Voting.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0))).to.revertedWith( - 'Voting: Proxy has not enough DPS.', - ); - }); - it('should register delegation', async () => { - await Voting.addTag('foo'); - await agentDPS.transfer(accounts[1], 25000, 18); - await Voting.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0)); - expect(await Voting._delegates(accounts[1].address, BigNumber.from(0))).to.deep.equals([accounts[0].address]); - expect(await Voting._proxyVoters(accounts[0].address, BigNumber.from(0))).to.equals(accounts[1].address); - }); - it('should change delegation', async () => { - await Voting.addTag('foo'); - await agentDPS.transfer(accounts[1], 25000, 18); - await Voting.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0)); - await agentDPS.transfer(accounts[2], 25000, 18); - await Voting.connect(accounts[0]).grantProxy(accounts[2].address, BigNumber.from(0)); - expect(await Voting._delegates(accounts[1].address, BigNumber.from(0))).to.deep.equals([]); - expect(await Voting._delegates(accounts[2].address, BigNumber.from(0))).to.deep.equals([accounts[0].address]); - expect(await Voting._proxyVoters(accounts[0].address, BigNumber.from(0))).to.equals(accounts[2].address); - }); - it('should remove delegation', async () => { - await Voting.addTag('foo'); - await agentDPS.transfer(accounts[1], 25000, 18); - await Voting.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0)); - await Voting.connect(accounts[0]).grantProxy(ZERO_ADDRESS, BigNumber.from(0)); - expect(await Voting._delegates(accounts[1].address, BigNumber.from(0))).to.deep.equals([]); - expect(await Voting._proxyVoters(accounts[0].address, BigNumber.from(0))).to.equals(ZERO_ADDRESS); - }); - }); - - describe('totalProxyAmount', () => { - it('should throw if tag does not exist', async () => { - await expect(Voting.totalProxyAmount(accounts[1].address, BigNumber.from(0))).to.revertedWith( - 'Voting: Tag index is too high', - ); - }); - it('should returns total proxy vote power', async () => { - await Voting.addTag('foo'); - await agentDPS.transfer(accounts[0], 25000, 18); - await agentDPS.transfer(accounts[1], 25000, 18); - await Voting.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0)); - expect(await Voting.totalProxyAmount(accounts[1].address, BigNumber.from(0))).to.equals(parseUnits('50000', 18)); - }); - }); - - describe('closeBallot', async () => { - it('should throw of ballot does not exist', async () => { - await expect(Voting.closeBallot(BigNumber.from(0))).to.revertedWith('Voting: Ballot index is too high.'); - }); - it('should throw if ballot is not closed', async () => { - await Voting.addTag('foo'); - await Voting.createBallot('bar', BigNumber.from(0), ['baz', 'qux']); - await Voting.closeBallot(BigNumber.from(0)); - await expect(Voting.closeBallot(BigNumber.from(0))).to.revertedWith('Voting: Ballot already closed.'); - }); - it('should show results', async () => { - await Voting.addTag('foo'); - await Voting.createBallot('bar', BigNumber.from(0), ['baz', 'qux']); - await agentDPS.transfer(accounts[0], 25000, 18); - await agentDPS.transfer(accounts[1], 25000, 18); - await agentDPS.transfer(accounts[2], 25000, 18); - await Voting.connect(accounts[2]).grantProxy(accounts[1].address, BigNumber.from(0)); - await Voting.connect(accounts[0]).vote(BigNumber.from(0), BigNumber.from(0)); - await Voting.connect(accounts[1]).vote(BigNumber.from(0), BigNumber.from(1)); - await Voting.closeBallot(BigNumber.from(0)); - expect(await Voting.getBallotResult(BigNumber.from(0))).to.deep.equals([ - parseUnits('25000', 18), - parseUnits('50000', 18), - ]); - }); - }); -}); diff --git a/test/VotingProxy.spec.ts b/test/VotingProxy.spec.ts new file mode 100644 index 0000000..3e41447 --- /dev/null +++ b/test/VotingProxy.spec.ts @@ -0,0 +1,109 @@ +import { expect } from 'chai'; +import { BigNumber } from '@ethersproject/bignumber'; +import { parseUnits } from '@ethersproject/units'; +import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { ZERO_ADDRESS } from '../lib/constants'; +import { + Ballot, + Ballot__factory, + BallotFactory, + BallotFactory__factory, + DeepSquare, + ExposedVotingProxy, + ExposedVotingProxy__factory, +} from '../typings'; +import { ERC20Agent } from './testing/ERC20Agent'; +import setup from './testing/setup'; + +describe.only('Voting', async () => { + let owner: SignerWithAddress; + let accounts: SignerWithAddress[]; + let DPS: DeepSquare; + let agentDPS: ERC20Agent; + let votingProxy: ExposedVotingProxy; + let ballotMaster: Ballot; + let ballotFactory: BallotFactory; + + beforeEach(async () => { + ({ owner, accounts, DPS, agentDPS } = await setup()); + votingProxy = await new ExposedVotingProxy__factory(owner).deploy(DPS.address); + ballotMaster = await new Ballot__factory(owner).deploy(DPS.address, votingProxy.address); + ballotFactory = await new BallotFactory__factory(owner).deploy(ballotMaster.address); + }); + + describe('constructor', () => { + it('should revert if the DPS contract is the zero address', async () => { + await expect(new ExposedVotingProxy__factory(owner).deploy(ZERO_ADDRESS)).to.be.revertedWith( + 'Vote: DPS address is zero.', + ); + }); + }); + + describe('setBallotFactory', () => { + it('should set the ballot factory address', async () => { + await votingProxy.setBallotFactory(ballotFactory.address); + expect(await votingProxy.ballotFactory()).to.equals(ballotFactory.address); + }); + }); + + describe('grantProxy', () => { + beforeEach(async () => { + await votingProxy.setBallotFactory(ballotFactory.address); + }); + + it('should throw if tag does not exist', async () => { + await expect(votingProxy.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0))).to.revertedWith( + 'Voting: Tag index is too high', + ); + }); + it('should throw if delegate has less than 25k DPS', async () => { + await ballotFactory.addTag('foo'); + await expect(votingProxy.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0))).to.revertedWith( + 'Voting: Proxy has not enough DPS.', + ); + }); + it('should register delegation', async () => { + await ballotFactory.addTag('foo'); + await agentDPS.transfer(accounts[1], 25000, 18); + await votingProxy.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0)); + expect(await votingProxy._delegates(accounts[1].address, BigNumber.from(0))).to.deep.equals([accounts[0].address]); + expect(await votingProxy._proxyVoters(accounts[0].address, BigNumber.from(0))).to.equals(accounts[1].address); + }); + it('should change delegation', async () => { + await ballotFactory.addTag('foo'); + await agentDPS.transfer(accounts[1], 25000, 18); + await votingProxy.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0)); + await agentDPS.transfer(accounts[2], 25000, 18); + await votingProxy.connect(accounts[0]).grantProxy(accounts[2].address, BigNumber.from(0)); + expect(await votingProxy._delegates(accounts[1].address, BigNumber.from(0))).to.deep.equals([]); + expect(await votingProxy._delegates(accounts[2].address, BigNumber.from(0))).to.deep.equals([accounts[0].address]); + expect(await votingProxy._proxyVoters(accounts[0].address, BigNumber.from(0))).to.equals(accounts[2].address); + }); + it('should remove delegation', async () => { + await ballotFactory.addTag('foo'); + await agentDPS.transfer(accounts[1], 25000, 18); + await votingProxy.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0)); + await votingProxy.connect(accounts[0]).grantProxy(ZERO_ADDRESS, BigNumber.from(0)); + expect(await votingProxy._delegates(accounts[1].address, BigNumber.from(0))).to.deep.equals([]); + expect(await votingProxy._proxyVoters(accounts[0].address, BigNumber.from(0))).to.equals(ZERO_ADDRESS); + }); + }); + + describe('proxyAmount', () => { + beforeEach(async () => { + await votingProxy.setBallotFactory(ballotFactory.address); + }); + it('should throw if tag does not exist', async () => { + await expect(votingProxy.proxyAmount(accounts[1].address, BigNumber.from(0))).to.revertedWith( + 'Voting: Tag index is too high', + ); + }); + it('should returns total proxy vote power', async () => { + await ballotFactory.addTag('foo'); + await agentDPS.transfer(accounts[0], 55555, 18); + await agentDPS.transfer(accounts[1], 25000, 18); + await votingProxy.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0)); + expect(await votingProxy.proxyAmount(accounts[1].address, BigNumber.from(0))).to.equals(parseUnits('55555', 18)); + }); + }); +}); diff --git a/typings/factories/contracts/Ballot__factory.ts b/typings/factories/contracts/Ballot__factory.ts new file mode 100644 index 0000000..a7b1396 --- /dev/null +++ b/typings/factories/contracts/Ballot__factory.ts @@ -0,0 +1,300 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { Ballot, BallotInterface } from "../../contracts/Ballot"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IERC20Metadata", + name: "_DPS", + type: "address", + }, + { + internalType: "contract VotingProxy", + name: "_proxy", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + inputs: [], + name: "DPS", + outputs: [ + { + internalType: "contract IERC20Metadata", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "choices", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "closeBallot", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "closed", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getChoices", + outputs: [ + { + internalType: "string[]", + name: "", + type: "string[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getResults", + outputs: [ + { + internalType: "uint256[]", + name: "", + type: "uint256[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "string", + name: "_subject", + type: "string", + }, + { + internalType: "uint32", + name: "_tagIndex", + type: "uint32", + }, + { + internalType: "string[]", + name: "_choices", + type: "string[]", + }, + ], + name: "init", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "proxy", + outputs: [ + { + internalType: "contract VotingProxy", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "resultStorage", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "subject", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "tagIndex", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint32", + name: "choiceIndex", + type: "uint32", + }, + ], + name: "vote", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +]; + +const _bytecode = + "0x60a060405234801561001057600080fd5b50604051620012d2380380620012d283398101604081905261003191610124565b61003a336100bc565b6001600160a01b0382166100945760405162461bcd60e51b815260206004820152601a60248201527f566f74653a204450532061646472657373206973207a65726f2e000000000000604482015260640160405180910390fd5b6001600160a01b03918216608052600180546001600160a01b0319169190921617905561015e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461012157600080fd5b50565b6000806040838503121561013757600080fd5b82516101428161010c565b60208401519092506101538161010c565b809150509250929050565b60805161114a620001886000396000818161021f0152818161055d0152610912015261114a6000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80639094c76311610097578063ec55688911610066578063ec55688914610207578063ef4e06ec1461021a578063f2fde38b14610241578063f6fd7fde1461025457600080fd5b80639094c763146101c457806398c81bbf146101d7578063a97b8b4d146101ec578063c1d1d5c1146101f457600080fd5b806359037b89116100d357806359037b8914610157578063597e1fb514610178578063715018a6146101955780638da5cb5b1461019f57600080fd5b80630a59a98c146100fa5780634717f97c1461011857806349499d861461012d575b600080fd5b610102610267565b60405161010f9190610d26565b60405180910390f35b6101206102f5565b60405161010f9190610d40565b60035461014290610100900463ffffffff1681565b60405163ffffffff909116815260200161010f565b61016a610165366004610d84565b61034d565b60405190815260200161010f565b6003546101859060ff1681565b604051901515815260200161010f565b61019d61036e565b005b6000546001600160a01b03165b6040516001600160a01b03909116815260200161010f565b61019d6101d2366004610db6565b6103ad565b6101df6106d7565b60405161010f9190610dd1565b61019d6107b0565b61019d610202366004610eea565b610a08565b6001546101ac906001600160a01b031681565b6101ac7f000000000000000000000000000000000000000000000000000000000000000081565b61019d61024f366004610fe1565b610a7d565b610102610262366004610d84565b610b15565b600280546102749061100a565b80601f01602080910402602001604051908101604052809291908181526020018280546102a09061100a565b80156102ed5780601f106102c2576101008083540402835291602001916102ed565b820191906000526020600020905b8154815290600101906020018083116102d057829003601f168201915b505050505081565b6060600580548060200260200160405190810160405280929190818152602001828054801561034357602002820191906000526020600020905b81548152602001906001019080831161032f575b5050505050905090565b6005818154811061035d57600080fd5b600091825260209091200154905081565b6000546001600160a01b031633146103a15760405162461bcd60e51b815260040161039890611045565b60405180910390fd5b6103ab6000610b40565b565b60035460ff16156104005760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e000000000000006044820152606401610398565b60045463ffffffff8216106104615760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2043686f69636520696e64657820697320746f6f20686967686044820152601760f91b6064820152608401610398565b600154600354604051632dd7519b60e21b815233600482015261010090910463ffffffff1660248201526001600160a01b039091169063b75d466c9060440160206040518083038186803b1580156104b857600080fd5b505afa1580156104cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f0919061107a565b61053c5760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e0000000000006044820152606401610398565b6040516370a0823160e01b815233600482015269054b40b1f852bda00000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b1580156105a757600080fd5b505afa1580156105bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105df919061109c565b101561062d5760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e006044820152606401610398565b33600090815260076020526040902054640100000000900460ff166106ae57336000818152600760205260408120805464ff0000000019166401000000001790556006805460018101825591527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b03191690911790555b336000908152600760205260409020805463ffffffff191663ffffffff92909216919091179055565b60606004805480602002602001604051908101604052809291908181526020016000905b828210156107a757838290600052602060002001805461071a9061100a565b80601f01602080910402602001604051908101604052809291908181526020018280546107469061100a565b80156107935780601f1061076857610100808354040283529160200191610793565b820191906000526020600020905b81548152906001019060200180831161077657829003601f168201915b5050505050815260200190600101906106fb565b50505050905090565b6000546001600160a01b031633146107da5760405162461bcd60e51b815260040161039890611045565b60035460ff161561082d5760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e00006044820152606401610398565b6003805460ff1916600117905560005b600654811015610a055760006006828154811061085c5761085c6110b5565b60009182526020909120015460015460035460405163c143c6db60e01b81526001600160a01b039384166004820181905261010090920463ffffffff16602482015290935091169063c143c6db9060440160206040518083038186803b1580156108c557600080fd5b505afa1580156108d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fd919061109c565b6040516370a0823160e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561095c57600080fd5b505afa158015610970573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610994919061109c565b61099e91906110e1565b6001600160a01b03821660009081526007602052604090205460058054909163ffffffff169081106109d2576109d26110b5565b9060005260206000200160008282546109eb91906110e1565b909155508291506109fd9050816110f9565b91505061083d565b50565b6000546001600160a01b03163314610a325760405162461bcd60e51b815260040161039890611045565b8251610a45906002906020860190610b90565b506003805464ffffffffff191661010063ffffffff85160260ff19161790558051610a77906004906020840190610c14565b50505050565b6000546001600160a01b03163314610aa75760405162461bcd60e51b815260040161039890611045565b6001600160a01b038116610b0c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610398565b610a0581610b40565b60048181548110610b2557600080fd5b9060005260206000200160009150905080546102749061100a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054610b9c9061100a565b90600052602060002090601f016020900481019282610bbe5760008555610c04565b82601f10610bd757805160ff1916838001178555610c04565b82800160010185558215610c04579182015b82811115610c04578251825591602001919060010190610be9565b50610c10929150610c6d565b5090565b828054828255906000526020600020908101928215610c61579160200282015b82811115610c615782518051610c51918491602090910190610b90565b5091602001919060010190610c34565b50610c10929150610c82565b5b80821115610c105760008155600101610c6e565b80821115610c10576000610c968282610c9f565b50600101610c82565b508054610cab9061100a565b6000825580601f10610cbb575050565b601f016020900490600052602060002090810190610a059190610c6d565b6000815180845260005b81811015610cff57602081850181015186830182015201610ce3565b81811115610d11576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610d396020830184610cd9565b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d7857835183529284019291840191600101610d5c565b50909695505050505050565b600060208284031215610d9657600080fd5b5035919050565b803563ffffffff81168114610db157600080fd5b919050565b600060208284031215610dc857600080fd5b610d3982610d9d565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015610e2657603f19888603018452610e14858351610cd9565b94509285019290850190600101610df8565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610e7257610e72610e33565b604052919050565b600082601f830112610e8b57600080fd5b813567ffffffffffffffff811115610ea557610ea5610e33565b610eb8601f8201601f1916602001610e49565b818152846020838601011115610ecd57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215610eff57600080fd5b833567ffffffffffffffff80821115610f1757600080fd5b610f2387838801610e7a565b945060209150610f34828701610d9d565b9350604086013581811115610f4857600080fd5b8601601f81018813610f5957600080fd5b803582811115610f6b57610f6b610e33565b8060051b610f7a858201610e49565b918252828101850191858101908b841115610f9457600080fd5b86850192505b83831015610fd057823586811115610fb25760008081fd5b610fc08d8983890101610e7a565b8352509186019190860190610f9a565b809750505050505050509250925092565b600060208284031215610ff357600080fd5b81356001600160a01b0381168114610d3957600080fd5b600181811c9082168061101e57607f821691505b6020821081141561103f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561108c57600080fd5b81518015158114610d3957600080fd5b6000602082840312156110ae57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156110f4576110f46110cb565b500190565b600060001982141561110d5761110d6110cb565b506001019056fea2646970667358221220309ac45bbe1de2ca404fc7c59c31c305f814ae2ecad8efdb337e29ecf9d66d9a64736f6c63430008090033"; + +type BallotConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: BallotConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class Ballot__factory extends ContractFactory { + constructor(...args: BallotConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _DPS: string, + _proxy: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise { + return super.deploy(_DPS, _proxy, overrides || {}) as Promise; + } + override getDeployTransaction( + _DPS: string, + _proxy: string, + overrides?: Overrides & { from?: string | Promise } + ): TransactionRequest { + return super.getDeployTransaction(_DPS, _proxy, overrides || {}); + } + override attach(address: string): Ballot { + return super.attach(address) as Ballot; + } + override connect(signer: Signer): Ballot__factory { + return super.connect(signer) as Ballot__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): BallotInterface { + return new utils.Interface(_abi) as BallotInterface; + } + static connect(address: string, signerOrProvider: Signer | Provider): Ballot { + return new Contract(address, _abi, signerOrProvider) as Ballot; + } +} diff --git a/typings/factories/contracts/VotingProxy__factory.ts b/typings/factories/contracts/VotingProxy__factory.ts new file mode 100644 index 0000000..7a66bad --- /dev/null +++ b/typings/factories/contracts/VotingProxy__factory.ts @@ -0,0 +1,232 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { + VotingProxy, + VotingProxyInterface, +} from "../../contracts/VotingProxy"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IERC20Metadata", + name: "_DPS", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + inputs: [], + name: "DPS", + outputs: [ + { + internalType: "contract IERC20Metadata", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "ballotFactory", + outputs: [ + { + internalType: "contract BallotFactory", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint32", + name: "tagIndex", + type: "uint32", + }, + ], + name: "grantProxy", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "voter", + type: "address", + }, + { + internalType: "uint32", + name: "tagIndex", + type: "uint32", + }, + ], + name: "hasDelegated", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "voter", + type: "address", + }, + { + internalType: "uint32", + name: "tagIndex", + type: "uint32", + }, + ], + name: "proxyAmount", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "contract BallotFactory", + name: "_ballotFactory", + type: "address", + }, + ], + name: "setBallotFactory", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +]; + +const _bytecode = + "0x60a060405234801561001057600080fd5b50604051610ddb380380610ddb83398101604081905261002f916100f3565b610038336100a3565b6001600160a01b0381166100925760405162461bcd60e51b815260206004820152601a60248201527f566f74653a204450532061646472657373206973207a65726f2e000000000000604482015260640160405180910390fd5b6001600160a01b0316608052610123565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561010557600080fd5b81516001600160a01b038116811461011c57600080fd5b9392505050565b608051610c8f61014c6000396000818161017b0152818161033a01526107ee0152610c8f6000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063b75d466c11610066578063b75d466c146100f2578063c143c6db14610142578063ceb0b93514610163578063ef4e06ec14610176578063f2fde38b1461019d57600080fd5b806336a7cf1f14610098578063715018a6146100ad57806374773a45146100b55780638da5cb5b146100c8575b600080fd5b6100ab6100a6366004610990565b6101b0565b005b6100ab610205565b6100ab6100c33660046109b4565b61023b565b6000546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b6101326101003660046109b4565b6001600160a01b03918216600090815260036020908152604080832063ffffffff949094168352929052205416151590565b60405190151581526020016100e9565b6101556101503660046109b4565b610680565b6040519081526020016100e9565b6001546100d5906001600160a01b031681565b6100d57f000000000000000000000000000000000000000000000000000000000000000081565b6100ab6101ab366004610990565b610890565b6000546001600160a01b031633146101e35760405162461bcd60e51b81526004016101da906109f6565b60405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461022f5760405162461bcd60e51b81526004016101da906109f6565b610239600061092b565b565b6001546040805163995d9ab760e01b8152905163ffffffff8416926001600160a01b03169163995d9ab7916004808301926000929190829003018186803b15801561028557600080fd5b505afa158015610299573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102c19190810190610a72565b511161030f5760405162461bcd60e51b815260206004820152601d60248201527f566f74696e673a2054616720696e64657820697320746f6f206869676800000060448201526064016101da565b6040516370a0823160e01b81526001600160a01b03838116600483015269054b40b1f852bda00000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b15801561037e57600080fd5b505afa158015610392573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b69190610ba9565b1015806103ca57506001600160a01b038216155b6104205760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2050726f787920686173206e6f7420656e6f756768204450536044820152601760f91b60648201526084016101da565b33600090815260036020908152604080832063ffffffff851684529091529020546001600160a01b0316156105995733600081815260036020908152604080832063ffffffff808716808652918452828520546001600160a01b0316855260028085528386209286529184528285209585529285905290832054908401549082169260018581019391926104b49216610bd8565b63ffffffff90811682526020808301939093526040918201600090812054858316825260018781019586905293822080546001600160a01b0319166001600160a01b03909216919091179055600286015490939284926105149216610bd8565b63ffffffff90811682526020808301939093526040918201600090812080546001600160a01b0319166001600160a01b039690961695909517909455338452918590528220805463ffffffff191690556002840180549091169161057783610bfd565b91906101000a81548163ffffffff021916908363ffffffff1602179055505050505b33600090815260036020908152604080832063ffffffff85168452909152902080546001600160a01b0319166001600160a01b0384169081179091551561067c576001600160a01b038216600090815260026020818152604080842063ffffffff8087168652908352818520938401805433808852868652848820805463ffffffff1916928516929092179091558154831687526001860190945291852080546001600160a01b03191690931790925580549293929091169161065b83610c1d565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505b5050565b60008163ffffffff16600160009054906101000a90046001600160a01b03166001600160a01b031663995d9ab76040518163ffffffff1660e01b815260040160006040518083038186803b1580156106d757600080fd5b505afa1580156106eb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107139190810190610a72565b51116107615760405162461bcd60e51b815260206004820152601d60248201527f566f74696e673a2054616720696e64657820697320746f6f206869676800000060448201526064016101da565b6000805b6001600160a01b038516600090815260026020818152604080842063ffffffff808a1686529252909220015481169082161015610888576001600160a01b03858116600090815260026020908152604080832063ffffffff89811685529083528184209086168452600101909152908190205490516370a0823160e01b815290821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b15801561083257600080fd5b505afa158015610846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086a9190610ba9565b6108749083610c41565b91508061088081610c1d565b915050610765565b509392505050565b6000546001600160a01b031633146108ba5760405162461bcd60e51b81526004016101da906109f6565b6001600160a01b03811661091f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101da565b6109288161092b565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461092857600080fd5b6000602082840312156109a257600080fd5b81356109ad8161097b565b9392505050565b600080604083850312156109c757600080fd5b82356109d28161097b565b9150602083013563ffffffff811681146109eb57600080fd5b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610a6a57610a6a610a2b565b604052919050565b60006020808385031215610a8557600080fd5b825167ffffffffffffffff80821115610a9d57600080fd5b8185019150601f8681840112610ab257600080fd5b825182811115610ac457610ac4610a2b565b8060051b610ad3868201610a41565b918252848101860191868101908a841115610aed57600080fd5b87870192505b83831015610b9b57825186811115610b0b5760008081fd5b8701603f81018c13610b1d5760008081fd5b8881015187811115610b3157610b31610a2b565b610b42818801601f19168b01610a41565b81815260408e81848601011115610b595760008081fd5b60005b83811015610b77578481018201518382018e01528c01610b5c565b83811115610b885760008d85850101525b5050845250509187019190870190610af3565b9a9950505050505050505050565b600060208284031215610bbb57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff83811690831681811015610bf557610bf5610bc2565b039392505050565b600063ffffffff821680610c1357610c13610bc2565b6000190192915050565b600063ffffffff80831681811415610c3757610c37610bc2565b6001019392505050565b60008219821115610c5457610c54610bc2565b50019056fea264697066735822122076e5e8872e5ed55d2da43b61bf1aa5092af6e705e2449b69318bc45269e50ee964736f6c63430008090033"; + +type VotingProxyConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: VotingProxyConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class VotingProxy__factory extends ContractFactory { + constructor(...args: VotingProxyConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _DPS: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise { + return super.deploy(_DPS, overrides || {}) as Promise; + } + override getDeployTransaction( + _DPS: string, + overrides?: Overrides & { from?: string | Promise } + ): TransactionRequest { + return super.getDeployTransaction(_DPS, overrides || {}); + } + override attach(address: string): VotingProxy { + return super.attach(address) as VotingProxy; + } + override connect(signer: Signer): VotingProxy__factory { + return super.connect(signer) as VotingProxy__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): VotingProxyInterface { + return new utils.Interface(_abi) as VotingProxyInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): VotingProxy { + return new Contract(address, _abi, signerOrProvider) as VotingProxy; + } +} diff --git a/typings/factories/contracts/Voting__factory.ts b/typings/factories/contracts/Voting__factory.ts deleted file mode 100644 index bd4d560..0000000 --- a/typings/factories/contracts/Voting__factory.ts +++ /dev/null @@ -1,427 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { Voting, VotingInterface } from "../../contracts/Voting"; - -const _abi = [ - { - inputs: [ - { - internalType: "contract IERC20Metadata", - name: "_DPS", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - inputs: [], - name: "DPS", - outputs: [ - { - internalType: "contract IERC20Metadata", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "string", - name: "name", - type: "string", - }, - ], - name: "addTag", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "ballots", - outputs: [ - { - internalType: "string", - name: "subject", - type: "string", - }, - { - internalType: "bool", - name: "closed", - type: "bool", - }, - { - internalType: "uint32", - name: "tagIndex", - type: "uint32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "choices", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint32", - name: "ballotIndex", - type: "uint32", - }, - ], - name: "closeBallot", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "string", - name: "subject", - type: "string", - }, - { - internalType: "uint32", - name: "tagIndex", - type: "uint32", - }, - { - internalType: "string[]", - name: "_choices", - type: "string[]", - }, - ], - name: "createBallot", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "getAllResults", - outputs: [ - { - internalType: "uint256[][]", - name: "", - type: "uint256[][]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "ballotIndex", - type: "uint256", - }, - ], - name: "getBallotResult", - outputs: [ - { - internalType: "uint256[]", - name: "", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getBallots", - outputs: [ - { - components: [ - { - internalType: "string", - name: "subject", - type: "string", - }, - { - internalType: "bool", - name: "closed", - type: "bool", - }, - { - internalType: "uint32", - name: "tagIndex", - type: "uint32", - }, - ], - internalType: "struct Voting.Ballot[]", - name: "", - type: "tuple[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getChoices", - outputs: [ - { - internalType: "string[][]", - name: "", - type: "string[][]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getTags", - outputs: [ - { - internalType: "string[]", - name: "", - type: "string[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint32", - name: "tagIndex", - type: "uint32", - }, - ], - name: "grantProxy", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "resultStorage", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "tags", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "voter", - type: "address", - }, - { - internalType: "uint32", - name: "tagIndex", - type: "uint32", - }, - ], - name: "totalProxyAmount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint32", - name: "ballotIndex", - type: "uint32", - }, - { - internalType: "uint32", - name: "choiceIndex", - type: "uint32", - }, - ], - name: "vote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60a06040523480156200001157600080fd5b50604051620022bc380380620022bc8339810160408190526200003491620000fc565b6200003f33620000ac565b6001600160a01b0381166200009a5760405162461bcd60e51b815260206004820152601a60248201527f566f74653a204450532061646472657373206973207a65726f2e000000000000604482015260640160405180910390fd5b6001600160a01b03166080526200012e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156200010f57600080fd5b81516001600160a01b03811681146200012757600080fd5b9392505050565b60805161215662000166600039600081816102ac0152818161064e0152818161075a01528181610981015261121301526121566000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806398c81bbf116100ad578063de0cc45b11610071578063de0cc45b1461027f578063eb87c6dc14610292578063ef4e06ec146102a7578063f2fde38b146102ce578063f50ea7ff146102e157600080fd5b806398c81bbf1461020f578063995d9ab714610224578063cb8f344814610239578063ce65c4e31461024c578063cff9293a1461026c57600080fd5b80635c632b38116100f45780635c632b3814610198578063715018a6146101ba57806374773a45146101c257806376d9be08146101d55780638da5cb5b146101ea57600080fd5b806320822abc1461012657806324db32ac1461014f57806337dc3dfa14610164578063471a980114610177575b600080fd5b610139610134366004611a0f565b6102f4565b6040516101469190611a75565b60405180910390f35b61016261015d366004611b5f565b6103a0565b005b610139610172366004611c56565b61058e565b61018a610185366004611c8f565b6105d2565b604051908152602001610146565b6101ab6101a6366004611a0f565b6107fc565b60405161014693929190611cc2565b6101626108c9565b6101626101d0366004611c8f565b6108ff565b6101dd610cc5565b6040516101469190611d2d565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610146565b610217610d5e565b6040516101469190611de4565b61022c610e75565b6040516101469190611e39565b61018a610247366004611c56565b610f45565b61025f61025a366004611a0f565b610f82565b6040516101469190611e4c565b61016261027a366004611e5f565b611019565b61016261028d366004611e7b565b611421565b61029a61148d565b6040516101469190611eb8565b6101f77f000000000000000000000000000000000000000000000000000000000000000081565b6101626102dc366004611f41565b61159d565b6101626102ef366004611f5c565b611638565b6001818154811061030457600080fd5b90600052602060002001600091509050805461031f90611f77565b80601f016020809104026020016040519081016040528092919081815260200182805461034b90611f77565b80156103985780601f1061036d57610100808354040283529160200191610398565b820191906000526020600020905b81548152906001019060200180831161037b57829003601f168201915b505050505081565b6000546001600160a01b031633146103d35760405162461bcd60e51b81526004016103ca90611fb2565b60405180910390fd5b60015463ffffffff83161061042a5760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2054616720696e64657820697320746f6f20686967682e000060448201526064016103ca565b604080516060810182528481526000602080830182905263ffffffff8616938301939093526002805460018101825591819052825180519394929091027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace019261049792849201906118c6565b506020828101516001928301805460409095015163ffffffff166101000264ffffffff00199215159290921664ffffffffff1990951694909417179092556003805491820181556000528251610514927fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b9092019184019061194a565b5060048054600190810190915560058054909101815560009081525b8151811015610588576005805461054990600190611ffd565b8154811061055957610559612014565b6000918252602080832090910180546001810182559083529082200155806105808161202a565b915050610530565b50505050565b6003828154811061059e57600080fd5b9060005260206000200181815481106105b657600080fd5b9060005260206000200160009150915050805461031f90611f77565b60015460009063ffffffff83161061062c5760405162461bcd60e51b815260206004820152601d60248201527f566f74696e673a2054616720696e64657820697320746f6f206869676800000060448201526064016103ca565b6040516370a0823160e01b81526001600160a01b0384811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b15801561069257600080fd5b505afa1580156106a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ca9190612045565b905060005b6001600160a01b038516600090815260066020908152604080832063ffffffff8089168552925290912060020154811690821610156107f4576001600160a01b03858116600090815260066020908152604080832063ffffffff89811685529083528184209086168452600101909152908190205490516370a0823160e01b815290821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b15801561079e57600080fd5b505afa1580156107b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d69190612045565b6107e0908361205e565b9150806107ec81612076565b9150506106cf565b509392505050565b6002818154811061080c57600080fd5b906000526020600020906002020160009150905080600001805461082f90611f77565b80601f016020809104026020016040519081016040528092919081815260200182805461085b90611f77565b80156108a85780601f1061087d576101008083540402835291602001916108a8565b820191906000526020600020905b81548152906001019060200180831161088b57829003601f168201915b5050506001909301549192505060ff81169063ffffffff6101009091041683565b6000546001600160a01b031633146108f35760405162461bcd60e51b81526004016103ca90611fb2565b6108fd6000611876565b565b60015463ffffffff8216106109565760405162461bcd60e51b815260206004820152601d60248201527f566f74696e673a2054616720696e64657820697320746f6f206869676800000060448201526064016103ca565b6040516370a0823160e01b81526001600160a01b03838116600483015269054b40b1f852bda00000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b1580156109c557600080fd5b505afa1580156109d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fd9190612045565b101580610a1157506001600160a01b038216155b610a675760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2050726f787920686173206e6f7420656e6f756768204450536044820152601760f91b60648201526084016103ca565b33600090815260076020908152604080832063ffffffff851684529091529020546001600160a01b031615610bdf5733600081815260076020908152604080832063ffffffff808716808652918452828520546001600160a01b0316855260068452828520918552908352818420948452918490528220546002840154908216926001858101939192610afa921661209a565b63ffffffff90811682526020808301939093526040918201600090812054858316825260018781019586905293822080546001600160a01b0319166001600160a01b0390921691909117905560028601549093928492610b5a921661209a565b63ffffffff90811682526020808301939093526040918201600090812080546001600160a01b0319166001600160a01b039690961695909517909455338452918590528220805463ffffffff1916905560028401805490911691610bbd836120bf565b91906101000a81548163ffffffff021916908363ffffffff1602179055505050505b33600090815260076020908152604080832063ffffffff85168452909152902080546001600160a01b0319166001600160a01b03841690811790915515610cc1576001600160a01b038216600090815260066020908152604080832063ffffffff808616855290835281842060028101805433808852838752858820805463ffffffff1916928616929092179091558154841687526001830190955292852080546001600160a01b03191690941790935581549293921691610ca083612076565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505b5050565b60606005805480602002602001604051908101604052809291908181526020016000905b82821015610d5557600084815260209081902083018054604080518285028101850190915281815292830182828015610d4157602002820191906000526020600020905b815481526020019060010190808311610d2d575b505050505081526020019060010190610ce9565b50505050905090565b60606003805480602002602001604051908101604052809291908181526020016000905b82821015610d5557838290600052602060002001805480602002602001604051908101604052809291908181526020016000905b82821015610e62578382906000526020600020018054610dd590611f77565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0190611f77565b8015610e4e5780601f10610e2357610100808354040283529160200191610e4e565b820191906000526020600020905b815481529060010190602001808311610e3157829003601f168201915b505050505081526020019060010190610db6565b5050505081526020019060010190610d82565b60606001805480602002602001604051908101604052809291908181526020016000905b82821015610d55578382906000526020600020018054610eb890611f77565b80601f0160208091040260200160405190810160405280929190818152602001828054610ee490611f77565b8015610f315780601f10610f0657610100808354040283529160200191610f31565b820191906000526020600020905b815481529060010190602001808311610f1457829003601f168201915b505050505081526020019060010190610e99565b60058281548110610f5557600080fd5b906000526020600020018181548110610f6d57600080fd5b90600052602060002001600091509150505481565b6002546060908210610fa65760405162461bcd60e51b81526004016103ca906120df565b60058281548110610fb957610fb9612014565b9060005260206000200180548060200260200160405190810160405280929190818152602001828054801561100d57602002820191906000526020600020905b815481526020019060010190808311610ff9575b50505050509050919050565b60025463ffffffff8316106110405760405162461bcd60e51b81526004016103ca906120df565b60028263ffffffff168154811061105957611059612014565b600091825260209091206001600290920201015460ff16156110bd5760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e0000000000000060448201526064016103ca565b8063ffffffff1660038363ffffffff16815481106110dd576110dd612014565b600091825260209091200154116111405760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2043686f69636520696e64657820697320746f6f20686967686044820152601760f91b60648201526084016103ca565b3360009081526007602052604081206002805483919063ffffffff871690811061116c5761116c612014565b6000918252602080832060029290920290910160010154610100900463ffffffff1683528201929092526040019020546001600160a01b0316146111f25760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e00000000000060448201526064016103ca565b6040516370a0823160e01b815233600482015269054b40b1f852bda00000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561125d57600080fd5b505afa158015611271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112959190612045565b10156112e35760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e0060448201526064016103ca565b60048263ffffffff16815481106112fc576112fc612014565b6000918252602080832033845260029290920290910160010190526040902054640100000000900460ff166113cc57600160048363ffffffff168154811061134657611346612014565b6000918252602080832033845260016002909302019190910190526040902080549115156401000000000264ff00000000199092169190911790556004805463ffffffff841690811061139b5761139b612014565b600091825260208083206002909202909101805460018101825590835291200180546001600160a01b031916331790555b8060048363ffffffff16815481106113e6576113e6612014565b60009182526020808320338452600292909202909101600101905260409020805463ffffffff191663ffffffff929092169190911790555050565b6000546001600160a01b0316331461144b5760405162461bcd60e51b81526004016103ca90611fb2565b6001805480820182556000919091528151610cc1917fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6019060208401906118c6565b60606002805480602002602001604051908101604052809291908181526020016000905b82821015610d5557838290600052602060002090600202016040518060600160405290816000820180546114e490611f77565b80601f016020809104026020016040519081016040528092919081815260200182805461151090611f77565b801561155d5780601f106115325761010080835404028352916020019161155d565b820191906000526020600020905b81548152906001019060200180831161154057829003601f168201915b505050918352505060019182015460ff8116151560208084019190915261010090910463ffffffff166040909201919091529183529290920191016114b1565b6000546001600160a01b031633146115c75760405162461bcd60e51b81526004016103ca90611fb2565b6001600160a01b03811661162c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103ca565b61163581611876565b50565b6000546001600160a01b031633146116625760405162461bcd60e51b81526004016103ca90611fb2565b60025463ffffffff8216106116895760405162461bcd60e51b81526004016103ca906120df565b60028163ffffffff16815481106116a2576116a2612014565b600091825260209091206001600290920201015460ff16156117065760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e000060448201526064016103ca565b600160028263ffffffff168154811061172157611721612014565b60009182526020822060029190910201600101805460ff1916921515929092179091556004805463ffffffff841690811061175e5761175e612014565b90600052602060002090600202019050600060028363ffffffff168154811061178957611789612014565b6000918252602082206001600290920201015463ffffffff6101009091041691505b82548110156105885760008360000182815481106117cb576117cb612014565b6000918252602090912001546001600160a01b031690506117ec81846105d2565b60058663ffffffff168154811061180557611805612014565b600091825260208083206001600160a01b03861684526001890190915260409092205491018054909163ffffffff1690811061184357611843612014565b90600052602060002001600082825461185c919061205e565b9091555082915061186e90508161202a565b9150506117ab565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8280546118d290611f77565b90600052602060002090601f0160209004810192826118f4576000855561193a565b82601f1061190d57805160ff191683800117855561193a565b8280016001018555821561193a579182015b8281111561193a57825182559160200191906001019061191f565b506119469291506119a3565b5090565b828054828255906000526020600020908101928215611997579160200282015b8281111561199757825180516119879184916020909101906118c6565b509160200191906001019061196a565b506119469291506119b8565b5b8082111561194657600081556001016119a4565b808211156119465760006119cc82826119d5565b506001016119b8565b5080546119e190611f77565b6000825580601f106119f1575050565b601f01602090049060005260206000209081019061163591906119a3565b600060208284031215611a2157600080fd5b5035919050565b6000815180845260005b81811015611a4e57602081850181015186830182015201611a32565b81811115611a60576000602083870101525b50601f01601f19169290920160200192915050565b602081526000611a886020830184611a28565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611ace57611ace611a8f565b604052919050565b600082601f830112611ae757600080fd5b813567ffffffffffffffff811115611b0157611b01611a8f565b611b14601f8201601f1916602001611aa5565b818152846020838601011115611b2957600080fd5b816020850160208301376000918101602001919091529392505050565b803563ffffffff81168114611b5a57600080fd5b919050565b600080600060608486031215611b7457600080fd5b833567ffffffffffffffff80821115611b8c57600080fd5b611b9887838801611ad6565b945060209150611ba9828701611b46565b9350604086013581811115611bbd57600080fd5b8601601f81018813611bce57600080fd5b803582811115611be057611be0611a8f565b8060051b611bef858201611aa5565b918252828101850191858101908b841115611c0957600080fd5b86850192505b83831015611c4557823586811115611c275760008081fd5b611c358d8983890101611ad6565b8352509186019190860190611c0f565b809750505050505050509250925092565b60008060408385031215611c6957600080fd5b50508035926020909101359150565b80356001600160a01b0381168114611b5a57600080fd5b60008060408385031215611ca257600080fd5b611cab83611c78565b9150611cb960208401611b46565b90509250929050565b606081526000611cd56060830186611a28565b93151560208301525063ffffffff91909116604090910152919050565b600081518084526020808501945080840160005b83811015611d2257815187529582019590820190600101611d06565b509495945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015611d8257603f19888603018452611d70858351611cf2565b94509285019290850190600101611d54565b5092979650505050505050565b600081518084526020808501808196508360051b8101915082860160005b85811015611dd7578284038952611dc5848351611a28565b98850198935090840190600101611dad565b5091979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015611d8257603f19888603018452611e27858351611d8f565b94509285019290850190600101611e0b565b602081526000611a886020830184611d8f565b602081526000611a886020830184611cf2565b60008060408385031215611e7257600080fd5b611cab83611b46565b600060208284031215611e8d57600080fd5b813567ffffffffffffffff811115611ea457600080fd5b611eb084828501611ad6565b949350505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015611f3357603f19898403018552815160608151818652611f0582870182611a28565b838b01511515878c01529289015163ffffffff16958901959095525094870194925090860190600101611edf565b509098975050505050505050565b600060208284031215611f5357600080fd5b611a8882611c78565b600060208284031215611f6e57600080fd5b611a8882611b46565b600181811c90821680611f8b57607f821691505b60208210811415611fac57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008282101561200f5761200f611fe7565b500390565b634e487b7160e01b600052603260045260246000fd5b600060001982141561203e5761203e611fe7565b5060010190565b60006020828403121561205757600080fd5b5051919050565b6000821982111561207157612071611fe7565b500190565b600063ffffffff8083168181141561209057612090611fe7565b6001019392505050565b600063ffffffff838116908316818110156120b7576120b7611fe7565b039392505050565b600063ffffffff8216806120d5576120d5611fe7565b6000190192915050565b60208082526021908201527f566f74696e673a2042616c6c6f7420696e64657820697320746f6f20686967686040820152601760f91b60608201526080019056fea264697066735822122027513b6c4d73ee0cc009aa9ad6fc35ca676dcf169833402a6af04391e6ecd77564736f6c63430008090033"; - -type VotingConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: VotingConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class Voting__factory extends ContractFactory { - constructor(...args: VotingConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _DPS: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(_DPS, overrides || {}) as Promise; - } - override getDeployTransaction( - _DPS: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_DPS, overrides || {}); - } - override attach(address: string): Voting { - return super.attach(address) as Voting; - } - override connect(signer: Signer): Voting__factory { - return super.connect(signer) as Voting__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): VotingInterface { - return new utils.Interface(_abi) as VotingInterface; - } - static connect(address: string, signerOrProvider: Signer | Provider): Voting { - return new Contract(address, _abi, signerOrProvider) as Voting; - } -} diff --git a/typings/factories/contracts/factories/BallotFactory__factory.ts b/typings/factories/contracts/factories/BallotFactory__factory.ts new file mode 100644 index 0000000..3d9554d --- /dev/null +++ b/typings/factories/contracts/factories/BallotFactory__factory.ts @@ -0,0 +1,262 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { + BallotFactory, + BallotFactoryInterface, +} from "../../../contracts/factories/BallotFactory"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "_masterAddress", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + inputs: [ + { + internalType: "string", + name: "name", + type: "string", + }, + ], + name: "addTag", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "ballotAddresses", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "string", + name: "subject", + type: "string", + }, + { + internalType: "uint32", + name: "tagIndex", + type: "uint32", + }, + { + internalType: "string[]", + name: "_choices", + type: "string[]", + }, + ], + name: "createBallot", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getBallots", + outputs: [ + { + internalType: "address[]", + name: "", + type: "address[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getTags", + outputs: [ + { + internalType: "string[]", + name: "", + type: "string[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "masterAddress", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newAddress", + type: "address", + }, + ], + name: "setMasterAddress", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "tags", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +]; + +const _bytecode = + "0x608060405234801561001057600080fd5b50604051610f3c380380610f3c83398101604081905261002f9161012d565b610038336100dd565b6001600160a01b0381166100b85760405162461bcd60e51b815260206004820152603860248201527f42616c6c6f74466163746f72793a204d6173746572206164647265737320736860448201527f6f756c64206e6f74206265207a65726f20616464726573730000000000000000606482015260840160405180910390fd5b600280546001600160a01b0319166001600160a01b039290921691909117905561015d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561013f57600080fd5b81516001600160a01b038116811461015657600080fd5b9392505050565b610dd08061016c6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063995d9ab711610071578063995d9ab714610130578063a7a9845314610145578063d365a08e14610158578063de0cc45b1461016b578063eb87c6dc1461017e578063f2fde38b1461019357600080fd5b806320822abc146100ae57806324db32ac146100d75780635d06a61114610102578063715018a6146101175780638da5cb5b1461011f575b600080fd5b6100c16100bc36600461096d565b6101a6565b6040516100ce91906109e2565b60405180910390f35b6100ea6100e5366004610ab3565b610252565b6040516001600160a01b0390911681526020016100ce565b610115610110366004610bb5565b610513565b005b6101156105dd565b6000546001600160a01b03166100ea565b610138610613565b6040516100ce9190610c36565b6100ea61015336600461096d565b6106ec565b6002546100ea906001600160a01b031681565b610115610179366004610c49565b610716565b610186610787565b6040516100ce9190610c86565b6101156101a1366004610bb5565b6107e9565b600381815481106101b657600080fd5b9060005260206000200160009150905080546101d190610cd3565b80601f01602080910402602001604051908101604052809291908181526020018280546101fd90610cd3565b801561024a5780601f1061021f5761010080835404028352916020019161024a565b820191906000526020600020905b81548152906001019060200180831161022d57829003601f168201915b505050505081565b600080546001600160a01b031633146102865760405162461bcd60e51b815260040161027d90610d0e565b60405180910390fd5b60035463ffffffff8416106102eb5760405162461bcd60e51b815260206004820152602560248201527f42616c6c6f74466163746f72793a2054616720696e64657820697320746f6f206044820152643434b3b41760d91b606482015260840161027d565b600254604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81526bffffffffffffffffffffffff19606083901b1660148201526e5af43d82803e903d91602b57fd5bf360881b60288201526000916001600160a01b03169060378184f09250506001600160a01b0382166103bb5760405162461bcd60e51b815260206004820152602b60248201527f42616c6c6f74466163746f72793a2042616c6c6f7420636c6f6e65206372656160448201526a1d1a5bdb8819985a5b195960aa1b606482015260840161027d565b6000826001600160a01b03168787876040516024016103dc93929190610d43565b60408051601f198184030181529181526020820180516001600160e01b031663c1d1d5c160e01b179052516104119190610d7e565b6000604051808303816000865af19150503d806000811461044e576040519150601f19603f3d011682016040523d82523d6000602084013e610453565b606091505b50509050806104bf5760405162461bcd60e51b815260206004820152603260248201527f42616c6c6f74466163746f72793a2042616c6c6f7420636c6f6e6520696e697460448201527134b0b634bd30ba34b7b7103330b4b632b21760711b606482015260840161027d565b50506001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b038316179055949350505050565b6000546001600160a01b0316331461053d5760405162461bcd60e51b815260040161027d90610d0e565b6002546001600160a01b03166105bb5760405162461bcd60e51b815260206004820152603860248201527f42616c6c6f74466163746f72793a204d6173746572206164647265737320736860448201527f6f756c64206e6f74206265207a65726f20616464726573730000000000000000606482015260840161027d565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146106075760405162461bcd60e51b815260040161027d90610d0e565b6106116000610884565b565b60606003805480602002602001604051908101604052809291908181526020016000905b828210156106e357838290600052602060002001805461065690610cd3565b80601f016020809104026020016040519081016040528092919081815260200182805461068290610cd3565b80156106cf5780601f106106a4576101008083540402835291602001916106cf565b820191906000526020600020905b8154815290600101906020018083116106b257829003601f168201915b505050505081526020019060010190610637565b50505050905090565b600181815481106106fc57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146107405760405162461bcd60e51b815260040161027d90610d0e565b600380546001810182556000919091528151610783917fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b019060208401906108d4565b5050565b606060018054806020026020016040519081016040528092919081815260200182805480156107df57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107c1575b5050505050905090565b6000546001600160a01b031633146108135760405162461bcd60e51b815260040161027d90610d0e565b6001600160a01b0381166108785760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161027d565b61088181610884565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8280546108e090610cd3565b90600052602060002090601f0160209004810192826109025760008555610948565b82601f1061091b57805160ff1916838001178555610948565b82800160010185558215610948579182015b8281111561094857825182559160200191906001019061092d565b50610954929150610958565b5090565b5b808211156109545760008155600101610959565b60006020828403121561097f57600080fd5b5035919050565b60005b838110156109a1578181015183820152602001610989565b838111156109b0576000848401525b50505050565b600081518084526109ce816020860160208601610986565b601f01601f19169290920160200192915050565b6020815260006109f560208301846109b6565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610a3b57610a3b6109fc565b604052919050565b600082601f830112610a5457600080fd5b813567ffffffffffffffff811115610a6e57610a6e6109fc565b610a81601f8201601f1916602001610a12565b818152846020838601011115610a9657600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215610ac857600080fd5b833567ffffffffffffffff80821115610ae057600080fd5b610aec87838801610a43565b9450602091508186013563ffffffff81168114610b0857600080fd5b9350604086013581811115610b1c57600080fd5b8601601f81018813610b2d57600080fd5b803582811115610b3f57610b3f6109fc565b8060051b610b4e858201610a12565b918252828101850191858101908b841115610b6857600080fd5b86850192505b83831015610ba457823586811115610b865760008081fd5b610b948d8983890101610a43565b8352509186019190860190610b6e565b809750505050505050509250925092565b600060208284031215610bc757600080fd5b81356001600160a01b03811681146109f557600080fd5b600082825180855260208086019550808260051b84010181860160005b84811015610c2957601f19868403018952610c178383516109b6565b98840198925090830190600101610bfb565b5090979650505050505050565b6020815260006109f56020830184610bde565b600060208284031215610c5b57600080fd5b813567ffffffffffffffff811115610c7257600080fd5b610c7e84828501610a43565b949350505050565b6020808252825182820181905260009190848201906040850190845b81811015610cc75783516001600160a01b031683529284019291840191600101610ca2565b50909695505050505050565b600181811c90821680610ce757607f821691505b60208210811415610d0857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b606081526000610d5660608301866109b6565b63ffffffff851660208401528281036040840152610d748185610bde565b9695505050505050565b60008251610d90818460208701610986565b919091019291505056fea2646970667358221220a703cb04af933609306a91e4c37c378497742fc05144c888a5b1d1d28098c69e64736f6c63430008090033"; + +type BallotFactoryConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: BallotFactoryConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class BallotFactory__factory extends ContractFactory { + constructor(...args: BallotFactoryConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _masterAddress: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise { + return super.deploy( + _masterAddress, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + _masterAddress: string, + overrides?: Overrides & { from?: string | Promise } + ): TransactionRequest { + return super.getDeployTransaction(_masterAddress, overrides || {}); + } + override attach(address: string): BallotFactory { + return super.attach(address) as BallotFactory; + } + override connect(signer: Signer): BallotFactory__factory { + return super.connect(signer) as BallotFactory__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): BallotFactoryInterface { + return new utils.Interface(_abi) as BallotFactoryInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): BallotFactory { + return new Contract(address, _abi, signerOrProvider) as BallotFactory; + } +} diff --git a/typings/hardhat.d.ts b/typings/hardhat.d.ts index 8127a44..6f2177b 100644 --- a/typings/hardhat.d.ts +++ b/typings/hardhat.d.ts @@ -48,6 +48,10 @@ declare module "hardhat/types/runtime" { name: "IERC165", signerOrOptions?: ethers.Signer | FactoryOptions ): Promise; + getContractFactory( + name: "Ballot", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; getContractFactory( name: "DeepSquare", signerOrOptions?: ethers.Signer | FactoryOptions @@ -56,6 +60,10 @@ declare module "hardhat/types/runtime" { name: "Eligibility", signerOrOptions?: ethers.Signer | FactoryOptions ): Promise; + getContractFactory( + name: "BallotFactory", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; getContractFactory( name: "IEligibility", signerOrOptions?: ethers.Signer | FactoryOptions @@ -85,9 +93,13 @@ declare module "hardhat/types/runtime" { signerOrOptions?: ethers.Signer | FactoryOptions ): Promise; getContractFactory( - name: "ExposedVoting", + name: "ExposedBallot", signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; + ): Promise; + getContractFactory( + name: "ExposedVotingProxy", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; getContractFactory( name: "BridgeToken", signerOrOptions?: ethers.Signer | FactoryOptions @@ -109,9 +121,9 @@ declare module "hardhat/types/runtime" { signerOrOptions?: ethers.Signer | FactoryOptions ): Promise; getContractFactory( - name: "Voting", + name: "VotingProxy", signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; + ): Promise; getContractAt( name: "AggregatorV3Interface", @@ -158,6 +170,11 @@ declare module "hardhat/types/runtime" { address: string, signer?: ethers.Signer ): Promise; + getContractAt( + name: "Ballot", + address: string, + signer?: ethers.Signer + ): Promise; getContractAt( name: "DeepSquare", address: string, @@ -168,6 +185,11 @@ declare module "hardhat/types/runtime" { address: string, signer?: ethers.Signer ): Promise; + getContractAt( + name: "BallotFactory", + address: string, + signer?: ethers.Signer + ): Promise; getContractAt( name: "IEligibility", address: string, @@ -204,10 +226,15 @@ declare module "hardhat/types/runtime" { signer?: ethers.Signer ): Promise; getContractAt( - name: "ExposedVoting", + name: "ExposedBallot", + address: string, + signer?: ethers.Signer + ): Promise; + getContractAt( + name: "ExposedVotingProxy", address: string, signer?: ethers.Signer - ): Promise; + ): Promise; getContractAt( name: "BridgeToken", address: string, @@ -234,10 +261,10 @@ declare module "hardhat/types/runtime" { signer?: ethers.Signer ): Promise; getContractAt( - name: "Voting", + name: "VotingProxy", address: string, signer?: ethers.Signer - ): Promise; + ): Promise; // default types getContractFactory( From dbc3c642453068fa6b929f6ebd0aa0c136f1670c Mon Sep 17 00:00:00 2001 From: valentinpollart Date: Fri, 22 Apr 2022 12:36:35 +0200 Subject: [PATCH 05/25] feat: tweak voting implementation and add additionnal tests --- contracts/Ballot.sol | 11 +- contracts/VotingProxy.sol | 8 +- contracts/factories/BallotFactory.sol | 38 +- test/Ballot.spec.ts | 55 +- test/BallotFactory.spec.ts | 74 +- test/VotingProxy.spec.ts | 26 +- typings/contracts/Ballot.ts | 439 ++++++++++ typings/contracts/VotingProxy.ts | 365 ++++++++ .../{Voting.ts => factories/BallotFactory.ts} | 389 ++------- typings/contracts/testing/ExposedBallot.ts | 477 +++++++++++ typings/contracts/testing/ExposedVoting.ts | 798 ------------------ .../contracts/testing/ExposedVotingProxy.ts | 442 ++++++++++ .../factories/contracts/Ballot__factory.ts | 7 +- .../contracts/VotingProxy__factory.ts | 2 +- .../factories/BallotFactory__factory.ts | 41 +- .../testing/ExposedBallot__factory.ts | 352 ++++++++ .../testing/ExposedVotingProxy__factory.ts | 280 ++++++ .../testing/ExposedVoting__factory.ts | 524 ------------ 18 files changed, 2565 insertions(+), 1763 deletions(-) create mode 100644 typings/contracts/Ballot.ts create mode 100644 typings/contracts/VotingProxy.ts rename typings/contracts/{Voting.ts => factories/BallotFactory.ts} (52%) create mode 100644 typings/contracts/testing/ExposedBallot.ts delete mode 100644 typings/contracts/testing/ExposedVoting.ts create mode 100644 typings/contracts/testing/ExposedVotingProxy.ts create mode 100644 typings/factories/contracts/testing/ExposedBallot__factory.ts create mode 100644 typings/factories/contracts/testing/ExposedVotingProxy__factory.ts delete mode 100644 typings/factories/contracts/testing/ExposedVoting__factory.ts diff --git a/contracts/Ballot.sol b/contracts/Ballot.sol index 4b181a8..2daba15 100644 --- a/contracts/Ballot.sol +++ b/contracts/Ballot.sol @@ -4,6 +4,7 @@ pragma solidity ^0.8.0; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; +import "@openzeppelin/contracts/proxy/utils/Initializable.sol"; import "./VotingProxy.sol"; // Can a voter change his/her vote ? --> Yes @@ -36,7 +37,7 @@ import "./VotingProxy.sol"; // mapping(address => uint32) results // results[C] == 0 -contract Ballot is Ownable { +contract Ballot is Ownable, Initializable { IERC20Metadata public immutable DPS; VotingProxy public proxy; @@ -63,11 +64,13 @@ contract Ballot is Ownable { proxy = _proxy; } - function init(string memory _subject, uint32 _tagIndex, string[] memory _choices) external onlyOwner { + function init(string memory _subject, uint32 _tagIndex, string[] memory _choices, VotingProxy _proxy) public initializer { subject = _subject; tagIndex = _tagIndex; closed = false; choices = _choices; + proxy = _proxy; + resultStorage = new uint256[](choices.length); } function getChoices() external view returns(string[] memory) { @@ -82,7 +85,7 @@ contract Ballot is Ownable { require(!closed, 'Voting: Ballot is closed.'); require(choices.length > choiceIndex, 'Voting: Choice index is too high.'); - require(proxy.hasDelegated(msg.sender,tagIndex) , 'Voting: Vote is delegated.'); // Verify that voter has not granted proxy to somebody. + require(!proxy.hasDelegated(msg.sender,tagIndex), 'Voting: Vote is delegated.'); // Verify that voter has not granted proxy to somebody. require(DPS.balanceOf(msg.sender) >= 25e3 * 1e18, 'Voting: Not enough DPS to vote.'); // 25k DPS limit @@ -101,7 +104,7 @@ contract Ballot is Ownable { for(uint i = 0; i < voters.length; i++) { // if A has granted proxy to B address voter = voters[i]; - resultStorage[votes[voter].choiceIndex] += DPS.balanceOf(msg.sender) + proxy.proxyAmount(voter, tagIndex); + resultStorage[votes[voter].choiceIndex] += DPS.balanceOf(voter) + proxy.proxyAmount(voter, tagIndex); } } diff --git a/contracts/VotingProxy.sol b/contracts/VotingProxy.sol index f530105..0ae0782 100644 --- a/contracts/VotingProxy.sol +++ b/contracts/VotingProxy.sol @@ -20,7 +20,7 @@ contract VotingProxy is Ownable{ mapping(address => mapping(uint32 => address)) internal proxyVoters; // voter => tag => proxy constructor(IERC20Metadata _DPS) { - require(address(_DPS) != address(0), "Vote: DPS address is zero."); + require(address(_DPS) != address(0), "VotingProxy: DPS address is zero."); DPS = _DPS; } @@ -29,8 +29,8 @@ contract VotingProxy is Ownable{ } function grantProxy(address to, uint32 tagIndex) external { - require(ballotFactory.getTags().length > tagIndex, 'Voting: Tag index is too high'); - require(DPS.balanceOf(to) >= 25e3 * 1e18 || to == address(0), 'Voting: Proxy has not enough DPS.'); + require(ballotFactory.getTags().length > tagIndex, 'VotingProxy: Tag index is too high'); + require(DPS.balanceOf(to) >= 25e3 * 1e18 || to == address(0), 'VotingProxy: Proxy has not enough DPS.'); if(proxyVoters[msg.sender][tagIndex] != address(0)) { Grants storage formerDelegateGrants = delegates[proxyVoters[msg.sender][tagIndex]][tagIndex]; @@ -52,7 +52,7 @@ contract VotingProxy is Ownable{ } function proxyAmount(address voter, uint32 tagIndex) public view returns (uint256) { - require(ballotFactory.getTags().length > tagIndex, 'Voting: Tag index is too high'); + require(ballotFactory.getTags().length > tagIndex, 'VotingProxy: Tag index is too high'); uint256 total; for(uint32 i = 0; i < delegates[voter][tagIndex].grantCount; i++) { total += DPS.balanceOf(delegates[voter][tagIndex].indexVoter[i]); diff --git a/contracts/factories/BallotFactory.sol b/contracts/factories/BallotFactory.sol index 6fd9591..d5be6a7 100644 --- a/contracts/factories/BallotFactory.sol +++ b/contracts/factories/BallotFactory.sol @@ -3,46 +3,38 @@ pragma solidity ^0.8.0; import "@openzeppelin/contracts/access/Ownable.sol"; +import "@openzeppelin/contracts/proxy/Clones.sol"; +import "../Ballot.sol"; +import "../VotingProxy.sol"; contract BallotFactory is Ownable { address[] public ballotAddresses; - address public masterAddress; + address public implementationAddress; + address public votingProxyAddress; string[] public tags; - constructor(address _masterAddress){ - require(_masterAddress != address(0), 'BallotFactory: Master address should not be zero address'); - masterAddress = _masterAddress; + constructor(address _implementationAddress, address _votingProxyAddress){ + require(_implementationAddress != address(0), 'BallotFactory: Implementation address should not be zero address'); + require(_votingProxyAddress != address(0), 'BallotFactory: Voting proxy address should not be zero address'); + implementationAddress = _implementationAddress; + votingProxyAddress = _votingProxyAddress; } function createBallot(string memory subject, uint32 tagIndex, string[] memory _choices) external onlyOwner returns(address){ require(tags.length > tagIndex, 'BallotFactory: Tag index is too high.'); - address cloneAddress; - - address master = masterAddress; - - assembly { - let ptr := mload(0x40) - mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000) - mstore(add(ptr, 0x14), shl(0x60, master)) - mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000) - cloneAddress := create(0, ptr, 0x37) - } - - require(cloneAddress != address(0), "BallotFactory: Ballot clone creation failed"); - - (bool success, ) = cloneAddress.call(abi.encodeWithSignature("init(string,uint32,string[])", subject, tagIndex, _choices)); - require(success, "BallotFactory: Ballot clone initialization failed."); + address cloneAddress = Clones.clone(implementationAddress); + Ballot(cloneAddress).init(subject, tagIndex, _choices, VotingProxy(votingProxyAddress)); ballotAddresses.push(cloneAddress); return cloneAddress; } - function setMasterAddress(address newAddress) external onlyOwner { - require(masterAddress != address(0), 'BallotFactory: Master address should not be zero address'); - masterAddress = newAddress; + function setImplementationAddress(address newAddress) external onlyOwner { + require(newAddress != address(0), 'BallotFactory: Implementation address should not be zero address'); + implementationAddress = newAddress; } function getBallots() external view returns (address[] memory) { diff --git a/test/Ballot.spec.ts b/test/Ballot.spec.ts index 284393e..0af3d18 100644 --- a/test/Ballot.spec.ts +++ b/test/Ballot.spec.ts @@ -4,6 +4,8 @@ import { parseUnits } from '@ethersproject/units'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { ZERO_ADDRESS } from '../lib/constants'; import { + Ballot, + Ballot__factory, BallotFactory, BallotFactory__factory, DeepSquare, @@ -15,22 +17,23 @@ import { import { ERC20Agent } from './testing/ERC20Agent'; import setup from './testing/setup'; -describe.only('Ballot', async () => { +describe('Ballot', async () => { let owner: SignerWithAddress; let accounts: SignerWithAddress[]; let DPS: DeepSquare; let ballot: ExposedBallot; let agentDPS: ERC20Agent; let votingProxy: ExposedVotingProxy; - let ballotMaster: ExposedBallot; + let ballotMaster: Ballot; let ballotFactory: BallotFactory; beforeEach(async () => { ({ owner, accounts, DPS, agentDPS } = await setup()); votingProxy = await new ExposedVotingProxy__factory(owner).deploy(DPS.address); - ballotMaster = await new ExposedBallot__factory(owner).deploy(DPS.address, votingProxy.address); - ballotFactory = await new BallotFactory__factory(owner).deploy(ballotMaster.address); + ballotMaster = await new Ballot__factory(owner).deploy(DPS.address, votingProxy.address); + ballotFactory = await new BallotFactory__factory(owner).deploy(ballotMaster.address, votingProxy.address); await votingProxy.setBallotFactory(ballotFactory.address); + ballot = await new ExposedBallot__factory(owner).deploy(DPS.address, votingProxy.address); }); describe('constructor', () => { @@ -41,33 +44,20 @@ describe.only('Ballot', async () => { }); }); - describe('closeBallot', () => { - beforeEach(async () => { - await ballotFactory.addTag('foo'); - await ballotFactory.createBallot('bar', BigNumber.from(0), ['baz', 'qux']); - // fetch created ballot - }); - - it('should throw if ballot does not exist', async () => { - await expect(ballot.closeBallot()).to.revertedWith('Voting: Ballot index is too high.'); - }); - it('should close the ballot', async () => { - await ballot.closeBallot(); - expect(await ballot.closed()).to.deep.equals(true); + describe('init', () => { + it('should initialize ballot state variables', async () => { + await ballot.init('foo', BigNumber.from(0), ['bar', 'baz'], votingProxy.address); + expect(await ballot.subject()).to.equals('foo'); + expect(await ballot.tagIndex()).to.equals(BigNumber.from(0)); + expect(await ballot.getChoices()).to.deep.equals(['bar', 'baz']); + expect(await ballot.getResults()).to.deep.equals([BigNumber.from(0), BigNumber.from(0)]); }); }); describe('vote', () => { beforeEach(async () => { await ballotFactory.addTag('foo'); - await ballotFactory.createBallot('bar', BigNumber.from(0), ['baz', 'qux']); - // fetch created ballot - }); - - it('should throw if ballot does not exist', async () => { - await expect(ballot.connect(accounts[0]).vote(BigNumber.from(0))).to.revertedWith( - 'Voting: Ballot index is too high.', - ); + await ballot.init('foo', BigNumber.from(0), ['bar', 'baz'], votingProxy.address); }); it('should throw if ballot is closed', async () => { await ballot.closeBallot(); @@ -91,25 +81,22 @@ describe.only('Ballot', async () => { it('should vote', async () => { await agentDPS.transfer(accounts[0], 25000, 18); await ballot.connect(accounts[0]).vote(BigNumber.from(0)); - expect(await ballot._results()).to.deep.equals([accounts[0].address, [0, true]]); // How can we check private state variable values? + expect(await ballot._results()).to.deep.equals([[accounts[0].address, [0, true]]]); + await ballot.connect(accounts[0]).vote(BigNumber.from(1)); + expect(await ballot._results()).to.deep.equals([[accounts[0].address, [1, true]]]); }); }); describe('closeBallot', async () => { - it('should throw of ballot does not exist', async () => { - await expect(ballot.closeBallot()).to.revertedWith('Voting: Ballot index is too high.'); + beforeEach(async () => { + await ballotFactory.addTag('foo'); + await ballot.init('foo', BigNumber.from(0), ['bar', 'baz'], votingProxy.address); }); it('should throw if ballot is not closed', async () => { - await ballotFactory.addTag('foo'); - await ballotFactory.createBallot('bar', BigNumber.from(0), ['baz', 'qux']); - // fetch created ballot await ballot.closeBallot(); await expect(ballot.closeBallot()).to.revertedWith('Voting: Ballot already closed.'); }); it('should show results', async () => { - await ballotFactory.addTag('foo'); - await ballotFactory.createBallot('bar', BigNumber.from(0), ['baz', 'qux']); - // fetch created ballot await agentDPS.transfer(accounts[0], 25000, 18); await agentDPS.transfer(accounts[1], 25000, 18); await agentDPS.transfer(accounts[2], 25000, 18); diff --git a/test/BallotFactory.spec.ts b/test/BallotFactory.spec.ts index 8fc0b09..8a94a82 100644 --- a/test/BallotFactory.spec.ts +++ b/test/BallotFactory.spec.ts @@ -1,65 +1,69 @@ import { expect } from 'chai'; -import { BigNumber } from '@ethersproject/bignumber'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { ZERO_ADDRESS } from '../lib/constants'; import { - Ballot, Ballot__factory, - BallotFactory, BallotFactory__factory, + Ballot, + Ballot__factory, + BallotFactory, + BallotFactory__factory, DeepSquare, - ExposedBallot, ExposedBallot__factory, - ExposedVoting, - ExposedVoting__factory, - ExposedVotingProxy, ExposedVotingProxy__factory + VotingProxy, + VotingProxy__factory, } from '../typings'; -import { ERC20Agent } from './testing/ERC20Agent'; import setup from './testing/setup'; -describe.only('Ballot', async () => { +describe.only('Ballot Factory', async () => { let owner: SignerWithAddress; - let accounts: SignerWithAddress[]; let DPS: DeepSquare; - let ballot: ExposedBallot; - let agentDPS: ERC20Agent; - let votingProxy: ExposedVotingProxy; - let ballotMaster: ExposedBallot; + let votingProxy: VotingProxy; + let ballotImplementation: Ballot; let ballotFactory: BallotFactory; beforeEach(async () => { - ({ owner, accounts, DPS, agentDPS } = await setup()); - votingProxy = await new ExposedVotingProxy__factory(owner).deploy(DPS.address); - ballotMaster = await new ExposedBallot__factory(owner).deploy(DPS.address, votingProxy.address); - ballotFactory = await new BallotFactory__factory(owner).deploy(ballotMaster.address); + ({ owner, DPS } = await setup()); + votingProxy = await new VotingProxy__factory(owner).deploy(DPS.address); + ballotImplementation = await new Ballot__factory(owner).deploy(DPS.address, votingProxy.address); + ballotFactory = await new BallotFactory__factory(owner).deploy(ballotImplementation.address, votingProxy.address); await votingProxy.setBallotFactory(ballotFactory.address); - ballot = await ballotFactory.createBallot(); }); describe('constructor', () => { it('should revert if the DPS contract is the zero address', async () => { - await expect(new ExposedVoting__factory(owner).deploy(ZERO_ADDRESS)).to.be.revertedWith( - 'Vote: DPS address is zero.', + await expect(new BallotFactory__factory(owner).deploy(ZERO_ADDRESS, votingProxy.address)).to.be.revertedWith( + 'BallotFactory: Implementation address should not be zero address', ); }); - }); - - describe('addTag', () => { - it('should add a tag to the list', async () => { - await ballot.addTag('foo'); - await ballot.addTag('bar'); - expect(await ballot.getTags()).to.deep.equals(['foo', 'bar']); + it('should revert if the DPS contract is the zero address', async () => { + await expect( + new BallotFactory__factory(owner).deploy(ballotImplementation.address, ZERO_ADDRESS), + ).to.be.revertedWith('BallotFactory: Voting proxy address should not be zero address'); }); }); describe('createBallot', () => { it('should throw if tag does not exist', async () => { - await expect(ballot.createBallot('foo', BigNumber.from(1), ['bar', 'baz'])).to.revertedWith( - 'Voting: Tag index is too high.', + await expect(ballotFactory.createBallot('foo', 0, ['bar', 'baz'])).to.revertedWith( + 'BallotFactory: Tag index is too high.', + ); + }); + + it('should create a new ballot', async () => { + await ballotFactory.addTag('foo'); + await ballotFactory.setImplementationAddress(ballotImplementation.address); + const ballotAddress = await ballotFactory.createBallot('foo', 0, ['bar', 'baz']).then((t) => t.data); + expect(await ballotFactory.getBallots()).to.deep.equals([ballotAddress]); + }); + }); + + describe('setImplementationAddress', () => { + it('should throw if implementation address is zero address', async () => { + await expect(ballotFactory.setImplementationAddress(ZERO_ADDRESS)).to.revertedWith( + 'BallotFactory: Implementation address should not be zero address', ); }); - it('should create a ballot', async () => { - await ballot.addTag('foo'); - await ballot.createBallot('bar', BigNumber.from(0), ['baz', 'qux']); - expect(await ballot.getBallots()).to.deep.equals([['bar', false, 0]]); - expect(await ballot.getChoices()).to.deep.equals([['baz', 'qux']]); + it('should set the implementation address', async () => { + await ballotFactory.setImplementationAddress(ballotImplementation.address); + expect(await ballotFactory.implementationAddress()).to.equals(ballotImplementation.address); }); }); }); diff --git a/test/VotingProxy.spec.ts b/test/VotingProxy.spec.ts index 3e41447..af22c46 100644 --- a/test/VotingProxy.spec.ts +++ b/test/VotingProxy.spec.ts @@ -15,7 +15,7 @@ import { import { ERC20Agent } from './testing/ERC20Agent'; import setup from './testing/setup'; -describe.only('Voting', async () => { +describe('Voting proxy', async () => { let owner: SignerWithAddress; let accounts: SignerWithAddress[]; let DPS: DeepSquare; @@ -28,13 +28,13 @@ describe.only('Voting', async () => { ({ owner, accounts, DPS, agentDPS } = await setup()); votingProxy = await new ExposedVotingProxy__factory(owner).deploy(DPS.address); ballotMaster = await new Ballot__factory(owner).deploy(DPS.address, votingProxy.address); - ballotFactory = await new BallotFactory__factory(owner).deploy(ballotMaster.address); + ballotFactory = await new BallotFactory__factory(owner).deploy(ballotMaster.address, votingProxy.address); }); describe('constructor', () => { it('should revert if the DPS contract is the zero address', async () => { await expect(new ExposedVotingProxy__factory(owner).deploy(ZERO_ADDRESS)).to.be.revertedWith( - 'Vote: DPS address is zero.', + 'VotingProxy: DPS address is zero.', ); }); }); @@ -53,13 +53,13 @@ describe.only('Voting', async () => { it('should throw if tag does not exist', async () => { await expect(votingProxy.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0))).to.revertedWith( - 'Voting: Tag index is too high', + 'VotingProxy: Tag index is too high', ); }); it('should throw if delegate has less than 25k DPS', async () => { await ballotFactory.addTag('foo'); await expect(votingProxy.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0))).to.revertedWith( - 'Voting: Proxy has not enough DPS.', + 'VotingProxy: Proxy has not enough DPS.', ); }); it('should register delegation', async () => { @@ -95,7 +95,7 @@ describe.only('Voting', async () => { }); it('should throw if tag does not exist', async () => { await expect(votingProxy.proxyAmount(accounts[1].address, BigNumber.from(0))).to.revertedWith( - 'Voting: Tag index is too high', + 'VotingProxy: Tag index is too high', ); }); it('should returns total proxy vote power', async () => { @@ -106,4 +106,18 @@ describe.only('Voting', async () => { expect(await votingProxy.proxyAmount(accounts[1].address, BigNumber.from(0))).to.equals(parseUnits('55555', 18)); }); }); + + describe('hasDelegated', () => { + beforeEach(async () => { + await votingProxy.setBallotFactory(ballotFactory.address); + }); + it('should returns if a voter has delegated his vote on specified tag', async () => { + await ballotFactory.addTag('foo'); + await agentDPS.transfer(accounts[0], 25000, 18); + await agentDPS.transfer(accounts[1], 25000, 18); + await votingProxy.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0)); + expect(await votingProxy.hasDelegated(accounts[0].address, BigNumber.from(0))).to.equals(true); + expect(await votingProxy.hasDelegated(accounts[1].address, BigNumber.from(0))).to.equals(false); + }); + }); }); diff --git a/typings/contracts/Ballot.ts b/typings/contracts/Ballot.ts new file mode 100644 index 0000000..2213eef --- /dev/null +++ b/typings/contracts/Ballot.ts @@ -0,0 +1,439 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, +} from "../common"; + +export interface BallotInterface extends utils.Interface { + functions: { + "DPS()": FunctionFragment; + "choices(uint256)": FunctionFragment; + "closeBallot()": FunctionFragment; + "closed()": FunctionFragment; + "getChoices()": FunctionFragment; + "getResults()": FunctionFragment; + "init(string,uint32,string[],address)": FunctionFragment; + "owner()": FunctionFragment; + "proxy()": FunctionFragment; + "renounceOwnership()": FunctionFragment; + "resultStorage(uint256)": FunctionFragment; + "subject()": FunctionFragment; + "tagIndex()": FunctionFragment; + "transferOwnership(address)": FunctionFragment; + "vote(uint32)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "DPS" + | "choices" + | "closeBallot" + | "closed" + | "getChoices" + | "getResults" + | "init" + | "owner" + | "proxy" + | "renounceOwnership" + | "resultStorage" + | "subject" + | "tagIndex" + | "transferOwnership" + | "vote" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "DPS", values?: undefined): string; + encodeFunctionData( + functionFragment: "choices", + values: [BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "closeBallot", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "closed", values?: undefined): string; + encodeFunctionData( + functionFragment: "getChoices", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getResults", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "init", + values: [string, BigNumberish, string[], string] + ): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData(functionFragment: "proxy", values?: undefined): string; + encodeFunctionData( + functionFragment: "renounceOwnership", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "resultStorage", + values: [BigNumberish] + ): string; + encodeFunctionData(functionFragment: "subject", values?: undefined): string; + encodeFunctionData(functionFragment: "tagIndex", values?: undefined): string; + encodeFunctionData( + functionFragment: "transferOwnership", + values: [string] + ): string; + encodeFunctionData(functionFragment: "vote", values: [BigNumberish]): string; + + decodeFunctionResult(functionFragment: "DPS", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "choices", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "closeBallot", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "closed", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getChoices", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getResults", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "init", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "proxy", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "renounceOwnership", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "resultStorage", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "subject", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "tagIndex", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "transferOwnership", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "vote", data: BytesLike): Result; + + events: { + "OwnershipTransferred(address,address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; +} + +export interface OwnershipTransferredEventObject { + previousOwner: string; + newOwner: string; +} +export type OwnershipTransferredEvent = TypedEvent< + [string, string], + OwnershipTransferredEventObject +>; + +export type OwnershipTransferredEventFilter = + TypedEventFilter; + +export interface Ballot extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: BallotInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + DPS(overrides?: CallOverrides): Promise<[string]>; + + choices(arg0: BigNumberish, overrides?: CallOverrides): Promise<[string]>; + + closeBallot( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + closed(overrides?: CallOverrides): Promise<[boolean]>; + + getChoices(overrides?: CallOverrides): Promise<[string[]]>; + + getResults(overrides?: CallOverrides): Promise<[BigNumber[]]>; + + init( + _subject: string, + _tagIndex: BigNumberish, + _choices: string[], + _proxy: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + owner(overrides?: CallOverrides): Promise<[string]>; + + proxy(overrides?: CallOverrides): Promise<[string]>; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + resultStorage( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + subject(overrides?: CallOverrides): Promise<[string]>; + + tagIndex(overrides?: CallOverrides): Promise<[number]>; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + vote( + choiceIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + DPS(overrides?: CallOverrides): Promise; + + choices(arg0: BigNumberish, overrides?: CallOverrides): Promise; + + closeBallot( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + closed(overrides?: CallOverrides): Promise; + + getChoices(overrides?: CallOverrides): Promise; + + getResults(overrides?: CallOverrides): Promise; + + init( + _subject: string, + _tagIndex: BigNumberish, + _choices: string[], + _proxy: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxy(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + resultStorage( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise; + + subject(overrides?: CallOverrides): Promise; + + tagIndex(overrides?: CallOverrides): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + vote( + choiceIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + callStatic: { + DPS(overrides?: CallOverrides): Promise; + + choices(arg0: BigNumberish, overrides?: CallOverrides): Promise; + + closeBallot(overrides?: CallOverrides): Promise; + + closed(overrides?: CallOverrides): Promise; + + getChoices(overrides?: CallOverrides): Promise; + + getResults(overrides?: CallOverrides): Promise; + + init( + _subject: string, + _tagIndex: BigNumberish, + _choices: string[], + _proxy: string, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxy(overrides?: CallOverrides): Promise; + + renounceOwnership(overrides?: CallOverrides): Promise; + + resultStorage( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise; + + subject(overrides?: CallOverrides): Promise; + + tagIndex(overrides?: CallOverrides): Promise; + + transferOwnership( + newOwner: string, + overrides?: CallOverrides + ): Promise; + + vote(choiceIndex: BigNumberish, overrides?: CallOverrides): Promise; + }; + + filters: { + "OwnershipTransferred(address,address)"( + previousOwner?: string | null, + newOwner?: string | null + ): OwnershipTransferredEventFilter; + OwnershipTransferred( + previousOwner?: string | null, + newOwner?: string | null + ): OwnershipTransferredEventFilter; + }; + + estimateGas: { + DPS(overrides?: CallOverrides): Promise; + + choices(arg0: BigNumberish, overrides?: CallOverrides): Promise; + + closeBallot( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + closed(overrides?: CallOverrides): Promise; + + getChoices(overrides?: CallOverrides): Promise; + + getResults(overrides?: CallOverrides): Promise; + + init( + _subject: string, + _tagIndex: BigNumberish, + _choices: string[], + _proxy: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxy(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + resultStorage( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise; + + subject(overrides?: CallOverrides): Promise; + + tagIndex(overrides?: CallOverrides): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + vote( + choiceIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + populateTransaction: { + DPS(overrides?: CallOverrides): Promise; + + choices( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise; + + closeBallot( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + closed(overrides?: CallOverrides): Promise; + + getChoices(overrides?: CallOverrides): Promise; + + getResults(overrides?: CallOverrides): Promise; + + init( + _subject: string, + _tagIndex: BigNumberish, + _choices: string[], + _proxy: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxy(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + resultStorage( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise; + + subject(overrides?: CallOverrides): Promise; + + tagIndex(overrides?: CallOverrides): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + vote( + choiceIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; +} diff --git a/typings/contracts/VotingProxy.ts b/typings/contracts/VotingProxy.ts new file mode 100644 index 0000000..8911857 --- /dev/null +++ b/typings/contracts/VotingProxy.ts @@ -0,0 +1,365 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, +} from "../common"; + +export interface VotingProxyInterface extends utils.Interface { + functions: { + "DPS()": FunctionFragment; + "ballotFactory()": FunctionFragment; + "grantProxy(address,uint32)": FunctionFragment; + "hasDelegated(address,uint32)": FunctionFragment; + "owner()": FunctionFragment; + "proxyAmount(address,uint32)": FunctionFragment; + "renounceOwnership()": FunctionFragment; + "setBallotFactory(address)": FunctionFragment; + "transferOwnership(address)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "DPS" + | "ballotFactory" + | "grantProxy" + | "hasDelegated" + | "owner" + | "proxyAmount" + | "renounceOwnership" + | "setBallotFactory" + | "transferOwnership" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "DPS", values?: undefined): string; + encodeFunctionData( + functionFragment: "ballotFactory", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "grantProxy", + values: [string, BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "hasDelegated", + values: [string, BigNumberish] + ): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData( + functionFragment: "proxyAmount", + values: [string, BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "renounceOwnership", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "setBallotFactory", + values: [string] + ): string; + encodeFunctionData( + functionFragment: "transferOwnership", + values: [string] + ): string; + + decodeFunctionResult(functionFragment: "DPS", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "ballotFactory", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "grantProxy", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "hasDelegated", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "proxyAmount", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "renounceOwnership", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "setBallotFactory", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "transferOwnership", + data: BytesLike + ): Result; + + events: { + "OwnershipTransferred(address,address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; +} + +export interface OwnershipTransferredEventObject { + previousOwner: string; + newOwner: string; +} +export type OwnershipTransferredEvent = TypedEvent< + [string, string], + OwnershipTransferredEventObject +>; + +export type OwnershipTransferredEventFilter = + TypedEventFilter; + +export interface VotingProxy extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: VotingProxyInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + DPS(overrides?: CallOverrides): Promise<[string]>; + + ballotFactory(overrides?: CallOverrides): Promise<[string]>; + + grantProxy( + to: string, + tagIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + hasDelegated( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise<[boolean]>; + + owner(overrides?: CallOverrides): Promise<[string]>; + + proxyAmount( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + setBallotFactory( + _ballotFactory: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + DPS(overrides?: CallOverrides): Promise; + + ballotFactory(overrides?: CallOverrides): Promise; + + grantProxy( + to: string, + tagIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + hasDelegated( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxyAmount( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + setBallotFactory( + _ballotFactory: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + callStatic: { + DPS(overrides?: CallOverrides): Promise; + + ballotFactory(overrides?: CallOverrides): Promise; + + grantProxy( + to: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + hasDelegated( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxyAmount( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + renounceOwnership(overrides?: CallOverrides): Promise; + + setBallotFactory( + _ballotFactory: string, + overrides?: CallOverrides + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "OwnershipTransferred(address,address)"( + previousOwner?: string | null, + newOwner?: string | null + ): OwnershipTransferredEventFilter; + OwnershipTransferred( + previousOwner?: string | null, + newOwner?: string | null + ): OwnershipTransferredEventFilter; + }; + + estimateGas: { + DPS(overrides?: CallOverrides): Promise; + + ballotFactory(overrides?: CallOverrides): Promise; + + grantProxy( + to: string, + tagIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + hasDelegated( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxyAmount( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + setBallotFactory( + _ballotFactory: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + populateTransaction: { + DPS(overrides?: CallOverrides): Promise; + + ballotFactory(overrides?: CallOverrides): Promise; + + grantProxy( + to: string, + tagIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + hasDelegated( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxyAmount( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + setBallotFactory( + _ballotFactory: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; +} diff --git a/typings/contracts/Voting.ts b/typings/contracts/factories/BallotFactory.ts similarity index 52% rename from typings/contracts/Voting.ts rename to typings/contracts/factories/BallotFactory.ts index ba7d313..396d0a3 100644 --- a/typings/contracts/Voting.ts +++ b/typings/contracts/factories/BallotFactory.ts @@ -24,106 +24,57 @@ import type { TypedEvent, TypedListener, OnEvent, -} from "../common"; +} from "../../common"; -export declare namespace Voting { - export type BallotStruct = { - subject: string; - closed: boolean; - tagIndex: BigNumberish; - }; - - export type BallotStructOutput = [string, boolean, number] & { - subject: string; - closed: boolean; - tagIndex: number; - }; -} - -export interface VotingInterface extends utils.Interface { +export interface BallotFactoryInterface extends utils.Interface { functions: { - "DPS()": FunctionFragment; "addTag(string)": FunctionFragment; - "ballots(uint256)": FunctionFragment; - "choices(uint256,uint256)": FunctionFragment; - "closeBallot(uint32)": FunctionFragment; + "ballotAddresses(uint256)": FunctionFragment; "createBallot(string,uint32,string[])": FunctionFragment; - "getAllResults()": FunctionFragment; - "getBallotResult(uint256)": FunctionFragment; "getBallots()": FunctionFragment; - "getChoices()": FunctionFragment; "getTags()": FunctionFragment; - "grantProxy(address,uint32)": FunctionFragment; + "implementationAddress()": FunctionFragment; "owner()": FunctionFragment; "renounceOwnership()": FunctionFragment; - "resultStorage(uint256,uint256)": FunctionFragment; + "setImplementationAddress(address)": FunctionFragment; "tags(uint256)": FunctionFragment; - "totalProxyAmount(address,uint32)": FunctionFragment; "transferOwnership(address)": FunctionFragment; - "vote(uint32,uint32)": FunctionFragment; + "votingProxyAddress()": FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "DPS" | "addTag" - | "ballots" - | "choices" - | "closeBallot" + | "ballotAddresses" | "createBallot" - | "getAllResults" - | "getBallotResult" | "getBallots" - | "getChoices" | "getTags" - | "grantProxy" + | "implementationAddress" | "owner" | "renounceOwnership" - | "resultStorage" + | "setImplementationAddress" | "tags" - | "totalProxyAmount" | "transferOwnership" - | "vote" + | "votingProxyAddress" ): FunctionFragment; - encodeFunctionData(functionFragment: "DPS", values?: undefined): string; encodeFunctionData(functionFragment: "addTag", values: [string]): string; encodeFunctionData( - functionFragment: "ballots", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "choices", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "closeBallot", + functionFragment: "ballotAddresses", values: [BigNumberish] ): string; encodeFunctionData( functionFragment: "createBallot", values: [string, BigNumberish, string[]] ): string; - encodeFunctionData( - functionFragment: "getAllResults", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getBallotResult", - values: [BigNumberish] - ): string; encodeFunctionData( functionFragment: "getBallots", values?: undefined ): string; - encodeFunctionData( - functionFragment: "getChoices", - values?: undefined - ): string; encodeFunctionData(functionFragment: "getTags", values?: undefined): string; encodeFunctionData( - functionFragment: "grantProxy", - values: [string, BigNumberish] + functionFragment: "implementationAddress", + values?: undefined ): string; encodeFunctionData(functionFragment: "owner", values?: undefined): string; encodeFunctionData( @@ -131,66 +82,52 @@ export interface VotingInterface extends utils.Interface { values?: undefined ): string; encodeFunctionData( - functionFragment: "resultStorage", - values: [BigNumberish, BigNumberish] + functionFragment: "setImplementationAddress", + values: [string] ): string; encodeFunctionData(functionFragment: "tags", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "totalProxyAmount", - values: [string, BigNumberish] - ): string; encodeFunctionData( functionFragment: "transferOwnership", values: [string] ): string; encodeFunctionData( - functionFragment: "vote", - values: [BigNumberish, BigNumberish] + functionFragment: "votingProxyAddress", + values?: undefined ): string; - decodeFunctionResult(functionFragment: "DPS", data: BytesLike): Result; decodeFunctionResult(functionFragment: "addTag", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "ballots", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "choices", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "closeBallot", + functionFragment: "ballotAddresses", data: BytesLike ): Result; decodeFunctionResult( functionFragment: "createBallot", data: BytesLike ): Result; + decodeFunctionResult(functionFragment: "getBallots", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getTags", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "getAllResults", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getBallotResult", + functionFragment: "implementationAddress", data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "getBallots", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getChoices", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getTags", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "grantProxy", data: BytesLike): Result; decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; decodeFunctionResult( functionFragment: "renounceOwnership", data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "resultStorage", + functionFragment: "setImplementationAddress", data: BytesLike ): Result; decodeFunctionResult(functionFragment: "tags", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "totalProxyAmount", + functionFragment: "transferOwnership", data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "transferOwnership", + functionFragment: "votingProxyAddress", data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "vote", data: BytesLike): Result; events: { "OwnershipTransferred(address,address)": EventFragment; @@ -211,12 +148,12 @@ export type OwnershipTransferredEvent = TypedEvent< export type OwnershipTransferredEventFilter = TypedEventFilter; -export interface Voting extends BaseContract { +export interface BallotFactory extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; attach(addressOrName: string): this; deployed(): Promise; - interface: VotingInterface; + interface: BallotFactoryInterface; queryFilter( event: TypedEventFilter, @@ -238,35 +175,16 @@ export interface Voting extends BaseContract { removeListener: OnEvent; functions: { - DPS(overrides?: CallOverrides): Promise<[string]>; - addTag( name: string, overrides?: Overrides & { from?: string | Promise } ): Promise; - ballots( + ballotAddresses( arg0: BigNumberish, overrides?: CallOverrides - ): Promise< - [string, boolean, number] & { - subject: string; - closed: boolean; - tagIndex: number; - } - >; - - choices( - arg0: BigNumberish, - arg1: BigNumberish, - overrides?: CallOverrides ): Promise<[string]>; - closeBallot( - ballotIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - createBallot( subject: string, tagIndex: BigNumberish, @@ -274,26 +192,11 @@ export interface Voting extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - getAllResults(overrides?: CallOverrides): Promise<[BigNumber[][]]>; - - getBallotResult( - ballotIndex: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber[]]>; - - getBallots( - overrides?: CallOverrides - ): Promise<[Voting.BallotStructOutput[]]>; - - getChoices(overrides?: CallOverrides): Promise<[string[][]]>; + getBallots(overrides?: CallOverrides): Promise<[string[]]>; getTags(overrides?: CallOverrides): Promise<[string[]]>; - grantProxy( - to: string, - tagIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; + implementationAddress(overrides?: CallOverrides): Promise<[string]>; owner(overrides?: CallOverrides): Promise<[string]>; @@ -301,61 +204,31 @@ export interface Voting extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - resultStorage( - arg0: BigNumberish, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; + setImplementationAddress( + newAddress: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; tags(arg0: BigNumberish, overrides?: CallOverrides): Promise<[string]>; - totalProxyAmount( - voter: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - transferOwnership( newOwner: string, overrides?: Overrides & { from?: string | Promise } ): Promise; - vote( - ballotIndex: BigNumberish, - choiceIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; + votingProxyAddress(overrides?: CallOverrides): Promise<[string]>; }; - DPS(overrides?: CallOverrides): Promise; - addTag( name: string, overrides?: Overrides & { from?: string | Promise } ): Promise; - ballots( + ballotAddresses( arg0: BigNumberish, overrides?: CallOverrides - ): Promise< - [string, boolean, number] & { - subject: string; - closed: boolean; - tagIndex: number; - } - >; - - choices( - arg0: BigNumberish, - arg1: BigNumberish, - overrides?: CallOverrides ): Promise; - closeBallot( - ballotIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - createBallot( subject: string, tagIndex: BigNumberish, @@ -363,24 +236,11 @@ export interface Voting extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - getAllResults(overrides?: CallOverrides): Promise; - - getBallotResult( - ballotIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getBallots(overrides?: CallOverrides): Promise; - - getChoices(overrides?: CallOverrides): Promise; + getBallots(overrides?: CallOverrides): Promise; getTags(overrides?: CallOverrides): Promise; - grantProxy( - to: string, - tagIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; + implementationAddress(overrides?: CallOverrides): Promise; owner(overrides?: CallOverrides): Promise; @@ -388,112 +248,58 @@ export interface Voting extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - resultStorage( - arg0: BigNumberish, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; + setImplementationAddress( + newAddress: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; tags(arg0: BigNumberish, overrides?: CallOverrides): Promise; - totalProxyAmount( - voter: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - transferOwnership( newOwner: string, overrides?: Overrides & { from?: string | Promise } ): Promise; - vote( - ballotIndex: BigNumberish, - choiceIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; + votingProxyAddress(overrides?: CallOverrides): Promise; callStatic: { - DPS(overrides?: CallOverrides): Promise; - addTag(name: string, overrides?: CallOverrides): Promise; - ballots( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string, boolean, number] & { - subject: string; - closed: boolean; - tagIndex: number; - } - >; - - choices( + ballotAddresses( arg0: BigNumberish, - arg1: BigNumberish, overrides?: CallOverrides ): Promise; - closeBallot( - ballotIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - createBallot( subject: string, tagIndex: BigNumberish, _choices: string[], overrides?: CallOverrides - ): Promise; - - getAllResults(overrides?: CallOverrides): Promise; - - getBallotResult( - ballotIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getBallots(overrides?: CallOverrides): Promise; + ): Promise; - getChoices(overrides?: CallOverrides): Promise; + getBallots(overrides?: CallOverrides): Promise; getTags(overrides?: CallOverrides): Promise; - grantProxy( - to: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; + implementationAddress(overrides?: CallOverrides): Promise; owner(overrides?: CallOverrides): Promise; renounceOwnership(overrides?: CallOverrides): Promise; - resultStorage( - arg0: BigNumberish, - arg1: BigNumberish, + setImplementationAddress( + newAddress: string, overrides?: CallOverrides - ): Promise; + ): Promise; tags(arg0: BigNumberish, overrides?: CallOverrides): Promise; - totalProxyAmount( - voter: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - transferOwnership( newOwner: string, overrides?: CallOverrides ): Promise; - vote( - ballotIndex: BigNumberish, - choiceIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; + votingProxyAddress(overrides?: CallOverrides): Promise; }; filters: { @@ -508,26 +314,16 @@ export interface Voting extends BaseContract { }; estimateGas: { - DPS(overrides?: CallOverrides): Promise; - addTag( name: string, overrides?: Overrides & { from?: string | Promise } ): Promise; - ballots(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - choices( + ballotAddresses( arg0: BigNumberish, - arg1: BigNumberish, overrides?: CallOverrides ): Promise; - closeBallot( - ballotIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - createBallot( subject: string, tagIndex: BigNumberish, @@ -535,24 +331,11 @@ export interface Voting extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - getAllResults(overrides?: CallOverrides): Promise; - - getBallotResult( - ballotIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - getBallots(overrides?: CallOverrides): Promise; - getChoices(overrides?: CallOverrides): Promise; - getTags(overrides?: CallOverrides): Promise; - grantProxy( - to: string, - tagIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; + implementationAddress(overrides?: CallOverrides): Promise; owner(overrides?: CallOverrides): Promise; @@ -560,56 +343,32 @@ export interface Voting extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - resultStorage( - arg0: BigNumberish, - arg1: BigNumberish, - overrides?: CallOverrides + setImplementationAddress( + newAddress: string, + overrides?: Overrides & { from?: string | Promise } ): Promise; tags(arg0: BigNumberish, overrides?: CallOverrides): Promise; - totalProxyAmount( - voter: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - transferOwnership( newOwner: string, overrides?: Overrides & { from?: string | Promise } ): Promise; - vote( - ballotIndex: BigNumberish, - choiceIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; + votingProxyAddress(overrides?: CallOverrides): Promise; }; populateTransaction: { - DPS(overrides?: CallOverrides): Promise; - addTag( name: string, overrides?: Overrides & { from?: string | Promise } ): Promise; - ballots( + ballotAddresses( arg0: BigNumberish, overrides?: CallOverrides ): Promise; - choices( - arg0: BigNumberish, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - closeBallot( - ballotIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - createBallot( subject: string, tagIndex: BigNumberish, @@ -617,23 +376,12 @@ export interface Voting extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - getAllResults(overrides?: CallOverrides): Promise; - - getBallotResult( - ballotIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - getBallots(overrides?: CallOverrides): Promise; - getChoices(overrides?: CallOverrides): Promise; - getTags(overrides?: CallOverrides): Promise; - grantProxy( - to: string, - tagIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + implementationAddress( + overrides?: CallOverrides ): Promise; owner(overrides?: CallOverrides): Promise; @@ -642,10 +390,9 @@ export interface Voting extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - resultStorage( - arg0: BigNumberish, - arg1: BigNumberish, - overrides?: CallOverrides + setImplementationAddress( + newAddress: string, + overrides?: Overrides & { from?: string | Promise } ): Promise; tags( @@ -653,21 +400,13 @@ export interface Voting extends BaseContract { overrides?: CallOverrides ): Promise; - totalProxyAmount( - voter: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - transferOwnership( newOwner: string, overrides?: Overrides & { from?: string | Promise } ): Promise; - vote( - ballotIndex: BigNumberish, - choiceIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + votingProxyAddress( + overrides?: CallOverrides ): Promise; }; } diff --git a/typings/contracts/testing/ExposedBallot.ts b/typings/contracts/testing/ExposedBallot.ts new file mode 100644 index 0000000..822aef7 --- /dev/null +++ b/typings/contracts/testing/ExposedBallot.ts @@ -0,0 +1,477 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, +} from "../../common"; + +export declare namespace Ballot { + export type VoteStruct = { choiceIndex: BigNumberish; hasVoted: boolean }; + + export type VoteStructOutput = [number, boolean] & { + choiceIndex: number; + hasVoted: boolean; + }; +} + +export declare namespace ExposedBallot { + export type ResultSampleStruct = { voter: string; vote: Ballot.VoteStruct }; + + export type ResultSampleStructOutput = [string, Ballot.VoteStructOutput] & { + voter: string; + vote: Ballot.VoteStructOutput; + }; +} + +export interface ExposedBallotInterface extends utils.Interface { + functions: { + "DPS()": FunctionFragment; + "_results()": FunctionFragment; + "choices(uint256)": FunctionFragment; + "closeBallot()": FunctionFragment; + "closed()": FunctionFragment; + "getChoices()": FunctionFragment; + "getResults()": FunctionFragment; + "init(string,uint32,string[],address)": FunctionFragment; + "owner()": FunctionFragment; + "proxy()": FunctionFragment; + "renounceOwnership()": FunctionFragment; + "resultStorage(uint256)": FunctionFragment; + "subject()": FunctionFragment; + "tagIndex()": FunctionFragment; + "transferOwnership(address)": FunctionFragment; + "vote(uint32)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "DPS" + | "_results" + | "choices" + | "closeBallot" + | "closed" + | "getChoices" + | "getResults" + | "init" + | "owner" + | "proxy" + | "renounceOwnership" + | "resultStorage" + | "subject" + | "tagIndex" + | "transferOwnership" + | "vote" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "DPS", values?: undefined): string; + encodeFunctionData(functionFragment: "_results", values?: undefined): string; + encodeFunctionData( + functionFragment: "choices", + values: [BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "closeBallot", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "closed", values?: undefined): string; + encodeFunctionData( + functionFragment: "getChoices", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getResults", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "init", + values: [string, BigNumberish, string[], string] + ): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData(functionFragment: "proxy", values?: undefined): string; + encodeFunctionData( + functionFragment: "renounceOwnership", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "resultStorage", + values: [BigNumberish] + ): string; + encodeFunctionData(functionFragment: "subject", values?: undefined): string; + encodeFunctionData(functionFragment: "tagIndex", values?: undefined): string; + encodeFunctionData( + functionFragment: "transferOwnership", + values: [string] + ): string; + encodeFunctionData(functionFragment: "vote", values: [BigNumberish]): string; + + decodeFunctionResult(functionFragment: "DPS", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "_results", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "choices", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "closeBallot", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "closed", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getChoices", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getResults", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "init", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "proxy", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "renounceOwnership", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "resultStorage", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "subject", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "tagIndex", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "transferOwnership", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "vote", data: BytesLike): Result; + + events: { + "OwnershipTransferred(address,address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; +} + +export interface OwnershipTransferredEventObject { + previousOwner: string; + newOwner: string; +} +export type OwnershipTransferredEvent = TypedEvent< + [string, string], + OwnershipTransferredEventObject +>; + +export type OwnershipTransferredEventFilter = + TypedEventFilter; + +export interface ExposedBallot extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: ExposedBallotInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + DPS(overrides?: CallOverrides): Promise<[string]>; + + _results( + overrides?: CallOverrides + ): Promise<[ExposedBallot.ResultSampleStructOutput[]]>; + + choices(arg0: BigNumberish, overrides?: CallOverrides): Promise<[string]>; + + closeBallot( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + closed(overrides?: CallOverrides): Promise<[boolean]>; + + getChoices(overrides?: CallOverrides): Promise<[string[]]>; + + getResults(overrides?: CallOverrides): Promise<[BigNumber[]]>; + + init( + _subject: string, + _tagIndex: BigNumberish, + _choices: string[], + _proxy: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + owner(overrides?: CallOverrides): Promise<[string]>; + + proxy(overrides?: CallOverrides): Promise<[string]>; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + resultStorage( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + subject(overrides?: CallOverrides): Promise<[string]>; + + tagIndex(overrides?: CallOverrides): Promise<[number]>; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + vote( + choiceIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + DPS(overrides?: CallOverrides): Promise; + + _results( + overrides?: CallOverrides + ): Promise; + + choices(arg0: BigNumberish, overrides?: CallOverrides): Promise; + + closeBallot( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + closed(overrides?: CallOverrides): Promise; + + getChoices(overrides?: CallOverrides): Promise; + + getResults(overrides?: CallOverrides): Promise; + + init( + _subject: string, + _tagIndex: BigNumberish, + _choices: string[], + _proxy: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxy(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + resultStorage( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise; + + subject(overrides?: CallOverrides): Promise; + + tagIndex(overrides?: CallOverrides): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + vote( + choiceIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + callStatic: { + DPS(overrides?: CallOverrides): Promise; + + _results( + overrides?: CallOverrides + ): Promise; + + choices(arg0: BigNumberish, overrides?: CallOverrides): Promise; + + closeBallot(overrides?: CallOverrides): Promise; + + closed(overrides?: CallOverrides): Promise; + + getChoices(overrides?: CallOverrides): Promise; + + getResults(overrides?: CallOverrides): Promise; + + init( + _subject: string, + _tagIndex: BigNumberish, + _choices: string[], + _proxy: string, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxy(overrides?: CallOverrides): Promise; + + renounceOwnership(overrides?: CallOverrides): Promise; + + resultStorage( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise; + + subject(overrides?: CallOverrides): Promise; + + tagIndex(overrides?: CallOverrides): Promise; + + transferOwnership( + newOwner: string, + overrides?: CallOverrides + ): Promise; + + vote(choiceIndex: BigNumberish, overrides?: CallOverrides): Promise; + }; + + filters: { + "OwnershipTransferred(address,address)"( + previousOwner?: string | null, + newOwner?: string | null + ): OwnershipTransferredEventFilter; + OwnershipTransferred( + previousOwner?: string | null, + newOwner?: string | null + ): OwnershipTransferredEventFilter; + }; + + estimateGas: { + DPS(overrides?: CallOverrides): Promise; + + _results(overrides?: CallOverrides): Promise; + + choices(arg0: BigNumberish, overrides?: CallOverrides): Promise; + + closeBallot( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + closed(overrides?: CallOverrides): Promise; + + getChoices(overrides?: CallOverrides): Promise; + + getResults(overrides?: CallOverrides): Promise; + + init( + _subject: string, + _tagIndex: BigNumberish, + _choices: string[], + _proxy: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxy(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + resultStorage( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise; + + subject(overrides?: CallOverrides): Promise; + + tagIndex(overrides?: CallOverrides): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + vote( + choiceIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + populateTransaction: { + DPS(overrides?: CallOverrides): Promise; + + _results(overrides?: CallOverrides): Promise; + + choices( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise; + + closeBallot( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + closed(overrides?: CallOverrides): Promise; + + getChoices(overrides?: CallOverrides): Promise; + + getResults(overrides?: CallOverrides): Promise; + + init( + _subject: string, + _tagIndex: BigNumberish, + _choices: string[], + _proxy: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxy(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + resultStorage( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise; + + subject(overrides?: CallOverrides): Promise; + + tagIndex(overrides?: CallOverrides): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + vote( + choiceIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; +} diff --git a/typings/contracts/testing/ExposedVoting.ts b/typings/contracts/testing/ExposedVoting.ts deleted file mode 100644 index 2190f5d..0000000 --- a/typings/contracts/testing/ExposedVoting.ts +++ /dev/null @@ -1,798 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export declare namespace Voting { - export type VoteStruct = { choiceIndex: BigNumberish; hasVoted: boolean }; - - export type VoteStructOutput = [number, boolean] & { - choiceIndex: number; - hasVoted: boolean; - }; - - export type BallotStruct = { - subject: string; - closed: boolean; - tagIndex: BigNumberish; - }; - - export type BallotStructOutput = [string, boolean, number] & { - subject: string; - closed: boolean; - tagIndex: number; - }; -} - -export declare namespace ExposedVoting { - export type ResultSampleStruct = { voter: string; vote: Voting.VoteStruct }; - - export type ResultSampleStructOutput = [string, Voting.VoteStructOutput] & { - voter: string; - vote: Voting.VoteStructOutput; - }; -} - -export interface ExposedVotingInterface extends utils.Interface { - functions: { - "DPS()": FunctionFragment; - "_delegates(address,uint32)": FunctionFragment; - "_proxyVoters(address,uint32)": FunctionFragment; - "_results(uint256)": FunctionFragment; - "addTag(string)": FunctionFragment; - "ballots(uint256)": FunctionFragment; - "choices(uint256,uint256)": FunctionFragment; - "closeBallot(uint32)": FunctionFragment; - "createBallot(string,uint32,string[])": FunctionFragment; - "getAllResults()": FunctionFragment; - "getBallotResult(uint256)": FunctionFragment; - "getBallots()": FunctionFragment; - "getChoices()": FunctionFragment; - "getTags()": FunctionFragment; - "grantProxy(address,uint32)": FunctionFragment; - "owner()": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "resultStorage(uint256,uint256)": FunctionFragment; - "tags(uint256)": FunctionFragment; - "totalProxyAmount(address,uint32)": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - "vote(uint32,uint32)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "DPS" - | "_delegates" - | "_proxyVoters" - | "_results" - | "addTag" - | "ballots" - | "choices" - | "closeBallot" - | "createBallot" - | "getAllResults" - | "getBallotResult" - | "getBallots" - | "getChoices" - | "getTags" - | "grantProxy" - | "owner" - | "renounceOwnership" - | "resultStorage" - | "tags" - | "totalProxyAmount" - | "transferOwnership" - | "vote" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "DPS", values?: undefined): string; - encodeFunctionData( - functionFragment: "_delegates", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "_proxyVoters", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "_results", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "addTag", values: [string]): string; - encodeFunctionData( - functionFragment: "ballots", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "choices", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "closeBallot", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "createBallot", - values: [string, BigNumberish, string[]] - ): string; - encodeFunctionData( - functionFragment: "getAllResults", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getBallotResult", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getBallots", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getChoices", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "getTags", values?: undefined): string; - encodeFunctionData( - functionFragment: "grantProxy", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "resultStorage", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "tags", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "totalProxyAmount", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "vote", - values: [BigNumberish, BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "DPS", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "_delegates", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_proxyVoters", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "_results", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "addTag", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "ballots", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "choices", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "closeBallot", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "createBallot", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getAllResults", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getBallotResult", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "getBallots", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getChoices", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getTags", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "grantProxy", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "resultStorage", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "tags", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalProxyAmount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "vote", data: BytesLike): Result; - - events: { - "OwnershipTransferred(address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; -} - -export interface OwnershipTransferredEventObject { - previousOwner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent< - [string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; - -export interface ExposedVoting extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ExposedVotingInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - DPS(overrides?: CallOverrides): Promise<[string]>; - - _delegates( - to: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise<[string[]]>; - - _proxyVoters( - from: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - _results( - index: BigNumberish, - overrides?: CallOverrides - ): Promise<[ExposedVoting.ResultSampleStructOutput[]]>; - - addTag( - name: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - ballots( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string, boolean, number] & { - subject: string; - closed: boolean; - tagIndex: number; - } - >; - - choices( - arg0: BigNumberish, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - closeBallot( - ballotIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - createBallot( - subject: string, - tagIndex: BigNumberish, - _choices: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getAllResults(overrides?: CallOverrides): Promise<[BigNumber[][]]>; - - getBallotResult( - ballotIndex: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber[]]>; - - getBallots( - overrides?: CallOverrides - ): Promise<[Voting.BallotStructOutput[]]>; - - getChoices(overrides?: CallOverrides): Promise<[string[][]]>; - - getTags(overrides?: CallOverrides): Promise<[string[]]>; - - grantProxy( - to: string, - tagIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - owner(overrides?: CallOverrides): Promise<[string]>; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - resultStorage( - arg0: BigNumberish, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - tags(arg0: BigNumberish, overrides?: CallOverrides): Promise<[string]>; - - totalProxyAmount( - voter: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - vote( - ballotIndex: BigNumberish, - choiceIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - DPS(overrides?: CallOverrides): Promise; - - _delegates( - to: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - _proxyVoters( - from: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - _results( - index: BigNumberish, - overrides?: CallOverrides - ): Promise; - - addTag( - name: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - ballots( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string, boolean, number] & { - subject: string; - closed: boolean; - tagIndex: number; - } - >; - - choices( - arg0: BigNumberish, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - closeBallot( - ballotIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - createBallot( - subject: string, - tagIndex: BigNumberish, - _choices: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getAllResults(overrides?: CallOverrides): Promise; - - getBallotResult( - ballotIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getBallots(overrides?: CallOverrides): Promise; - - getChoices(overrides?: CallOverrides): Promise; - - getTags(overrides?: CallOverrides): Promise; - - grantProxy( - to: string, - tagIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - resultStorage( - arg0: BigNumberish, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - tags(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - totalProxyAmount( - voter: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - vote( - ballotIndex: BigNumberish, - choiceIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - DPS(overrides?: CallOverrides): Promise; - - _delegates( - to: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - _proxyVoters( - from: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - _results( - index: BigNumberish, - overrides?: CallOverrides - ): Promise; - - addTag(name: string, overrides?: CallOverrides): Promise; - - ballots( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string, boolean, number] & { - subject: string; - closed: boolean; - tagIndex: number; - } - >; - - choices( - arg0: BigNumberish, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - closeBallot( - ballotIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - createBallot( - subject: string, - tagIndex: BigNumberish, - _choices: string[], - overrides?: CallOverrides - ): Promise; - - getAllResults(overrides?: CallOverrides): Promise; - - getBallotResult( - ballotIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getBallots(overrides?: CallOverrides): Promise; - - getChoices(overrides?: CallOverrides): Promise; - - getTags(overrides?: CallOverrides): Promise; - - grantProxy( - to: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - resultStorage( - arg0: BigNumberish, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - tags(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - totalProxyAmount( - voter: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - - vote( - ballotIndex: BigNumberish, - choiceIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "OwnershipTransferred(address,address)"( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - }; - - estimateGas: { - DPS(overrides?: CallOverrides): Promise; - - _delegates( - to: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - _proxyVoters( - from: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - _results( - index: BigNumberish, - overrides?: CallOverrides - ): Promise; - - addTag( - name: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - ballots(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - choices( - arg0: BigNumberish, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - closeBallot( - ballotIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - createBallot( - subject: string, - tagIndex: BigNumberish, - _choices: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getAllResults(overrides?: CallOverrides): Promise; - - getBallotResult( - ballotIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getBallots(overrides?: CallOverrides): Promise; - - getChoices(overrides?: CallOverrides): Promise; - - getTags(overrides?: CallOverrides): Promise; - - grantProxy( - to: string, - tagIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - resultStorage( - arg0: BigNumberish, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - tags(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - totalProxyAmount( - voter: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - vote( - ballotIndex: BigNumberish, - choiceIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - DPS(overrides?: CallOverrides): Promise; - - _delegates( - to: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - _proxyVoters( - from: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - _results( - index: BigNumberish, - overrides?: CallOverrides - ): Promise; - - addTag( - name: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - ballots( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - choices( - arg0: BigNumberish, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - closeBallot( - ballotIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - createBallot( - subject: string, - tagIndex: BigNumberish, - _choices: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getAllResults(overrides?: CallOverrides): Promise; - - getBallotResult( - ballotIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getBallots(overrides?: CallOverrides): Promise; - - getChoices(overrides?: CallOverrides): Promise; - - getTags(overrides?: CallOverrides): Promise; - - grantProxy( - to: string, - tagIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - resultStorage( - arg0: BigNumberish, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - tags( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - totalProxyAmount( - voter: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - vote( - ballotIndex: BigNumberish, - choiceIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/typings/contracts/testing/ExposedVotingProxy.ts b/typings/contracts/testing/ExposedVotingProxy.ts new file mode 100644 index 0000000..bfa74ed --- /dev/null +++ b/typings/contracts/testing/ExposedVotingProxy.ts @@ -0,0 +1,442 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, +} from "../../common"; + +export interface ExposedVotingProxyInterface extends utils.Interface { + functions: { + "DPS()": FunctionFragment; + "_delegates(address,uint32)": FunctionFragment; + "_proxyVoters(address,uint32)": FunctionFragment; + "ballotFactory()": FunctionFragment; + "grantProxy(address,uint32)": FunctionFragment; + "hasDelegated(address,uint32)": FunctionFragment; + "owner()": FunctionFragment; + "proxyAmount(address,uint32)": FunctionFragment; + "renounceOwnership()": FunctionFragment; + "setBallotFactory(address)": FunctionFragment; + "transferOwnership(address)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "DPS" + | "_delegates" + | "_proxyVoters" + | "ballotFactory" + | "grantProxy" + | "hasDelegated" + | "owner" + | "proxyAmount" + | "renounceOwnership" + | "setBallotFactory" + | "transferOwnership" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "DPS", values?: undefined): string; + encodeFunctionData( + functionFragment: "_delegates", + values: [string, BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "_proxyVoters", + values: [string, BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "ballotFactory", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "grantProxy", + values: [string, BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "hasDelegated", + values: [string, BigNumberish] + ): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData( + functionFragment: "proxyAmount", + values: [string, BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "renounceOwnership", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "setBallotFactory", + values: [string] + ): string; + encodeFunctionData( + functionFragment: "transferOwnership", + values: [string] + ): string; + + decodeFunctionResult(functionFragment: "DPS", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "_delegates", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "_proxyVoters", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "ballotFactory", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "grantProxy", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "hasDelegated", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "proxyAmount", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "renounceOwnership", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "setBallotFactory", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "transferOwnership", + data: BytesLike + ): Result; + + events: { + "OwnershipTransferred(address,address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; +} + +export interface OwnershipTransferredEventObject { + previousOwner: string; + newOwner: string; +} +export type OwnershipTransferredEvent = TypedEvent< + [string, string], + OwnershipTransferredEventObject +>; + +export type OwnershipTransferredEventFilter = + TypedEventFilter; + +export interface ExposedVotingProxy extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: ExposedVotingProxyInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + DPS(overrides?: CallOverrides): Promise<[string]>; + + _delegates( + to: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise<[string[]]>; + + _proxyVoters( + from: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise<[string]>; + + ballotFactory(overrides?: CallOverrides): Promise<[string]>; + + grantProxy( + to: string, + tagIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + hasDelegated( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise<[boolean]>; + + owner(overrides?: CallOverrides): Promise<[string]>; + + proxyAmount( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + setBallotFactory( + _ballotFactory: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + DPS(overrides?: CallOverrides): Promise; + + _delegates( + to: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + _proxyVoters( + from: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + ballotFactory(overrides?: CallOverrides): Promise; + + grantProxy( + to: string, + tagIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + hasDelegated( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxyAmount( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + setBallotFactory( + _ballotFactory: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + callStatic: { + DPS(overrides?: CallOverrides): Promise; + + _delegates( + to: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + _proxyVoters( + from: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + ballotFactory(overrides?: CallOverrides): Promise; + + grantProxy( + to: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + hasDelegated( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxyAmount( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + renounceOwnership(overrides?: CallOverrides): Promise; + + setBallotFactory( + _ballotFactory: string, + overrides?: CallOverrides + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "OwnershipTransferred(address,address)"( + previousOwner?: string | null, + newOwner?: string | null + ): OwnershipTransferredEventFilter; + OwnershipTransferred( + previousOwner?: string | null, + newOwner?: string | null + ): OwnershipTransferredEventFilter; + }; + + estimateGas: { + DPS(overrides?: CallOverrides): Promise; + + _delegates( + to: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + _proxyVoters( + from: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + ballotFactory(overrides?: CallOverrides): Promise; + + grantProxy( + to: string, + tagIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + hasDelegated( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxyAmount( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + setBallotFactory( + _ballotFactory: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + populateTransaction: { + DPS(overrides?: CallOverrides): Promise; + + _delegates( + to: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + _proxyVoters( + from: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + ballotFactory(overrides?: CallOverrides): Promise; + + grantProxy( + to: string, + tagIndex: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + hasDelegated( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxyAmount( + voter: string, + tagIndex: BigNumberish, + overrides?: CallOverrides + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + setBallotFactory( + _ballotFactory: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; +} diff --git a/typings/factories/contracts/Ballot__factory.ts b/typings/factories/contracts/Ballot__factory.ts index a7b1396..fdad6a3 100644 --- a/typings/factories/contracts/Ballot__factory.ts +++ b/typings/factories/contracts/Ballot__factory.ts @@ -136,6 +136,11 @@ const _abi = [ name: "_choices", type: "string[]", }, + { + internalType: "contract VotingProxy", + name: "_proxy", + type: "address", + }, ], name: "init", outputs: [], @@ -249,7 +254,7 @@ const _abi = [ ]; const _bytecode = - "0x60a060405234801561001057600080fd5b50604051620012d2380380620012d283398101604081905261003191610124565b61003a336100bc565b6001600160a01b0382166100945760405162461bcd60e51b815260206004820152601a60248201527f566f74653a204450532061646472657373206973207a65726f2e000000000000604482015260640160405180910390fd5b6001600160a01b03918216608052600180546001600160a01b0319169190921617905561015e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461012157600080fd5b50565b6000806040838503121561013757600080fd5b82516101428161010c565b60208401519092506101538161010c565b809150509250929050565b60805161114a620001886000396000818161021f0152818161055d0152610912015261114a6000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80639094c76311610097578063ec55688911610066578063ec55688914610207578063ef4e06ec1461021a578063f2fde38b14610241578063f6fd7fde1461025457600080fd5b80639094c763146101c457806398c81bbf146101d7578063a97b8b4d146101ec578063c1d1d5c1146101f457600080fd5b806359037b89116100d357806359037b8914610157578063597e1fb514610178578063715018a6146101955780638da5cb5b1461019f57600080fd5b80630a59a98c146100fa5780634717f97c1461011857806349499d861461012d575b600080fd5b610102610267565b60405161010f9190610d26565b60405180910390f35b6101206102f5565b60405161010f9190610d40565b60035461014290610100900463ffffffff1681565b60405163ffffffff909116815260200161010f565b61016a610165366004610d84565b61034d565b60405190815260200161010f565b6003546101859060ff1681565b604051901515815260200161010f565b61019d61036e565b005b6000546001600160a01b03165b6040516001600160a01b03909116815260200161010f565b61019d6101d2366004610db6565b6103ad565b6101df6106d7565b60405161010f9190610dd1565b61019d6107b0565b61019d610202366004610eea565b610a08565b6001546101ac906001600160a01b031681565b6101ac7f000000000000000000000000000000000000000000000000000000000000000081565b61019d61024f366004610fe1565b610a7d565b610102610262366004610d84565b610b15565b600280546102749061100a565b80601f01602080910402602001604051908101604052809291908181526020018280546102a09061100a565b80156102ed5780601f106102c2576101008083540402835291602001916102ed565b820191906000526020600020905b8154815290600101906020018083116102d057829003601f168201915b505050505081565b6060600580548060200260200160405190810160405280929190818152602001828054801561034357602002820191906000526020600020905b81548152602001906001019080831161032f575b5050505050905090565b6005818154811061035d57600080fd5b600091825260209091200154905081565b6000546001600160a01b031633146103a15760405162461bcd60e51b815260040161039890611045565b60405180910390fd5b6103ab6000610b40565b565b60035460ff16156104005760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e000000000000006044820152606401610398565b60045463ffffffff8216106104615760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2043686f69636520696e64657820697320746f6f20686967686044820152601760f91b6064820152608401610398565b600154600354604051632dd7519b60e21b815233600482015261010090910463ffffffff1660248201526001600160a01b039091169063b75d466c9060440160206040518083038186803b1580156104b857600080fd5b505afa1580156104cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f0919061107a565b61053c5760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e0000000000006044820152606401610398565b6040516370a0823160e01b815233600482015269054b40b1f852bda00000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b1580156105a757600080fd5b505afa1580156105bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105df919061109c565b101561062d5760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e006044820152606401610398565b33600090815260076020526040902054640100000000900460ff166106ae57336000818152600760205260408120805464ff0000000019166401000000001790556006805460018101825591527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b03191690911790555b336000908152600760205260409020805463ffffffff191663ffffffff92909216919091179055565b60606004805480602002602001604051908101604052809291908181526020016000905b828210156107a757838290600052602060002001805461071a9061100a565b80601f01602080910402602001604051908101604052809291908181526020018280546107469061100a565b80156107935780601f1061076857610100808354040283529160200191610793565b820191906000526020600020905b81548152906001019060200180831161077657829003601f168201915b5050505050815260200190600101906106fb565b50505050905090565b6000546001600160a01b031633146107da5760405162461bcd60e51b815260040161039890611045565b60035460ff161561082d5760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e00006044820152606401610398565b6003805460ff1916600117905560005b600654811015610a055760006006828154811061085c5761085c6110b5565b60009182526020909120015460015460035460405163c143c6db60e01b81526001600160a01b039384166004820181905261010090920463ffffffff16602482015290935091169063c143c6db9060440160206040518083038186803b1580156108c557600080fd5b505afa1580156108d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fd919061109c565b6040516370a0823160e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561095c57600080fd5b505afa158015610970573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610994919061109c565b61099e91906110e1565b6001600160a01b03821660009081526007602052604090205460058054909163ffffffff169081106109d2576109d26110b5565b9060005260206000200160008282546109eb91906110e1565b909155508291506109fd9050816110f9565b91505061083d565b50565b6000546001600160a01b03163314610a325760405162461bcd60e51b815260040161039890611045565b8251610a45906002906020860190610b90565b506003805464ffffffffff191661010063ffffffff85160260ff19161790558051610a77906004906020840190610c14565b50505050565b6000546001600160a01b03163314610aa75760405162461bcd60e51b815260040161039890611045565b6001600160a01b038116610b0c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610398565b610a0581610b40565b60048181548110610b2557600080fd5b9060005260206000200160009150905080546102749061100a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054610b9c9061100a565b90600052602060002090601f016020900481019282610bbe5760008555610c04565b82601f10610bd757805160ff1916838001178555610c04565b82800160010185558215610c04579182015b82811115610c04578251825591602001919060010190610be9565b50610c10929150610c6d565b5090565b828054828255906000526020600020908101928215610c61579160200282015b82811115610c615782518051610c51918491602090910190610b90565b5091602001919060010190610c34565b50610c10929150610c82565b5b80821115610c105760008155600101610c6e565b80821115610c10576000610c968282610c9f565b50600101610c82565b508054610cab9061100a565b6000825580601f10610cbb575050565b601f016020900490600052602060002090810190610a059190610c6d565b6000815180845260005b81811015610cff57602081850181015186830182015201610ce3565b81811115610d11576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610d396020830184610cd9565b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d7857835183529284019291840191600101610d5c565b50909695505050505050565b600060208284031215610d9657600080fd5b5035919050565b803563ffffffff81168114610db157600080fd5b919050565b600060208284031215610dc857600080fd5b610d3982610d9d565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015610e2657603f19888603018452610e14858351610cd9565b94509285019290850190600101610df8565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610e7257610e72610e33565b604052919050565b600082601f830112610e8b57600080fd5b813567ffffffffffffffff811115610ea557610ea5610e33565b610eb8601f8201601f1916602001610e49565b818152846020838601011115610ecd57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215610eff57600080fd5b833567ffffffffffffffff80821115610f1757600080fd5b610f2387838801610e7a565b945060209150610f34828701610d9d565b9350604086013581811115610f4857600080fd5b8601601f81018813610f5957600080fd5b803582811115610f6b57610f6b610e33565b8060051b610f7a858201610e49565b918252828101850191858101908b841115610f9457600080fd5b86850192505b83831015610fd057823586811115610fb25760008081fd5b610fc08d8983890101610e7a565b8352509186019190860190610f9a565b809750505050505050509250925092565b600060208284031215610ff357600080fd5b81356001600160a01b0381168114610d3957600080fd5b600181811c9082168061101e57607f821691505b6020821081141561103f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561108c57600080fd5b81518015158114610d3957600080fd5b6000602082840312156110ae57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156110f4576110f46110cb565b500190565b600060001982141561110d5761110d6110cb565b506001019056fea2646970667358221220309ac45bbe1de2ca404fc7c59c31c305f814ae2ecad8efdb337e29ecf9d66d9a64736f6c63430008090033"; + "0x60a06040523480156200001157600080fd5b50604051620014573803806200145783398101604081905262000034916200012c565b6200003f33620000c3565b6001600160a01b0382166200009a5760405162461bcd60e51b815260206004820152601a60248201527f566f74653a204450532061646472657373206973207a65726f2e000000000000604482015260640160405180910390fd5b6001600160a01b03918216608052600180546001600160a01b031916919092161790556200016b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200012957600080fd5b50565b600080604083850312156200014057600080fd5b82516200014d8162000113565b6020840151909250620001608162000113565b809150509250929050565b6080516112c2620001956000396000818161021f0152818161055e015261091d01526112c26000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80639094c76311610097578063ec55688911610066578063ec55688914610207578063ef4e06ec1461021a578063f2fde38b14610241578063f6fd7fde1461025457600080fd5b80639094c763146101c457806398c81bbf146101d7578063a97b8b4d146101ec578063c340dd33146101f457600080fd5b806359037b89116100d357806359037b8914610157578063597e1fb514610178578063715018a6146101955780638da5cb5b1461019f57600080fd5b80630a59a98c146100fa5780634717f97c1461011857806349499d861461012d575b600080fd5b610102610267565b60405161010f9190610e79565b60405180910390f35b6101206102f5565b60405161010f9190610e93565b60035461014290610100900463ffffffff1681565b60405163ffffffff909116815260200161010f565b61016a610165366004610ed7565b61034d565b60405190815260200161010f565b6003546101859060ff1681565b604051901515815260200161010f565b61019d61036e565b005b6000546001600160a01b03165b6040516001600160a01b03909116815260200161010f565b61019d6101d2366004610f09565b6103ad565b6101df6106d8565b60405161010f9190610f24565b61019d6107b1565b61019d61020236600461105d565b610a0b565b6001546101ac906001600160a01b031681565b6101ac7f000000000000000000000000000000000000000000000000000000000000000081565b61019d61024f366004611165565b610b96565b610102610262366004610ed7565b610c2e565b6002805461027490611182565b80601f01602080910402602001604051908101604052809291908181526020018280546102a090611182565b80156102ed5780601f106102c2576101008083540402835291602001916102ed565b820191906000526020600020905b8154815290600101906020018083116102d057829003601f168201915b505050505081565b6060600580548060200260200160405190810160405280929190818152602001828054801561034357602002820191906000526020600020905b81548152602001906001019080831161032f575b5050505050905090565b6005818154811061035d57600080fd5b600091825260209091200154905081565b6000546001600160a01b031633146103a15760405162461bcd60e51b8152600401610398906111bd565b60405180910390fd5b6103ab6000610c59565b565b60035460ff16156104005760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e000000000000006044820152606401610398565b60045463ffffffff8216106104615760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2043686f69636520696e64657820697320746f6f20686967686044820152601760f91b6064820152608401610398565b600154600354604051632dd7519b60e21b815233600482015261010090910463ffffffff1660248201526001600160a01b039091169063b75d466c9060440160206040518083038186803b1580156104b857600080fd5b505afa1580156104cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f091906111f2565b1561053d5760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e0000000000006044820152606401610398565b6040516370a0823160e01b815233600482015269054b40b1f852bda00000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b1580156105a857600080fd5b505afa1580156105bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e09190611214565b101561062e5760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e006044820152606401610398565b33600090815260076020526040902054640100000000900460ff166106af57336000818152600760205260408120805464ff0000000019166401000000001790556006805460018101825591527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b03191690911790555b336000908152600760205260409020805463ffffffff191663ffffffff92909216919091179055565b60606004805480602002602001604051908101604052809291908181526020016000905b828210156107a857838290600052602060002001805461071b90611182565b80601f016020809104026020016040519081016040528092919081815260200182805461074790611182565b80156107945780601f1061076957610100808354040283529160200191610794565b820191906000526020600020905b81548152906001019060200180831161077757829003601f168201915b5050505050815260200190600101906106fc565b50505050905090565b6000546001600160a01b031633146107db5760405162461bcd60e51b8152600401610398906111bd565b60035460ff161561082e5760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e00006044820152606401610398565b6003805460ff1916600117905560005b600654811015610a085760006006828154811061085d5761085d61122d565b60009182526020909120015460015460035460405163c143c6db60e01b81526001600160a01b039384166004820181905261010090920463ffffffff16602482015290935091169063c143c6db9060440160206040518083038186803b1580156108c657600080fd5b505afa1580156108da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fe9190611214565b6040516370a0823160e01b81526001600160a01b0383811660048301527f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b15801561095f57600080fd5b505afa158015610973573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109979190611214565b6109a19190611259565b6001600160a01b03821660009081526007602052604090205460058054909163ffffffff169081106109d5576109d561122d565b9060005260206000200160008282546109ee9190611259565b90915550829150610a00905081611271565b91505061083e565b50565b600054600160a81b900460ff16610a2f57600054600160a01b900460ff1615610a33565b303b155b610a965760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610398565b600054600160a81b900460ff16158015610ac0576000805461ffff60a01b191661010160a01b1790555b8451610ad3906002906020880190610ca9565b506003805464ffffffffff191661010063ffffffff87160260ff19161790558251610b05906004906020860190610d2d565b50600180546001600160a01b0319166001600160a01b03841617905560045467ffffffffffffffff811115610b3c57610b3c610f86565b604051908082528060200260200182016040528015610b65578160200160208202803683370190505b508051610b7a91600591602090910190610d86565b508015610b8f576000805460ff60a81b191690555b5050505050565b6000546001600160a01b03163314610bc05760405162461bcd60e51b8152600401610398906111bd565b6001600160a01b038116610c255760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610398565b610a0881610c59565b60048181548110610c3e57600080fd5b90600052602060002001600091509050805461027490611182565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054610cb590611182565b90600052602060002090601f016020900481019282610cd75760008555610d1d565b82601f10610cf057805160ff1916838001178555610d1d565b82800160010185558215610d1d579182015b82811115610d1d578251825591602001919060010190610d02565b50610d29929150610dc0565b5090565b828054828255906000526020600020908101928215610d7a579160200282015b82811115610d7a5782518051610d6a918491602090910190610ca9565b5091602001919060010190610d4d565b50610d29929150610dd5565b828054828255906000526020600020908101928215610d1d5791602002820182811115610d1d578251825591602001919060010190610d02565b5b80821115610d295760008155600101610dc1565b80821115610d29576000610de98282610df2565b50600101610dd5565b508054610dfe90611182565b6000825580601f10610e0e575050565b601f016020900490600052602060002090810190610a089190610dc0565b6000815180845260005b81811015610e5257602081850181015186830182015201610e36565b81811115610e64576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610e8c6020830184610e2c565b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610ecb57835183529284019291840191600101610eaf565b50909695505050505050565b600060208284031215610ee957600080fd5b5035919050565b803563ffffffff81168114610f0457600080fd5b919050565b600060208284031215610f1b57600080fd5b610e8c82610ef0565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015610f7957603f19888603018452610f67858351610e2c565b94509285019290850190600101610f4b565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610fc557610fc5610f86565b604052919050565b600082601f830112610fde57600080fd5b813567ffffffffffffffff811115610ff857610ff8610f86565b61100b601f8201601f1916602001610f9c565b81815284602083860101111561102057600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610a0857600080fd5b8035610f048161103d565b6000806000806080858703121561107357600080fd5b843567ffffffffffffffff8082111561108b57600080fd5b61109788838901610fcd565b9550602091506110a8828801610ef0565b94506040870135818111156110bc57600080fd5b8701601f810189136110cd57600080fd5b8035828111156110df576110df610f86565b8060051b6110ee858201610f9c565b918252828101850191858101908c84111561110857600080fd5b86850192505b83831015611144578235868111156111265760008081fd5b6111348e8983890101610fcd565b835250918601919086019061110e565b8098505050505050505061115a60608601611052565b905092959194509250565b60006020828403121561117757600080fd5b8135610e8c8161103d565b600181811c9082168061119657607f821691505b602082108114156111b757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561120457600080fd5b81518015158114610e8c57600080fd5b60006020828403121561122657600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561126c5761126c611243565b500190565b600060001982141561128557611285611243565b506001019056fea2646970667358221220ffe7ff8a395493c0cb246b639c4556e89064a79cf2608927283883199e9ec37a64736f6c63430008090033"; type BallotConstructorParams = | [signer?: Signer] diff --git a/typings/factories/contracts/VotingProxy__factory.ts b/typings/factories/contracts/VotingProxy__factory.ts index 7a66bad..43342f3 100644 --- a/typings/factories/contracts/VotingProxy__factory.ts +++ b/typings/factories/contracts/VotingProxy__factory.ts @@ -180,7 +180,7 @@ const _abi = [ ]; const _bytecode = - "0x60a060405234801561001057600080fd5b50604051610ddb380380610ddb83398101604081905261002f916100f3565b610038336100a3565b6001600160a01b0381166100925760405162461bcd60e51b815260206004820152601a60248201527f566f74653a204450532061646472657373206973207a65726f2e000000000000604482015260640160405180910390fd5b6001600160a01b0316608052610123565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561010557600080fd5b81516001600160a01b038116811461011c57600080fd5b9392505050565b608051610c8f61014c6000396000818161017b0152818161033a01526107ee0152610c8f6000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063b75d466c11610066578063b75d466c146100f2578063c143c6db14610142578063ceb0b93514610163578063ef4e06ec14610176578063f2fde38b1461019d57600080fd5b806336a7cf1f14610098578063715018a6146100ad57806374773a45146100b55780638da5cb5b146100c8575b600080fd5b6100ab6100a6366004610990565b6101b0565b005b6100ab610205565b6100ab6100c33660046109b4565b61023b565b6000546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b6101326101003660046109b4565b6001600160a01b03918216600090815260036020908152604080832063ffffffff949094168352929052205416151590565b60405190151581526020016100e9565b6101556101503660046109b4565b610680565b6040519081526020016100e9565b6001546100d5906001600160a01b031681565b6100d57f000000000000000000000000000000000000000000000000000000000000000081565b6100ab6101ab366004610990565b610890565b6000546001600160a01b031633146101e35760405162461bcd60e51b81526004016101da906109f6565b60405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461022f5760405162461bcd60e51b81526004016101da906109f6565b610239600061092b565b565b6001546040805163995d9ab760e01b8152905163ffffffff8416926001600160a01b03169163995d9ab7916004808301926000929190829003018186803b15801561028557600080fd5b505afa158015610299573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102c19190810190610a72565b511161030f5760405162461bcd60e51b815260206004820152601d60248201527f566f74696e673a2054616720696e64657820697320746f6f206869676800000060448201526064016101da565b6040516370a0823160e01b81526001600160a01b03838116600483015269054b40b1f852bda00000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b15801561037e57600080fd5b505afa158015610392573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b69190610ba9565b1015806103ca57506001600160a01b038216155b6104205760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2050726f787920686173206e6f7420656e6f756768204450536044820152601760f91b60648201526084016101da565b33600090815260036020908152604080832063ffffffff851684529091529020546001600160a01b0316156105995733600081815260036020908152604080832063ffffffff808716808652918452828520546001600160a01b0316855260028085528386209286529184528285209585529285905290832054908401549082169260018581019391926104b49216610bd8565b63ffffffff90811682526020808301939093526040918201600090812054858316825260018781019586905293822080546001600160a01b0319166001600160a01b03909216919091179055600286015490939284926105149216610bd8565b63ffffffff90811682526020808301939093526040918201600090812080546001600160a01b0319166001600160a01b039690961695909517909455338452918590528220805463ffffffff191690556002840180549091169161057783610bfd565b91906101000a81548163ffffffff021916908363ffffffff1602179055505050505b33600090815260036020908152604080832063ffffffff85168452909152902080546001600160a01b0319166001600160a01b0384169081179091551561067c576001600160a01b038216600090815260026020818152604080842063ffffffff8087168652908352818520938401805433808852868652848820805463ffffffff1916928516929092179091558154831687526001860190945291852080546001600160a01b03191690931790925580549293929091169161065b83610c1d565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505b5050565b60008163ffffffff16600160009054906101000a90046001600160a01b03166001600160a01b031663995d9ab76040518163ffffffff1660e01b815260040160006040518083038186803b1580156106d757600080fd5b505afa1580156106eb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107139190810190610a72565b51116107615760405162461bcd60e51b815260206004820152601d60248201527f566f74696e673a2054616720696e64657820697320746f6f206869676800000060448201526064016101da565b6000805b6001600160a01b038516600090815260026020818152604080842063ffffffff808a1686529252909220015481169082161015610888576001600160a01b03858116600090815260026020908152604080832063ffffffff89811685529083528184209086168452600101909152908190205490516370a0823160e01b815290821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b15801561083257600080fd5b505afa158015610846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086a9190610ba9565b6108749083610c41565b91508061088081610c1d565b915050610765565b509392505050565b6000546001600160a01b031633146108ba5760405162461bcd60e51b81526004016101da906109f6565b6001600160a01b03811661091f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101da565b6109288161092b565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461092857600080fd5b6000602082840312156109a257600080fd5b81356109ad8161097b565b9392505050565b600080604083850312156109c757600080fd5b82356109d28161097b565b9150602083013563ffffffff811681146109eb57600080fd5b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610a6a57610a6a610a2b565b604052919050565b60006020808385031215610a8557600080fd5b825167ffffffffffffffff80821115610a9d57600080fd5b8185019150601f8681840112610ab257600080fd5b825182811115610ac457610ac4610a2b565b8060051b610ad3868201610a41565b918252848101860191868101908a841115610aed57600080fd5b87870192505b83831015610b9b57825186811115610b0b5760008081fd5b8701603f81018c13610b1d5760008081fd5b8881015187811115610b3157610b31610a2b565b610b42818801601f19168b01610a41565b81815260408e81848601011115610b595760008081fd5b60005b83811015610b77578481018201518382018e01528c01610b5c565b83811115610b885760008d85850101525b5050845250509187019190870190610af3565b9a9950505050505050505050565b600060208284031215610bbb57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff83811690831681811015610bf557610bf5610bc2565b039392505050565b600063ffffffff821680610c1357610c13610bc2565b6000190192915050565b600063ffffffff80831681811415610c3757610c37610bc2565b6001019392505050565b60008219821115610c5457610c54610bc2565b50019056fea264697066735822122076e5e8872e5ed55d2da43b61bf1aa5092af6e705e2449b69318bc45269e50ee964736f6c63430008090033"; + "0x60a060405234801561001057600080fd5b50604051610dcc380380610dcc83398101604081905261002f916100fd565b610038336100ad565b6001600160a01b03811661009c5760405162461bcd60e51b815260206004820152602160248201527f566f74696e6750726f78793a204450532061646472657373206973207a65726f6044820152601760f91b606482015260840160405180910390fd5b6001600160a01b031660805261012d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561010f57600080fd5b81516001600160a01b038116811461012657600080fd5b9392505050565b608051610c766101566000396000818161017b0152818161030a01526107930152610c766000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063b75d466c11610066578063b75d466c146100f2578063c143c6db14610142578063ceb0b93514610163578063ef4e06ec14610176578063f2fde38b1461019d57600080fd5b806336a7cf1f14610098578063715018a6146100ad57806374773a45146100b55780638da5cb5b146100c8575b600080fd5b6100ab6100a6366004610935565b6101b0565b005b6100ab610205565b6100ab6100c3366004610959565b61023b565b6000546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b610132610100366004610959565b6001600160a01b03918216600090815260036020908152604080832063ffffffff949094168352929052205416151590565b60405190151581526020016100e9565b610155610150366004610959565b610655565b6040519081526020016100e9565b6001546100d5906001600160a01b031681565b6100d57f000000000000000000000000000000000000000000000000000000000000000081565b6100ab6101ab366004610935565b610835565b6000546001600160a01b031633146101e35760405162461bcd60e51b81526004016101da9061099b565b60405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461022f5760405162461bcd60e51b81526004016101da9061099b565b61023960006108d0565b565b6001546040805163995d9ab760e01b8152905163ffffffff8416926001600160a01b03169163995d9ab7916004808301926000929190829003018186803b15801561028557600080fd5b505afa158015610299573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102c19190810190610a17565b51116102df5760405162461bcd60e51b81526004016101da90610b4e565b6040516370a0823160e01b81526001600160a01b03838116600483015269054b40b1f852bda00000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b15801561034e57600080fd5b505afa158015610362573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103869190610b90565b10158061039a57506001600160a01b038216155b6103f55760405162461bcd60e51b815260206004820152602660248201527f566f74696e6750726f78793a2050726f787920686173206e6f7420656e6f756760448201526534102228299760d11b60648201526084016101da565b33600090815260036020908152604080832063ffffffff851684529091529020546001600160a01b03161561056e5733600081815260036020908152604080832063ffffffff808716808652918452828520546001600160a01b0316855260028085528386209286529184528285209585529285905290832054908401549082169260018581019391926104899216610bbf565b63ffffffff90811682526020808301939093526040918201600090812054858316825260018781019586905293822080546001600160a01b0319166001600160a01b03909216919091179055600286015490939284926104e99216610bbf565b63ffffffff90811682526020808301939093526040918201600090812080546001600160a01b0319166001600160a01b039690961695909517909455338452918590528220805463ffffffff191690556002840180549091169161054c83610be4565b91906101000a81548163ffffffff021916908363ffffffff1602179055505050505b33600090815260036020908152604080832063ffffffff85168452909152902080546001600160a01b0319166001600160a01b03841690811790915515610651576001600160a01b038216600090815260026020818152604080842063ffffffff8087168652908352818520938401805433808852868652848820805463ffffffff1916928516929092179091558154831687526001860190945291852080546001600160a01b03191690931790925580549293929091169161063083610c04565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505b5050565b60008163ffffffff16600160009054906101000a90046001600160a01b03166001600160a01b031663995d9ab76040518163ffffffff1660e01b815260040160006040518083038186803b1580156106ac57600080fd5b505afa1580156106c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106e89190810190610a17565b51116107065760405162461bcd60e51b81526004016101da90610b4e565b6000805b6001600160a01b038516600090815260026020818152604080842063ffffffff808a168652925290922001548116908216101561082d576001600160a01b03858116600090815260026020908152604080832063ffffffff89811685529083528184209086168452600101909152908190205490516370a0823160e01b815290821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b1580156107d757600080fd5b505afa1580156107eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080f9190610b90565b6108199083610c28565b91508061082581610c04565b91505061070a565b509392505050565b6000546001600160a01b0316331461085f5760405162461bcd60e51b81526004016101da9061099b565b6001600160a01b0381166108c45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101da565b6108cd816108d0565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146108cd57600080fd5b60006020828403121561094757600080fd5b813561095281610920565b9392505050565b6000806040838503121561096c57600080fd5b823561097781610920565b9150602083013563ffffffff8116811461099057600080fd5b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610a0f57610a0f6109d0565b604052919050565b60006020808385031215610a2a57600080fd5b825167ffffffffffffffff80821115610a4257600080fd5b8185019150601f8681840112610a5757600080fd5b825182811115610a6957610a696109d0565b8060051b610a788682016109e6565b918252848101860191868101908a841115610a9257600080fd5b87870192505b83831015610b4057825186811115610ab05760008081fd5b8701603f81018c13610ac25760008081fd5b8881015187811115610ad657610ad66109d0565b610ae7818801601f19168b016109e6565b81815260408e81848601011115610afe5760008081fd5b60005b83811015610b1c578481018201518382018e01528c01610b01565b83811115610b2d5760008d85850101525b5050845250509187019190870190610a98565b9a9950505050505050505050565b60208082526022908201527f566f74696e6750726f78793a2054616720696e64657820697320746f6f2068696040820152610ced60f31b606082015260800190565b600060208284031215610ba257600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff83811690831681811015610bdc57610bdc610ba9565b039392505050565b600063ffffffff821680610bfa57610bfa610ba9565b6000190192915050565b600063ffffffff80831681811415610c1e57610c1e610ba9565b6001019392505050565b60008219821115610c3b57610c3b610ba9565b50019056fea2646970667358221220ed0ad1c782d239ff62d4f58f0a00c2abfc25eae2566f2c11d7f1c96b9369c7e264736f6c63430008090033"; type VotingProxyConstructorParams = | [signer?: Signer] diff --git a/typings/factories/contracts/factories/BallotFactory__factory.ts b/typings/factories/contracts/factories/BallotFactory__factory.ts index 3d9554d..5897487 100644 --- a/typings/factories/contracts/factories/BallotFactory__factory.ts +++ b/typings/factories/contracts/factories/BallotFactory__factory.ts @@ -13,7 +13,12 @@ const _abi = [ inputs: [ { internalType: "address", - name: "_masterAddress", + name: "_implementationAddress", + type: "address", + }, + { + internalType: "address", + name: "_votingProxyAddress", type: "address", }, ], @@ -128,7 +133,7 @@ const _abi = [ }, { inputs: [], - name: "masterAddress", + name: "implementationAddress", outputs: [ { internalType: "address", @@ -167,7 +172,7 @@ const _abi = [ type: "address", }, ], - name: "setMasterAddress", + name: "setImplementationAddress", outputs: [], stateMutability: "nonpayable", type: "function", @@ -204,10 +209,23 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, + { + inputs: [], + name: "votingProxyAddress", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, ]; const _bytecode = - "0x608060405234801561001057600080fd5b50604051610f3c380380610f3c83398101604081905261002f9161012d565b610038336100dd565b6001600160a01b0381166100b85760405162461bcd60e51b815260206004820152603860248201527f42616c6c6f74466163746f72793a204d6173746572206164647265737320736860448201527f6f756c64206e6f74206265207a65726f20616464726573730000000000000000606482015260840160405180910390fd5b600280546001600160a01b0319166001600160a01b039290921691909117905561015d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561013f57600080fd5b81516001600160a01b038116811461015657600080fd5b9392505050565b610dd08061016c6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063995d9ab711610071578063995d9ab714610130578063a7a9845314610145578063d365a08e14610158578063de0cc45b1461016b578063eb87c6dc1461017e578063f2fde38b1461019357600080fd5b806320822abc146100ae57806324db32ac146100d75780635d06a61114610102578063715018a6146101175780638da5cb5b1461011f575b600080fd5b6100c16100bc36600461096d565b6101a6565b6040516100ce91906109e2565b60405180910390f35b6100ea6100e5366004610ab3565b610252565b6040516001600160a01b0390911681526020016100ce565b610115610110366004610bb5565b610513565b005b6101156105dd565b6000546001600160a01b03166100ea565b610138610613565b6040516100ce9190610c36565b6100ea61015336600461096d565b6106ec565b6002546100ea906001600160a01b031681565b610115610179366004610c49565b610716565b610186610787565b6040516100ce9190610c86565b6101156101a1366004610bb5565b6107e9565b600381815481106101b657600080fd5b9060005260206000200160009150905080546101d190610cd3565b80601f01602080910402602001604051908101604052809291908181526020018280546101fd90610cd3565b801561024a5780601f1061021f5761010080835404028352916020019161024a565b820191906000526020600020905b81548152906001019060200180831161022d57829003601f168201915b505050505081565b600080546001600160a01b031633146102865760405162461bcd60e51b815260040161027d90610d0e565b60405180910390fd5b60035463ffffffff8416106102eb5760405162461bcd60e51b815260206004820152602560248201527f42616c6c6f74466163746f72793a2054616720696e64657820697320746f6f206044820152643434b3b41760d91b606482015260840161027d565b600254604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81526bffffffffffffffffffffffff19606083901b1660148201526e5af43d82803e903d91602b57fd5bf360881b60288201526000916001600160a01b03169060378184f09250506001600160a01b0382166103bb5760405162461bcd60e51b815260206004820152602b60248201527f42616c6c6f74466163746f72793a2042616c6c6f7420636c6f6e65206372656160448201526a1d1a5bdb8819985a5b195960aa1b606482015260840161027d565b6000826001600160a01b03168787876040516024016103dc93929190610d43565b60408051601f198184030181529181526020820180516001600160e01b031663c1d1d5c160e01b179052516104119190610d7e565b6000604051808303816000865af19150503d806000811461044e576040519150601f19603f3d011682016040523d82523d6000602084013e610453565b606091505b50509050806104bf5760405162461bcd60e51b815260206004820152603260248201527f42616c6c6f74466163746f72793a2042616c6c6f7420636c6f6e6520696e697460448201527134b0b634bd30ba34b7b7103330b4b632b21760711b606482015260840161027d565b50506001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b038316179055949350505050565b6000546001600160a01b0316331461053d5760405162461bcd60e51b815260040161027d90610d0e565b6002546001600160a01b03166105bb5760405162461bcd60e51b815260206004820152603860248201527f42616c6c6f74466163746f72793a204d6173746572206164647265737320736860448201527f6f756c64206e6f74206265207a65726f20616464726573730000000000000000606482015260840161027d565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146106075760405162461bcd60e51b815260040161027d90610d0e565b6106116000610884565b565b60606003805480602002602001604051908101604052809291908181526020016000905b828210156106e357838290600052602060002001805461065690610cd3565b80601f016020809104026020016040519081016040528092919081815260200182805461068290610cd3565b80156106cf5780601f106106a4576101008083540402835291602001916106cf565b820191906000526020600020905b8154815290600101906020018083116106b257829003601f168201915b505050505081526020019060010190610637565b50505050905090565b600181815481106106fc57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146107405760405162461bcd60e51b815260040161027d90610d0e565b600380546001810182556000919091528151610783917fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b019060208401906108d4565b5050565b606060018054806020026020016040519081016040528092919081815260200182805480156107df57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107c1575b5050505050905090565b6000546001600160a01b031633146108135760405162461bcd60e51b815260040161027d90610d0e565b6001600160a01b0381166108785760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161027d565b61088181610884565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8280546108e090610cd3565b90600052602060002090601f0160209004810192826109025760008555610948565b82601f1061091b57805160ff1916838001178555610948565b82800160010185558215610948579182015b8281111561094857825182559160200191906001019061092d565b50610954929150610958565b5090565b5b808211156109545760008155600101610959565b60006020828403121561097f57600080fd5b5035919050565b60005b838110156109a1578181015183820152602001610989565b838111156109b0576000848401525b50505050565b600081518084526109ce816020860160208601610986565b601f01601f19169290920160200192915050565b6020815260006109f560208301846109b6565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610a3b57610a3b6109fc565b604052919050565b600082601f830112610a5457600080fd5b813567ffffffffffffffff811115610a6e57610a6e6109fc565b610a81601f8201601f1916602001610a12565b818152846020838601011115610a9657600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215610ac857600080fd5b833567ffffffffffffffff80821115610ae057600080fd5b610aec87838801610a43565b9450602091508186013563ffffffff81168114610b0857600080fd5b9350604086013581811115610b1c57600080fd5b8601601f81018813610b2d57600080fd5b803582811115610b3f57610b3f6109fc565b8060051b610b4e858201610a12565b918252828101850191858101908b841115610b6857600080fd5b86850192505b83831015610ba457823586811115610b865760008081fd5b610b948d8983890101610a43565b8352509186019190860190610b6e565b809750505050505050509250925092565b600060208284031215610bc757600080fd5b81356001600160a01b03811681146109f557600080fd5b600082825180855260208086019550808260051b84010181860160005b84811015610c2957601f19868403018952610c178383516109b6565b98840198925090830190600101610bfb565b5090979650505050505050565b6020815260006109f56020830184610bde565b600060208284031215610c5b57600080fd5b813567ffffffffffffffff811115610c7257600080fd5b610c7e84828501610a43565b949350505050565b6020808252825182820181905260009190848201906040850190845b81811015610cc75783516001600160a01b031683529284019291840191600101610ca2565b50909695505050505050565b600181811c90821680610ce757607f821691505b60208210811415610d0857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b606081526000610d5660608301866109b6565b63ffffffff851660208401528281036040840152610d748185610bde565b9695505050505050565b60008251610d90818460208701610986565b919091019291505056fea2646970667358221220a703cb04af933609306a91e4c37c378497742fc05144c888a5b1d1d28098c69e64736f6c63430008090033"; + "0x608060405234801561001057600080fd5b50604051610f34380380610f3483398101604081905261002f916101d4565b61003833610168565b6001600160a01b0382166100bb576040805162461bcd60e51b81526020600482015260248101919091527f42616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616460448201527f64726573732073686f756c64206e6f74206265207a65726f206164647265737360648201526084015b60405180910390fd5b6001600160a01b0381166101375760405162461bcd60e51b815260206004820152603e60248201527f42616c6c6f74466163746f72793a20566f74696e672070726f7879206164647260448201527f6573732073686f756c64206e6f74206265207a65726f2061646472657373000060648201526084016100b2565b600280546001600160a01b039384166001600160a01b03199182161790915560038054929093169116179055610207565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146101cf57600080fd5b919050565b600080604083850312156101e757600080fd5b6101f0836101b8565b91506101fe602084016101b8565b90509250929050565b610d1e806102166000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063a7a9845311610071578063a7a9845314610150578063b97a231914610163578063de0cc45b14610176578063eb87c6dc14610189578063ecade2f01461019e578063f2fde38b146101b157600080fd5b806320822abc146100b957806324db32ac146100e2578063715018a61461010d5780638da5cb5b14610117578063995d9ab714610128578063a451fae71461013d575b600080fd5b6100cc6100c73660046108d6565b6101c4565b6040516100d9919061093c565b60405180910390f35b6100f56100f0366004610a0d565b610270565b6040516001600160a01b0390911681526020016100d9565b6101156103df565b005b6000546001600160a01b03166100f5565b610130610415565b6040516100d99190610b67565b6003546100f5906001600160a01b031681565b6100f561015e3660046108d6565b6104ee565b6002546100f5906001600160a01b031681565b610115610184366004610b7a565b610518565b610191610589565b6040516100d99190610bb7565b6101156101ac366004610c04565b6105eb565b6101156101bf366004610c04565b6106b5565b600481815481106101d457600080fd5b9060005260206000200160009150905080546101ef90610c2d565b80601f016020809104026020016040519081016040528092919081815260200182805461021b90610c2d565b80156102685780601f1061023d57610100808354040283529160200191610268565b820191906000526020600020905b81548152906001019060200180831161024b57829003601f168201915b505050505081565b600080546001600160a01b031633146102a45760405162461bcd60e51b815260040161029b90610c68565b60405180910390fd5b60045463ffffffff8416106103095760405162461bcd60e51b815260206004820152602560248201527f42616c6c6f74466163746f72793a2054616720696e64657820697320746f6f206044820152643434b3b41760d91b606482015260840161029b565b600254600090610321906001600160a01b0316610750565b60035460405163c340dd3360e01b81529192506001600160a01b038084169263c340dd339261035a928a928a928a921690600401610c9d565b600060405180830381600087803b15801561037457600080fd5b505af1158015610388573d6000803e3d6000fd5b50506001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b038516179055509095945050505050565b6000546001600160a01b031633146104095760405162461bcd60e51b815260040161029b90610c68565b61041360006107ed565b565b60606004805480602002602001604051908101604052809291908181526020016000905b828210156104e557838290600052602060002001805461045890610c2d565b80601f016020809104026020016040519081016040528092919081815260200182805461048490610c2d565b80156104d15780601f106104a6576101008083540402835291602001916104d1565b820191906000526020600020905b8154815290600101906020018083116104b457829003601f168201915b505050505081526020019060010190610439565b50505050905090565b600181815481106104fe57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146105425760405162461bcd60e51b815260040161029b90610c68565b600480546001810182556000919091528151610585917f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0190602084019061083d565b5050565b606060018054806020026020016040519081016040528092919081815260200182805480156105e157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116105c3575b5050505050905090565b6000546001600160a01b031633146106155760405162461bcd60e51b815260040161029b90610c68565b6001600160a01b038116610693576040805162461bcd60e51b81526020600482015260248101919091527f42616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616460448201527f64726573732073686f756c64206e6f74206265207a65726f2061646472657373606482015260840161029b565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146106df5760405162461bcd60e51b815260040161029b90610c68565b6001600160a01b0381166107445760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161029b565b61074d816107ed565b50565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b0381166107e85760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015260640161029b565b919050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805461084990610c2d565b90600052602060002090601f01602090048101928261086b57600085556108b1565b82601f1061088457805160ff19168380011785556108b1565b828001600101855582156108b1579182015b828111156108b1578251825591602001919060010190610896565b506108bd9291506108c1565b5090565b5b808211156108bd57600081556001016108c2565b6000602082840312156108e857600080fd5b5035919050565b6000815180845260005b81811015610915576020818501810151868301820152016108f9565b81811115610927576000602083870101525b50601f01601f19169290920160200192915050565b60208152600061094f60208301846108ef565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561099557610995610956565b604052919050565b600082601f8301126109ae57600080fd5b813567ffffffffffffffff8111156109c8576109c8610956565b6109db601f8201601f191660200161096c565b8181528460208386010111156109f057600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215610a2257600080fd5b833567ffffffffffffffff80821115610a3a57600080fd5b610a468783880161099d565b9450602091508186013563ffffffff81168114610a6257600080fd5b9350604086013581811115610a7657600080fd5b8601601f81018813610a8757600080fd5b803582811115610a9957610a99610956565b8060051b610aa885820161096c565b918252828101850191858101908b841115610ac257600080fd5b86850192505b83831015610afe57823586811115610ae05760008081fd5b610aee8d898389010161099d565b8352509186019190860190610ac8565b809750505050505050509250925092565b600082825180855260208086019550808260051b84010181860160005b84811015610b5a57601f19868403018952610b488383516108ef565b98840198925090830190600101610b2c565b5090979650505050505050565b60208152600061094f6020830184610b0f565b600060208284031215610b8c57600080fd5b813567ffffffffffffffff811115610ba357600080fd5b610baf8482850161099d565b949350505050565b6020808252825182820181905260009190848201906040850190845b81811015610bf85783516001600160a01b031683529284019291840191600101610bd3565b50909695505050505050565b600060208284031215610c1657600080fd5b81356001600160a01b038116811461094f57600080fd5b600181811c90821680610c4157607f821691505b60208210811415610c6257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b608081526000610cb060808301876108ef565b63ffffffff861660208401528281036040840152610cce8186610b0f565b91505060018060a01b03831660608301529594505050505056fea2646970667358221220140883416b6854a96531a730022c7da28d0b70e2eac81813b0e59fb68ea1619464736f6c63430008090033"; type BallotFactoryConstructorParams = | [signer?: Signer] @@ -227,19 +245,26 @@ export class BallotFactory__factory extends ContractFactory { } override deploy( - _masterAddress: string, + _implementationAddress: string, + _votingProxyAddress: string, overrides?: Overrides & { from?: string | Promise } ): Promise { return super.deploy( - _masterAddress, + _implementationAddress, + _votingProxyAddress, overrides || {} ) as Promise; } override getDeployTransaction( - _masterAddress: string, + _implementationAddress: string, + _votingProxyAddress: string, overrides?: Overrides & { from?: string | Promise } ): TransactionRequest { - return super.getDeployTransaction(_masterAddress, overrides || {}); + return super.getDeployTransaction( + _implementationAddress, + _votingProxyAddress, + overrides || {} + ); } override attach(address: string): BallotFactory { return super.attach(address) as BallotFactory; diff --git a/typings/factories/contracts/testing/ExposedBallot__factory.ts b/typings/factories/contracts/testing/ExposedBallot__factory.ts new file mode 100644 index 0000000..25a262f --- /dev/null +++ b/typings/factories/contracts/testing/ExposedBallot__factory.ts @@ -0,0 +1,352 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { + ExposedBallot, + ExposedBallotInterface, +} from "../../../contracts/testing/ExposedBallot"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IERC20Metadata", + name: "_DPS", + type: "address", + }, + { + internalType: "contract VotingProxy", + name: "_proxy", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + inputs: [], + name: "DPS", + outputs: [ + { + internalType: "contract IERC20Metadata", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "_results", + outputs: [ + { + components: [ + { + internalType: "address", + name: "voter", + type: "address", + }, + { + components: [ + { + internalType: "uint32", + name: "choiceIndex", + type: "uint32", + }, + { + internalType: "bool", + name: "hasVoted", + type: "bool", + }, + ], + internalType: "struct Ballot.Vote", + name: "vote", + type: "tuple", + }, + ], + internalType: "struct ExposedBallot.ResultSample[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "choices", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "closeBallot", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "closed", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getChoices", + outputs: [ + { + internalType: "string[]", + name: "", + type: "string[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getResults", + outputs: [ + { + internalType: "uint256[]", + name: "", + type: "uint256[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "string", + name: "_subject", + type: "string", + }, + { + internalType: "uint32", + name: "_tagIndex", + type: "uint32", + }, + { + internalType: "string[]", + name: "_choices", + type: "string[]", + }, + { + internalType: "contract VotingProxy", + name: "_proxy", + type: "address", + }, + ], + name: "init", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "proxy", + outputs: [ + { + internalType: "contract VotingProxy", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "resultStorage", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "subject", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "tagIndex", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint32", + name: "choiceIndex", + type: "uint32", + }, + ], + name: "vote", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +]; + +const _bytecode = + "0x60a06040523480156200001157600080fd5b506040516200167938038062001679833981016040819052620000349162000131565b81816200004133620000c8565b6001600160a01b0382166200009c5760405162461bcd60e51b815260206004820152601a60248201527f566f74653a204450532061646472657373206973207a65726f2e000000000000604482015260640160405180910390fd5b6001600160a01b03918216608052600180546001600160a01b0319169190921617905550620001709050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200012e57600080fd5b50565b600080604083850312156200014557600080fd5b8251620001528162000118565b6020840151909250620001658162000118565b809150509250929050565b6080516114df6200019a6000396000818161023f015281816106d10152610a9001526114df6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639094c76311610097578063ec55688911610066578063ec55688914610227578063ef4e06ec1461023a578063f2fde38b14610261578063f6fd7fde1461027457600080fd5b80639094c763146101e457806398c81bbf146101f7578063a97b8b4d1461020c578063c340dd331461021457600080fd5b806359037b89116100d357806359037b8914610177578063597e1fb514610198578063715018a6146101b55780638da5cb5b146101bf57600080fd5b80630a59a98c1461010557806327454ea8146101235780634717f97c1461013857806349499d861461014d575b600080fd5b61010d610287565b60405161011a9190611031565b60405180910390f35b61012b610315565b60405161011a919061104b565b610140610468565b60405161011a91906110b6565b60035461016290610100900463ffffffff1681565b60405163ffffffff909116815260200161011a565b61018a6101853660046110fa565b6104c0565b60405190815260200161011a565b6003546101a59060ff1681565b604051901515815260200161011a565b6101bd6104e1565b005b6000546001600160a01b03165b6040516001600160a01b03909116815260200161011a565b6101bd6101f236600461112c565b610520565b6101ff61084b565b60405161011a9190611147565b6101bd610924565b6101bd610222366004611280565b610b7e565b6001546101cc906001600160a01b031681565b6101cc7f000000000000000000000000000000000000000000000000000000000000000081565b6101bd61026f366004611388565b610d09565b61010d6102823660046110fa565b610da1565b60028054610294906113a5565b80601f01602080910402602001604051908101604052809291908181526020018280546102c0906113a5565b801561030d5780601f106102e25761010080835404028352916020019161030d565b820191906000526020600020905b8154815290600101906020018083116102f057829003601f168201915b505050505081565b60065460609060009067ffffffffffffffff811115610336576103366111a9565b60405190808252806020026020018201604052801561036f57816020015b61035c610e1c565b8152602001906001900390816103545790505b50905060005b6006548110156104625760405180604001604052806006838154811061039d5761039d6113da565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b0316815260200160076000600685815481106103e0576103e06113da565b60009182526020808320909101546001600160a01b03168352828101939093526040918201902081518083019092525463ffffffff8116825260ff6401000000009091041615159181019190915290528251839083908110610444576104446113da565b6020026020010181905250808061045a90611406565b915050610375565b50919050565b606060058054806020026020016040519081016040528092919081815260200182805480156104b657602002820191906000526020600020905b8154815260200190600101908083116104a2575b5050505050905090565b600581815481106104d057600080fd5b600091825260209091200154905081565b6000546001600160a01b031633146105145760405162461bcd60e51b815260040161050b90611421565b60405180910390fd5b61051e6000610dcc565b565b60035460ff16156105735760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e00000000000000604482015260640161050b565b60045463ffffffff8216106105d45760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2043686f69636520696e64657820697320746f6f20686967686044820152601760f91b606482015260840161050b565b600154600354604051632dd7519b60e21b815233600482015261010090910463ffffffff1660248201526001600160a01b039091169063b75d466c9060440160206040518083038186803b15801561062b57600080fd5b505afa15801561063f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106639190611456565b156106b05760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e000000000000604482015260640161050b565b6040516370a0823160e01b815233600482015269054b40b1f852bda00000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561071b57600080fd5b505afa15801561072f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107539190611478565b10156107a15760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e00604482015260640161050b565b33600090815260076020526040902054640100000000900460ff1661082257336000818152600760205260408120805464ff0000000019166401000000001790556006805460018101825591527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b03191690911790555b336000908152600760205260409020805463ffffffff191663ffffffff92909216919091179055565b60606004805480602002602001604051908101604052809291908181526020016000905b8282101561091b57838290600052602060002001805461088e906113a5565b80601f01602080910402602001604051908101604052809291908181526020018280546108ba906113a5565b80156109075780601f106108dc57610100808354040283529160200191610907565b820191906000526020600020905b8154815290600101906020018083116108ea57829003601f168201915b50505050508152602001906001019061086f565b50505050905090565b6000546001600160a01b0316331461094e5760405162461bcd60e51b815260040161050b90611421565b60035460ff16156109a15760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e0000604482015260640161050b565b6003805460ff1916600117905560005b600654811015610b7b576000600682815481106109d0576109d06113da565b60009182526020909120015460015460035460405163c143c6db60e01b81526001600160a01b039384166004820181905261010090920463ffffffff16602482015290935091169063c143c6db9060440160206040518083038186803b158015610a3957600080fd5b505afa158015610a4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a719190611478565b6040516370a0823160e01b81526001600160a01b0383811660048301527f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b158015610ad257600080fd5b505afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611478565b610b149190611491565b6001600160a01b03821660009081526007602052604090205460058054909163ffffffff16908110610b4857610b486113da565b906000526020600020016000828254610b619190611491565b90915550829150610b73905081611406565b9150506109b1565b50565b600054600160a81b900460ff16610ba257600054600160a01b900460ff1615610ba6565b303b155b610c095760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161050b565b600054600160a81b900460ff16158015610c33576000805461ffff60a01b191661010160a01b1790555b8451610c46906002906020880190610e61565b506003805464ffffffffff191661010063ffffffff87160260ff19161790558251610c78906004906020860190610ee5565b50600180546001600160a01b0319166001600160a01b03841617905560045467ffffffffffffffff811115610caf57610caf6111a9565b604051908082528060200260200182016040528015610cd8578160200160208202803683370190505b508051610ced91600591602090910190610f3e565b508015610d02576000805460ff60a81b191690555b5050505050565b6000546001600160a01b03163314610d335760405162461bcd60e51b815260040161050b90611421565b6001600160a01b038116610d985760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161050b565b610b7b81610dcc565b60048181548110610db157600080fd5b906000526020600020016000915090508054610294906113a5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604051806040016040528060006001600160a01b03168152602001610e5c6040518060400160405280600063ffffffff1681526020016000151581525090565b905290565b828054610e6d906113a5565b90600052602060002090601f016020900481019282610e8f5760008555610ed5565b82601f10610ea857805160ff1916838001178555610ed5565b82800160010185558215610ed5579182015b82811115610ed5578251825591602001919060010190610eba565b50610ee1929150610f78565b5090565b828054828255906000526020600020908101928215610f32579160200282015b82811115610f325782518051610f22918491602090910190610e61565b5091602001919060010190610f05565b50610ee1929150610f8d565b828054828255906000526020600020908101928215610ed55791602002820182811115610ed5578251825591602001919060010190610eba565b5b80821115610ee15760008155600101610f79565b80821115610ee1576000610fa18282610faa565b50600101610f8d565b508054610fb6906113a5565b6000825580601f10610fc6575050565b601f016020900490600052602060002090810190610b7b9190610f78565b6000815180845260005b8181101561100a57602081850181015186830182015201610fee565b8181111561101c576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006110446020830184610fe4565b9392505050565b602080825282518282018190526000919060409081850190868401855b828110156110a957815180516001600160a01b03168552860151805163ffffffff168786015286015115158585015260609093019290850190600101611068565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156110ee578351835292840192918401916001016110d2565b50909695505050505050565b60006020828403121561110c57600080fd5b5035919050565b803563ffffffff8116811461112757600080fd5b919050565b60006020828403121561113e57600080fd5b61104482611113565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561119c57603f1988860301845261118a858351610fe4565b9450928501929085019060010161116e565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111e8576111e86111a9565b604052919050565b600082601f83011261120157600080fd5b813567ffffffffffffffff81111561121b5761121b6111a9565b61122e601f8201601f19166020016111bf565b81815284602083860101111561124357600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610b7b57600080fd5b803561112781611260565b6000806000806080858703121561129657600080fd5b843567ffffffffffffffff808211156112ae57600080fd5b6112ba888389016111f0565b9550602091506112cb828801611113565b94506040870135818111156112df57600080fd5b8701601f810189136112f057600080fd5b803582811115611302576113026111a9565b8060051b6113118582016111bf565b918252828101850191858101908c84111561132b57600080fd5b86850192505b83831015611367578235868111156113495760008081fd5b6113578e89838901016111f0565b8352509186019190860190611331565b8098505050505050505061137d60608601611275565b905092959194509250565b60006020828403121561139a57600080fd5b813561104481611260565b600181811c908216806113b957607f821691505b6020821081141561046257634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561141a5761141a6113f0565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561146857600080fd5b8151801515811461104457600080fd5b60006020828403121561148a57600080fd5b5051919050565b600082198211156114a4576114a46113f0565b50019056fea26469706673582212200f260fbb038bdda49c9f03e59ca544a53ac442c6380278529689e9ce342054e864736f6c63430008090033"; + +type ExposedBallotConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: ExposedBallotConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class ExposedBallot__factory extends ContractFactory { + constructor(...args: ExposedBallotConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _DPS: string, + _proxy: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise { + return super.deploy( + _DPS, + _proxy, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + _DPS: string, + _proxy: string, + overrides?: Overrides & { from?: string | Promise } + ): TransactionRequest { + return super.getDeployTransaction(_DPS, _proxy, overrides || {}); + } + override attach(address: string): ExposedBallot { + return super.attach(address) as ExposedBallot; + } + override connect(signer: Signer): ExposedBallot__factory { + return super.connect(signer) as ExposedBallot__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): ExposedBallotInterface { + return new utils.Interface(_abi) as ExposedBallotInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): ExposedBallot { + return new Contract(address, _abi, signerOrProvider) as ExposedBallot; + } +} diff --git a/typings/factories/contracts/testing/ExposedVotingProxy__factory.ts b/typings/factories/contracts/testing/ExposedVotingProxy__factory.ts new file mode 100644 index 0000000..3e0efb4 --- /dev/null +++ b/typings/factories/contracts/testing/ExposedVotingProxy__factory.ts @@ -0,0 +1,280 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { + ExposedVotingProxy, + ExposedVotingProxyInterface, +} from "../../../contracts/testing/ExposedVotingProxy"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IERC20Metadata", + name: "_DPS", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + inputs: [], + name: "DPS", + outputs: [ + { + internalType: "contract IERC20Metadata", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint32", + name: "tagIndex", + type: "uint32", + }, + ], + name: "_delegates", + outputs: [ + { + internalType: "address[]", + name: "", + type: "address[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address", + }, + { + internalType: "uint32", + name: "tagIndex", + type: "uint32", + }, + ], + name: "_proxyVoters", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "ballotFactory", + outputs: [ + { + internalType: "contract BallotFactory", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint32", + name: "tagIndex", + type: "uint32", + }, + ], + name: "grantProxy", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "voter", + type: "address", + }, + { + internalType: "uint32", + name: "tagIndex", + type: "uint32", + }, + ], + name: "hasDelegated", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "voter", + type: "address", + }, + { + internalType: "uint32", + name: "tagIndex", + type: "uint32", + }, + ], + name: "proxyAmount", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "contract BallotFactory", + name: "_ballotFactory", + type: "address", + }, + ], + name: "setBallotFactory", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +]; + +const _bytecode = + "0x60a060405234801561001057600080fd5b50604051610fd7380380610fd783398101604081905261002f916100ff565b80610039336100af565b6001600160a01b03811661009d5760405162461bcd60e51b815260206004820152602160248201527f566f74696e6750726f78793a204450532061646472657373206973207a65726f6044820152601760f91b606482015260840160405180910390fd5b6001600160a01b03166080525061012f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561011157600080fd5b81516001600160a01b038116811461012857600080fd5b9392505050565b608051610e7f610158600039600081816101f3015281816104b801526109410152610e7f6000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063b75d466c11610071578063b75d466c1461012c578063c143c6db1461017c578063c43e163d1461019d578063ceb0b935146101db578063ef4e06ec146101ee578063f2fde38b1461021557600080fd5b80631d700c53146100ae57806336a7cf1f146100d7578063715018a6146100ec57806374773a45146100f45780638da5cb5b14610107575b600080fd5b6100c16100bc366004610adb565b610228565b6040516100ce9190610b1d565b60405180910390f35b6100ea6100e5366004610b6a565b61035e565b005b6100ea6103b3565b6100ea610102366004610adb565b6103e9565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100ce565b61016c61013a366004610adb565b6001600160a01b03918216600090815260036020908152604080832063ffffffff949094168352929052205416151590565b60405190151581526020016100ce565b61018f61018a366004610adb565b610803565b6040519081526020016100ce565b6101146101ab366004610adb565b6001600160a01b03918216600090815260036020908152604080832063ffffffff94909416835292905220541690565b600154610114906001600160a01b031681565b6101147f000000000000000000000000000000000000000000000000000000000000000081565b6100ea610223366004610b6a565b6109db565b6001600160a01b038216600090815260026020818152604080842063ffffffff80871686529252832090910154606092911667ffffffffffffffff81111561027257610272610b8e565b60405190808252806020026020018201604052801561029b578160200160208202803683370190505b50905060005b6001600160a01b038516600090815260026020818152604080842063ffffffff808a1686529252909220015481169082161015610356576001600160a01b03808616600090815260026020908152604080832063ffffffff808a1685529083528184209086168085526001909101909252909120548451921691849190811061032c5761032c610ba4565b6001600160a01b03909216602092830291909101909101528061034e81610bd0565b9150506102a1565b509392505050565b6000546001600160a01b031633146103915760405162461bcd60e51b815260040161038890610bf4565b60405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146103dd5760405162461bcd60e51b815260040161038890610bf4565b6103e76000610a76565b565b6001546040805163995d9ab760e01b8152905163ffffffff8416926001600160a01b03169163995d9ab7916004808301926000929190829003018186803b15801561043357600080fd5b505afa158015610447573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261046f9190810190610c5a565b511161048d5760405162461bcd60e51b815260040161038890610d91565b6040516370a0823160e01b81526001600160a01b03838116600483015269054b40b1f852bda00000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b1580156104fc57600080fd5b505afa158015610510573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105349190610dd3565b10158061054857506001600160a01b038216155b6105a35760405162461bcd60e51b815260206004820152602660248201527f566f74696e6750726f78793a2050726f787920686173206e6f7420656e6f756760448201526534102228299760d11b6064820152608401610388565b33600090815260036020908152604080832063ffffffff851684529091529020546001600160a01b03161561071c5733600081815260036020908152604080832063ffffffff808716808652918452828520546001600160a01b0316855260028085528386209286529184528285209585529285905290832054908401549082169260018581019391926106379216610dec565b63ffffffff90811682526020808301939093526040918201600090812054858316825260018781019586905293822080546001600160a01b0319166001600160a01b03909216919091179055600286015490939284926106979216610dec565b63ffffffff90811682526020808301939093526040918201600090812080546001600160a01b0319166001600160a01b039690961695909517909455338452918590528220805463ffffffff19169055600284018054909116916106fa83610e11565b91906101000a81548163ffffffff021916908363ffffffff1602179055505050505b33600090815260036020908152604080832063ffffffff85168452909152902080546001600160a01b0319166001600160a01b038416908117909155156107ff576001600160a01b038216600090815260026020818152604080842063ffffffff8087168652908352818520938401805433808852868652848820805463ffffffff1916928516929092179091558154831687526001860190945291852080546001600160a01b0319169093179092558054929392909116916107de83610bd0565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505b5050565b60008163ffffffff16600160009054906101000a90046001600160a01b03166001600160a01b031663995d9ab76040518163ffffffff1660e01b815260040160006040518083038186803b15801561085a57600080fd5b505afa15801561086e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108969190810190610c5a565b51116108b45760405162461bcd60e51b815260040161038890610d91565b6000805b6001600160a01b038516600090815260026020818152604080842063ffffffff808a1686529252909220015481169082161015610356576001600160a01b03858116600090815260026020908152604080832063ffffffff89811685529083528184209086168452600101909152908190205490516370a0823160e01b815290821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b15801561098557600080fd5b505afa158015610999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bd9190610dd3565b6109c79083610e31565b9150806109d381610bd0565b9150506108b8565b6000546001600160a01b03163314610a055760405162461bcd60e51b815260040161038890610bf4565b6001600160a01b038116610a6a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610388565b610a7381610a76565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114610a7357600080fd5b60008060408385031215610aee57600080fd5b8235610af981610ac6565b9150602083013563ffffffff81168114610b1257600080fd5b809150509250929050565b6020808252825182820181905260009190848201906040850190845b81811015610b5e5783516001600160a01b031683529284019291840191600101610b39565b50909695505050505050565b600060208284031215610b7c57600080fd5b8135610b8781610ac6565b9392505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600063ffffffff80831681811415610bea57610bea610bba565b6001019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b604051601f8201601f1916810167ffffffffffffffff81118282101715610c5257610c52610b8e565b604052919050565b60006020808385031215610c6d57600080fd5b825167ffffffffffffffff80821115610c8557600080fd5b8185019150601f8681840112610c9a57600080fd5b825182811115610cac57610cac610b8e565b8060051b610cbb868201610c29565b918252848101860191868101908a841115610cd557600080fd5b87870192505b83831015610d8357825186811115610cf35760008081fd5b8701603f81018c13610d055760008081fd5b8881015187811115610d1957610d19610b8e565b610d2a818801601f19168b01610c29565b81815260408e81848601011115610d415760008081fd5b60005b83811015610d5f578481018201518382018e01528c01610d44565b83811115610d705760008d85850101525b5050845250509187019190870190610cdb565b9a9950505050505050505050565b60208082526022908201527f566f74696e6750726f78793a2054616720696e64657820697320746f6f2068696040820152610ced60f31b606082015260800190565b600060208284031215610de557600080fd5b5051919050565b600063ffffffff83811690831681811015610e0957610e09610bba565b039392505050565b600063ffffffff821680610e2757610e27610bba565b6000190192915050565b60008219821115610e4457610e44610bba565b50019056fea26469706673582212208f718aedc886d19afb6b6f3213177c1e6607cabe669d31589d0e70a1c3cd8e0564736f6c63430008090033"; + +type ExposedVotingProxyConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: ExposedVotingProxyConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class ExposedVotingProxy__factory extends ContractFactory { + constructor(...args: ExposedVotingProxyConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _DPS: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise { + return super.deploy(_DPS, overrides || {}) as Promise; + } + override getDeployTransaction( + _DPS: string, + overrides?: Overrides & { from?: string | Promise } + ): TransactionRequest { + return super.getDeployTransaction(_DPS, overrides || {}); + } + override attach(address: string): ExposedVotingProxy { + return super.attach(address) as ExposedVotingProxy; + } + override connect(signer: Signer): ExposedVotingProxy__factory { + return super.connect(signer) as ExposedVotingProxy__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): ExposedVotingProxyInterface { + return new utils.Interface(_abi) as ExposedVotingProxyInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): ExposedVotingProxy { + return new Contract(address, _abi, signerOrProvider) as ExposedVotingProxy; + } +} diff --git a/typings/factories/contracts/testing/ExposedVoting__factory.ts b/typings/factories/contracts/testing/ExposedVoting__factory.ts deleted file mode 100644 index 88646ef..0000000 --- a/typings/factories/contracts/testing/ExposedVoting__factory.ts +++ /dev/null @@ -1,524 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - ExposedVoting, - ExposedVotingInterface, -} from "../../../contracts/testing/ExposedVoting"; - -const _abi = [ - { - inputs: [ - { - internalType: "contract IERC20Metadata", - name: "_DPS", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - inputs: [], - name: "DPS", - outputs: [ - { - internalType: "contract IERC20Metadata", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint32", - name: "tagIndex", - type: "uint32", - }, - ], - name: "_delegates", - outputs: [ - { - internalType: "address[]", - name: "", - type: "address[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "uint32", - name: "tagIndex", - type: "uint32", - }, - ], - name: "_proxyVoters", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "index", - type: "uint256", - }, - ], - name: "_results", - outputs: [ - { - components: [ - { - internalType: "address", - name: "voter", - type: "address", - }, - { - components: [ - { - internalType: "uint32", - name: "choiceIndex", - type: "uint32", - }, - { - internalType: "bool", - name: "hasVoted", - type: "bool", - }, - ], - internalType: "struct Voting.Vote", - name: "vote", - type: "tuple", - }, - ], - internalType: "struct ExposedVoting.ResultSample[]", - name: "", - type: "tuple[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "string", - name: "name", - type: "string", - }, - ], - name: "addTag", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "ballots", - outputs: [ - { - internalType: "string", - name: "subject", - type: "string", - }, - { - internalType: "bool", - name: "closed", - type: "bool", - }, - { - internalType: "uint32", - name: "tagIndex", - type: "uint32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "choices", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint32", - name: "ballotIndex", - type: "uint32", - }, - ], - name: "closeBallot", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "string", - name: "subject", - type: "string", - }, - { - internalType: "uint32", - name: "tagIndex", - type: "uint32", - }, - { - internalType: "string[]", - name: "_choices", - type: "string[]", - }, - ], - name: "createBallot", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "getAllResults", - outputs: [ - { - internalType: "uint256[][]", - name: "", - type: "uint256[][]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "ballotIndex", - type: "uint256", - }, - ], - name: "getBallotResult", - outputs: [ - { - internalType: "uint256[]", - name: "", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getBallots", - outputs: [ - { - components: [ - { - internalType: "string", - name: "subject", - type: "string", - }, - { - internalType: "bool", - name: "closed", - type: "bool", - }, - { - internalType: "uint32", - name: "tagIndex", - type: "uint32", - }, - ], - internalType: "struct Voting.Ballot[]", - name: "", - type: "tuple[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getChoices", - outputs: [ - { - internalType: "string[][]", - name: "", - type: "string[][]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getTags", - outputs: [ - { - internalType: "string[]", - name: "", - type: "string[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint32", - name: "tagIndex", - type: "uint32", - }, - ], - name: "grantProxy", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "resultStorage", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "tags", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "voter", - type: "address", - }, - { - internalType: "uint32", - name: "tagIndex", - type: "uint32", - }, - ], - name: "totalProxyAmount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint32", - name: "ballotIndex", - type: "uint32", - }, - { - internalType: "uint32", - name: "choiceIndex", - type: "uint32", - }, - ], - name: "vote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60a06040523480156200001157600080fd5b5060405162002779380380620027798339810160408190526200003491620000fe565b806200004033620000ae565b6001600160a01b0381166200009b5760405162461bcd60e51b815260206004820152601a60248201527f566f74653a204450532061646472657373206973207a65726f2e000000000000604482015260640160405180910390fd5b6001600160a01b03166080525062000130565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156200011157600080fd5b81516001600160a01b03811681146200012957600080fd5b9392505050565b608051612611620001686000396000818161034b015281816108250152818161093101528181610b5001526115ce01526126116000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c8063995d9ab7116100b8578063cff9293a1161007c578063cff9293a1461030b578063de0cc45b1461031e578063eb87c6dc14610331578063ef4e06ec14610346578063f2fde38b1461036d578063f50ea7ff1461038057600080fd5b8063995d9ab714610265578063c43e163d1461027a578063cb8f3448146102b8578063cc71df1a146102cb578063ce65c4e3146102eb57600080fd5b80635c632b381161010a5780635c632b38146101d9578063715018a6146101fb57806374773a451461020357806376d9be08146102165780638da5cb5b1461022b57806398c81bbf1461025057600080fd5b80631d700c531461014757806320822abc1461017057806324db32ac1461019057806337dc3dfa146101a5578063471a9801146101b8575b600080fd5b61015a610155366004611e3f565b610393565b6040516101679190611e72565b60405180910390f35b61018361017e366004611ebf565b6104cb565b6040516101679190611f25565b6101a361019e366004611ff6565b610577565b005b6101836101b33660046120ed565b610765565b6101cb6101c6366004611e3f565b6107a9565b604051908152602001610167565b6101ec6101e7366004611ebf565b6109cb565b6040516101679392919061210f565b6101a3610a98565b6101a3610211366004611e3f565b610ace565b61021e610e94565b604051610167919061217a565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610167565b610258610f2d565b6040516101679190612234565b61026d611044565b6040516101679190612289565b610238610288366004611e3f565b6001600160a01b03918216600090815260076020908152604080832063ffffffff94909416835292905220541690565b6101cb6102c63660046120ed565b611114565b6102de6102d9366004611ebf565b611151565b604051610167919061229c565b6102fe6102f9366004611ebf565b61133d565b6040516101679190612307565b6101a361031936600461231a565b6113d4565b6101a361032c366004612336565b6117dc565b610339611848565b6040516101679190612373565b6102387f000000000000000000000000000000000000000000000000000000000000000081565b6101a361037b3660046123fc565b611958565b6101a361038e366004612417565b6119f3565b6001600160a01b038216600090815260066020908152604080832063ffffffff80861685529252822060020154606092911667ffffffffffffffff8111156103dd576103dd611f3f565b604051908082528060200260200182016040528015610406578160200160208202803683370190505b50905060005b6001600160a01b038516600090815260066020908152604080832063ffffffff8089168552925290912060020154811690821610156104c3576001600160a01b03808616600090815260066020908152604080832063ffffffff808a1685529083528184209086168085526001909101909252909120548451921691849190811061049957610499612432565b6001600160a01b0390921660209283029190910190910152806104bb8161245e565b91505061040c565b509392505050565b600181815481106104db57600080fd5b9060005260206000200160009150905080546104f690612482565b80601f016020809104026020016040519081016040528092919081815260200182805461052290612482565b801561056f5780601f106105445761010080835404028352916020019161056f565b820191906000526020600020905b81548152906001019060200180831161055257829003601f168201915b505050505081565b6000546001600160a01b031633146105aa5760405162461bcd60e51b81526004016105a1906124bd565b60405180910390fd5b60015463ffffffff8316106106015760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2054616720696e64657820697320746f6f20686967682e000060448201526064016105a1565b604080516060810182528481526000602080830182905263ffffffff8616938301939093526002805460018101825591819052825180519394929091027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace019261066e9284920190611c81565b506020828101516001928301805460409095015163ffffffff166101000264ffffffff00199215159290921664ffffffffff19909516949094171790925560038054918201815560005282516106eb927fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90920191840190611d05565b5060048054600190810190915560058054909101815560009081525b815181101561075f5760058054610720906001906124f2565b8154811061073057610730612432565b60009182526020808320909101805460018101825590835290822001558061075781612509565b915050610707565b50505050565b6003828154811061077557600080fd5b90600052602060002001818154811061078d57600080fd5b906000526020600020016000915091505080546104f690612482565b60015460009063ffffffff8316106108035760405162461bcd60e51b815260206004820152601d60248201527f566f74696e673a2054616720696e64657820697320746f6f206869676800000060448201526064016105a1565b6040516370a0823160e01b81526001600160a01b0384811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b15801561086957600080fd5b505afa15801561087d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a19190612524565b905060005b6001600160a01b038516600090815260066020908152604080832063ffffffff8089168552925290912060020154811690821610156104c3576001600160a01b03858116600090815260066020908152604080832063ffffffff89811685529083528184209086168452600101909152908190205490516370a0823160e01b815290821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b15801561097557600080fd5b505afa158015610989573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ad9190612524565b6109b7908361253d565b9150806109c38161245e565b9150506108a6565b600281815481106109db57600080fd5b90600052602060002090600202016000915090508060000180546109fe90612482565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2a90612482565b8015610a775780601f10610a4c57610100808354040283529160200191610a77565b820191906000526020600020905b815481529060010190602001808311610a5a57829003601f168201915b5050506001909301549192505060ff81169063ffffffff6101009091041683565b6000546001600160a01b03163314610ac25760405162461bcd60e51b81526004016105a1906124bd565b610acc6000611c31565b565b60015463ffffffff821610610b255760405162461bcd60e51b815260206004820152601d60248201527f566f74696e673a2054616720696e64657820697320746f6f206869676800000060448201526064016105a1565b6040516370a0823160e01b81526001600160a01b03838116600483015269054b40b1f852bda00000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b158015610b9457600080fd5b505afa158015610ba8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcc9190612524565b101580610be057506001600160a01b038216155b610c365760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2050726f787920686173206e6f7420656e6f756768204450536044820152601760f91b60648201526084016105a1565b33600090815260076020908152604080832063ffffffff851684529091529020546001600160a01b031615610dae5733600081815260076020908152604080832063ffffffff808716808652918452828520546001600160a01b0316855260068452828520918552908352818420948452918490528220546002840154908216926001858101939192610cc99216612555565b63ffffffff90811682526020808301939093526040918201600090812054858316825260018781019586905293822080546001600160a01b0319166001600160a01b0390921691909117905560028601549093928492610d299216612555565b63ffffffff90811682526020808301939093526040918201600090812080546001600160a01b0319166001600160a01b039690961695909517909455338452918590528220805463ffffffff1916905560028401805490911691610d8c8361257a565b91906101000a81548163ffffffff021916908363ffffffff1602179055505050505b33600090815260076020908152604080832063ffffffff85168452909152902080546001600160a01b0319166001600160a01b03841690811790915515610e90576001600160a01b038216600090815260066020908152604080832063ffffffff808616855290835281842060028101805433808852838752858820805463ffffffff1916928616929092179091558154841687526001830190955292852080546001600160a01b03191690941790935581549293921691610e6f8361245e565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505b5050565b60606005805480602002602001604051908101604052809291908181526020016000905b82821015610f2457600084815260209081902083018054604080518285028101850190915281815292830182828015610f1057602002820191906000526020600020905b815481526020019060010190808311610efc575b505050505081526020019060010190610eb8565b50505050905090565b60606003805480602002602001604051908101604052809291908181526020016000905b82821015610f2457838290600052602060002001805480602002602001604051908101604052809291908181526020016000905b82821015611031578382906000526020600020018054610fa490612482565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd090612482565b801561101d5780601f10610ff25761010080835404028352916020019161101d565b820191906000526020600020905b81548152906001019060200180831161100057829003601f168201915b505050505081526020019060010190610f85565b5050505081526020019060010190610f51565b60606001805480602002602001604051908101604052809291908181526020016000905b82821015610f2457838290600052602060002001805461108790612482565b80601f01602080910402602001604051908101604052809291908181526020018280546110b390612482565b80156111005780601f106110d557610100808354040283529160200191611100565b820191906000526020600020905b8154815290600101906020018083116110e357829003601f168201915b505050505081526020019060010190611068565b6005828154811061112457600080fd5b90600052602060002001818154811061113c57600080fd5b90600052602060002001600091509150505481565b606060006004838154811061116857611168612432565b600091825260209091206002909102015467ffffffffffffffff81111561119157611191611f3f565b6040519080825280602002602001820160405280156111ca57816020015b6111b7611d5e565b8152602001906001900390816111af5790505b50905060005b600484815481106111e3576111e3612432565b60009182526020909120600290910201548110156113365760405180604001604052806004868154811061121957611219612432565b9060005260206000209060020201600001838154811061123b5761123b612432565b600091825260209182902001546001600160a01b031682526004805492909101918790811061126c5761126c612432565b906000526020600020906002020160010160006004888154811061129257611292612432565b906000526020600020906002020160000185815481106112b4576112b4612432565b60009182526020808320909101546001600160a01b03168352828101939093526040918201902081518083019092525463ffffffff8116825260ff640100000000909104161515918101919091529052825183908390811061131857611318612432565b6020026020010181905250808061132e90612509565b9150506111d0565b5092915050565b60025460609082106113615760405162461bcd60e51b81526004016105a19061259a565b6005828154811061137457611374612432565b906000526020600020018054806020026020016040519081016040528092919081815260200182805480156113c857602002820191906000526020600020905b8154815260200190600101908083116113b4575b50505050509050919050565b60025463ffffffff8316106113fb5760405162461bcd60e51b81526004016105a19061259a565b60028263ffffffff168154811061141457611414612432565b600091825260209091206001600290920201015460ff16156114785760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e0000000000000060448201526064016105a1565b8063ffffffff1660038363ffffffff168154811061149857611498612432565b600091825260209091200154116114fb5760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2043686f69636520696e64657820697320746f6f20686967686044820152601760f91b60648201526084016105a1565b3360009081526007602052604081206002805483919063ffffffff871690811061152757611527612432565b6000918252602080832060029290920290910160010154610100900463ffffffff1683528201929092526040019020546001600160a01b0316146115ad5760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e00000000000060448201526064016105a1565b6040516370a0823160e01b815233600482015269054b40b1f852bda00000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561161857600080fd5b505afa15801561162c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116509190612524565b101561169e5760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e0060448201526064016105a1565b60048263ffffffff16815481106116b7576116b7612432565b6000918252602080832033845260029290920290910160010190526040902054640100000000900460ff1661178757600160048363ffffffff168154811061170157611701612432565b6000918252602080832033845260016002909302019190910190526040902080549115156401000000000264ff00000000199092169190911790556004805463ffffffff841690811061175657611756612432565b600091825260208083206002909202909101805460018101825590835291200180546001600160a01b031916331790555b8060048363ffffffff16815481106117a1576117a1612432565b60009182526020808320338452600292909202909101600101905260409020805463ffffffff191663ffffffff929092169190911790555050565b6000546001600160a01b031633146118065760405162461bcd60e51b81526004016105a1906124bd565b6001805480820182556000919091528151610e90917fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601906020840190611c81565b60606002805480602002602001604051908101604052809291908181526020016000905b82821015610f24578382906000526020600020906002020160405180606001604052908160008201805461189f90612482565b80601f01602080910402602001604051908101604052809291908181526020018280546118cb90612482565b80156119185780601f106118ed57610100808354040283529160200191611918565b820191906000526020600020905b8154815290600101906020018083116118fb57829003601f168201915b505050918352505060019182015460ff8116151560208084019190915261010090910463ffffffff1660409092019190915291835292909201910161186c565b6000546001600160a01b031633146119825760405162461bcd60e51b81526004016105a1906124bd565b6001600160a01b0381166119e75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105a1565b6119f081611c31565b50565b6000546001600160a01b03163314611a1d5760405162461bcd60e51b81526004016105a1906124bd565b60025463ffffffff821610611a445760405162461bcd60e51b81526004016105a19061259a565b60028163ffffffff1681548110611a5d57611a5d612432565b600091825260209091206001600290920201015460ff1615611ac15760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e000060448201526064016105a1565b600160028263ffffffff1681548110611adc57611adc612432565b60009182526020822060029190910201600101805460ff1916921515929092179091556004805463ffffffff8416908110611b1957611b19612432565b90600052602060002090600202019050600060028363ffffffff1681548110611b4457611b44612432565b6000918252602082206001600290920201015463ffffffff6101009091041691505b825481101561075f576000836000018281548110611b8657611b86612432565b6000918252602090912001546001600160a01b03169050611ba781846107a9565b60058663ffffffff1681548110611bc057611bc0612432565b600091825260208083206001600160a01b03861684526001890190915260409092205491018054909163ffffffff16908110611bfe57611bfe612432565b906000526020600020016000828254611c17919061253d565b90915550829150611c29905081612509565b915050611b66565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054611c8d90612482565b90600052602060002090601f016020900481019282611caf5760008555611cf5565b82601f10611cc857805160ff1916838001178555611cf5565b82800160010185558215611cf5579182015b82811115611cf5578251825591602001919060010190611cda565b50611d01929150611da3565b5090565b828054828255906000526020600020908101928215611d52579160200282015b82811115611d525782518051611d42918491602090910190611c81565b5091602001919060010190611d25565b50611d01929150611db8565b604051806040016040528060006001600160a01b03168152602001611d9e6040518060400160405280600063ffffffff1681526020016000151581525090565b905290565b5b80821115611d015760008155600101611da4565b80821115611d01576000611dcc8282611dd5565b50600101611db8565b508054611de190612482565b6000825580601f10611df1575050565b601f0160209004906000526020600020908101906119f09190611da3565b80356001600160a01b0381168114611e2657600080fd5b919050565b803563ffffffff81168114611e2657600080fd5b60008060408385031215611e5257600080fd5b611e5b83611e0f565b9150611e6960208401611e2b565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015611eb35783516001600160a01b031683529284019291840191600101611e8e565b50909695505050505050565b600060208284031215611ed157600080fd5b5035919050565b6000815180845260005b81811015611efe57602081850181015186830182015201611ee2565b81811115611f10576000602083870101525b50601f01601f19169290920160200192915050565b602081526000611f386020830184611ed8565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611f7e57611f7e611f3f565b604052919050565b600082601f830112611f9757600080fd5b813567ffffffffffffffff811115611fb157611fb1611f3f565b611fc4601f8201601f1916602001611f55565b818152846020838601011115611fd957600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561200b57600080fd5b833567ffffffffffffffff8082111561202357600080fd5b61202f87838801611f86565b945060209150612040828701611e2b565b935060408601358181111561205457600080fd5b8601601f8101881361206557600080fd5b80358281111561207757612077611f3f565b8060051b612086858201611f55565b918252828101850191858101908b8411156120a057600080fd5b86850192505b838310156120dc578235868111156120be5760008081fd5b6120cc8d8983890101611f86565b83525091860191908601906120a6565b809750505050505050509250925092565b6000806040838503121561210057600080fd5b50508035926020909101359150565b6060815260006121226060830186611ed8565b93151560208301525063ffffffff91909116604090910152919050565b600081518084526020808501945080840160005b8381101561216f57815187529582019590820190600101612153565b509495945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156121cf57603f198886030184526121bd85835161213f565b945092850192908501906001016121a1565b5092979650505050505050565b600082825180855260208086019550808260051b84010181860160005b8481101561222757601f19868403018952612215838351611ed8565b988401989250908301906001016121f9565b5090979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156121cf57603f198886030184526122778583516121dc565b9450928501929085019060010161225b565b602081526000611f3860208301846121dc565b602080825282518282018190526000919060409081850190868401855b828110156122fa57815180516001600160a01b03168552860151805163ffffffff1687860152860151151585850152606090930192908501906001016122b9565b5091979650505050505050565b602081526000611f38602083018461213f565b6000806040838503121561232d57600080fd5b611e5b83611e2b565b60006020828403121561234857600080fd5b813567ffffffffffffffff81111561235f57600080fd5b61236b84828501611f86565b949350505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156123ee57603f198984030185528151606081518186526123c082870182611ed8565b838b01511515878c01529289015163ffffffff1695890195909552509487019492509086019060010161239a565b509098975050505050505050565b60006020828403121561240e57600080fd5b611f3882611e0f565b60006020828403121561242957600080fd5b611f3882611e2b565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600063ffffffff8083168181141561247857612478612448565b6001019392505050565b600181811c9082168061249657607f821691505b602082108114156124b757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008282101561250457612504612448565b500390565b600060001982141561251d5761251d612448565b5060010190565b60006020828403121561253657600080fd5b5051919050565b6000821982111561255057612550612448565b500190565b600063ffffffff8381169083168181101561257257612572612448565b039392505050565b600063ffffffff82168061259057612590612448565b6000190192915050565b60208082526021908201527f566f74696e673a2042616c6c6f7420696e64657820697320746f6f20686967686040820152601760f91b60608201526080019056fea26469706673582212207d4fe7b5e2748731ea3f0579cbfd3b6f1fda39e14d5439deaed2483d5b41c9fc64736f6c63430008090033"; - -type ExposedVotingConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ExposedVotingConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ExposedVoting__factory extends ContractFactory { - constructor(...args: ExposedVotingConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _DPS: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(_DPS, overrides || {}) as Promise; - } - override getDeployTransaction( - _DPS: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_DPS, overrides || {}); - } - override attach(address: string): ExposedVoting { - return super.attach(address) as ExposedVoting; - } - override connect(signer: Signer): ExposedVoting__factory { - return super.connect(signer) as ExposedVoting__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ExposedVotingInterface { - return new utils.Interface(_abi) as ExposedVotingInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ExposedVoting { - return new Contract(address, _abi, signerOrProvider) as ExposedVoting; - } -} From 55cdc3ff631097137c6f64220c3b611d13178dba Mon Sep 17 00:00:00 2001 From: valentinpollart Date: Fri, 22 Apr 2022 15:43:39 +0200 Subject: [PATCH 06/25] feat: externalize tag management --- contracts/Ballot.sol | 3 +- contracts/BallotTagManager.sol | 18 ++ contracts/VotingProxy.sol | 16 +- contracts/factories/BallotFactory.sol | 28 +-- contracts/testing/ExposedVotingProxy.sol | 4 +- test/Ballot.spec.ts | 28 +-- test/BallotFactory.spec.ts | 22 +- test/BallotTagManager.spec.ts | 23 ++ test/VotingProxy.spec.ts | 57 ++--- test/testing/setupVoting.ts | 36 +++ typings/contracts/Ballot.ts | 9 +- typings/contracts/BallotTagManager.ts | 236 ++++++++++++++++++ typings/contracts/VotingProxy.ts | 55 ++-- typings/contracts/factories/BallotFactory.ts | 113 +++------ typings/contracts/testing/ExposedBallot.ts | 9 +- .../contracts/testing/ExposedVotingProxy.ts | 55 ++-- .../contracts/BallotTagManager__factory.ts | 159 ++++++++++++ .../factories/contracts/Ballot__factory.ts | 7 +- .../contracts/VotingProxy__factory.ts | 43 ++-- .../factories/BallotFactory__factory.ts | 106 +++----- .../testing/ExposedBallot__factory.ts | 7 +- .../testing/ExposedVotingProxy__factory.ts | 43 ++-- typings/hardhat.d.ts | 9 + 23 files changed, 714 insertions(+), 372 deletions(-) create mode 100644 contracts/BallotTagManager.sol create mode 100644 test/BallotTagManager.spec.ts create mode 100644 test/testing/setupVoting.ts create mode 100644 typings/contracts/BallotTagManager.ts create mode 100644 typings/factories/contracts/BallotTagManager__factory.ts diff --git a/contracts/Ballot.sol b/contracts/Ballot.sol index 2daba15..9430798 100644 --- a/contracts/Ballot.sol +++ b/contracts/Ballot.sol @@ -64,12 +64,11 @@ contract Ballot is Ownable, Initializable { proxy = _proxy; } - function init(string memory _subject, uint32 _tagIndex, string[] memory _choices, VotingProxy _proxy) public initializer { + function init(string memory _subject, uint32 _tagIndex, string[] memory _choices) public initializer { subject = _subject; tagIndex = _tagIndex; closed = false; choices = _choices; - proxy = _proxy; resultStorage = new uint256[](choices.length); } diff --git a/contracts/BallotTagManager.sol b/contracts/BallotTagManager.sol new file mode 100644 index 0000000..e8dab70 --- /dev/null +++ b/contracts/BallotTagManager.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/access/Ownable.sol"; + + +contract BallotTagManager is Ownable { + string[] public tags; + + function getTags() external view returns(string[] memory) { + return tags; + } + + function addTag(string memory name) external onlyOwner { + tags.push(name); + } +} diff --git a/contracts/VotingProxy.sol b/contracts/VotingProxy.sol index 0ae0782..f788489 100644 --- a/contracts/VotingProxy.sol +++ b/contracts/VotingProxy.sol @@ -5,9 +5,10 @@ pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "./factories/BallotFactory.sol"; -contract VotingProxy is Ownable{ +contract VotingProxy is Ownable { IERC20Metadata public immutable DPS; BallotFactory public ballotFactory; + BallotTagManager public ballotTagManager; struct Grants { mapping(address => uint32) voterIndex; @@ -19,17 +20,16 @@ contract VotingProxy is Ownable{ mapping(address => mapping(uint32 => address)) internal proxyVoters; // voter => tag => proxy - constructor(IERC20Metadata _DPS) { + constructor(IERC20Metadata _DPS, BallotTagManager _ballotTagManager) { require(address(_DPS) != address(0), "VotingProxy: DPS address is zero."); - DPS = _DPS; - } + require(address(_ballotTagManager) != address(0), 'VotingProxy: Ballot tag manager address is zero.'); - function setBallotFactory(BallotFactory _ballotFactory) external onlyOwner { - ballotFactory = _ballotFactory; + DPS = _DPS; + ballotTagManager = _ballotTagManager; } function grantProxy(address to, uint32 tagIndex) external { - require(ballotFactory.getTags().length > tagIndex, 'VotingProxy: Tag index is too high'); + require(ballotTagManager.getTags().length > tagIndex, 'VotingProxy: Tag index is too high'); require(DPS.balanceOf(to) >= 25e3 * 1e18 || to == address(0), 'VotingProxy: Proxy has not enough DPS.'); if(proxyVoters[msg.sender][tagIndex] != address(0)) { @@ -52,7 +52,7 @@ contract VotingProxy is Ownable{ } function proxyAmount(address voter, uint32 tagIndex) public view returns (uint256) { - require(ballotFactory.getTags().length > tagIndex, 'VotingProxy: Tag index is too high'); + require(ballotTagManager.getTags().length > tagIndex, 'VotingProxy: Tag index is too high'); uint256 total; for(uint32 i = 0; i < delegates[voter][tagIndex].grantCount; i++) { total += DPS.balanceOf(delegates[voter][tagIndex].indexVoter[i]); diff --git a/contracts/factories/BallotFactory.sol b/contracts/factories/BallotFactory.sol index d5be6a7..4ea1017 100644 --- a/contracts/factories/BallotFactory.sol +++ b/contracts/factories/BallotFactory.sol @@ -6,30 +6,30 @@ import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/proxy/Clones.sol"; import "../Ballot.sol"; import "../VotingProxy.sol"; +import "../BallotTagManager.sol"; contract BallotFactory is Ownable { address[] public ballotAddresses; address public implementationAddress; - address public votingProxyAddress; + BallotTagManager public ballotTagManager; - string[] public tags; + event BallotCreated(address ballotAddress); - constructor(address _implementationAddress, address _votingProxyAddress){ + constructor(address _implementationAddress, BallotTagManager _ballotTagManager){ require(_implementationAddress != address(0), 'BallotFactory: Implementation address should not be zero address'); - require(_votingProxyAddress != address(0), 'BallotFactory: Voting proxy address should not be zero address'); + require(address(_ballotTagManager) != address(0), 'BallotFactory: Ballot tag manager address should not be zero address'); implementationAddress = _implementationAddress; - votingProxyAddress = _votingProxyAddress; + ballotTagManager = _ballotTagManager; } - function createBallot(string memory subject, uint32 tagIndex, string[] memory _choices) external onlyOwner returns(address){ - require(tags.length > tagIndex, 'BallotFactory: Tag index is too high.'); + function createBallot(string memory subject, uint32 tagIndex, string[] memory _choices) external onlyOwner { + require(ballotTagManager.getTags().length > tagIndex, 'BallotFactory: Tag index is too high.'); address cloneAddress = Clones.clone(implementationAddress); - Ballot(cloneAddress).init(subject, tagIndex, _choices, VotingProxy(votingProxyAddress)); + Ballot(cloneAddress).init(subject, tagIndex, _choices); ballotAddresses.push(cloneAddress); - - return cloneAddress; + emit BallotCreated(cloneAddress); } function setImplementationAddress(address newAddress) external onlyOwner { @@ -40,12 +40,4 @@ contract BallotFactory is Ownable { function getBallots() external view returns (address[] memory) { return ballotAddresses; } - - function getTags() external view returns(string[] memory) { - return tags; - } - - function addTag(string memory name) external onlyOwner { - tags.push(name); - } } diff --git a/contracts/testing/ExposedVotingProxy.sol b/contracts/testing/ExposedVotingProxy.sol index 1e2ec97..c760959 100644 --- a/contracts/testing/ExposedVotingProxy.sol +++ b/contracts/testing/ExposedVotingProxy.sol @@ -4,8 +4,8 @@ pragma solidity ^0.8.0; import "../VotingProxy.sol"; -contract ExposedVotingProxy is VotingProxy{ - constructor(IERC20Metadata _DPS) VotingProxy(_DPS) {} +contract ExposedVotingProxy is VotingProxy { + constructor(IERC20Metadata _DPS, BallotTagManager _ballotTagManager) VotingProxy(_DPS, _ballotTagManager) {} function _delegates(address to, uint32 tagIndex) external view returns(address[] memory) { address[] memory proxies = new address[](delegates[to][tagIndex].grantCount); diff --git a/test/Ballot.spec.ts b/test/Ballot.spec.ts index 0af3d18..fe12dc6 100644 --- a/test/Ballot.spec.ts +++ b/test/Ballot.spec.ts @@ -4,35 +4,29 @@ import { parseUnits } from '@ethersproject/units'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { ZERO_ADDRESS } from '../lib/constants'; import { - Ballot, - Ballot__factory, - BallotFactory, - BallotFactory__factory, + BallotTagManager, DeepSquare, ExposedBallot, ExposedBallot__factory, ExposedVotingProxy, - ExposedVotingProxy__factory, } from '../typings'; import { ERC20Agent } from './testing/ERC20Agent'; import setup from './testing/setup'; +import setupVoting from './testing/setupVoting'; -describe('Ballot', async () => { +describe('Ballot', () => { let owner: SignerWithAddress; let accounts: SignerWithAddress[]; let DPS: DeepSquare; let ballot: ExposedBallot; let agentDPS: ERC20Agent; + let ballotTagManager: BallotTagManager; let votingProxy: ExposedVotingProxy; - let ballotMaster: Ballot; - let ballotFactory: BallotFactory; beforeEach(async () => { ({ owner, accounts, DPS, agentDPS } = await setup()); - votingProxy = await new ExposedVotingProxy__factory(owner).deploy(DPS.address); - ballotMaster = await new Ballot__factory(owner).deploy(DPS.address, votingProxy.address); - ballotFactory = await new BallotFactory__factory(owner).deploy(ballotMaster.address, votingProxy.address); - await votingProxy.setBallotFactory(ballotFactory.address); + ({ ballotTagManager, votingProxy } = await setupVoting(owner, DPS)); + ballot = await new ExposedBallot__factory(owner).deploy(DPS.address, votingProxy.address); }); @@ -46,7 +40,7 @@ describe('Ballot', async () => { describe('init', () => { it('should initialize ballot state variables', async () => { - await ballot.init('foo', BigNumber.from(0), ['bar', 'baz'], votingProxy.address); + await ballot.init('foo', BigNumber.from(0), ['bar', 'baz']); expect(await ballot.subject()).to.equals('foo'); expect(await ballot.tagIndex()).to.equals(BigNumber.from(0)); expect(await ballot.getChoices()).to.deep.equals(['bar', 'baz']); @@ -56,8 +50,8 @@ describe('Ballot', async () => { describe('vote', () => { beforeEach(async () => { - await ballotFactory.addTag('foo'); - await ballot.init('foo', BigNumber.from(0), ['bar', 'baz'], votingProxy.address); + await ballotTagManager.addTag('foo'); + await ballot.init('foo', BigNumber.from(0), ['bar', 'baz']); }); it('should throw if ballot is closed', async () => { await ballot.closeBallot(); @@ -89,8 +83,8 @@ describe('Ballot', async () => { describe('closeBallot', async () => { beforeEach(async () => { - await ballotFactory.addTag('foo'); - await ballot.init('foo', BigNumber.from(0), ['bar', 'baz'], votingProxy.address); + await ballotTagManager.addTag('foo'); + await ballot.init('foo', BigNumber.from(0), ['bar', 'baz']); }); it('should throw if ballot is not closed', async () => { await ballot.closeBallot(); diff --git a/test/BallotFactory.spec.ts b/test/BallotFactory.spec.ts index 8a94a82..b50c5bf 100644 --- a/test/BallotFactory.spec.ts +++ b/test/BallotFactory.spec.ts @@ -3,28 +3,26 @@ import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { ZERO_ADDRESS } from '../lib/constants'; import { Ballot, - Ballot__factory, BallotFactory, BallotFactory__factory, + BallotTagManager, DeepSquare, VotingProxy, - VotingProxy__factory, } from '../typings'; import setup from './testing/setup'; +import setupVoting from './testing/setupVoting'; -describe.only('Ballot Factory', async () => { +describe('Ballot Factory', async () => { let owner: SignerWithAddress; let DPS: DeepSquare; + let ballotTagManager: BallotTagManager; let votingProxy: VotingProxy; let ballotImplementation: Ballot; let ballotFactory: BallotFactory; beforeEach(async () => { ({ owner, DPS } = await setup()); - votingProxy = await new VotingProxy__factory(owner).deploy(DPS.address); - ballotImplementation = await new Ballot__factory(owner).deploy(DPS.address, votingProxy.address); - ballotFactory = await new BallotFactory__factory(owner).deploy(ballotImplementation.address, votingProxy.address); - await votingProxy.setBallotFactory(ballotFactory.address); + ({ ballotTagManager, votingProxy, ballotImplementation, ballotFactory } = await setupVoting(owner, DPS)); }); describe('constructor', () => { @@ -33,10 +31,10 @@ describe.only('Ballot Factory', async () => { 'BallotFactory: Implementation address should not be zero address', ); }); - it('should revert if the DPS contract is the zero address', async () => { + it('should revert if the Ballot tag manager is the zero address', async () => { await expect( new BallotFactory__factory(owner).deploy(ballotImplementation.address, ZERO_ADDRESS), - ).to.be.revertedWith('BallotFactory: Voting proxy address should not be zero address'); + ).to.be.revertedWith('BallotFactory: Ballot tag manager address should not be zero address'); }); }); @@ -48,9 +46,11 @@ describe.only('Ballot Factory', async () => { }); it('should create a new ballot', async () => { - await ballotFactory.addTag('foo'); + await ballotTagManager.addTag('foo'); await ballotFactory.setImplementationAddress(ballotImplementation.address); - const ballotAddress = await ballotFactory.createBallot('foo', 0, ['bar', 'baz']).then((t) => t.data); + const [ballotAddress] = await ballotFactory + .createBallot('foo', 0, ['bar', 'baz']) + .then(async (t) => (await t.wait()).events?.find((e) => e.event === 'BallotCreated')?.args ?? []); expect(await ballotFactory.getBallots()).to.deep.equals([ballotAddress]); }); }); diff --git a/test/BallotTagManager.spec.ts b/test/BallotTagManager.spec.ts new file mode 100644 index 0000000..3450bbb --- /dev/null +++ b/test/BallotTagManager.spec.ts @@ -0,0 +1,23 @@ +import { expect } from 'chai'; +import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { BallotTagManager, BallotTagManager__factory } from '../typings'; +import setup from './testing/setup'; + +describe('BallotTagManager', () => { + let owner: SignerWithAddress; + let ballotTagManager: BallotTagManager; + + beforeEach(async () => { + ({ owner } = await setup()); + ballotTagManager = await new BallotTagManager__factory(owner).deploy(); + }); + + describe('addTag', () => { + it('should add a tag to the tag list', async () => { + await ballotTagManager.addTag('foo'); + expect(await ballotTagManager.getTags()).to.deep.equals(['foo']); + await ballotTagManager.addTag('bar'); + expect(await ballotTagManager.getTags()).to.deep.equals(['foo', 'bar']); + }); + }); +}); \ No newline at end of file diff --git a/test/VotingProxy.spec.ts b/test/VotingProxy.spec.ts index af22c46..e620676 100644 --- a/test/VotingProxy.spec.ts +++ b/test/VotingProxy.spec.ts @@ -4,83 +4,78 @@ import { parseUnits } from '@ethersproject/units'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { ZERO_ADDRESS } from '../lib/constants'; import { - Ballot, - Ballot__factory, BallotFactory, - BallotFactory__factory, + BallotTagManager, DeepSquare, ExposedVotingProxy, ExposedVotingProxy__factory, } from '../typings'; import { ERC20Agent } from './testing/ERC20Agent'; import setup from './testing/setup'; +import setupVoting from './testing/setupVoting'; describe('Voting proxy', async () => { let owner: SignerWithAddress; let accounts: SignerWithAddress[]; let DPS: DeepSquare; let agentDPS: ERC20Agent; + let ballotTagManager: BallotTagManager; let votingProxy: ExposedVotingProxy; - let ballotMaster: Ballot; let ballotFactory: BallotFactory; beforeEach(async () => { ({ owner, accounts, DPS, agentDPS } = await setup()); - votingProxy = await new ExposedVotingProxy__factory(owner).deploy(DPS.address); - ballotMaster = await new Ballot__factory(owner).deploy(DPS.address, votingProxy.address); - ballotFactory = await new BallotFactory__factory(owner).deploy(ballotMaster.address, votingProxy.address); + ({ ballotTagManager, votingProxy, ballotFactory } = await setupVoting(owner, DPS)); }); describe('constructor', () => { it('should revert if the DPS contract is the zero address', async () => { - await expect(new ExposedVotingProxy__factory(owner).deploy(ZERO_ADDRESS)).to.be.revertedWith( - 'VotingProxy: DPS address is zero.', - ); + await expect( + new ExposedVotingProxy__factory(owner).deploy(ZERO_ADDRESS, ballotTagManager.address), + ).to.be.revertedWith('VotingProxy: DPS address is zero.'); }); - }); - - describe('setBallotFactory', () => { - it('should set the ballot factory address', async () => { - await votingProxy.setBallotFactory(ballotFactory.address); - expect(await votingProxy.ballotFactory()).to.equals(ballotFactory.address); + it('should revert if the Ballot tag manager is the zero address', async () => { + await expect(new ExposedVotingProxy__factory(owner).deploy(DPS.address, ZERO_ADDRESS)).to.be.revertedWith( + 'VotingProxy: Ballot tag manager address is zero.', + ); }); }); describe('grantProxy', () => { - beforeEach(async () => { - await votingProxy.setBallotFactory(ballotFactory.address); - }); - it('should throw if tag does not exist', async () => { await expect(votingProxy.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0))).to.revertedWith( 'VotingProxy: Tag index is too high', ); }); it('should throw if delegate has less than 25k DPS', async () => { - await ballotFactory.addTag('foo'); + await ballotTagManager.addTag('foo'); await expect(votingProxy.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0))).to.revertedWith( 'VotingProxy: Proxy has not enough DPS.', ); }); it('should register delegation', async () => { - await ballotFactory.addTag('foo'); + await ballotTagManager.addTag('foo'); await agentDPS.transfer(accounts[1], 25000, 18); await votingProxy.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0)); - expect(await votingProxy._delegates(accounts[1].address, BigNumber.from(0))).to.deep.equals([accounts[0].address]); + expect(await votingProxy._delegates(accounts[1].address, BigNumber.from(0))).to.deep.equals([ + accounts[0].address, + ]); expect(await votingProxy._proxyVoters(accounts[0].address, BigNumber.from(0))).to.equals(accounts[1].address); }); it('should change delegation', async () => { - await ballotFactory.addTag('foo'); + await ballotTagManager.addTag('foo'); await agentDPS.transfer(accounts[1], 25000, 18); await votingProxy.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0)); await agentDPS.transfer(accounts[2], 25000, 18); await votingProxy.connect(accounts[0]).grantProxy(accounts[2].address, BigNumber.from(0)); expect(await votingProxy._delegates(accounts[1].address, BigNumber.from(0))).to.deep.equals([]); - expect(await votingProxy._delegates(accounts[2].address, BigNumber.from(0))).to.deep.equals([accounts[0].address]); + expect(await votingProxy._delegates(accounts[2].address, BigNumber.from(0))).to.deep.equals([ + accounts[0].address, + ]); expect(await votingProxy._proxyVoters(accounts[0].address, BigNumber.from(0))).to.equals(accounts[2].address); }); it('should remove delegation', async () => { - await ballotFactory.addTag('foo'); + await ballotTagManager.addTag('foo'); await agentDPS.transfer(accounts[1], 25000, 18); await votingProxy.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0)); await votingProxy.connect(accounts[0]).grantProxy(ZERO_ADDRESS, BigNumber.from(0)); @@ -90,16 +85,13 @@ describe('Voting proxy', async () => { }); describe('proxyAmount', () => { - beforeEach(async () => { - await votingProxy.setBallotFactory(ballotFactory.address); - }); it('should throw if tag does not exist', async () => { await expect(votingProxy.proxyAmount(accounts[1].address, BigNumber.from(0))).to.revertedWith( 'VotingProxy: Tag index is too high', ); }); it('should returns total proxy vote power', async () => { - await ballotFactory.addTag('foo'); + await ballotTagManager.addTag('foo'); await agentDPS.transfer(accounts[0], 55555, 18); await agentDPS.transfer(accounts[1], 25000, 18); await votingProxy.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0)); @@ -108,11 +100,8 @@ describe('Voting proxy', async () => { }); describe('hasDelegated', () => { - beforeEach(async () => { - await votingProxy.setBallotFactory(ballotFactory.address); - }); it('should returns if a voter has delegated his vote on specified tag', async () => { - await ballotFactory.addTag('foo'); + await ballotTagManager.addTag('foo'); await agentDPS.transfer(accounts[0], 25000, 18); await agentDPS.transfer(accounts[1], 25000, 18); await votingProxy.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0)); diff --git a/test/testing/setupVoting.ts b/test/testing/setupVoting.ts new file mode 100644 index 0000000..49814e2 --- /dev/null +++ b/test/testing/setupVoting.ts @@ -0,0 +1,36 @@ +import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { + Ballot, + Ballot__factory, + BallotFactory, + BallotFactory__factory, + BallotTagManager, + BallotTagManager__factory, + DeepSquare, + ExposedVotingProxy, + ExposedVotingProxy__factory, +} from '../../typings'; + +interface SetupVotingOutput { + ballotTagManager: BallotTagManager; + votingProxy: ExposedVotingProxy; + ballotImplementation: Ballot; + ballotFactory: BallotFactory; +} + +export default async function setupVoting(owner: SignerWithAddress, DPS: DeepSquare): Promise { + const ballotTagManager = await new BallotTagManager__factory(owner).deploy(); + const votingProxy = await new ExposedVotingProxy__factory(owner).deploy(DPS.address, ballotTagManager.address); + const ballotImplementation = await new Ballot__factory(owner).deploy(DPS.address, votingProxy.address); + const ballotFactory = await new BallotFactory__factory(owner).deploy( + ballotImplementation.address, + ballotTagManager.address, + ); + + return { + ballotTagManager, + votingProxy, + ballotImplementation, + ballotFactory, + }; +} diff --git a/typings/contracts/Ballot.ts b/typings/contracts/Ballot.ts index 2213eef..9c41067 100644 --- a/typings/contracts/Ballot.ts +++ b/typings/contracts/Ballot.ts @@ -34,7 +34,7 @@ export interface BallotInterface extends utils.Interface { "closed()": FunctionFragment; "getChoices()": FunctionFragment; "getResults()": FunctionFragment; - "init(string,uint32,string[],address)": FunctionFragment; + "init(string,uint32,string[])": FunctionFragment; "owner()": FunctionFragment; "proxy()": FunctionFragment; "renounceOwnership()": FunctionFragment; @@ -84,7 +84,7 @@ export interface BallotInterface extends utils.Interface { ): string; encodeFunctionData( functionFragment: "init", - values: [string, BigNumberish, string[], string] + values: [string, BigNumberish, string[]] ): string; encodeFunctionData(functionFragment: "owner", values?: undefined): string; encodeFunctionData(functionFragment: "proxy", values?: undefined): string; @@ -196,7 +196,6 @@ export interface Ballot extends BaseContract { _subject: string, _tagIndex: BigNumberish, _choices: string[], - _proxy: string, overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -246,7 +245,6 @@ export interface Ballot extends BaseContract { _subject: string, _tagIndex: BigNumberish, _choices: string[], - _proxy: string, overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -294,7 +292,6 @@ export interface Ballot extends BaseContract { _subject: string, _tagIndex: BigNumberish, _choices: string[], - _proxy: string, overrides?: CallOverrides ): Promise; @@ -351,7 +348,6 @@ export interface Ballot extends BaseContract { _subject: string, _tagIndex: BigNumberish, _choices: string[], - _proxy: string, overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -405,7 +401,6 @@ export interface Ballot extends BaseContract { _subject: string, _tagIndex: BigNumberish, _choices: string[], - _proxy: string, overrides?: Overrides & { from?: string | Promise } ): Promise; diff --git a/typings/contracts/BallotTagManager.ts b/typings/contracts/BallotTagManager.ts new file mode 100644 index 0000000..e07758d --- /dev/null +++ b/typings/contracts/BallotTagManager.ts @@ -0,0 +1,236 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, +} from "../common"; + +export interface BallotTagManagerInterface extends utils.Interface { + functions: { + "addTag(string)": FunctionFragment; + "getTags()": FunctionFragment; + "owner()": FunctionFragment; + "renounceOwnership()": FunctionFragment; + "tags(uint256)": FunctionFragment; + "transferOwnership(address)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "addTag" + | "getTags" + | "owner" + | "renounceOwnership" + | "tags" + | "transferOwnership" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "addTag", values: [string]): string; + encodeFunctionData(functionFragment: "getTags", values?: undefined): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData( + functionFragment: "renounceOwnership", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "tags", values: [BigNumberish]): string; + encodeFunctionData( + functionFragment: "transferOwnership", + values: [string] + ): string; + + decodeFunctionResult(functionFragment: "addTag", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getTags", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "renounceOwnership", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "tags", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "transferOwnership", + data: BytesLike + ): Result; + + events: { + "OwnershipTransferred(address,address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; +} + +export interface OwnershipTransferredEventObject { + previousOwner: string; + newOwner: string; +} +export type OwnershipTransferredEvent = TypedEvent< + [string, string], + OwnershipTransferredEventObject +>; + +export type OwnershipTransferredEventFilter = + TypedEventFilter; + +export interface BallotTagManager extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: BallotTagManagerInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + addTag( + name: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + getTags(overrides?: CallOverrides): Promise<[string[]]>; + + owner(overrides?: CallOverrides): Promise<[string]>; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + tags(arg0: BigNumberish, overrides?: CallOverrides): Promise<[string]>; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + addTag( + name: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + getTags(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + tags(arg0: BigNumberish, overrides?: CallOverrides): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + callStatic: { + addTag(name: string, overrides?: CallOverrides): Promise; + + getTags(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + renounceOwnership(overrides?: CallOverrides): Promise; + + tags(arg0: BigNumberish, overrides?: CallOverrides): Promise; + + transferOwnership( + newOwner: string, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "OwnershipTransferred(address,address)"( + previousOwner?: string | null, + newOwner?: string | null + ): OwnershipTransferredEventFilter; + OwnershipTransferred( + previousOwner?: string | null, + newOwner?: string | null + ): OwnershipTransferredEventFilter; + }; + + estimateGas: { + addTag( + name: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + getTags(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + tags(arg0: BigNumberish, overrides?: CallOverrides): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + populateTransaction: { + addTag( + name: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + getTags(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + tags( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; +} diff --git a/typings/contracts/VotingProxy.ts b/typings/contracts/VotingProxy.ts index 8911857..4831f44 100644 --- a/typings/contracts/VotingProxy.ts +++ b/typings/contracts/VotingProxy.ts @@ -30,12 +30,12 @@ export interface VotingProxyInterface extends utils.Interface { functions: { "DPS()": FunctionFragment; "ballotFactory()": FunctionFragment; + "ballotTagManager()": FunctionFragment; "grantProxy(address,uint32)": FunctionFragment; "hasDelegated(address,uint32)": FunctionFragment; "owner()": FunctionFragment; "proxyAmount(address,uint32)": FunctionFragment; "renounceOwnership()": FunctionFragment; - "setBallotFactory(address)": FunctionFragment; "transferOwnership(address)": FunctionFragment; }; @@ -43,12 +43,12 @@ export interface VotingProxyInterface extends utils.Interface { nameOrSignatureOrTopic: | "DPS" | "ballotFactory" + | "ballotTagManager" | "grantProxy" | "hasDelegated" | "owner" | "proxyAmount" | "renounceOwnership" - | "setBallotFactory" | "transferOwnership" ): FunctionFragment; @@ -57,6 +57,10 @@ export interface VotingProxyInterface extends utils.Interface { functionFragment: "ballotFactory", values?: undefined ): string; + encodeFunctionData( + functionFragment: "ballotTagManager", + values?: undefined + ): string; encodeFunctionData( functionFragment: "grantProxy", values: [string, BigNumberish] @@ -74,10 +78,6 @@ export interface VotingProxyInterface extends utils.Interface { functionFragment: "renounceOwnership", values?: undefined ): string; - encodeFunctionData( - functionFragment: "setBallotFactory", - values: [string] - ): string; encodeFunctionData( functionFragment: "transferOwnership", values: [string] @@ -88,6 +88,10 @@ export interface VotingProxyInterface extends utils.Interface { functionFragment: "ballotFactory", data: BytesLike ): Result; + decodeFunctionResult( + functionFragment: "ballotTagManager", + data: BytesLike + ): Result; decodeFunctionResult(functionFragment: "grantProxy", data: BytesLike): Result; decodeFunctionResult( functionFragment: "hasDelegated", @@ -102,10 +106,6 @@ export interface VotingProxyInterface extends utils.Interface { functionFragment: "renounceOwnership", data: BytesLike ): Result; - decodeFunctionResult( - functionFragment: "setBallotFactory", - data: BytesLike - ): Result; decodeFunctionResult( functionFragment: "transferOwnership", data: BytesLike @@ -161,6 +161,8 @@ export interface VotingProxy extends BaseContract { ballotFactory(overrides?: CallOverrides): Promise<[string]>; + ballotTagManager(overrides?: CallOverrides): Promise<[string]>; + grantProxy( to: string, tagIndex: BigNumberish, @@ -185,11 +187,6 @@ export interface VotingProxy extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - setBallotFactory( - _ballotFactory: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - transferOwnership( newOwner: string, overrides?: Overrides & { from?: string | Promise } @@ -200,6 +197,8 @@ export interface VotingProxy extends BaseContract { ballotFactory(overrides?: CallOverrides): Promise; + ballotTagManager(overrides?: CallOverrides): Promise; + grantProxy( to: string, tagIndex: BigNumberish, @@ -224,11 +223,6 @@ export interface VotingProxy extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - setBallotFactory( - _ballotFactory: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - transferOwnership( newOwner: string, overrides?: Overrides & { from?: string | Promise } @@ -239,6 +233,8 @@ export interface VotingProxy extends BaseContract { ballotFactory(overrides?: CallOverrides): Promise; + ballotTagManager(overrides?: CallOverrides): Promise; + grantProxy( to: string, tagIndex: BigNumberish, @@ -261,11 +257,6 @@ export interface VotingProxy extends BaseContract { renounceOwnership(overrides?: CallOverrides): Promise; - setBallotFactory( - _ballotFactory: string, - overrides?: CallOverrides - ): Promise; - transferOwnership( newOwner: string, overrides?: CallOverrides @@ -288,6 +279,8 @@ export interface VotingProxy extends BaseContract { ballotFactory(overrides?: CallOverrides): Promise; + ballotTagManager(overrides?: CallOverrides): Promise; + grantProxy( to: string, tagIndex: BigNumberish, @@ -312,11 +305,6 @@ export interface VotingProxy extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - setBallotFactory( - _ballotFactory: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - transferOwnership( newOwner: string, overrides?: Overrides & { from?: string | Promise } @@ -328,6 +316,8 @@ export interface VotingProxy extends BaseContract { ballotFactory(overrides?: CallOverrides): Promise; + ballotTagManager(overrides?: CallOverrides): Promise; + grantProxy( to: string, tagIndex: BigNumberish, @@ -352,11 +342,6 @@ export interface VotingProxy extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - setBallotFactory( - _ballotFactory: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - transferOwnership( newOwner: string, overrides?: Overrides & { from?: string | Promise } diff --git a/typings/contracts/factories/BallotFactory.ts b/typings/contracts/factories/BallotFactory.ts index 396d0a3..8d6d7a3 100644 --- a/typings/contracts/factories/BallotFactory.ts +++ b/typings/contracts/factories/BallotFactory.ts @@ -28,41 +28,38 @@ import type { export interface BallotFactoryInterface extends utils.Interface { functions: { - "addTag(string)": FunctionFragment; "ballotAddresses(uint256)": FunctionFragment; + "ballotTagManager()": FunctionFragment; "createBallot(string,uint32,string[])": FunctionFragment; "getBallots()": FunctionFragment; - "getTags()": FunctionFragment; "implementationAddress()": FunctionFragment; "owner()": FunctionFragment; "renounceOwnership()": FunctionFragment; "setImplementationAddress(address)": FunctionFragment; - "tags(uint256)": FunctionFragment; "transferOwnership(address)": FunctionFragment; - "votingProxyAddress()": FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "addTag" | "ballotAddresses" + | "ballotTagManager" | "createBallot" | "getBallots" - | "getTags" | "implementationAddress" | "owner" | "renounceOwnership" | "setImplementationAddress" - | "tags" | "transferOwnership" - | "votingProxyAddress" ): FunctionFragment; - encodeFunctionData(functionFragment: "addTag", values: [string]): string; encodeFunctionData( functionFragment: "ballotAddresses", values: [BigNumberish] ): string; + encodeFunctionData( + functionFragment: "ballotTagManager", + values?: undefined + ): string; encodeFunctionData( functionFragment: "createBallot", values: [string, BigNumberish, string[]] @@ -71,7 +68,6 @@ export interface BallotFactoryInterface extends utils.Interface { functionFragment: "getBallots", values?: undefined ): string; - encodeFunctionData(functionFragment: "getTags", values?: undefined): string; encodeFunctionData( functionFragment: "implementationAddress", values?: undefined @@ -85,27 +81,24 @@ export interface BallotFactoryInterface extends utils.Interface { functionFragment: "setImplementationAddress", values: [string] ): string; - encodeFunctionData(functionFragment: "tags", values: [BigNumberish]): string; encodeFunctionData( functionFragment: "transferOwnership", values: [string] ): string; - encodeFunctionData( - functionFragment: "votingProxyAddress", - values?: undefined - ): string; - decodeFunctionResult(functionFragment: "addTag", data: BytesLike): Result; decodeFunctionResult( functionFragment: "ballotAddresses", data: BytesLike ): Result; + decodeFunctionResult( + functionFragment: "ballotTagManager", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "createBallot", data: BytesLike ): Result; decodeFunctionResult(functionFragment: "getBallots", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getTags", data: BytesLike): Result; decodeFunctionResult( functionFragment: "implementationAddress", data: BytesLike @@ -119,23 +112,27 @@ export interface BallotFactoryInterface extends utils.Interface { functionFragment: "setImplementationAddress", data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "tags", data: BytesLike): Result; decodeFunctionResult( functionFragment: "transferOwnership", data: BytesLike ): Result; - decodeFunctionResult( - functionFragment: "votingProxyAddress", - data: BytesLike - ): Result; events: { + "BallotCreated(address)": EventFragment; "OwnershipTransferred(address,address)": EventFragment; }; + getEvent(nameOrSignatureOrTopic: "BallotCreated"): EventFragment; getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; } +export interface BallotCreatedEventObject { + ballotAddress: string; +} +export type BallotCreatedEvent = TypedEvent<[string], BallotCreatedEventObject>; + +export type BallotCreatedEventFilter = TypedEventFilter; + export interface OwnershipTransferredEventObject { previousOwner: string; newOwner: string; @@ -175,16 +172,13 @@ export interface BallotFactory extends BaseContract { removeListener: OnEvent; functions: { - addTag( - name: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - ballotAddresses( arg0: BigNumberish, overrides?: CallOverrides ): Promise<[string]>; + ballotTagManager(overrides?: CallOverrides): Promise<[string]>; + createBallot( subject: string, tagIndex: BigNumberish, @@ -194,8 +188,6 @@ export interface BallotFactory extends BaseContract { getBallots(overrides?: CallOverrides): Promise<[string[]]>; - getTags(overrides?: CallOverrides): Promise<[string[]]>; - implementationAddress(overrides?: CallOverrides): Promise<[string]>; owner(overrides?: CallOverrides): Promise<[string]>; @@ -209,26 +201,19 @@ export interface BallotFactory extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - tags(arg0: BigNumberish, overrides?: CallOverrides): Promise<[string]>; - transferOwnership( newOwner: string, overrides?: Overrides & { from?: string | Promise } ): Promise; - - votingProxyAddress(overrides?: CallOverrides): Promise<[string]>; }; - addTag( - name: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - ballotAddresses( arg0: BigNumberish, overrides?: CallOverrides ): Promise; + ballotTagManager(overrides?: CallOverrides): Promise; + createBallot( subject: string, tagIndex: BigNumberish, @@ -238,8 +223,6 @@ export interface BallotFactory extends BaseContract { getBallots(overrides?: CallOverrides): Promise; - getTags(overrides?: CallOverrides): Promise; - implementationAddress(overrides?: CallOverrides): Promise; owner(overrides?: CallOverrides): Promise; @@ -253,34 +236,28 @@ export interface BallotFactory extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - tags(arg0: BigNumberish, overrides?: CallOverrides): Promise; - transferOwnership( newOwner: string, overrides?: Overrides & { from?: string | Promise } ): Promise; - votingProxyAddress(overrides?: CallOverrides): Promise; - callStatic: { - addTag(name: string, overrides?: CallOverrides): Promise; - ballotAddresses( arg0: BigNumberish, overrides?: CallOverrides ): Promise; + ballotTagManager(overrides?: CallOverrides): Promise; + createBallot( subject: string, tagIndex: BigNumberish, _choices: string[], overrides?: CallOverrides - ): Promise; + ): Promise; getBallots(overrides?: CallOverrides): Promise; - getTags(overrides?: CallOverrides): Promise; - implementationAddress(overrides?: CallOverrides): Promise; owner(overrides?: CallOverrides): Promise; @@ -292,17 +269,16 @@ export interface BallotFactory extends BaseContract { overrides?: CallOverrides ): Promise; - tags(arg0: BigNumberish, overrides?: CallOverrides): Promise; - transferOwnership( newOwner: string, overrides?: CallOverrides ): Promise; - - votingProxyAddress(overrides?: CallOverrides): Promise; }; filters: { + "BallotCreated(address)"(ballotAddress?: null): BallotCreatedEventFilter; + BallotCreated(ballotAddress?: null): BallotCreatedEventFilter; + "OwnershipTransferred(address,address)"( previousOwner?: string | null, newOwner?: string | null @@ -314,16 +290,13 @@ export interface BallotFactory extends BaseContract { }; estimateGas: { - addTag( - name: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - ballotAddresses( arg0: BigNumberish, overrides?: CallOverrides ): Promise; + ballotTagManager(overrides?: CallOverrides): Promise; + createBallot( subject: string, tagIndex: BigNumberish, @@ -333,8 +306,6 @@ export interface BallotFactory extends BaseContract { getBallots(overrides?: CallOverrides): Promise; - getTags(overrides?: CallOverrides): Promise; - implementationAddress(overrides?: CallOverrides): Promise; owner(overrides?: CallOverrides): Promise; @@ -348,27 +319,20 @@ export interface BallotFactory extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - tags(arg0: BigNumberish, overrides?: CallOverrides): Promise; - transferOwnership( newOwner: string, overrides?: Overrides & { from?: string | Promise } ): Promise; - - votingProxyAddress(overrides?: CallOverrides): Promise; }; populateTransaction: { - addTag( - name: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - ballotAddresses( arg0: BigNumberish, overrides?: CallOverrides ): Promise; + ballotTagManager(overrides?: CallOverrides): Promise; + createBallot( subject: string, tagIndex: BigNumberish, @@ -378,8 +342,6 @@ export interface BallotFactory extends BaseContract { getBallots(overrides?: CallOverrides): Promise; - getTags(overrides?: CallOverrides): Promise; - implementationAddress( overrides?: CallOverrides ): Promise; @@ -395,18 +357,9 @@ export interface BallotFactory extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - tags( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - transferOwnership( newOwner: string, overrides?: Overrides & { from?: string | Promise } ): Promise; - - votingProxyAddress( - overrides?: CallOverrides - ): Promise; }; } diff --git a/typings/contracts/testing/ExposedBallot.ts b/typings/contracts/testing/ExposedBallot.ts index 822aef7..acc7b69 100644 --- a/typings/contracts/testing/ExposedBallot.ts +++ b/typings/contracts/testing/ExposedBallot.ts @@ -53,7 +53,7 @@ export interface ExposedBallotInterface extends utils.Interface { "closed()": FunctionFragment; "getChoices()": FunctionFragment; "getResults()": FunctionFragment; - "init(string,uint32,string[],address)": FunctionFragment; + "init(string,uint32,string[])": FunctionFragment; "owner()": FunctionFragment; "proxy()": FunctionFragment; "renounceOwnership()": FunctionFragment; @@ -105,7 +105,7 @@ export interface ExposedBallotInterface extends utils.Interface { ): string; encodeFunctionData( functionFragment: "init", - values: [string, BigNumberish, string[], string] + values: [string, BigNumberish, string[]] ): string; encodeFunctionData(functionFragment: "owner", values?: undefined): string; encodeFunctionData(functionFragment: "proxy", values?: undefined): string; @@ -222,7 +222,6 @@ export interface ExposedBallot extends BaseContract { _subject: string, _tagIndex: BigNumberish, _choices: string[], - _proxy: string, overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -276,7 +275,6 @@ export interface ExposedBallot extends BaseContract { _subject: string, _tagIndex: BigNumberish, _choices: string[], - _proxy: string, overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -328,7 +326,6 @@ export interface ExposedBallot extends BaseContract { _subject: string, _tagIndex: BigNumberish, _choices: string[], - _proxy: string, overrides?: CallOverrides ): Promise; @@ -387,7 +384,6 @@ export interface ExposedBallot extends BaseContract { _subject: string, _tagIndex: BigNumberish, _choices: string[], - _proxy: string, overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -443,7 +439,6 @@ export interface ExposedBallot extends BaseContract { _subject: string, _tagIndex: BigNumberish, _choices: string[], - _proxy: string, overrides?: Overrides & { from?: string | Promise } ): Promise; diff --git a/typings/contracts/testing/ExposedVotingProxy.ts b/typings/contracts/testing/ExposedVotingProxy.ts index bfa74ed..ac61eb7 100644 --- a/typings/contracts/testing/ExposedVotingProxy.ts +++ b/typings/contracts/testing/ExposedVotingProxy.ts @@ -32,12 +32,12 @@ export interface ExposedVotingProxyInterface extends utils.Interface { "_delegates(address,uint32)": FunctionFragment; "_proxyVoters(address,uint32)": FunctionFragment; "ballotFactory()": FunctionFragment; + "ballotTagManager()": FunctionFragment; "grantProxy(address,uint32)": FunctionFragment; "hasDelegated(address,uint32)": FunctionFragment; "owner()": FunctionFragment; "proxyAmount(address,uint32)": FunctionFragment; "renounceOwnership()": FunctionFragment; - "setBallotFactory(address)": FunctionFragment; "transferOwnership(address)": FunctionFragment; }; @@ -47,12 +47,12 @@ export interface ExposedVotingProxyInterface extends utils.Interface { | "_delegates" | "_proxyVoters" | "ballotFactory" + | "ballotTagManager" | "grantProxy" | "hasDelegated" | "owner" | "proxyAmount" | "renounceOwnership" - | "setBallotFactory" | "transferOwnership" ): FunctionFragment; @@ -69,6 +69,10 @@ export interface ExposedVotingProxyInterface extends utils.Interface { functionFragment: "ballotFactory", values?: undefined ): string; + encodeFunctionData( + functionFragment: "ballotTagManager", + values?: undefined + ): string; encodeFunctionData( functionFragment: "grantProxy", values: [string, BigNumberish] @@ -86,10 +90,6 @@ export interface ExposedVotingProxyInterface extends utils.Interface { functionFragment: "renounceOwnership", values?: undefined ): string; - encodeFunctionData( - functionFragment: "setBallotFactory", - values: [string] - ): string; encodeFunctionData( functionFragment: "transferOwnership", values: [string] @@ -105,6 +105,10 @@ export interface ExposedVotingProxyInterface extends utils.Interface { functionFragment: "ballotFactory", data: BytesLike ): Result; + decodeFunctionResult( + functionFragment: "ballotTagManager", + data: BytesLike + ): Result; decodeFunctionResult(functionFragment: "grantProxy", data: BytesLike): Result; decodeFunctionResult( functionFragment: "hasDelegated", @@ -119,10 +123,6 @@ export interface ExposedVotingProxyInterface extends utils.Interface { functionFragment: "renounceOwnership", data: BytesLike ): Result; - decodeFunctionResult( - functionFragment: "setBallotFactory", - data: BytesLike - ): Result; decodeFunctionResult( functionFragment: "transferOwnership", data: BytesLike @@ -190,6 +190,8 @@ export interface ExposedVotingProxy extends BaseContract { ballotFactory(overrides?: CallOverrides): Promise<[string]>; + ballotTagManager(overrides?: CallOverrides): Promise<[string]>; + grantProxy( to: string, tagIndex: BigNumberish, @@ -214,11 +216,6 @@ export interface ExposedVotingProxy extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - setBallotFactory( - _ballotFactory: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - transferOwnership( newOwner: string, overrides?: Overrides & { from?: string | Promise } @@ -241,6 +238,8 @@ export interface ExposedVotingProxy extends BaseContract { ballotFactory(overrides?: CallOverrides): Promise; + ballotTagManager(overrides?: CallOverrides): Promise; + grantProxy( to: string, tagIndex: BigNumberish, @@ -265,11 +264,6 @@ export interface ExposedVotingProxy extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - setBallotFactory( - _ballotFactory: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - transferOwnership( newOwner: string, overrides?: Overrides & { from?: string | Promise } @@ -292,6 +286,8 @@ export interface ExposedVotingProxy extends BaseContract { ballotFactory(overrides?: CallOverrides): Promise; + ballotTagManager(overrides?: CallOverrides): Promise; + grantProxy( to: string, tagIndex: BigNumberish, @@ -314,11 +310,6 @@ export interface ExposedVotingProxy extends BaseContract { renounceOwnership(overrides?: CallOverrides): Promise; - setBallotFactory( - _ballotFactory: string, - overrides?: CallOverrides - ): Promise; - transferOwnership( newOwner: string, overrides?: CallOverrides @@ -353,6 +344,8 @@ export interface ExposedVotingProxy extends BaseContract { ballotFactory(overrides?: CallOverrides): Promise; + ballotTagManager(overrides?: CallOverrides): Promise; + grantProxy( to: string, tagIndex: BigNumberish, @@ -377,11 +370,6 @@ export interface ExposedVotingProxy extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - setBallotFactory( - _ballotFactory: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - transferOwnership( newOwner: string, overrides?: Overrides & { from?: string | Promise } @@ -405,6 +393,8 @@ export interface ExposedVotingProxy extends BaseContract { ballotFactory(overrides?: CallOverrides): Promise; + ballotTagManager(overrides?: CallOverrides): Promise; + grantProxy( to: string, tagIndex: BigNumberish, @@ -429,11 +419,6 @@ export interface ExposedVotingProxy extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - setBallotFactory( - _ballotFactory: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - transferOwnership( newOwner: string, overrides?: Overrides & { from?: string | Promise } diff --git a/typings/factories/contracts/BallotTagManager__factory.ts b/typings/factories/contracts/BallotTagManager__factory.ts new file mode 100644 index 0000000..a50a5cd --- /dev/null +++ b/typings/factories/contracts/BallotTagManager__factory.ts @@ -0,0 +1,159 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { + BallotTagManager, + BallotTagManagerInterface, +} from "../../contracts/BallotTagManager"; + +const _abi = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + inputs: [ + { + internalType: "string", + name: "name", + type: "string", + }, + ], + name: "addTag", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getTags", + outputs: [ + { + internalType: "string[]", + name: "", + type: "string[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "tags", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +]; + +const _bytecode = + "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6107208061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806320822abc14610067578063715018a6146100905780638da5cb5b1461009a578063995d9ab7146100b5578063de0cc45b146100ca578063f2fde38b146100dd575b600080fd5b61007a6100753660046104a8565b6100f0565b604051610087919061050e565b60405180910390f35b61009861019c565b005b6000546040516001600160a01b039091168152602001610087565b6100bd6101db565b6040516100879190610528565b6100986100d83660046105a0565b6102b4565b6100986100eb366004610651565b610324565b6001818154811061010057600080fd5b90600052602060002001600091509050805461011b9061067a565b80601f01602080910402602001604051908101604052809291908181526020018280546101479061067a565b80156101945780601f1061016957610100808354040283529160200191610194565b820191906000526020600020905b81548152906001019060200180831161017757829003601f168201915b505050505081565b6000546001600160a01b031633146101cf5760405162461bcd60e51b81526004016101c6906106b5565b60405180910390fd5b6101d960006103bf565b565b60606001805480602002602001604051908101604052809291908181526020016000905b828210156102ab57838290600052602060002001805461021e9061067a565b80601f016020809104026020016040519081016040528092919081815260200182805461024a9061067a565b80156102975780601f1061026c57610100808354040283529160200191610297565b820191906000526020600020905b81548152906001019060200180831161027a57829003601f168201915b5050505050815260200190600101906101ff565b50505050905090565b6000546001600160a01b031633146102de5760405162461bcd60e51b81526004016101c6906106b5565b6001805480820182556000919091528151610320917fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60190602084019061040f565b5050565b6000546001600160a01b0316331461034e5760405162461bcd60e51b81526004016101c6906106b5565b6001600160a01b0381166103b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101c6565b6103bc816103bf565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805461041b9061067a565b90600052602060002090601f01602090048101928261043d5760008555610483565b82601f1061045657805160ff1916838001178555610483565b82800160010185558215610483579182015b82811115610483578251825591602001919060010190610468565b5061048f929150610493565b5090565b5b8082111561048f5760008155600101610494565b6000602082840312156104ba57600080fd5b5035919050565b6000815180845260005b818110156104e7576020818501810151868301820152016104cb565b818111156104f9576000602083870101525b50601f01601f19169290920160200192915050565b60208152600061052160208301846104c1565b9392505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561057d57603f1988860301845261056b8583516104c1565b9450928501929085019060010161054f565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156105b257600080fd5b813567ffffffffffffffff808211156105ca57600080fd5b818401915084601f8301126105de57600080fd5b8135818111156105f0576105f061058a565b604051601f8201601f19908116603f011681019083821181831017156106185761061861058a565b8160405282815287602084870101111561063157600080fd5b826020860160208301376000928101602001929092525095945050505050565b60006020828403121561066357600080fd5b81356001600160a01b038116811461052157600080fd5b600181811c9082168061068e57607f821691505b602082108114156106af57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260408201526060019056fea26469706673582212202deacce286c3bc340044fc85de041a295bac873a613fa01c6388a10406de9e5d64736f6c63430008090033"; + +type BallotTagManagerConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: BallotTagManagerConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class BallotTagManager__factory extends ContractFactory { + constructor(...args: BallotTagManagerConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: string | Promise } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: string | Promise } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): BallotTagManager { + return super.attach(address) as BallotTagManager; + } + override connect(signer: Signer): BallotTagManager__factory { + return super.connect(signer) as BallotTagManager__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): BallotTagManagerInterface { + return new utils.Interface(_abi) as BallotTagManagerInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): BallotTagManager { + return new Contract(address, _abi, signerOrProvider) as BallotTagManager; + } +} diff --git a/typings/factories/contracts/Ballot__factory.ts b/typings/factories/contracts/Ballot__factory.ts index fdad6a3..22d0ac7 100644 --- a/typings/factories/contracts/Ballot__factory.ts +++ b/typings/factories/contracts/Ballot__factory.ts @@ -136,11 +136,6 @@ const _abi = [ name: "_choices", type: "string[]", }, - { - internalType: "contract VotingProxy", - name: "_proxy", - type: "address", - }, ], name: "init", outputs: [], @@ -254,7 +249,7 @@ const _abi = [ ]; const _bytecode = - "0x60a06040523480156200001157600080fd5b50604051620014573803806200145783398101604081905262000034916200012c565b6200003f33620000c3565b6001600160a01b0382166200009a5760405162461bcd60e51b815260206004820152601a60248201527f566f74653a204450532061646472657373206973207a65726f2e000000000000604482015260640160405180910390fd5b6001600160a01b03918216608052600180546001600160a01b031916919092161790556200016b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200012957600080fd5b50565b600080604083850312156200014057600080fd5b82516200014d8162000113565b6020840151909250620001608162000113565b809150509250929050565b6080516112c2620001956000396000818161021f0152818161055e015261091d01526112c26000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80639094c76311610097578063ec55688911610066578063ec55688914610207578063ef4e06ec1461021a578063f2fde38b14610241578063f6fd7fde1461025457600080fd5b80639094c763146101c457806398c81bbf146101d7578063a97b8b4d146101ec578063c340dd33146101f457600080fd5b806359037b89116100d357806359037b8914610157578063597e1fb514610178578063715018a6146101955780638da5cb5b1461019f57600080fd5b80630a59a98c146100fa5780634717f97c1461011857806349499d861461012d575b600080fd5b610102610267565b60405161010f9190610e79565b60405180910390f35b6101206102f5565b60405161010f9190610e93565b60035461014290610100900463ffffffff1681565b60405163ffffffff909116815260200161010f565b61016a610165366004610ed7565b61034d565b60405190815260200161010f565b6003546101859060ff1681565b604051901515815260200161010f565b61019d61036e565b005b6000546001600160a01b03165b6040516001600160a01b03909116815260200161010f565b61019d6101d2366004610f09565b6103ad565b6101df6106d8565b60405161010f9190610f24565b61019d6107b1565b61019d61020236600461105d565b610a0b565b6001546101ac906001600160a01b031681565b6101ac7f000000000000000000000000000000000000000000000000000000000000000081565b61019d61024f366004611165565b610b96565b610102610262366004610ed7565b610c2e565b6002805461027490611182565b80601f01602080910402602001604051908101604052809291908181526020018280546102a090611182565b80156102ed5780601f106102c2576101008083540402835291602001916102ed565b820191906000526020600020905b8154815290600101906020018083116102d057829003601f168201915b505050505081565b6060600580548060200260200160405190810160405280929190818152602001828054801561034357602002820191906000526020600020905b81548152602001906001019080831161032f575b5050505050905090565b6005818154811061035d57600080fd5b600091825260209091200154905081565b6000546001600160a01b031633146103a15760405162461bcd60e51b8152600401610398906111bd565b60405180910390fd5b6103ab6000610c59565b565b60035460ff16156104005760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e000000000000006044820152606401610398565b60045463ffffffff8216106104615760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2043686f69636520696e64657820697320746f6f20686967686044820152601760f91b6064820152608401610398565b600154600354604051632dd7519b60e21b815233600482015261010090910463ffffffff1660248201526001600160a01b039091169063b75d466c9060440160206040518083038186803b1580156104b857600080fd5b505afa1580156104cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f091906111f2565b1561053d5760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e0000000000006044820152606401610398565b6040516370a0823160e01b815233600482015269054b40b1f852bda00000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b1580156105a857600080fd5b505afa1580156105bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e09190611214565b101561062e5760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e006044820152606401610398565b33600090815260076020526040902054640100000000900460ff166106af57336000818152600760205260408120805464ff0000000019166401000000001790556006805460018101825591527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b03191690911790555b336000908152600760205260409020805463ffffffff191663ffffffff92909216919091179055565b60606004805480602002602001604051908101604052809291908181526020016000905b828210156107a857838290600052602060002001805461071b90611182565b80601f016020809104026020016040519081016040528092919081815260200182805461074790611182565b80156107945780601f1061076957610100808354040283529160200191610794565b820191906000526020600020905b81548152906001019060200180831161077757829003601f168201915b5050505050815260200190600101906106fc565b50505050905090565b6000546001600160a01b031633146107db5760405162461bcd60e51b8152600401610398906111bd565b60035460ff161561082e5760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e00006044820152606401610398565b6003805460ff1916600117905560005b600654811015610a085760006006828154811061085d5761085d61122d565b60009182526020909120015460015460035460405163c143c6db60e01b81526001600160a01b039384166004820181905261010090920463ffffffff16602482015290935091169063c143c6db9060440160206040518083038186803b1580156108c657600080fd5b505afa1580156108da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fe9190611214565b6040516370a0823160e01b81526001600160a01b0383811660048301527f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b15801561095f57600080fd5b505afa158015610973573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109979190611214565b6109a19190611259565b6001600160a01b03821660009081526007602052604090205460058054909163ffffffff169081106109d5576109d561122d565b9060005260206000200160008282546109ee9190611259565b90915550829150610a00905081611271565b91505061083e565b50565b600054600160a81b900460ff16610a2f57600054600160a01b900460ff1615610a33565b303b155b610a965760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610398565b600054600160a81b900460ff16158015610ac0576000805461ffff60a01b191661010160a01b1790555b8451610ad3906002906020880190610ca9565b506003805464ffffffffff191661010063ffffffff87160260ff19161790558251610b05906004906020860190610d2d565b50600180546001600160a01b0319166001600160a01b03841617905560045467ffffffffffffffff811115610b3c57610b3c610f86565b604051908082528060200260200182016040528015610b65578160200160208202803683370190505b508051610b7a91600591602090910190610d86565b508015610b8f576000805460ff60a81b191690555b5050505050565b6000546001600160a01b03163314610bc05760405162461bcd60e51b8152600401610398906111bd565b6001600160a01b038116610c255760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610398565b610a0881610c59565b60048181548110610c3e57600080fd5b90600052602060002001600091509050805461027490611182565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054610cb590611182565b90600052602060002090601f016020900481019282610cd75760008555610d1d565b82601f10610cf057805160ff1916838001178555610d1d565b82800160010185558215610d1d579182015b82811115610d1d578251825591602001919060010190610d02565b50610d29929150610dc0565b5090565b828054828255906000526020600020908101928215610d7a579160200282015b82811115610d7a5782518051610d6a918491602090910190610ca9565b5091602001919060010190610d4d565b50610d29929150610dd5565b828054828255906000526020600020908101928215610d1d5791602002820182811115610d1d578251825591602001919060010190610d02565b5b80821115610d295760008155600101610dc1565b80821115610d29576000610de98282610df2565b50600101610dd5565b508054610dfe90611182565b6000825580601f10610e0e575050565b601f016020900490600052602060002090810190610a089190610dc0565b6000815180845260005b81811015610e5257602081850181015186830182015201610e36565b81811115610e64576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610e8c6020830184610e2c565b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610ecb57835183529284019291840191600101610eaf565b50909695505050505050565b600060208284031215610ee957600080fd5b5035919050565b803563ffffffff81168114610f0457600080fd5b919050565b600060208284031215610f1b57600080fd5b610e8c82610ef0565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015610f7957603f19888603018452610f67858351610e2c565b94509285019290850190600101610f4b565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610fc557610fc5610f86565b604052919050565b600082601f830112610fde57600080fd5b813567ffffffffffffffff811115610ff857610ff8610f86565b61100b601f8201601f1916602001610f9c565b81815284602083860101111561102057600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610a0857600080fd5b8035610f048161103d565b6000806000806080858703121561107357600080fd5b843567ffffffffffffffff8082111561108b57600080fd5b61109788838901610fcd565b9550602091506110a8828801610ef0565b94506040870135818111156110bc57600080fd5b8701601f810189136110cd57600080fd5b8035828111156110df576110df610f86565b8060051b6110ee858201610f9c565b918252828101850191858101908c84111561110857600080fd5b86850192505b83831015611144578235868111156111265760008081fd5b6111348e8983890101610fcd565b835250918601919086019061110e565b8098505050505050505061115a60608601611052565b905092959194509250565b60006020828403121561117757600080fd5b8135610e8c8161103d565b600181811c9082168061119657607f821691505b602082108114156111b757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561120457600080fd5b81518015158114610e8c57600080fd5b60006020828403121561122657600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561126c5761126c611243565b500190565b600060001982141561128557611285611243565b506001019056fea2646970667358221220ffe7ff8a395493c0cb246b639c4556e89064a79cf2608927283883199e9ec37a64736f6c63430008090033"; + "0x60a06040523480156200001157600080fd5b50604051620014163803806200141683398101604081905262000034916200012c565b6200003f33620000c3565b6001600160a01b0382166200009a5760405162461bcd60e51b815260206004820152601a60248201527f566f74653a204450532061646472657373206973207a65726f2e000000000000604482015260640160405180910390fd5b6001600160a01b03918216608052600180546001600160a01b031916919092161790556200016b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200012957600080fd5b50565b600080604083850312156200014057600080fd5b82516200014d8162000113565b6020840151909250620001608162000113565b809150509250929050565b608051611281620001956000396000818161021f0152818161055e015261091d01526112816000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80639094c76311610097578063ec55688911610066578063ec55688914610207578063ef4e06ec1461021a578063f2fde38b14610241578063f6fd7fde1461025457600080fd5b80639094c763146101c457806398c81bbf146101d7578063a97b8b4d146101ec578063c1d1d5c1146101f457600080fd5b806359037b89116100d357806359037b8914610157578063597e1fb514610178578063715018a6146101955780638da5cb5b1461019f57600080fd5b80630a59a98c146100fa5780634717f97c1461011857806349499d861461012d575b600080fd5b610102610267565b60405161010f9190610e5d565b60405180910390f35b6101206102f5565b60405161010f9190610e77565b60035461014290610100900463ffffffff1681565b60405163ffffffff909116815260200161010f565b61016a610165366004610ebb565b61034d565b60405190815260200161010f565b6003546101859060ff1681565b604051901515815260200161010f565b61019d61036e565b005b6000546001600160a01b03165b6040516001600160a01b03909116815260200161010f565b61019d6101d2366004610eed565b6103ad565b6101df6106d8565b60405161010f9190610f08565b61019d6107b1565b61019d610202366004611021565b610a0b565b6001546101ac906001600160a01b031681565b6101ac7f000000000000000000000000000000000000000000000000000000000000000081565b61019d61024f366004611118565b610b7a565b610102610262366004610ebb565b610c12565b6002805461027490611141565b80601f01602080910402602001604051908101604052809291908181526020018280546102a090611141565b80156102ed5780601f106102c2576101008083540402835291602001916102ed565b820191906000526020600020905b8154815290600101906020018083116102d057829003601f168201915b505050505081565b6060600580548060200260200160405190810160405280929190818152602001828054801561034357602002820191906000526020600020905b81548152602001906001019080831161032f575b5050505050905090565b6005818154811061035d57600080fd5b600091825260209091200154905081565b6000546001600160a01b031633146103a15760405162461bcd60e51b81526004016103989061117c565b60405180910390fd5b6103ab6000610c3d565b565b60035460ff16156104005760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e000000000000006044820152606401610398565b60045463ffffffff8216106104615760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2043686f69636520696e64657820697320746f6f20686967686044820152601760f91b6064820152608401610398565b600154600354604051632dd7519b60e21b815233600482015261010090910463ffffffff1660248201526001600160a01b039091169063b75d466c9060440160206040518083038186803b1580156104b857600080fd5b505afa1580156104cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f091906111b1565b1561053d5760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e0000000000006044820152606401610398565b6040516370a0823160e01b815233600482015269054b40b1f852bda00000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b1580156105a857600080fd5b505afa1580156105bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e091906111d3565b101561062e5760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e006044820152606401610398565b33600090815260076020526040902054640100000000900460ff166106af57336000818152600760205260408120805464ff0000000019166401000000001790556006805460018101825591527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b03191690911790555b336000908152600760205260409020805463ffffffff191663ffffffff92909216919091179055565b60606004805480602002602001604051908101604052809291908181526020016000905b828210156107a857838290600052602060002001805461071b90611141565b80601f016020809104026020016040519081016040528092919081815260200182805461074790611141565b80156107945780601f1061076957610100808354040283529160200191610794565b820191906000526020600020905b81548152906001019060200180831161077757829003601f168201915b5050505050815260200190600101906106fc565b50505050905090565b6000546001600160a01b031633146107db5760405162461bcd60e51b81526004016103989061117c565b60035460ff161561082e5760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e00006044820152606401610398565b6003805460ff1916600117905560005b600654811015610a085760006006828154811061085d5761085d6111ec565b60009182526020909120015460015460035460405163c143c6db60e01b81526001600160a01b039384166004820181905261010090920463ffffffff16602482015290935091169063c143c6db9060440160206040518083038186803b1580156108c657600080fd5b505afa1580156108da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fe91906111d3565b6040516370a0823160e01b81526001600160a01b0383811660048301527f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b15801561095f57600080fd5b505afa158015610973573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099791906111d3565b6109a19190611218565b6001600160a01b03821660009081526007602052604090205460058054909163ffffffff169081106109d5576109d56111ec565b9060005260206000200160008282546109ee9190611218565b90915550829150610a00905081611230565b91505061083e565b50565b600054600160a81b900460ff16610a2f57600054600160a01b900460ff1615610a33565b303b155b610a965760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610398565b600054600160a81b900460ff16158015610ac0576000805461ffff60a01b191661010160a01b1790555b8351610ad3906002906020870190610c8d565b506003805464ffffffffff191661010063ffffffff86160260ff19161790558151610b05906004906020850190610d11565b5060045467ffffffffffffffff811115610b2157610b21610f6a565b604051908082528060200260200182016040528015610b4a578160200160208202803683370190505b508051610b5f91600591602090910190610d6a565b508015610b74576000805460ff60a81b191690555b50505050565b6000546001600160a01b03163314610ba45760405162461bcd60e51b81526004016103989061117c565b6001600160a01b038116610c095760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610398565b610a0881610c3d565b60048181548110610c2257600080fd5b90600052602060002001600091509050805461027490611141565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054610c9990611141565b90600052602060002090601f016020900481019282610cbb5760008555610d01565b82601f10610cd457805160ff1916838001178555610d01565b82800160010185558215610d01579182015b82811115610d01578251825591602001919060010190610ce6565b50610d0d929150610da4565b5090565b828054828255906000526020600020908101928215610d5e579160200282015b82811115610d5e5782518051610d4e918491602090910190610c8d565b5091602001919060010190610d31565b50610d0d929150610db9565b828054828255906000526020600020908101928215610d015791602002820182811115610d01578251825591602001919060010190610ce6565b5b80821115610d0d5760008155600101610da5565b80821115610d0d576000610dcd8282610dd6565b50600101610db9565b508054610de290611141565b6000825580601f10610df2575050565b601f016020900490600052602060002090810190610a089190610da4565b6000815180845260005b81811015610e3657602081850181015186830182015201610e1a565b81811115610e48576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610e706020830184610e10565b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610eaf57835183529284019291840191600101610e93565b50909695505050505050565b600060208284031215610ecd57600080fd5b5035919050565b803563ffffffff81168114610ee857600080fd5b919050565b600060208284031215610eff57600080fd5b610e7082610ed4565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015610f5d57603f19888603018452610f4b858351610e10565b94509285019290850190600101610f2f565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610fa957610fa9610f6a565b604052919050565b600082601f830112610fc257600080fd5b813567ffffffffffffffff811115610fdc57610fdc610f6a565b610fef601f8201601f1916602001610f80565b81815284602083860101111561100457600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561103657600080fd5b833567ffffffffffffffff8082111561104e57600080fd5b61105a87838801610fb1565b94506020915061106b828701610ed4565b935060408601358181111561107f57600080fd5b8601601f8101881361109057600080fd5b8035828111156110a2576110a2610f6a565b8060051b6110b1858201610f80565b918252828101850191858101908b8411156110cb57600080fd5b86850192505b83831015611107578235868111156110e95760008081fd5b6110f78d8983890101610fb1565b83525091860191908601906110d1565b809750505050505050509250925092565b60006020828403121561112a57600080fd5b81356001600160a01b0381168114610e7057600080fd5b600181811c9082168061115557607f821691505b6020821081141561117657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156111c357600080fd5b81518015158114610e7057600080fd5b6000602082840312156111e557600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561122b5761122b611202565b500190565b600060001982141561124457611244611202565b506001019056fea2646970667358221220aa74553098366ebcba86a952061cb9d784c1f6faa4e1be8b6d880505160fddbf64736f6c63430008090033"; type BallotConstructorParams = | [signer?: Signer] diff --git a/typings/factories/contracts/VotingProxy__factory.ts b/typings/factories/contracts/VotingProxy__factory.ts index 43342f3..88b05de 100644 --- a/typings/factories/contracts/VotingProxy__factory.ts +++ b/typings/factories/contracts/VotingProxy__factory.ts @@ -16,6 +16,11 @@ const _abi = [ name: "_DPS", type: "address", }, + { + internalType: "contract BallotTagManager", + name: "_ballotTagManager", + type: "address", + }, ], stateMutability: "nonpayable", type: "constructor", @@ -65,6 +70,19 @@ const _abi = [ stateMutability: "view", type: "function", }, + { + inputs: [], + name: "ballotTagManager", + outputs: [ + { + internalType: "contract BallotTagManager", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { @@ -151,19 +169,6 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, - { - inputs: [ - { - internalType: "contract BallotFactory", - name: "_ballotFactory", - type: "address", - }, - ], - name: "setBallotFactory", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, { inputs: [ { @@ -180,7 +185,7 @@ const _abi = [ ]; const _bytecode = - "0x60a060405234801561001057600080fd5b50604051610dcc380380610dcc83398101604081905261002f916100fd565b610038336100ad565b6001600160a01b03811661009c5760405162461bcd60e51b815260206004820152602160248201527f566f74696e6750726f78793a204450532061646472657373206973207a65726f6044820152601760f91b606482015260840160405180910390fd5b6001600160a01b031660805261012d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561010f57600080fd5b81516001600160a01b038116811461012657600080fd5b9392505050565b608051610c766101566000396000818161017b0152818161030a01526107930152610c766000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063b75d466c11610066578063b75d466c146100f2578063c143c6db14610142578063ceb0b93514610163578063ef4e06ec14610176578063f2fde38b1461019d57600080fd5b806336a7cf1f14610098578063715018a6146100ad57806374773a45146100b55780638da5cb5b146100c8575b600080fd5b6100ab6100a6366004610935565b6101b0565b005b6100ab610205565b6100ab6100c3366004610959565b61023b565b6000546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b610132610100366004610959565b6001600160a01b03918216600090815260036020908152604080832063ffffffff949094168352929052205416151590565b60405190151581526020016100e9565b610155610150366004610959565b610655565b6040519081526020016100e9565b6001546100d5906001600160a01b031681565b6100d57f000000000000000000000000000000000000000000000000000000000000000081565b6100ab6101ab366004610935565b610835565b6000546001600160a01b031633146101e35760405162461bcd60e51b81526004016101da9061099b565b60405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461022f5760405162461bcd60e51b81526004016101da9061099b565b61023960006108d0565b565b6001546040805163995d9ab760e01b8152905163ffffffff8416926001600160a01b03169163995d9ab7916004808301926000929190829003018186803b15801561028557600080fd5b505afa158015610299573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102c19190810190610a17565b51116102df5760405162461bcd60e51b81526004016101da90610b4e565b6040516370a0823160e01b81526001600160a01b03838116600483015269054b40b1f852bda00000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b15801561034e57600080fd5b505afa158015610362573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103869190610b90565b10158061039a57506001600160a01b038216155b6103f55760405162461bcd60e51b815260206004820152602660248201527f566f74696e6750726f78793a2050726f787920686173206e6f7420656e6f756760448201526534102228299760d11b60648201526084016101da565b33600090815260036020908152604080832063ffffffff851684529091529020546001600160a01b03161561056e5733600081815260036020908152604080832063ffffffff808716808652918452828520546001600160a01b0316855260028085528386209286529184528285209585529285905290832054908401549082169260018581019391926104899216610bbf565b63ffffffff90811682526020808301939093526040918201600090812054858316825260018781019586905293822080546001600160a01b0319166001600160a01b03909216919091179055600286015490939284926104e99216610bbf565b63ffffffff90811682526020808301939093526040918201600090812080546001600160a01b0319166001600160a01b039690961695909517909455338452918590528220805463ffffffff191690556002840180549091169161054c83610be4565b91906101000a81548163ffffffff021916908363ffffffff1602179055505050505b33600090815260036020908152604080832063ffffffff85168452909152902080546001600160a01b0319166001600160a01b03841690811790915515610651576001600160a01b038216600090815260026020818152604080842063ffffffff8087168652908352818520938401805433808852868652848820805463ffffffff1916928516929092179091558154831687526001860190945291852080546001600160a01b03191690931790925580549293929091169161063083610c04565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505b5050565b60008163ffffffff16600160009054906101000a90046001600160a01b03166001600160a01b031663995d9ab76040518163ffffffff1660e01b815260040160006040518083038186803b1580156106ac57600080fd5b505afa1580156106c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106e89190810190610a17565b51116107065760405162461bcd60e51b81526004016101da90610b4e565b6000805b6001600160a01b038516600090815260026020818152604080842063ffffffff808a168652925290922001548116908216101561082d576001600160a01b03858116600090815260026020908152604080832063ffffffff89811685529083528184209086168452600101909152908190205490516370a0823160e01b815290821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b1580156107d757600080fd5b505afa1580156107eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080f9190610b90565b6108199083610c28565b91508061082581610c04565b91505061070a565b509392505050565b6000546001600160a01b0316331461085f5760405162461bcd60e51b81526004016101da9061099b565b6001600160a01b0381166108c45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101da565b6108cd816108d0565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146108cd57600080fd5b60006020828403121561094757600080fd5b813561095281610920565b9392505050565b6000806040838503121561096c57600080fd5b823561097781610920565b9150602083013563ffffffff8116811461099057600080fd5b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610a0f57610a0f6109d0565b604052919050565b60006020808385031215610a2a57600080fd5b825167ffffffffffffffff80821115610a4257600080fd5b8185019150601f8681840112610a5757600080fd5b825182811115610a6957610a696109d0565b8060051b610a788682016109e6565b918252848101860191868101908a841115610a9257600080fd5b87870192505b83831015610b4057825186811115610ab05760008081fd5b8701603f81018c13610ac25760008081fd5b8881015187811115610ad657610ad66109d0565b610ae7818801601f19168b016109e6565b81815260408e81848601011115610afe5760008081fd5b60005b83811015610b1c578481018201518382018e01528c01610b01565b83811115610b2d5760008d85850101525b5050845250509187019190870190610a98565b9a9950505050505050505050565b60208082526022908201527f566f74696e6750726f78793a2054616720696e64657820697320746f6f2068696040820152610ced60f31b606082015260800190565b600060208284031215610ba257600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff83811690831681811015610bdc57610bdc610ba9565b039392505050565b600063ffffffff821680610bfa57610bfa610ba9565b6000190192915050565b600063ffffffff80831681811415610c1e57610c1e610ba9565b6001019392505050565b60008219821115610c3b57610c3b610ba9565b50019056fea2646970667358221220ed0ad1c782d239ff62d4f58f0a00c2abfc25eae2566f2c11d7f1c96b9369c7e264736f6c63430008090033"; + "0x60a060405234801561001057600080fd5b50604051610e57380380610e5783398101604081905261002f9161019c565b61003833610134565b6001600160a01b03821661009d5760405162461bcd60e51b815260206004820152602160248201527f566f74696e6750726f78793a204450532061646472657373206973207a65726f6044820152601760f91b60648201526084015b60405180910390fd5b6001600160a01b03811661010c5760405162461bcd60e51b815260206004820152603060248201527f566f74696e6750726f78793a2042616c6c6f7420746167206d616e616765722060448201526f30b2323932b9b99034b9903d32b9379760811b6064820152608401610094565b6001600160a01b03918216608052600280546001600160a01b031916919092161790556101d6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461019957600080fd5b50565b600080604083850312156101af57600080fd5b82516101ba81610184565b60208401519092506101cb81610184565b809150509250929050565b608051610c586101ff6000396000818161017f015281816102ee01526107770152610c586000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063b75d466c11610066578063b75d466c146100f6578063c143c6db14610146578063ceb0b93514610167578063ef4e06ec1461017a578063f2fde38b146101a157600080fd5b80633e7ee19f14610098578063715018a6146100c857806374773a45146100d25780638da5cb5b146100e5575b600080fd5b6002546100ab906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100d06101b4565b005b6100d06100e0366004610950565b61021f565b6000546001600160a01b03166100ab565b610136610104366004610950565b6001600160a01b03918216600090815260046020908152604080832063ffffffff949094168352929052205416151590565b60405190151581526020016100bf565b610159610154366004610950565b610637565b6040519081526020016100bf565b6001546100ab906001600160a01b031681565b6100ab7f000000000000000000000000000000000000000000000000000000000000000081565b6100d06101af366004610990565b610819565b6000546001600160a01b031633146102135760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b61021d60006108e4565b565b6002546040805163995d9ab760e01b8152905163ffffffff8416926001600160a01b03169163995d9ab7916004808301926000929190829003018186803b15801561026957600080fd5b505afa15801561027d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102a591908101906109f9565b51116102c35760405162461bcd60e51b815260040161020a90610b30565b6040516370a0823160e01b81526001600160a01b03838116600483015269054b40b1f852bda00000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b15801561033257600080fd5b505afa158015610346573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061036a9190610b72565b10158061037e57506001600160a01b038216155b6103d95760405162461bcd60e51b815260206004820152602660248201527f566f74696e6750726f78793a2050726f787920686173206e6f7420656e6f756760448201526534102228299760d11b606482015260840161020a565b33600090815260046020908152604080832063ffffffff851684529091529020546001600160a01b0316156105515733600081815260046020908152604080832063ffffffff808716808652918452828520546001600160a01b031685526003845282852091855290835281842094845291849052822054600284015490821692600185810193919261046c9216610ba1565b63ffffffff90811682526020808301939093526040918201600090812054858316825260018781019586905293822080546001600160a01b0319166001600160a01b03909216919091179055600286015490939284926104cc9216610ba1565b63ffffffff90811682526020808301939093526040918201600090812080546001600160a01b0319166001600160a01b039690961695909517909455338452918590528220805463ffffffff191690556002840180549091169161052f83610bc6565b91906101000a81548163ffffffff021916908363ffffffff1602179055505050505b33600090815260046020908152604080832063ffffffff85168452909152902080546001600160a01b0319166001600160a01b03841690811790915515610633576001600160a01b038216600090815260036020908152604080832063ffffffff808616855290835281842060028101805433808852838752858820805463ffffffff1916928616929092179091558154841687526001830190955292852080546001600160a01b0319169094179093558154929392169161061283610be6565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505b5050565b60008163ffffffff16600260009054906101000a90046001600160a01b03166001600160a01b031663995d9ab76040518163ffffffff1660e01b815260040160006040518083038186803b15801561068e57600080fd5b505afa1580156106a2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106ca91908101906109f9565b51116106e85760405162461bcd60e51b815260040161020a90610b30565b6000805b6001600160a01b038516600090815260036020908152604080832063ffffffff808916855292529091206002015481169082161015610811576001600160a01b03858116600090815260036020908152604080832063ffffffff89811685529083528184209086168452600101909152908190205490516370a0823160e01b815290821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b1580156107bb57600080fd5b505afa1580156107cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f39190610b72565b6107fd9083610c0a565b91508061080981610be6565b9150506106ec565b509392505050565b6000546001600160a01b031633146108735760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161020a565b6001600160a01b0381166108d85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161020a565b6108e1816108e4565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461094b57600080fd5b919050565b6000806040838503121561096357600080fd5b61096c83610934565b9150602083013563ffffffff8116811461098557600080fd5b809150509250929050565b6000602082840312156109a257600080fd5b6109ab82610934565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156109f1576109f16109b2565b604052919050565b60006020808385031215610a0c57600080fd5b825167ffffffffffffffff80821115610a2457600080fd5b8185019150601f8681840112610a3957600080fd5b825182811115610a4b57610a4b6109b2565b8060051b610a5a8682016109c8565b918252848101860191868101908a841115610a7457600080fd5b87870192505b83831015610b2257825186811115610a925760008081fd5b8701603f81018c13610aa45760008081fd5b8881015187811115610ab857610ab86109b2565b610ac9818801601f19168b016109c8565b81815260408e81848601011115610ae05760008081fd5b60005b83811015610afe578481018201518382018e01528c01610ae3565b83811115610b0f5760008d85850101525b5050845250509187019190870190610a7a565b9a9950505050505050505050565b60208082526022908201527f566f74696e6750726f78793a2054616720696e64657820697320746f6f2068696040820152610ced60f31b606082015260800190565b600060208284031215610b8457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff83811690831681811015610bbe57610bbe610b8b565b039392505050565b600063ffffffff821680610bdc57610bdc610b8b565b6000190192915050565b600063ffffffff80831681811415610c0057610c00610b8b565b6001019392505050565b60008219821115610c1d57610c1d610b8b565b50019056fea264697066735822122002defa9c0b3b6636079ab495b8e6e5443f2229b805338d45431d3da20aabc73564736f6c63430008090033"; type VotingProxyConstructorParams = | [signer?: Signer] @@ -201,15 +206,21 @@ export class VotingProxy__factory extends ContractFactory { override deploy( _DPS: string, + _ballotTagManager: string, overrides?: Overrides & { from?: string | Promise } ): Promise { - return super.deploy(_DPS, overrides || {}) as Promise; + return super.deploy( + _DPS, + _ballotTagManager, + overrides || {} + ) as Promise; } override getDeployTransaction( _DPS: string, + _ballotTagManager: string, overrides?: Overrides & { from?: string | Promise } ): TransactionRequest { - return super.getDeployTransaction(_DPS, overrides || {}); + return super.getDeployTransaction(_DPS, _ballotTagManager, overrides || {}); } override attach(address: string): VotingProxy { return super.attach(address) as VotingProxy; diff --git a/typings/factories/contracts/factories/BallotFactory__factory.ts b/typings/factories/contracts/factories/BallotFactory__factory.ts index 5897487..e375580 100644 --- a/typings/factories/contracts/factories/BallotFactory__factory.ts +++ b/typings/factories/contracts/factories/BallotFactory__factory.ts @@ -17,14 +17,27 @@ const _abi = [ type: "address", }, { - internalType: "address", - name: "_votingProxyAddress", + internalType: "contract BallotTagManager", + name: "_ballotTagManager", type: "address", }, ], stateMutability: "nonpayable", type: "constructor", }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "ballotAddress", + type: "address", + }, + ], + name: "BallotCreated", + type: "event", + }, { anonymous: false, inputs: [ @@ -44,19 +57,6 @@ const _abi = [ name: "OwnershipTransferred", type: "event", }, - { - inputs: [ - { - internalType: "string", - name: "name", - type: "string", - }, - ], - name: "addTag", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, { inputs: [ { @@ -76,6 +76,19 @@ const _abi = [ stateMutability: "view", type: "function", }, + { + inputs: [], + name: "ballotTagManager", + outputs: [ + { + internalType: "contract BallotTagManager", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { @@ -95,13 +108,7 @@ const _abi = [ }, ], name: "createBallot", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], + outputs: [], stateMutability: "nonpayable", type: "function", }, @@ -118,19 +125,6 @@ const _abi = [ stateMutability: "view", type: "function", }, - { - inputs: [], - name: "getTags", - outputs: [ - { - internalType: "string[]", - name: "", - type: "string[]", - }, - ], - stateMutability: "view", - type: "function", - }, { inputs: [], name: "implementationAddress", @@ -177,25 +171,6 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "tags", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, { inputs: [ { @@ -209,23 +184,10 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, - { - inputs: [], - name: "votingProxyAddress", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, ]; const _bytecode = - "0x608060405234801561001057600080fd5b50604051610f34380380610f3483398101604081905261002f916101d4565b61003833610168565b6001600160a01b0382166100bb576040805162461bcd60e51b81526020600482015260248101919091527f42616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616460448201527f64726573732073686f756c64206e6f74206265207a65726f206164647265737360648201526084015b60405180910390fd5b6001600160a01b0381166101375760405162461bcd60e51b815260206004820152603e60248201527f42616c6c6f74466163746f72793a20566f74696e672070726f7879206164647260448201527f6573732073686f756c64206e6f74206265207a65726f2061646472657373000060648201526084016100b2565b600280546001600160a01b039384166001600160a01b03199182161790915560038054929093169116179055610207565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146101cf57600080fd5b919050565b600080604083850312156101e757600080fd5b6101f0836101b8565b91506101fe602084016101b8565b90509250929050565b610d1e806102166000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063a7a9845311610071578063a7a9845314610150578063b97a231914610163578063de0cc45b14610176578063eb87c6dc14610189578063ecade2f01461019e578063f2fde38b146101b157600080fd5b806320822abc146100b957806324db32ac146100e2578063715018a61461010d5780638da5cb5b14610117578063995d9ab714610128578063a451fae71461013d575b600080fd5b6100cc6100c73660046108d6565b6101c4565b6040516100d9919061093c565b60405180910390f35b6100f56100f0366004610a0d565b610270565b6040516001600160a01b0390911681526020016100d9565b6101156103df565b005b6000546001600160a01b03166100f5565b610130610415565b6040516100d99190610b67565b6003546100f5906001600160a01b031681565b6100f561015e3660046108d6565b6104ee565b6002546100f5906001600160a01b031681565b610115610184366004610b7a565b610518565b610191610589565b6040516100d99190610bb7565b6101156101ac366004610c04565b6105eb565b6101156101bf366004610c04565b6106b5565b600481815481106101d457600080fd5b9060005260206000200160009150905080546101ef90610c2d565b80601f016020809104026020016040519081016040528092919081815260200182805461021b90610c2d565b80156102685780601f1061023d57610100808354040283529160200191610268565b820191906000526020600020905b81548152906001019060200180831161024b57829003601f168201915b505050505081565b600080546001600160a01b031633146102a45760405162461bcd60e51b815260040161029b90610c68565b60405180910390fd5b60045463ffffffff8416106103095760405162461bcd60e51b815260206004820152602560248201527f42616c6c6f74466163746f72793a2054616720696e64657820697320746f6f206044820152643434b3b41760d91b606482015260840161029b565b600254600090610321906001600160a01b0316610750565b60035460405163c340dd3360e01b81529192506001600160a01b038084169263c340dd339261035a928a928a928a921690600401610c9d565b600060405180830381600087803b15801561037457600080fd5b505af1158015610388573d6000803e3d6000fd5b50506001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b038516179055509095945050505050565b6000546001600160a01b031633146104095760405162461bcd60e51b815260040161029b90610c68565b61041360006107ed565b565b60606004805480602002602001604051908101604052809291908181526020016000905b828210156104e557838290600052602060002001805461045890610c2d565b80601f016020809104026020016040519081016040528092919081815260200182805461048490610c2d565b80156104d15780601f106104a6576101008083540402835291602001916104d1565b820191906000526020600020905b8154815290600101906020018083116104b457829003601f168201915b505050505081526020019060010190610439565b50505050905090565b600181815481106104fe57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146105425760405162461bcd60e51b815260040161029b90610c68565b600480546001810182556000919091528151610585917f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0190602084019061083d565b5050565b606060018054806020026020016040519081016040528092919081815260200182805480156105e157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116105c3575b5050505050905090565b6000546001600160a01b031633146106155760405162461bcd60e51b815260040161029b90610c68565b6001600160a01b038116610693576040805162461bcd60e51b81526020600482015260248101919091527f42616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616460448201527f64726573732073686f756c64206e6f74206265207a65726f2061646472657373606482015260840161029b565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146106df5760405162461bcd60e51b815260040161029b90610c68565b6001600160a01b0381166107445760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161029b565b61074d816107ed565b50565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b0381166107e85760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015260640161029b565b919050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805461084990610c2d565b90600052602060002090601f01602090048101928261086b57600085556108b1565b82601f1061088457805160ff19168380011785556108b1565b828001600101855582156108b1579182015b828111156108b1578251825591602001919060010190610896565b506108bd9291506108c1565b5090565b5b808211156108bd57600081556001016108c2565b6000602082840312156108e857600080fd5b5035919050565b6000815180845260005b81811015610915576020818501810151868301820152016108f9565b81811115610927576000602083870101525b50601f01601f19169290920160200192915050565b60208152600061094f60208301846108ef565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561099557610995610956565b604052919050565b600082601f8301126109ae57600080fd5b813567ffffffffffffffff8111156109c8576109c8610956565b6109db601f8201601f191660200161096c565b8181528460208386010111156109f057600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215610a2257600080fd5b833567ffffffffffffffff80821115610a3a57600080fd5b610a468783880161099d565b9450602091508186013563ffffffff81168114610a6257600080fd5b9350604086013581811115610a7657600080fd5b8601601f81018813610a8757600080fd5b803582811115610a9957610a99610956565b8060051b610aa885820161096c565b918252828101850191858101908b841115610ac257600080fd5b86850192505b83831015610afe57823586811115610ae05760008081fd5b610aee8d898389010161099d565b8352509186019190860190610ac8565b809750505050505050509250925092565b600082825180855260208086019550808260051b84010181860160005b84811015610b5a57601f19868403018952610b488383516108ef565b98840198925090830190600101610b2c565b5090979650505050505050565b60208152600061094f6020830184610b0f565b600060208284031215610b8c57600080fd5b813567ffffffffffffffff811115610ba357600080fd5b610baf8482850161099d565b949350505050565b6020808252825182820181905260009190848201906040850190845b81811015610bf85783516001600160a01b031683529284019291840191600101610bd3565b50909695505050505050565b600060208284031215610c1657600080fd5b81356001600160a01b038116811461094f57600080fd5b600181811c90821680610c4157607f821691505b60208210811415610c6257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b608081526000610cb060808301876108ef565b63ffffffff861660208401528281036040840152610cce8186610b0f565b91505060018060a01b03831660608301529594505050505056fea2646970667358221220140883416b6854a96531a730022c7da28d0b70e2eac81813b0e59fb68ea1619464736f6c63430008090033"; + "0x608060405234801561001057600080fd5b50604051610d4d380380610d4d83398101604081905261002f916101de565b61003833610176565b6001600160a01b0382166100bb576040805162461bcd60e51b81526020600482015260248101919091527f42616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616460448201527f64726573732073686f756c64206e6f74206265207a65726f206164647265737360648201526084015b60405180910390fd5b6001600160a01b0381166101455760405162461bcd60e51b8152602060048201526044602482018190527f42616c6c6f74466163746f72793a2042616c6c6f7420746167206d616e616765908201527f7220616464726573732073686f756c64206e6f74206265207a65726f206164646064820152637265737360e01b608482015260a4016100b2565b600280546001600160a01b039384166001600160a01b03199182161790915560038054929093169116179055610218565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101db57600080fd5b50565b600080604083850312156101f157600080fd5b82516101fc816101c6565b602084015190925061020d816101c6565b809150509250929050565b610b26806102276000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063a7a9845311610066578063a7a98453146100f6578063b97a231914610109578063eb87c6dc1461011c578063ecade2f014610131578063f2fde38b1461014457600080fd5b806324db32ac146100985780633e7ee19f146100ad578063715018a6146100dd5780638da5cb5b146100e5575b600080fd5b6100ab6100a636600461076d565b610157565b005b6003546100c0906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ab610370565b6000546001600160a01b03166100c0565b6100c061010436600461085d565b6103a6565b6002546100c0906001600160a01b031681565b6101246103d0565b6040516100d49190610876565b6100ab61013f3660046108c3565b610432565b6100ab6101523660046108c3565b6104fc565b6000546001600160a01b0316331461018a5760405162461bcd60e51b8152600401610181906108f3565b60405180910390fd5b6003546040805163995d9ab760e01b8152905163ffffffff8516926001600160a01b03169163995d9ab7916004808301926000929190829003018186803b1580156101d457600080fd5b505afa1580156101e8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102109190810190610958565b511161026c5760405162461bcd60e51b815260206004820152602560248201527f42616c6c6f74466163746f72793a2054616720696e64657820697320746f6f206044820152643434b3b41760d91b6064820152608401610181565b600254600090610284906001600160a01b0316610597565b60405163c1d1d5c160e01b81529091506001600160a01b0382169063c1d1d5c1906102b790879087908790600401610a71565b600060405180830381600087803b1580156102d157600080fd5b505af11580156102e5573d6000803e3d6000fd5b50506001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0385169081179091556040519081527f165f4a0bebf649c196135ba0519a9a51da33d33a9e4d096b71050c2c97ec670f9250602001905060405180910390a150505050565b6000546001600160a01b0316331461039a5760405162461bcd60e51b8152600401610181906108f3565b6103a46000610634565b565b600181815481106103b657600080fd5b6000918252602090912001546001600160a01b0316905081565b6060600180548060200260200160405190810160405280929190818152602001828054801561042857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161040a575b5050505050905090565b6000546001600160a01b0316331461045c5760405162461bcd60e51b8152600401610181906108f3565b6001600160a01b0381166104da576040805162461bcd60e51b81526020600482015260248101919091527f42616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616460448201527f64726573732073686f756c64206e6f74206265207a65726f20616464726573736064820152608401610181565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146105265760405162461bcd60e51b8152600401610181906108f3565b6001600160a01b03811661058b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610181565b61059481610634565b50565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b03811661062f5760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b6044820152606401610181565b919050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156106c3576106c3610684565b604052919050565b600067ffffffffffffffff8211156106e5576106e5610684565b50601f01601f191660200190565b600082601f83011261070457600080fd5b8135610717610712826106cb565b61069a565b81815284602083860101111561072c57600080fd5b816020850160208301376000918101602001919091529392505050565b600067ffffffffffffffff82111561076357610763610684565b5060051b60200190565b60008060006060848603121561078257600080fd5b833567ffffffffffffffff8082111561079a57600080fd5b6107a6878388016106f3565b9450602091508186013563ffffffff811681146107c257600080fd5b93506040860135818111156107d657600080fd5b8601601f810188136107e757600080fd5b80356107f561071282610749565b81815260059190911b8201840190848101908a83111561081457600080fd5b8584015b8381101561084c578035868111156108305760008081fd5b61083e8d89838901016106f3565b845250918601918601610818565b508096505050505050509250925092565b60006020828403121561086f57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156108b75783516001600160a01b031683529284019291840191600101610892565b50909695505050505050565b6000602082840312156108d557600080fd5b81356001600160a01b03811681146108ec57600080fd5b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60005b8381101561094357818101518382015260200161092b565b83811115610952576000848401525b50505050565b6000602080838503121561096b57600080fd5b825167ffffffffffffffff8082111561098357600080fd5b818501915085601f83011261099757600080fd5b81516109a561071282610749565b81815260059190911b830184019084810190888311156109c457600080fd5b8585015b83811015610a38578051858111156109e05760008081fd5b8601603f81018b136109f25760008081fd5b878101516040610a04610712836106cb565b8281528d82848601011115610a195760008081fd5b610a28838c8301848701610928565b86525050509186019186016109c8565b5098975050505050505050565b60008151808452610a5d816020860160208601610928565b601f01601f19169290920160200192915050565b606081526000610a846060830186610a45565b602063ffffffff86168185015283820360408501528185518084528284019150828160051b85010183880160005b83811015610ae057601f19878403018552610ace838351610a45565b94860194925090850190600101610ab2565b50909a995050505050505050505056fea26469706673582212202a23348d5e6fa6e233f30166087a7e20ef01425cbe19718950bc1da2bed511e664736f6c63430008090033"; type BallotFactoryConstructorParams = | [signer?: Signer] @@ -246,23 +208,23 @@ export class BallotFactory__factory extends ContractFactory { override deploy( _implementationAddress: string, - _votingProxyAddress: string, + _ballotTagManager: string, overrides?: Overrides & { from?: string | Promise } ): Promise { return super.deploy( _implementationAddress, - _votingProxyAddress, + _ballotTagManager, overrides || {} ) as Promise; } override getDeployTransaction( _implementationAddress: string, - _votingProxyAddress: string, + _ballotTagManager: string, overrides?: Overrides & { from?: string | Promise } ): TransactionRequest { return super.getDeployTransaction( _implementationAddress, - _votingProxyAddress, + _ballotTagManager, overrides || {} ); } diff --git a/typings/factories/contracts/testing/ExposedBallot__factory.ts b/typings/factories/contracts/testing/ExposedBallot__factory.ts index 25a262f..71051f0 100644 --- a/typings/factories/contracts/testing/ExposedBallot__factory.ts +++ b/typings/factories/contracts/testing/ExposedBallot__factory.ts @@ -176,11 +176,6 @@ const _abi = [ name: "_choices", type: "string[]", }, - { - internalType: "contract VotingProxy", - name: "_proxy", - type: "address", - }, ], name: "init", outputs: [], @@ -294,7 +289,7 @@ const _abi = [ ]; const _bytecode = - "0x60a06040523480156200001157600080fd5b506040516200167938038062001679833981016040819052620000349162000131565b81816200004133620000c8565b6001600160a01b0382166200009c5760405162461bcd60e51b815260206004820152601a60248201527f566f74653a204450532061646472657373206973207a65726f2e000000000000604482015260640160405180910390fd5b6001600160a01b03918216608052600180546001600160a01b0319169190921617905550620001709050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200012e57600080fd5b50565b600080604083850312156200014557600080fd5b8251620001528162000118565b6020840151909250620001658162000118565b809150509250929050565b6080516114df6200019a6000396000818161023f015281816106d10152610a9001526114df6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639094c76311610097578063ec55688911610066578063ec55688914610227578063ef4e06ec1461023a578063f2fde38b14610261578063f6fd7fde1461027457600080fd5b80639094c763146101e457806398c81bbf146101f7578063a97b8b4d1461020c578063c340dd331461021457600080fd5b806359037b89116100d357806359037b8914610177578063597e1fb514610198578063715018a6146101b55780638da5cb5b146101bf57600080fd5b80630a59a98c1461010557806327454ea8146101235780634717f97c1461013857806349499d861461014d575b600080fd5b61010d610287565b60405161011a9190611031565b60405180910390f35b61012b610315565b60405161011a919061104b565b610140610468565b60405161011a91906110b6565b60035461016290610100900463ffffffff1681565b60405163ffffffff909116815260200161011a565b61018a6101853660046110fa565b6104c0565b60405190815260200161011a565b6003546101a59060ff1681565b604051901515815260200161011a565b6101bd6104e1565b005b6000546001600160a01b03165b6040516001600160a01b03909116815260200161011a565b6101bd6101f236600461112c565b610520565b6101ff61084b565b60405161011a9190611147565b6101bd610924565b6101bd610222366004611280565b610b7e565b6001546101cc906001600160a01b031681565b6101cc7f000000000000000000000000000000000000000000000000000000000000000081565b6101bd61026f366004611388565b610d09565b61010d6102823660046110fa565b610da1565b60028054610294906113a5565b80601f01602080910402602001604051908101604052809291908181526020018280546102c0906113a5565b801561030d5780601f106102e25761010080835404028352916020019161030d565b820191906000526020600020905b8154815290600101906020018083116102f057829003601f168201915b505050505081565b60065460609060009067ffffffffffffffff811115610336576103366111a9565b60405190808252806020026020018201604052801561036f57816020015b61035c610e1c565b8152602001906001900390816103545790505b50905060005b6006548110156104625760405180604001604052806006838154811061039d5761039d6113da565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b0316815260200160076000600685815481106103e0576103e06113da565b60009182526020808320909101546001600160a01b03168352828101939093526040918201902081518083019092525463ffffffff8116825260ff6401000000009091041615159181019190915290528251839083908110610444576104446113da565b6020026020010181905250808061045a90611406565b915050610375565b50919050565b606060058054806020026020016040519081016040528092919081815260200182805480156104b657602002820191906000526020600020905b8154815260200190600101908083116104a2575b5050505050905090565b600581815481106104d057600080fd5b600091825260209091200154905081565b6000546001600160a01b031633146105145760405162461bcd60e51b815260040161050b90611421565b60405180910390fd5b61051e6000610dcc565b565b60035460ff16156105735760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e00000000000000604482015260640161050b565b60045463ffffffff8216106105d45760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2043686f69636520696e64657820697320746f6f20686967686044820152601760f91b606482015260840161050b565b600154600354604051632dd7519b60e21b815233600482015261010090910463ffffffff1660248201526001600160a01b039091169063b75d466c9060440160206040518083038186803b15801561062b57600080fd5b505afa15801561063f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106639190611456565b156106b05760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e000000000000604482015260640161050b565b6040516370a0823160e01b815233600482015269054b40b1f852bda00000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561071b57600080fd5b505afa15801561072f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107539190611478565b10156107a15760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e00604482015260640161050b565b33600090815260076020526040902054640100000000900460ff1661082257336000818152600760205260408120805464ff0000000019166401000000001790556006805460018101825591527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b03191690911790555b336000908152600760205260409020805463ffffffff191663ffffffff92909216919091179055565b60606004805480602002602001604051908101604052809291908181526020016000905b8282101561091b57838290600052602060002001805461088e906113a5565b80601f01602080910402602001604051908101604052809291908181526020018280546108ba906113a5565b80156109075780601f106108dc57610100808354040283529160200191610907565b820191906000526020600020905b8154815290600101906020018083116108ea57829003601f168201915b50505050508152602001906001019061086f565b50505050905090565b6000546001600160a01b0316331461094e5760405162461bcd60e51b815260040161050b90611421565b60035460ff16156109a15760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e0000604482015260640161050b565b6003805460ff1916600117905560005b600654811015610b7b576000600682815481106109d0576109d06113da565b60009182526020909120015460015460035460405163c143c6db60e01b81526001600160a01b039384166004820181905261010090920463ffffffff16602482015290935091169063c143c6db9060440160206040518083038186803b158015610a3957600080fd5b505afa158015610a4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a719190611478565b6040516370a0823160e01b81526001600160a01b0383811660048301527f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b158015610ad257600080fd5b505afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611478565b610b149190611491565b6001600160a01b03821660009081526007602052604090205460058054909163ffffffff16908110610b4857610b486113da565b906000526020600020016000828254610b619190611491565b90915550829150610b73905081611406565b9150506109b1565b50565b600054600160a81b900460ff16610ba257600054600160a01b900460ff1615610ba6565b303b155b610c095760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161050b565b600054600160a81b900460ff16158015610c33576000805461ffff60a01b191661010160a01b1790555b8451610c46906002906020880190610e61565b506003805464ffffffffff191661010063ffffffff87160260ff19161790558251610c78906004906020860190610ee5565b50600180546001600160a01b0319166001600160a01b03841617905560045467ffffffffffffffff811115610caf57610caf6111a9565b604051908082528060200260200182016040528015610cd8578160200160208202803683370190505b508051610ced91600591602090910190610f3e565b508015610d02576000805460ff60a81b191690555b5050505050565b6000546001600160a01b03163314610d335760405162461bcd60e51b815260040161050b90611421565b6001600160a01b038116610d985760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161050b565b610b7b81610dcc565b60048181548110610db157600080fd5b906000526020600020016000915090508054610294906113a5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604051806040016040528060006001600160a01b03168152602001610e5c6040518060400160405280600063ffffffff1681526020016000151581525090565b905290565b828054610e6d906113a5565b90600052602060002090601f016020900481019282610e8f5760008555610ed5565b82601f10610ea857805160ff1916838001178555610ed5565b82800160010185558215610ed5579182015b82811115610ed5578251825591602001919060010190610eba565b50610ee1929150610f78565b5090565b828054828255906000526020600020908101928215610f32579160200282015b82811115610f325782518051610f22918491602090910190610e61565b5091602001919060010190610f05565b50610ee1929150610f8d565b828054828255906000526020600020908101928215610ed55791602002820182811115610ed5578251825591602001919060010190610eba565b5b80821115610ee15760008155600101610f79565b80821115610ee1576000610fa18282610faa565b50600101610f8d565b508054610fb6906113a5565b6000825580601f10610fc6575050565b601f016020900490600052602060002090810190610b7b9190610f78565b6000815180845260005b8181101561100a57602081850181015186830182015201610fee565b8181111561101c576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006110446020830184610fe4565b9392505050565b602080825282518282018190526000919060409081850190868401855b828110156110a957815180516001600160a01b03168552860151805163ffffffff168786015286015115158585015260609093019290850190600101611068565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156110ee578351835292840192918401916001016110d2565b50909695505050505050565b60006020828403121561110c57600080fd5b5035919050565b803563ffffffff8116811461112757600080fd5b919050565b60006020828403121561113e57600080fd5b61104482611113565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561119c57603f1988860301845261118a858351610fe4565b9450928501929085019060010161116e565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111e8576111e86111a9565b604052919050565b600082601f83011261120157600080fd5b813567ffffffffffffffff81111561121b5761121b6111a9565b61122e601f8201601f19166020016111bf565b81815284602083860101111561124357600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610b7b57600080fd5b803561112781611260565b6000806000806080858703121561129657600080fd5b843567ffffffffffffffff808211156112ae57600080fd5b6112ba888389016111f0565b9550602091506112cb828801611113565b94506040870135818111156112df57600080fd5b8701601f810189136112f057600080fd5b803582811115611302576113026111a9565b8060051b6113118582016111bf565b918252828101850191858101908c84111561132b57600080fd5b86850192505b83831015611367578235868111156113495760008081fd5b6113578e89838901016111f0565b8352509186019190860190611331565b8098505050505050505061137d60608601611275565b905092959194509250565b60006020828403121561139a57600080fd5b813561104481611260565b600181811c908216806113b957607f821691505b6020821081141561046257634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561141a5761141a6113f0565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561146857600080fd5b8151801515811461104457600080fd5b60006020828403121561148a57600080fd5b5051919050565b600082198211156114a4576114a46113f0565b50019056fea26469706673582212200f260fbb038bdda49c9f03e59ca544a53ac442c6380278529689e9ce342054e864736f6c63430008090033"; + "0x60a06040523480156200001157600080fd5b506040516200163838038062001638833981016040819052620000349162000131565b81816200004133620000c8565b6001600160a01b0382166200009c5760405162461bcd60e51b815260206004820152601a60248201527f566f74653a204450532061646472657373206973207a65726f2e000000000000604482015260640160405180910390fd5b6001600160a01b03918216608052600180546001600160a01b0319169190921617905550620001709050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200012e57600080fd5b50565b600080604083850312156200014557600080fd5b8251620001528162000118565b6020840151909250620001658162000118565b809150509250929050565b60805161149e6200019a6000396000818161023f015281816106d10152610a90015261149e6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639094c76311610097578063ec55688911610066578063ec55688914610227578063ef4e06ec1461023a578063f2fde38b14610261578063f6fd7fde1461027457600080fd5b80639094c763146101e457806398c81bbf146101f7578063a97b8b4d1461020c578063c1d1d5c11461021457600080fd5b806359037b89116100d357806359037b8914610177578063597e1fb514610198578063715018a6146101b55780638da5cb5b146101bf57600080fd5b80630a59a98c1461010557806327454ea8146101235780634717f97c1461013857806349499d861461014d575b600080fd5b61010d610287565b60405161011a9190611015565b60405180910390f35b61012b610315565b60405161011a919061102f565b610140610468565b60405161011a919061109a565b60035461016290610100900463ffffffff1681565b60405163ffffffff909116815260200161011a565b61018a6101853660046110de565b6104c0565b60405190815260200161011a565b6003546101a59060ff1681565b604051901515815260200161011a565b6101bd6104e1565b005b6000546001600160a01b03165b6040516001600160a01b03909116815260200161011a565b6101bd6101f2366004611110565b610520565b6101ff61084b565b60405161011a919061112b565b6101bd610924565b6101bd610222366004611244565b610b7e565b6001546101cc906001600160a01b031681565b6101cc7f000000000000000000000000000000000000000000000000000000000000000081565b6101bd61026f36600461133b565b610ced565b61010d6102823660046110de565b610d85565b6002805461029490611364565b80601f01602080910402602001604051908101604052809291908181526020018280546102c090611364565b801561030d5780601f106102e25761010080835404028352916020019161030d565b820191906000526020600020905b8154815290600101906020018083116102f057829003601f168201915b505050505081565b60065460609060009067ffffffffffffffff8111156103365761033661118d565b60405190808252806020026020018201604052801561036f57816020015b61035c610e00565b8152602001906001900390816103545790505b50905060005b6006548110156104625760405180604001604052806006838154811061039d5761039d611399565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b0316815260200160076000600685815481106103e0576103e0611399565b60009182526020808320909101546001600160a01b03168352828101939093526040918201902081518083019092525463ffffffff8116825260ff640100000000909104161515918101919091529052825183908390811061044457610444611399565b6020026020010181905250808061045a906113c5565b915050610375565b50919050565b606060058054806020026020016040519081016040528092919081815260200182805480156104b657602002820191906000526020600020905b8154815260200190600101908083116104a2575b5050505050905090565b600581815481106104d057600080fd5b600091825260209091200154905081565b6000546001600160a01b031633146105145760405162461bcd60e51b815260040161050b906113e0565b60405180910390fd5b61051e6000610db0565b565b60035460ff16156105735760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e00000000000000604482015260640161050b565b60045463ffffffff8216106105d45760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2043686f69636520696e64657820697320746f6f20686967686044820152601760f91b606482015260840161050b565b600154600354604051632dd7519b60e21b815233600482015261010090910463ffffffff1660248201526001600160a01b039091169063b75d466c9060440160206040518083038186803b15801561062b57600080fd5b505afa15801561063f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106639190611415565b156106b05760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e000000000000604482015260640161050b565b6040516370a0823160e01b815233600482015269054b40b1f852bda00000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561071b57600080fd5b505afa15801561072f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107539190611437565b10156107a15760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e00604482015260640161050b565b33600090815260076020526040902054640100000000900460ff1661082257336000818152600760205260408120805464ff0000000019166401000000001790556006805460018101825591527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b03191690911790555b336000908152600760205260409020805463ffffffff191663ffffffff92909216919091179055565b60606004805480602002602001604051908101604052809291908181526020016000905b8282101561091b57838290600052602060002001805461088e90611364565b80601f01602080910402602001604051908101604052809291908181526020018280546108ba90611364565b80156109075780601f106108dc57610100808354040283529160200191610907565b820191906000526020600020905b8154815290600101906020018083116108ea57829003601f168201915b50505050508152602001906001019061086f565b50505050905090565b6000546001600160a01b0316331461094e5760405162461bcd60e51b815260040161050b906113e0565b60035460ff16156109a15760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e0000604482015260640161050b565b6003805460ff1916600117905560005b600654811015610b7b576000600682815481106109d0576109d0611399565b60009182526020909120015460015460035460405163c143c6db60e01b81526001600160a01b039384166004820181905261010090920463ffffffff16602482015290935091169063c143c6db9060440160206040518083038186803b158015610a3957600080fd5b505afa158015610a4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a719190611437565b6040516370a0823160e01b81526001600160a01b0383811660048301527f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b158015610ad257600080fd5b505afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611437565b610b149190611450565b6001600160a01b03821660009081526007602052604090205460058054909163ffffffff16908110610b4857610b48611399565b906000526020600020016000828254610b619190611450565b90915550829150610b739050816113c5565b9150506109b1565b50565b600054600160a81b900460ff16610ba257600054600160a01b900460ff1615610ba6565b303b155b610c095760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161050b565b600054600160a81b900460ff16158015610c33576000805461ffff60a01b191661010160a01b1790555b8351610c46906002906020870190610e45565b506003805464ffffffffff191661010063ffffffff86160260ff19161790558151610c78906004906020850190610ec9565b5060045467ffffffffffffffff811115610c9457610c9461118d565b604051908082528060200260200182016040528015610cbd578160200160208202803683370190505b508051610cd291600591602090910190610f22565b508015610ce7576000805460ff60a81b191690555b50505050565b6000546001600160a01b03163314610d175760405162461bcd60e51b815260040161050b906113e0565b6001600160a01b038116610d7c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161050b565b610b7b81610db0565b60048181548110610d9557600080fd5b90600052602060002001600091509050805461029490611364565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604051806040016040528060006001600160a01b03168152602001610e406040518060400160405280600063ffffffff1681526020016000151581525090565b905290565b828054610e5190611364565b90600052602060002090601f016020900481019282610e735760008555610eb9565b82601f10610e8c57805160ff1916838001178555610eb9565b82800160010185558215610eb9579182015b82811115610eb9578251825591602001919060010190610e9e565b50610ec5929150610f5c565b5090565b828054828255906000526020600020908101928215610f16579160200282015b82811115610f165782518051610f06918491602090910190610e45565b5091602001919060010190610ee9565b50610ec5929150610f71565b828054828255906000526020600020908101928215610eb95791602002820182811115610eb9578251825591602001919060010190610e9e565b5b80821115610ec55760008155600101610f5d565b80821115610ec5576000610f858282610f8e565b50600101610f71565b508054610f9a90611364565b6000825580601f10610faa575050565b601f016020900490600052602060002090810190610b7b9190610f5c565b6000815180845260005b81811015610fee57602081850181015186830182015201610fd2565b81811115611000576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006110286020830184610fc8565b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101561108d57815180516001600160a01b03168552860151805163ffffffff16878601528601511515858501526060909301929085019060010161104c565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156110d2578351835292840192918401916001016110b6565b50909695505050505050565b6000602082840312156110f057600080fd5b5035919050565b803563ffffffff8116811461110b57600080fd5b919050565b60006020828403121561112257600080fd5b611028826110f7565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561118057603f1988860301845261116e858351610fc8565b94509285019290850190600101611152565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111cc576111cc61118d565b604052919050565b600082601f8301126111e557600080fd5b813567ffffffffffffffff8111156111ff576111ff61118d565b611212601f8201601f19166020016111a3565b81815284602083860101111561122757600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561125957600080fd5b833567ffffffffffffffff8082111561127157600080fd5b61127d878388016111d4565b94506020915061128e8287016110f7565b93506040860135818111156112a257600080fd5b8601601f810188136112b357600080fd5b8035828111156112c5576112c561118d565b8060051b6112d48582016111a3565b918252828101850191858101908b8411156112ee57600080fd5b86850192505b8383101561132a5782358681111561130c5760008081fd5b61131a8d89838901016111d4565b83525091860191908601906112f4565b809750505050505050509250925092565b60006020828403121561134d57600080fd5b81356001600160a01b038116811461102857600080fd5b600181811c9082168061137857607f821691505b6020821081141561046257634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156113d9576113d96113af565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561142757600080fd5b8151801515811461102857600080fd5b60006020828403121561144957600080fd5b5051919050565b60008219821115611463576114636113af565b50019056fea2646970667358221220cc29abb2a74888c66c6f25ea2bdef32d7942e5fcc14e009d78bc6ab9d550a35b64736f6c63430008090033"; type ExposedBallotConstructorParams = | [signer?: Signer] diff --git a/typings/factories/contracts/testing/ExposedVotingProxy__factory.ts b/typings/factories/contracts/testing/ExposedVotingProxy__factory.ts index 3e0efb4..a35c305 100644 --- a/typings/factories/contracts/testing/ExposedVotingProxy__factory.ts +++ b/typings/factories/contracts/testing/ExposedVotingProxy__factory.ts @@ -16,6 +16,11 @@ const _abi = [ name: "_DPS", type: "address", }, + { + internalType: "contract BallotTagManager", + name: "_ballotTagManager", + type: "address", + }, ], stateMutability: "nonpayable", type: "constructor", @@ -113,6 +118,19 @@ const _abi = [ stateMutability: "view", type: "function", }, + { + inputs: [], + name: "ballotTagManager", + outputs: [ + { + internalType: "contract BallotTagManager", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { @@ -199,19 +217,6 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, - { - inputs: [ - { - internalType: "contract BallotFactory", - name: "_ballotFactory", - type: "address", - }, - ], - name: "setBallotFactory", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, { inputs: [ { @@ -228,7 +233,7 @@ const _abi = [ ]; const _bytecode = - "0x60a060405234801561001057600080fd5b50604051610fd7380380610fd783398101604081905261002f916100ff565b80610039336100af565b6001600160a01b03811661009d5760405162461bcd60e51b815260206004820152602160248201527f566f74696e6750726f78793a204450532061646472657373206973207a65726f6044820152601760f91b606482015260840160405180910390fd5b6001600160a01b03166080525061012f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561011157600080fd5b81516001600160a01b038116811461012857600080fd5b9392505050565b608051610e7f610158600039600081816101f3015281816104b801526109410152610e7f6000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063b75d466c11610071578063b75d466c1461012c578063c143c6db1461017c578063c43e163d1461019d578063ceb0b935146101db578063ef4e06ec146101ee578063f2fde38b1461021557600080fd5b80631d700c53146100ae57806336a7cf1f146100d7578063715018a6146100ec57806374773a45146100f45780638da5cb5b14610107575b600080fd5b6100c16100bc366004610adb565b610228565b6040516100ce9190610b1d565b60405180910390f35b6100ea6100e5366004610b6a565b61035e565b005b6100ea6103b3565b6100ea610102366004610adb565b6103e9565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100ce565b61016c61013a366004610adb565b6001600160a01b03918216600090815260036020908152604080832063ffffffff949094168352929052205416151590565b60405190151581526020016100ce565b61018f61018a366004610adb565b610803565b6040519081526020016100ce565b6101146101ab366004610adb565b6001600160a01b03918216600090815260036020908152604080832063ffffffff94909416835292905220541690565b600154610114906001600160a01b031681565b6101147f000000000000000000000000000000000000000000000000000000000000000081565b6100ea610223366004610b6a565b6109db565b6001600160a01b038216600090815260026020818152604080842063ffffffff80871686529252832090910154606092911667ffffffffffffffff81111561027257610272610b8e565b60405190808252806020026020018201604052801561029b578160200160208202803683370190505b50905060005b6001600160a01b038516600090815260026020818152604080842063ffffffff808a1686529252909220015481169082161015610356576001600160a01b03808616600090815260026020908152604080832063ffffffff808a1685529083528184209086168085526001909101909252909120548451921691849190811061032c5761032c610ba4565b6001600160a01b03909216602092830291909101909101528061034e81610bd0565b9150506102a1565b509392505050565b6000546001600160a01b031633146103915760405162461bcd60e51b815260040161038890610bf4565b60405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146103dd5760405162461bcd60e51b815260040161038890610bf4565b6103e76000610a76565b565b6001546040805163995d9ab760e01b8152905163ffffffff8416926001600160a01b03169163995d9ab7916004808301926000929190829003018186803b15801561043357600080fd5b505afa158015610447573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261046f9190810190610c5a565b511161048d5760405162461bcd60e51b815260040161038890610d91565b6040516370a0823160e01b81526001600160a01b03838116600483015269054b40b1f852bda00000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b1580156104fc57600080fd5b505afa158015610510573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105349190610dd3565b10158061054857506001600160a01b038216155b6105a35760405162461bcd60e51b815260206004820152602660248201527f566f74696e6750726f78793a2050726f787920686173206e6f7420656e6f756760448201526534102228299760d11b6064820152608401610388565b33600090815260036020908152604080832063ffffffff851684529091529020546001600160a01b03161561071c5733600081815260036020908152604080832063ffffffff808716808652918452828520546001600160a01b0316855260028085528386209286529184528285209585529285905290832054908401549082169260018581019391926106379216610dec565b63ffffffff90811682526020808301939093526040918201600090812054858316825260018781019586905293822080546001600160a01b0319166001600160a01b03909216919091179055600286015490939284926106979216610dec565b63ffffffff90811682526020808301939093526040918201600090812080546001600160a01b0319166001600160a01b039690961695909517909455338452918590528220805463ffffffff19169055600284018054909116916106fa83610e11565b91906101000a81548163ffffffff021916908363ffffffff1602179055505050505b33600090815260036020908152604080832063ffffffff85168452909152902080546001600160a01b0319166001600160a01b038416908117909155156107ff576001600160a01b038216600090815260026020818152604080842063ffffffff8087168652908352818520938401805433808852868652848820805463ffffffff1916928516929092179091558154831687526001860190945291852080546001600160a01b0319169093179092558054929392909116916107de83610bd0565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505b5050565b60008163ffffffff16600160009054906101000a90046001600160a01b03166001600160a01b031663995d9ab76040518163ffffffff1660e01b815260040160006040518083038186803b15801561085a57600080fd5b505afa15801561086e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108969190810190610c5a565b51116108b45760405162461bcd60e51b815260040161038890610d91565b6000805b6001600160a01b038516600090815260026020818152604080842063ffffffff808a1686529252909220015481169082161015610356576001600160a01b03858116600090815260026020908152604080832063ffffffff89811685529083528184209086168452600101909152908190205490516370a0823160e01b815290821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b15801561098557600080fd5b505afa158015610999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bd9190610dd3565b6109c79083610e31565b9150806109d381610bd0565b9150506108b8565b6000546001600160a01b03163314610a055760405162461bcd60e51b815260040161038890610bf4565b6001600160a01b038116610a6a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610388565b610a7381610a76565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114610a7357600080fd5b60008060408385031215610aee57600080fd5b8235610af981610ac6565b9150602083013563ffffffff81168114610b1257600080fd5b809150509250929050565b6020808252825182820181905260009190848201906040850190845b81811015610b5e5783516001600160a01b031683529284019291840191600101610b39565b50909695505050505050565b600060208284031215610b7c57600080fd5b8135610b8781610ac6565b9392505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600063ffffffff80831681811415610bea57610bea610bba565b6001019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b604051601f8201601f1916810167ffffffffffffffff81118282101715610c5257610c52610b8e565b604052919050565b60006020808385031215610c6d57600080fd5b825167ffffffffffffffff80821115610c8557600080fd5b8185019150601f8681840112610c9a57600080fd5b825182811115610cac57610cac610b8e565b8060051b610cbb868201610c29565b918252848101860191868101908a841115610cd557600080fd5b87870192505b83831015610d8357825186811115610cf35760008081fd5b8701603f81018c13610d055760008081fd5b8881015187811115610d1957610d19610b8e565b610d2a818801601f19168b01610c29565b81815260408e81848601011115610d415760008081fd5b60005b83811015610d5f578481018201518382018e01528c01610d44565b83811115610d705760008d85850101525b5050845250509187019190870190610cdb565b9a9950505050505050505050565b60208082526022908201527f566f74696e6750726f78793a2054616720696e64657820697320746f6f2068696040820152610ced60f31b606082015260800190565b600060208284031215610de557600080fd5b5051919050565b600063ffffffff83811690831681811015610e0957610e09610bba565b039392505050565b600063ffffffff821680610e2757610e27610bba565b6000190192915050565b60008219821115610e4457610e44610bba565b50019056fea26469706673582212208f718aedc886d19afb6b6f3213177c1e6607cabe669d31589d0e70a1c3cd8e0564736f6c63430008090033"; + "0x60a060405234801561001057600080fd5b5060405161106738038061106783398101604081905261002f916101a1565b818161003a33610139565b6001600160a01b03821661009f5760405162461bcd60e51b815260206004820152602160248201527f566f74696e6750726f78793a204450532061646472657373206973207a65726f6044820152601760f91b60648201526084015b60405180910390fd5b6001600160a01b03811661010e5760405162461bcd60e51b815260206004820152603060248201527f566f74696e6750726f78793a2042616c6c6f7420746167206d616e616765722060448201526f30b2323932b9b99034b9903d32b9379760811b6064820152608401610096565b6001600160a01b03918216608052600280546001600160a01b03191691909216179055506101db9050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461019e57600080fd5b50565b600080604083850312156101b457600080fd5b82516101bf81610189565b60208401519092506101d081610189565b809150509250929050565b608051610e63610204600039600081816101f70152818161049e01526109270152610e636000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063b75d466c11610071578063b75d466c14610130578063c143c6db14610180578063c43e163d146101a1578063ceb0b935146101df578063ef4e06ec146101f2578063f2fde38b1461021957600080fd5b80631d700c53146100ae5780633e7ee19f146100d7578063715018a61461010257806374773a451461010c5780638da5cb5b1461011f575b600080fd5b6100c16100bc366004610af8565b61022c565b6040516100ce9190610b38565b60405180910390f35b6002546100ea906001600160a01b031681565b6040516001600160a01b0390911681526020016100ce565b61010a610364565b005b61010a61011a366004610af8565b6103cf565b6000546001600160a01b03166100ea565b61017061013e366004610af8565b6001600160a01b03918216600090815260046020908152604080832063ffffffff949094168352929052205416151590565b60405190151581526020016100ce565b61019361018e366004610af8565b6107e7565b6040519081526020016100ce565b6100ea6101af366004610af8565b6001600160a01b03918216600090815260046020908152604080832063ffffffff94909416835292905220541690565b6001546100ea906001600160a01b031681565b6100ea7f000000000000000000000000000000000000000000000000000000000000000081565b61010a610227366004610b85565b6109c1565b6001600160a01b038216600090815260036020908152604080832063ffffffff80861685529252822060020154606092911667ffffffffffffffff81111561027657610276610ba7565b60405190808252806020026020018201604052801561029f578160200160208202803683370190505b50905060005b6001600160a01b038516600090815260036020908152604080832063ffffffff80891685529252909120600201548116908216101561035c576001600160a01b03808616600090815260036020908152604080832063ffffffff808a1685529083528184209086168085526001909101909252909120548451921691849190811061033257610332610bbd565b6001600160a01b03909216602092830291909101909101528061035481610be9565b9150506102a5565b509392505050565b6000546001600160a01b031633146103c35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6103cd6000610a8c565b565b6002546040805163995d9ab760e01b8152905163ffffffff8416926001600160a01b03169163995d9ab7916004808301926000929190829003018186803b15801561041957600080fd5b505afa15801561042d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104559190810190610c3e565b51116104735760405162461bcd60e51b81526004016103ba90610d75565b6040516370a0823160e01b81526001600160a01b03838116600483015269054b40b1f852bda00000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b1580156104e257600080fd5b505afa1580156104f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051a9190610db7565b10158061052e57506001600160a01b038216155b6105895760405162461bcd60e51b815260206004820152602660248201527f566f74696e6750726f78793a2050726f787920686173206e6f7420656e6f756760448201526534102228299760d11b60648201526084016103ba565b33600090815260046020908152604080832063ffffffff851684529091529020546001600160a01b0316156107015733600081815260046020908152604080832063ffffffff808716808652918452828520546001600160a01b031685526003845282852091855290835281842094845291849052822054600284015490821692600185810193919261061c9216610dd0565b63ffffffff90811682526020808301939093526040918201600090812054858316825260018781019586905293822080546001600160a01b0319166001600160a01b039092169190911790556002860154909392849261067c9216610dd0565b63ffffffff90811682526020808301939093526040918201600090812080546001600160a01b0319166001600160a01b039690961695909517909455338452918590528220805463ffffffff19169055600284018054909116916106df83610df5565b91906101000a81548163ffffffff021916908363ffffffff1602179055505050505b33600090815260046020908152604080832063ffffffff85168452909152902080546001600160a01b0319166001600160a01b038416908117909155156107e3576001600160a01b038216600090815260036020908152604080832063ffffffff808616855290835281842060028101805433808852838752858820805463ffffffff1916928616929092179091558154841687526001830190955292852080546001600160a01b031916909417909355815492939216916107c283610be9565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505b5050565b60008163ffffffff16600260009054906101000a90046001600160a01b03166001600160a01b031663995d9ab76040518163ffffffff1660e01b815260040160006040518083038186803b15801561083e57600080fd5b505afa158015610852573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261087a9190810190610c3e565b51116108985760405162461bcd60e51b81526004016103ba90610d75565b6000805b6001600160a01b038516600090815260036020908152604080832063ffffffff80891685529252909120600201548116908216101561035c576001600160a01b03858116600090815260036020908152604080832063ffffffff89811685529083528184209086168452600101909152908190205490516370a0823160e01b815290821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b15801561096b57600080fd5b505afa15801561097f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a39190610db7565b6109ad9083610e15565b9150806109b981610be9565b91505061089c565b6000546001600160a01b03163314610a1b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103ba565b6001600160a01b038116610a805760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103ba565b610a8981610a8c565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b0381168114610af357600080fd5b919050565b60008060408385031215610b0b57600080fd5b610b1483610adc565b9150602083013563ffffffff81168114610b2d57600080fd5b809150509250929050565b6020808252825182820181905260009190848201906040850190845b81811015610b795783516001600160a01b031683529284019291840191600101610b54565b50909695505050505050565b600060208284031215610b9757600080fd5b610ba082610adc565b9392505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600063ffffffff80831681811415610c0357610c03610bd3565b6001019392505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715610c3657610c36610ba7565b604052919050565b60006020808385031215610c5157600080fd5b825167ffffffffffffffff80821115610c6957600080fd5b8185019150601f8681840112610c7e57600080fd5b825182811115610c9057610c90610ba7565b8060051b610c9f868201610c0d565b918252848101860191868101908a841115610cb957600080fd5b87870192505b83831015610d6757825186811115610cd75760008081fd5b8701603f81018c13610ce95760008081fd5b8881015187811115610cfd57610cfd610ba7565b610d0e818801601f19168b01610c0d565b81815260408e81848601011115610d255760008081fd5b60005b83811015610d43578481018201518382018e01528c01610d28565b83811115610d545760008d85850101525b5050845250509187019190870190610cbf565b9a9950505050505050505050565b60208082526022908201527f566f74696e6750726f78793a2054616720696e64657820697320746f6f2068696040820152610ced60f31b606082015260800190565b600060208284031215610dc957600080fd5b5051919050565b600063ffffffff83811690831681811015610ded57610ded610bd3565b039392505050565b600063ffffffff821680610e0b57610e0b610bd3565b6000190192915050565b60008219821115610e2857610e28610bd3565b50019056fea26469706673582212207bad19eb300f4f3fda2779bee1850de99ee223ff056cfb49bd0e56f01f38838c64736f6c63430008090033"; type ExposedVotingProxyConstructorParams = | [signer?: Signer] @@ -249,15 +254,21 @@ export class ExposedVotingProxy__factory extends ContractFactory { override deploy( _DPS: string, + _ballotTagManager: string, overrides?: Overrides & { from?: string | Promise } ): Promise { - return super.deploy(_DPS, overrides || {}) as Promise; + return super.deploy( + _DPS, + _ballotTagManager, + overrides || {} + ) as Promise; } override getDeployTransaction( _DPS: string, + _ballotTagManager: string, overrides?: Overrides & { from?: string | Promise } ): TransactionRequest { - return super.getDeployTransaction(_DPS, overrides || {}); + return super.getDeployTransaction(_DPS, _ballotTagManager, overrides || {}); } override attach(address: string): ExposedVotingProxy { return super.attach(address) as ExposedVotingProxy; diff --git a/typings/hardhat.d.ts b/typings/hardhat.d.ts index 6f2177b..dbf742a 100644 --- a/typings/hardhat.d.ts +++ b/typings/hardhat.d.ts @@ -52,6 +52,10 @@ declare module "hardhat/types/runtime" { name: "Ballot", signerOrOptions?: ethers.Signer | FactoryOptions ): Promise; + getContractFactory( + name: "BallotTagManager", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; getContractFactory( name: "DeepSquare", signerOrOptions?: ethers.Signer | FactoryOptions @@ -175,6 +179,11 @@ declare module "hardhat/types/runtime" { address: string, signer?: ethers.Signer ): Promise; + getContractAt( + name: "BallotTagManager", + address: string, + signer?: ethers.Signer + ): Promise; getContractAt( name: "DeepSquare", address: string, From 9552f4959eac49428c8de11eca75167ae89142b0 Mon Sep 17 00:00:00 2001 From: valentinpollart Date: Fri, 22 Apr 2022 15:54:40 +0200 Subject: [PATCH 07/25] chore: run linters --- contracts/Ballot.sol | 40 ++++----------------------- contracts/VotingProxy.sol | 8 +++--- contracts/factories/BallotFactory.sol | 8 +++--- test/Ballot.spec.ts | 8 +----- test/BallotFactory.spec.ts | 9 +----- test/BallotTagManager.spec.ts | 2 +- test/DeepSquare.spec.ts | 3 +- test/VotingProxy.spec.ts | 11 ++------ 8 files changed, 19 insertions(+), 70 deletions(-) diff --git a/contracts/Ballot.sol b/contracts/Ballot.sol index 9430798..7334e77 100644 --- a/contracts/Ballot.sol +++ b/contracts/Ballot.sol @@ -7,36 +7,6 @@ import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "@openzeppelin/contracts/proxy/utils/Initializable.sol"; import "./VotingProxy.sol"; -// Can a voter change his/her vote ? --> Yes -// Can a voter who grant proxy to somebody can still vote ? --> No -// Can s.he change proxy voter vote ? --> -// Can a proxy voter change original voter vote ? -// Is there a limit of delegate votes per proxy voters ? -// Can a voter grant proxy to more than one person on a given tag ? -// Do we need to have a started flag so admins can create a vote and start it afterwards ? --> No - -// Can a voter delegate to a voter that has less than 25k DPS ? --> No -// Is the 25k DPS limit for delegating balance DPS or undelegated DPS ? --> DPS balance - -// If A grant proxy to B, and if A and B call vote and reach the vote verification simultaneously, both A and B might register a vote for A -// ==> Could be solved by registering voters address instead of incrementing a count, but scales badly. - -// Currently, order is not kept for tags, causing index issues, 2 solutions : -// - remove reference to tag index and use value => forces to check each time there's a reference to a tag to verify it is a member of tag list. -// - do not change indexes at tag removal => residual value (such as empty string) will be left in the tag list. -// ==> Should owner even be able to remove a tag ? - -// Is granting recursive (if A grants proxy to B and B to C, does C has voting power of B+C or A+B+C ?) - -// Add/remove choices ? - -// A a voté 1 -// B a voté 2 - -// voters = address[] -// mapping(address => uint32) results -// results[C] == 0 - contract Ballot is Ownable, Initializable { IERC20Metadata public immutable DPS; VotingProxy public proxy; @@ -81,12 +51,12 @@ contract Ballot is Ownable, Initializable { } function vote(uint32 choiceIndex) external { - require(!closed, 'Voting: Ballot is closed.'); - require(choices.length > choiceIndex, 'Voting: Choice index is too high.'); + require(!closed, "Voting: Ballot is closed."); + require(choices.length > choiceIndex, "Voting: Choice index is too high."); - require(!proxy.hasDelegated(msg.sender,tagIndex), 'Voting: Vote is delegated.'); // Verify that voter has not granted proxy to somebody. + require(!proxy.hasDelegated(msg.sender,tagIndex), "Voting: Vote is delegated."); // Verify that voter has not granted proxy to somebody. - require(DPS.balanceOf(msg.sender) >= 25e3 * 1e18, 'Voting: Not enough DPS to vote.'); // 25k DPS limit + require(DPS.balanceOf(msg.sender) >= 25e3 * 1e18, "Voting: Not enough DPS to vote."); // 25k DPS limit if(!votes[msg.sender].hasVoted) { votes[msg.sender].hasVoted = true; @@ -97,7 +67,7 @@ contract Ballot is Ownable, Initializable { } function closeBallot() external onlyOwner { - require(!closed, 'Voting: Ballot already closed.'); + require(!closed, "Voting: Ballot already closed."); closed = true; diff --git a/contracts/VotingProxy.sol b/contracts/VotingProxy.sol index f788489..72b0ec6 100644 --- a/contracts/VotingProxy.sol +++ b/contracts/VotingProxy.sol @@ -22,15 +22,15 @@ contract VotingProxy is Ownable { constructor(IERC20Metadata _DPS, BallotTagManager _ballotTagManager) { require(address(_DPS) != address(0), "VotingProxy: DPS address is zero."); - require(address(_ballotTagManager) != address(0), 'VotingProxy: Ballot tag manager address is zero.'); + require(address(_ballotTagManager) != address(0), "VotingProxy: Ballot tag manager address is zero."); DPS = _DPS; ballotTagManager = _ballotTagManager; } function grantProxy(address to, uint32 tagIndex) external { - require(ballotTagManager.getTags().length > tagIndex, 'VotingProxy: Tag index is too high'); - require(DPS.balanceOf(to) >= 25e3 * 1e18 || to == address(0), 'VotingProxy: Proxy has not enough DPS.'); + require(ballotTagManager.getTags().length > tagIndex, "VotingProxy: Tag index is too high"); + require(DPS.balanceOf(to) >= 25e3 * 1e18 || to == address(0), "VotingProxy: Proxy has not enough DPS."); if(proxyVoters[msg.sender][tagIndex] != address(0)) { Grants storage formerDelegateGrants = delegates[proxyVoters[msg.sender][tagIndex]][tagIndex]; @@ -52,7 +52,7 @@ contract VotingProxy is Ownable { } function proxyAmount(address voter, uint32 tagIndex) public view returns (uint256) { - require(ballotTagManager.getTags().length > tagIndex, 'VotingProxy: Tag index is too high'); + require(ballotTagManager.getTags().length > tagIndex, "VotingProxy: Tag index is too high"); uint256 total; for(uint32 i = 0; i < delegates[voter][tagIndex].grantCount; i++) { total += DPS.balanceOf(delegates[voter][tagIndex].indexVoter[i]); diff --git a/contracts/factories/BallotFactory.sol b/contracts/factories/BallotFactory.sol index 4ea1017..0588932 100644 --- a/contracts/factories/BallotFactory.sol +++ b/contracts/factories/BallotFactory.sol @@ -16,14 +16,14 @@ contract BallotFactory is Ownable { event BallotCreated(address ballotAddress); constructor(address _implementationAddress, BallotTagManager _ballotTagManager){ - require(_implementationAddress != address(0), 'BallotFactory: Implementation address should not be zero address'); - require(address(_ballotTagManager) != address(0), 'BallotFactory: Ballot tag manager address should not be zero address'); + require(_implementationAddress != address(0), "BallotFactory: Implementation address should not be zero address"); + require(address(_ballotTagManager) != address(0), "BallotFactory: Ballot tag manager address should not be zero address"); implementationAddress = _implementationAddress; ballotTagManager = _ballotTagManager; } function createBallot(string memory subject, uint32 tagIndex, string[] memory _choices) external onlyOwner { - require(ballotTagManager.getTags().length > tagIndex, 'BallotFactory: Tag index is too high.'); + require(ballotTagManager.getTags().length > tagIndex, "BallotFactory: Tag index is too high."); address cloneAddress = Clones.clone(implementationAddress); Ballot(cloneAddress).init(subject, tagIndex, _choices); @@ -33,7 +33,7 @@ contract BallotFactory is Ownable { } function setImplementationAddress(address newAddress) external onlyOwner { - require(newAddress != address(0), 'BallotFactory: Implementation address should not be zero address'); + require(newAddress != address(0), "BallotFactory: Implementation address should not be zero address"); implementationAddress = newAddress; } diff --git a/test/Ballot.spec.ts b/test/Ballot.spec.ts index fe12dc6..3bbc3f1 100644 --- a/test/Ballot.spec.ts +++ b/test/Ballot.spec.ts @@ -3,13 +3,7 @@ import { BigNumber } from '@ethersproject/bignumber'; import { parseUnits } from '@ethersproject/units'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { ZERO_ADDRESS } from '../lib/constants'; -import { - BallotTagManager, - DeepSquare, - ExposedBallot, - ExposedBallot__factory, - ExposedVotingProxy, -} from '../typings'; +import { BallotTagManager, DeepSquare, ExposedBallot, ExposedBallot__factory, ExposedVotingProxy } from '../typings'; import { ERC20Agent } from './testing/ERC20Agent'; import setup from './testing/setup'; import setupVoting from './testing/setupVoting'; diff --git a/test/BallotFactory.spec.ts b/test/BallotFactory.spec.ts index b50c5bf..52f7f0a 100644 --- a/test/BallotFactory.spec.ts +++ b/test/BallotFactory.spec.ts @@ -1,14 +1,7 @@ import { expect } from 'chai'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { ZERO_ADDRESS } from '../lib/constants'; -import { - Ballot, - BallotFactory, - BallotFactory__factory, - BallotTagManager, - DeepSquare, - VotingProxy, -} from '../typings'; +import { Ballot, BallotFactory, BallotFactory__factory, BallotTagManager, DeepSquare, VotingProxy } from '../typings'; import setup from './testing/setup'; import setupVoting from './testing/setupVoting'; diff --git a/test/BallotTagManager.spec.ts b/test/BallotTagManager.spec.ts index 3450bbb..47ba50c 100644 --- a/test/BallotTagManager.spec.ts +++ b/test/BallotTagManager.spec.ts @@ -20,4 +20,4 @@ describe('BallotTagManager', () => { expect(await ballotTagManager.getTags()).to.deep.equals(['foo', 'bar']); }); }); -}); \ No newline at end of file +}); diff --git a/test/DeepSquare.spec.ts b/test/DeepSquare.spec.ts index c097edd..d1f851d 100644 --- a/test/DeepSquare.spec.ts +++ b/test/DeepSquare.spec.ts @@ -1,8 +1,7 @@ import { expect } from 'chai'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { DPS_TOTAL_SUPPLY } from '../lib/constants'; -import waitTx from '../lib/waitTx'; -import { DeepSquare } from '../typings/contracts/DeepSquare'; +import { DeepSquare } from '../typings'; import { ERC20Agent } from './testing/ERC20Agent'; import { randomInt } from './testing/random'; import setup from './testing/setup'; diff --git a/test/VotingProxy.spec.ts b/test/VotingProxy.spec.ts index e620676..15b7066 100644 --- a/test/VotingProxy.spec.ts +++ b/test/VotingProxy.spec.ts @@ -3,13 +3,7 @@ import { BigNumber } from '@ethersproject/bignumber'; import { parseUnits } from '@ethersproject/units'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { ZERO_ADDRESS } from '../lib/constants'; -import { - BallotFactory, - BallotTagManager, - DeepSquare, - ExposedVotingProxy, - ExposedVotingProxy__factory, -} from '../typings'; +import { BallotTagManager, DeepSquare, ExposedVotingProxy, ExposedVotingProxy__factory } from '../typings'; import { ERC20Agent } from './testing/ERC20Agent'; import setup from './testing/setup'; import setupVoting from './testing/setupVoting'; @@ -21,11 +15,10 @@ describe('Voting proxy', async () => { let agentDPS: ERC20Agent; let ballotTagManager: BallotTagManager; let votingProxy: ExposedVotingProxy; - let ballotFactory: BallotFactory; beforeEach(async () => { ({ owner, accounts, DPS, agentDPS } = await setup()); - ({ ballotTagManager, votingProxy, ballotFactory } = await setupVoting(owner, DPS)); + ({ ballotTagManager, votingProxy } = await setupVoting(owner, DPS)); }); describe('constructor', () => { From 0f1e927b68ff45af8b337c071aa99d6a1a19c314 Mon Sep 17 00:00:00 2001 From: valentinpollart Date: Fri, 22 Apr 2022 15:59:06 +0200 Subject: [PATCH 08/25] chore: update pnpm lockfile --- pnpm-lock.yaml | 98 ++++++++++++-------------------------------------- 1 file changed, 23 insertions(+), 75 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 873126d..0dc57dc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,7 +15,6 @@ specifiers: '@nomiclabs/hardhat-etherscan': 3.0.3 '@nomiclabs/hardhat-waffle': 2.0.3 '@openzeppelin/contracts': ^4.5.0 - '@optionality.io/clone-factory': ^0.2.1 '@swc/core': ^1.2.165 '@trivago/prettier-plugin-sort-imports': ^3.2.0 '@typechain/ethers-v5': ^10.0.0 @@ -47,9 +46,6 @@ specifiers: typechain: ^8.0.0 typescript: ^4.6.3 -dependencies: - '@optionality.io/clone-factory': 0.2.1 - devDependencies: '@chainlink/contracts': 0.4.0 '@deepsquare/prettier-config': 1.0.3_f567791dde62d616184f017118cbdb83 @@ -1007,12 +1003,6 @@ packages: resolution: {integrity: sha512-fdkzKPYMjrRiPK6K4y64e6GzULR7R7RwxSigHS8DDp7aWDeoReqsQI+cxHV1UuhAqX69L1lAaWDxenfP+xiqzA==} dev: true - /@optionality.io/clone-factory/0.2.1: - resolution: {integrity: sha512-1cBrIaMwaHcR0jpFuSQKHdwC6l2hVDvUOc97QKiXxCZeLLcKbLiwFUTKqIiBMx0Q77dFS6o0xlOMupzF83f3VA==} - dependencies: - r2pipe-promise: 1.6.1 - dev: false - /@resolver-engine/core/0.3.3: resolution: {integrity: sha512-eB8nEbKDJJBi5p5SrvrvILn4a0h42bKtbCTri3ZxCGt6UvoQyp7HnGOfki944bUjBSHKK3RvgfViHn+kqdXtnQ==} dependencies: @@ -1775,18 +1765,6 @@ packages: acorn: 8.7.0 dev: true - /acorn-loose/6.1.0: - resolution: {integrity: sha512-FHhXoiF0Uch3IqsrnPpWwCtiv5PYvipTpT1k9lDMgQVVYc9iDuSl5zdJV358aI8twfHCYMFBRVYvAVki9wC/ng==} - engines: {node: '>=0.4.0'} - dependencies: - acorn: 6.4.2 - dev: false - - /acorn-walk/6.2.0: - resolution: {integrity: sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==} - engines: {node: '>=0.4.0'} - dev: false - /acorn-walk/8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} @@ -1796,6 +1774,7 @@ packages: resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==} engines: {node: '>=0.4.0'} hasBin: true + dev: true /acorn/8.7.0: resolution: {integrity: sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==} @@ -2574,6 +2553,7 @@ packages: /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true /base-x/3.0.9: resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} @@ -2686,6 +2666,7 @@ packages: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 + dev: true /braces/2.3.2: resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} @@ -3240,6 +3221,7 @@ packages: /concat-map/0.0.1: resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + dev: true /concat-stream/1.6.2: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} @@ -3312,6 +3294,7 @@ packages: /core-util-is/1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: true /cors/2.8.5: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} @@ -3769,16 +3752,6 @@ packages: once: 1.4.0 dev: true - /enhanced-resolve/2.3.0: - resolution: {integrity: sha1-oRXDJQS2MC6Fp2Jp16V8zdli41k=} - engines: {node: '>=0.6'} - dependencies: - graceful-fs: 4.2.10 - memory-fs: 0.3.0 - object-assign: 4.1.1 - tapable: 0.2.9 - dev: false - /enquirer/2.3.6: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} engines: {node: '>=8.6'} @@ -3796,6 +3769,7 @@ packages: hasBin: true dependencies: prr: 1.0.1 + dev: true /error-ex/1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -5090,6 +5064,7 @@ packages: /fs.realpath/1.0.0: resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} + dev: true /fsevents/2.1.3: resolution: {integrity: sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==} @@ -5289,6 +5264,7 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 + dev: true /global-modules/2.0.0: resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} @@ -5395,6 +5371,7 @@ packages: /graceful-fs/4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + dev: true /growl/1.10.5: resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} @@ -5781,9 +5758,11 @@ packages: dependencies: once: 1.4.0 wrappy: 1.0.2 + dev: true /inherits/2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true /ini/1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} @@ -6170,6 +6149,7 @@ packages: /isarray/1.0.0: resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=} + dev: true /isexe/2.0.0: resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} @@ -6822,13 +6802,6 @@ packages: safe-buffer: 5.2.1 dev: true - /memory-fs/0.3.0: - resolution: {integrity: sha1-e8xrYp46Q+hx1+Kaymrop/FcuyA=} - dependencies: - errno: 0.1.8 - readable-stream: 2.3.7 - dev: false - /memorystream/0.3.1: resolution: {integrity: sha1-htcJCzDORV1j+64S3aUaR93K+bI=} engines: {node: '>= 0.10.0'} @@ -6971,6 +6944,7 @@ packages: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 + dev: true /minimatch/4.2.1: resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==} @@ -7307,6 +7281,7 @@ packages: /object-assign/4.1.1: resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=} engines: {node: '>=0.10.0'} + dev: true /object-copy/0.1.0: resolution: {integrity: sha1-fn2Fi3gb18mRpBupde04EnVOmYw=} @@ -7416,6 +7391,7 @@ packages: resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} dependencies: wrappy: 1.0.2 + dev: true /onetime/2.0.1: resolution: {integrity: sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=} @@ -7667,6 +7643,7 @@ packages: /path-is-absolute/1.0.1: resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} engines: {node: '>=0.10.0'} + dev: true /path-is-inside/1.0.2: resolution: {integrity: sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=} @@ -7832,6 +7809,7 @@ packages: /process-nextick-args/2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: true /process/0.11.10: resolution: {integrity: sha1-czIwDoQBYb2j5podHZGn1LwW8YI=} @@ -7867,6 +7845,7 @@ packages: /prr/1.0.1: resolution: {integrity: sha1-0/wRS6BplaRexok/SEzrHXj19HY=} + dev: true /pseudomap/1.0.2: resolution: {integrity: sha1-8FKijacOYYkX7wqKw0wa5aaChrM=} @@ -7985,19 +7964,6 @@ packages: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true - /r2pipe-promise/1.6.1: - resolution: {integrity: sha512-wpIBh4OCKdthQNmd4I6GPIN1MP+L/FytvOTBXUqskNEXvKE8Jwe15/xogDdc483exiRwZFF62WYf0h0R+WZM6Q==} - dependencies: - r2pipe: 2.8.0 - dev: false - - /r2pipe/2.8.0: - resolution: {integrity: sha512-AgIEGHAlOSRFq52N83def7ikaTS/C+uPqQFbjYb2l8RVc4GnzlLHIpD9XShQoe/C7CawPeA21vX9Sng7GQbngQ==} - engines: {iojs: '>= 1.0.0', node: '>= 4.2.0'} - dependencies: - tern: 0.24.3 - dev: false - /randombytes/2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: @@ -8072,6 +8038,7 @@ packages: safe-buffer: 5.1.2 string_decoder: 1.1.1 util-deprecate: 1.0.2 + dev: true /readable-stream/3.6.0: resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} @@ -8280,11 +8247,6 @@ packages: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} dev: true - /resolve-from/2.0.0: - resolution: {integrity: sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=} - engines: {node: '>=0.10.0'} - dev: false - /resolve-from/3.0.0: resolution: {integrity: sha1-six699nWiBvItuZTM17rywoYh0g=} engines: {node: '>=4'} @@ -8408,6 +8370,7 @@ packages: /safe-buffer/5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: true /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} @@ -9028,6 +8991,7 @@ packages: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 + dev: true /string_decoder/1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} @@ -9183,11 +9147,6 @@ packages: string-width: 3.1.0 dev: true - /tapable/0.2.9: - resolution: {integrity: sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A==} - engines: {node: '>=0.6'} - dev: false - /tape/4.15.1: resolution: {integrity: sha512-k7F5pyr91n9D/yjSJwbLLYDCrTWXxMSXbbmHX2n334lSIc2rxeXyFkaBv4UuUd2gBYMrAOalPutAiCxC6q1qbw==} hasBin: true @@ -9222,19 +9181,6 @@ packages: yallist: 3.1.1 dev: true - /tern/0.24.3: - resolution: {integrity: sha512-Z8uvtdWIlFn1GWy0HW5FhZ8VDryZwoJUdnjZU25C7/PBOltLIn1uv+WF3rVq6S1761YbsmbZYRP/l0ZJBCkvrw==} - hasBin: true - dependencies: - acorn: 6.4.2 - acorn-loose: 6.1.0 - acorn-walk: 6.2.0 - enhanced-resolve: 2.3.0 - glob: 7.2.0 - minimatch: 3.1.2 - resolve-from: 2.0.0 - dev: false - /test-value/2.1.0: resolution: {integrity: sha1-Edpv9nDzRxpztiXKTz/c97t0gpE=} engines: {node: '>=0.10.0'} @@ -9745,6 +9691,7 @@ packages: /util-deprecate/1.0.2: resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} + dev: true /util.promisify/1.1.1: resolution: {integrity: sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==} @@ -10505,6 +10452,7 @@ packages: /wrappy/1.0.2: resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} + dev: true /write/1.0.3: resolution: {integrity: sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==} From f57bb5dd411642ed1aec95272d92f9d13ffa1595 Mon Sep 17 00:00:00 2001 From: valentinpollart Date: Mon, 25 Apr 2022 13:26:54 +0200 Subject: [PATCH 09/25] fix: meet pr changes requirements --- contracts/Ballot.sol | 21 +- contracts/BallotTagManager.sol | 18 - contracts/VotingDelegation.sol | 75 ++++ contracts/VotingProxy.sol | 66 ---- contracts/factories/BallotFactory.sol | 14 +- contracts/testing/ExposedBallot.sol | 2 +- contracts/testing/ExposedVotingProxy.sol | 21 -- test/Ballot.spec.ts | 37 +- test/BallotFactory.spec.ts | 24 +- test/VotingDelegation.spec.ts | 78 ++++ test/VotingProxy.spec.ts | 105 ------ test/testing/setupVoting.ts | 22 +- typings/contracts/Ballot.ts | 56 ++- typings/contracts/BallotTagManager.ts | 236 ------------ ...osedVotingProxy.ts => VotingDelegation.ts} | 277 +++++++------- typings/contracts/VotingProxy.ts | 350 ------------------ typings/contracts/factories/BallotFactory.ts | 34 +- typings/contracts/testing/ExposedBallot.ts | 56 ++- .../contracts/BallotTagManager__factory.ts | 159 -------- .../factories/contracts/Ballot__factory.ts | 20 +- .../contracts/VotingDelegation__factory.ts | 267 +++++++++++++ .../contracts/VotingProxy__factory.ts | 243 ------------ .../factories/BallotFactory__factory.ts | 35 +- .../testing/ExposedBallot__factory.ts | 20 +- .../testing/ExposedVotingProxy__factory.ts | 291 --------------- typings/hardhat.d.ts | 26 +- 26 files changed, 679 insertions(+), 1874 deletions(-) delete mode 100644 contracts/BallotTagManager.sol create mode 100644 contracts/VotingDelegation.sol delete mode 100644 contracts/VotingProxy.sol delete mode 100644 contracts/testing/ExposedVotingProxy.sol create mode 100644 test/VotingDelegation.spec.ts delete mode 100644 test/VotingProxy.spec.ts delete mode 100644 typings/contracts/BallotTagManager.ts rename typings/contracts/{testing/ExposedVotingProxy.ts => VotingDelegation.ts} (74%) delete mode 100644 typings/contracts/VotingProxy.ts delete mode 100644 typings/factories/contracts/BallotTagManager__factory.ts create mode 100644 typings/factories/contracts/VotingDelegation__factory.ts delete mode 100644 typings/factories/contracts/VotingProxy__factory.ts delete mode 100644 typings/factories/contracts/testing/ExposedVotingProxy__factory.ts diff --git a/contracts/Ballot.sol b/contracts/Ballot.sol index 7334e77..46dd67f 100644 --- a/contracts/Ballot.sol +++ b/contracts/Ballot.sol @@ -5,11 +5,11 @@ pragma solidity ^0.8.0; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "@openzeppelin/contracts/proxy/utils/Initializable.sol"; -import "./VotingProxy.sol"; +import "./VotingDelegation.sol"; contract Ballot is Ownable, Initializable { IERC20Metadata public immutable DPS; - VotingProxy public proxy; + VotingDelegation public proxy; struct Vote { uint32 choiceIndex; @@ -18,25 +18,26 @@ contract Ballot is Ownable, Initializable { string public subject; bool public closed; - uint32 public tagIndex; + string public topic; string[] public choices; uint256[] public resultStorage; + uint256 immutable votingLimit = 25e3 * 1e18; address[] internal voters; mapping(address => Vote) internal votes; constructor( IERC20Metadata _DPS, - VotingProxy _proxy + VotingDelegation _proxy ) { require(address(_DPS) != address(0), "Vote: DPS address is zero."); DPS = _DPS; proxy = _proxy; } - function init(string memory _subject, uint32 _tagIndex, string[] memory _choices) public initializer { + function init(string memory _subject, string memory _topic, string[] memory _choices) public initializer { subject = _subject; - tagIndex = _tagIndex; + topic = _topic; closed = false; choices = _choices; resultStorage = new uint256[](choices.length); @@ -54,9 +55,9 @@ contract Ballot is Ownable, Initializable { require(!closed, "Voting: Ballot is closed."); require(choices.length > choiceIndex, "Voting: Choice index is too high."); - require(!proxy.hasDelegated(msg.sender,tagIndex), "Voting: Vote is delegated."); // Verify that voter has not granted proxy to somebody. + require(!proxy.hasDelegated(msg.sender,topic), "Voting: Vote is delegated."); // Verify that voter has not granted proxy to somebody. - require(DPS.balanceOf(msg.sender) >= 25e3 * 1e18, "Voting: Not enough DPS to vote."); // 25k DPS limit + require(DPS.balanceOf(msg.sender) >= votingLimit, "Voting: Not enough DPS to vote."); // 25k DPS limit if(!votes[msg.sender].hasVoted) { votes[msg.sender].hasVoted = true; @@ -66,14 +67,14 @@ contract Ballot is Ownable, Initializable { votes[msg.sender].choiceIndex = choiceIndex; } - function closeBallot() external onlyOwner { + function close() external onlyOwner { require(!closed, "Voting: Ballot already closed."); closed = true; for(uint i = 0; i < voters.length; i++) { // if A has granted proxy to B address voter = voters[i]; - resultStorage[votes[voter].choiceIndex] += DPS.balanceOf(voter) + proxy.proxyAmount(voter, tagIndex); + resultStorage[votes[voter].choiceIndex] += DPS.balanceOf(voter) + proxy.delegationAmount(voter, topic); } } diff --git a/contracts/BallotTagManager.sol b/contracts/BallotTagManager.sol deleted file mode 100644 index e8dab70..0000000 --- a/contracts/BallotTagManager.sol +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.0; - -import "@openzeppelin/contracts/access/Ownable.sol"; - - -contract BallotTagManager is Ownable { - string[] public tags; - - function getTags() external view returns(string[] memory) { - return tags; - } - - function addTag(string memory name) external onlyOwner { - tags.push(name); - } -} diff --git a/contracts/VotingDelegation.sol b/contracts/VotingDelegation.sol new file mode 100644 index 0000000..cc4926e --- /dev/null +++ b/contracts/VotingDelegation.sol @@ -0,0 +1,75 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; +import "./factories/BallotFactory.sol"; + +contract VotingDelegation is Ownable { + IERC20Metadata public immutable DPS; + BallotFactory public ballotFactory; + + struct Grants { + mapping(address => uint256) indexes; + address[] delegators; + } + + uint256 immutable delegatingLimit = 25e3 * 1e18; + + mapping(address => mapping(bytes32 => Grants)) internal delegates; // proxy => tag => voters + + mapping(address => mapping(bytes32 => address)) internal proxyVoters; // voter => tag => proxy + + constructor(IERC20Metadata _DPS) { + require(address(_DPS) != address(0), "VotingDelegation: DPS address is zero."); + + DPS = _DPS; + } + + function delegate(address to, string memory topic) external { + require(DPS.balanceOf(to) >= delegatingLimit || to == address(0), "VotingDelegation: Proxy has not enough DPS."); + bytes32 topicHash = keccak256(bytes(topic)); + + if(proxyVoters[msg.sender][topicHash] != address(0)) { + Grants storage formerDelegateGrants = delegates[proxyVoters[msg.sender][topicHash]][topicHash]; + uint256 senderIndex = formerDelegateGrants.indexes[msg.sender]; + formerDelegateGrants.delegators[senderIndex] = formerDelegateGrants.delegators[formerDelegateGrants.delegators.length - 1]; + formerDelegateGrants.delegators.pop(); + formerDelegateGrants.indexes[msg.sender] = 0; + } + + proxyVoters[msg.sender][topicHash] = to; + + if(to != address(0)) { + Grants storage newDelegateGrants = delegates[to][topicHash]; + newDelegateGrants.indexes[msg.sender] = newDelegateGrants.delegators.length; + newDelegateGrants.delegators.push(msg.sender); + } + } + + function delegationAmount(address voter, string memory topic) public view returns (uint256) { + uint256 total; + bytes32 topicHash = keccak256(bytes(topic)); + for(uint32 i = 0; i < delegates[voter][topicHash].delegators.length; i++) { + total += DPS.balanceOf(delegates[voter][topicHash].delegators[i]); + } + return total; + } + + function hasDelegated(address voter, string memory topic) external view returns (bool) { + return proxyVoters[voter][keccak256(bytes(topic))] != address(0); + } + + function delegators(address to, string memory topic) external view returns(address[] memory) { + bytes32 topicHash = keccak256(bytes(topic)); + address[] memory proxies = new address[](delegates[to][topicHash].delegators.length); + for(uint32 i = 0; i < delegates[to][topicHash].delegators.length; i++) { + proxies[i] = delegates[to][topicHash].delegators[i]; + } + return proxies; + } + + function representative(address from, string memory topic) external view returns(address) { + return proxyVoters[from][keccak256(bytes(topic))]; + } +} diff --git a/contracts/VotingProxy.sol b/contracts/VotingProxy.sol deleted file mode 100644 index 72b0ec6..0000000 --- a/contracts/VotingProxy.sol +++ /dev/null @@ -1,66 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.0; - -import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; -import "./factories/BallotFactory.sol"; - -contract VotingProxy is Ownable { - IERC20Metadata public immutable DPS; - BallotFactory public ballotFactory; - BallotTagManager public ballotTagManager; - - struct Grants { - mapping(address => uint32) voterIndex; - mapping(uint32 => address) indexVoter; - uint32 grantCount; - } - - mapping(address => mapping(uint32 => Grants)) internal delegates; // proxy => tag => voters - - mapping(address => mapping(uint32 => address)) internal proxyVoters; // voter => tag => proxy - - constructor(IERC20Metadata _DPS, BallotTagManager _ballotTagManager) { - require(address(_DPS) != address(0), "VotingProxy: DPS address is zero."); - require(address(_ballotTagManager) != address(0), "VotingProxy: Ballot tag manager address is zero."); - - DPS = _DPS; - ballotTagManager = _ballotTagManager; - } - - function grantProxy(address to, uint32 tagIndex) external { - require(ballotTagManager.getTags().length > tagIndex, "VotingProxy: Tag index is too high"); - require(DPS.balanceOf(to) >= 25e3 * 1e18 || to == address(0), "VotingProxy: Proxy has not enough DPS."); - - if(proxyVoters[msg.sender][tagIndex] != address(0)) { - Grants storage formerDelegateGrants = delegates[proxyVoters[msg.sender][tagIndex]][tagIndex]; - uint32 senderIndex = formerDelegateGrants.voterIndex[msg.sender]; - formerDelegateGrants.indexVoter[senderIndex] = formerDelegateGrants.indexVoter[formerDelegateGrants.grantCount - 1]; - formerDelegateGrants.indexVoter[formerDelegateGrants.grantCount - 1] = address(0); - formerDelegateGrants.voterIndex[msg.sender] = 0; - formerDelegateGrants.grantCount--; - } - - proxyVoters[msg.sender][tagIndex] = to; - - if(to != address(0)) { - Grants storage newDelegateGrants = delegates[to][tagIndex]; - newDelegateGrants.voterIndex[msg.sender] = newDelegateGrants.grantCount; - newDelegateGrants.indexVoter[newDelegateGrants.grantCount] = msg.sender; - newDelegateGrants.grantCount++; - } - } - - function proxyAmount(address voter, uint32 tagIndex) public view returns (uint256) { - require(ballotTagManager.getTags().length > tagIndex, "VotingProxy: Tag index is too high"); - uint256 total; - for(uint32 i = 0; i < delegates[voter][tagIndex].grantCount; i++) { - total += DPS.balanceOf(delegates[voter][tagIndex].indexVoter[i]); - } - return total; - } - - function hasDelegated(address voter, uint32 tagIndex) external view returns (bool) { - return proxyVoters[voter][tagIndex] != address(0); - } -} diff --git a/contracts/factories/BallotFactory.sol b/contracts/factories/BallotFactory.sol index 0588932..ba46366 100644 --- a/contracts/factories/BallotFactory.sol +++ b/contracts/factories/BallotFactory.sol @@ -5,28 +5,22 @@ pragma solidity ^0.8.0; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/proxy/Clones.sol"; import "../Ballot.sol"; -import "../VotingProxy.sol"; -import "../BallotTagManager.sol"; +import "../VotingDelegation.sol"; contract BallotFactory is Ownable { address[] public ballotAddresses; address public implementationAddress; - BallotTagManager public ballotTagManager; event BallotCreated(address ballotAddress); - constructor(address _implementationAddress, BallotTagManager _ballotTagManager){ + constructor(address _implementationAddress){ require(_implementationAddress != address(0), "BallotFactory: Implementation address should not be zero address"); - require(address(_ballotTagManager) != address(0), "BallotFactory: Ballot tag manager address should not be zero address"); implementationAddress = _implementationAddress; - ballotTagManager = _ballotTagManager; } - function createBallot(string memory subject, uint32 tagIndex, string[] memory _choices) external onlyOwner { - require(ballotTagManager.getTags().length > tagIndex, "BallotFactory: Tag index is too high."); - + function createBallot(string memory subject, string memory topic, string[] memory _choices) external onlyOwner { address cloneAddress = Clones.clone(implementationAddress); - Ballot(cloneAddress).init(subject, tagIndex, _choices); + Ballot(cloneAddress).init(subject, topic, _choices); ballotAddresses.push(cloneAddress); emit BallotCreated(cloneAddress); diff --git a/contracts/testing/ExposedBallot.sol b/contracts/testing/ExposedBallot.sol index dbf3412..41e8610 100644 --- a/contracts/testing/ExposedBallot.sol +++ b/contracts/testing/ExposedBallot.sol @@ -6,7 +6,7 @@ import "../Ballot.sol"; contract ExposedBallot is Ballot { - constructor(IERC20Metadata _DPS, VotingProxy _proxy) Ballot(_DPS, _proxy) {} + constructor(IERC20Metadata _DPS, VotingDelegation _proxy) Ballot(_DPS, _proxy) {} struct ResultSample { address voter; diff --git a/contracts/testing/ExposedVotingProxy.sol b/contracts/testing/ExposedVotingProxy.sol deleted file mode 100644 index c760959..0000000 --- a/contracts/testing/ExposedVotingProxy.sol +++ /dev/null @@ -1,21 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.0; - -import "../VotingProxy.sol"; - -contract ExposedVotingProxy is VotingProxy { - constructor(IERC20Metadata _DPS, BallotTagManager _ballotTagManager) VotingProxy(_DPS, _ballotTagManager) {} - - function _delegates(address to, uint32 tagIndex) external view returns(address[] memory) { - address[] memory proxies = new address[](delegates[to][tagIndex].grantCount); - for(uint32 i = 0; i < delegates[to][tagIndex].grantCount; i++) { - proxies[i] = delegates[to][tagIndex].indexVoter[i]; - } - return proxies; - } - - function _proxyVoters(address from, uint32 tagIndex) external view returns(address) { - return proxyVoters[from][tagIndex]; - } -} diff --git a/test/Ballot.spec.ts b/test/Ballot.spec.ts index 3bbc3f1..1420a0c 100644 --- a/test/Ballot.spec.ts +++ b/test/Ballot.spec.ts @@ -3,7 +3,7 @@ import { BigNumber } from '@ethersproject/bignumber'; import { parseUnits } from '@ethersproject/units'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { ZERO_ADDRESS } from '../lib/constants'; -import { BallotTagManager, DeepSquare, ExposedBallot, ExposedBallot__factory, ExposedVotingProxy } from '../typings'; +import { DeepSquare, ExposedBallot, ExposedBallot__factory, VotingDelegation } from '../typings'; import { ERC20Agent } from './testing/ERC20Agent'; import setup from './testing/setup'; import setupVoting from './testing/setupVoting'; @@ -14,19 +14,18 @@ describe('Ballot', () => { let DPS: DeepSquare; let ballot: ExposedBallot; let agentDPS: ERC20Agent; - let ballotTagManager: BallotTagManager; - let votingProxy: ExposedVotingProxy; + let votingDelegation: VotingDelegation; beforeEach(async () => { ({ owner, accounts, DPS, agentDPS } = await setup()); - ({ ballotTagManager, votingProxy } = await setupVoting(owner, DPS)); + ({ votingDelegation } = await setupVoting(owner, DPS)); - ballot = await new ExposedBallot__factory(owner).deploy(DPS.address, votingProxy.address); + ballot = await new ExposedBallot__factory(owner).deploy(DPS.address, votingDelegation.address); }); describe('constructor', () => { it('should revert if the DPS contract is the zero address', async () => { - await expect(new ExposedBallot__factory(owner).deploy(ZERO_ADDRESS, votingProxy.address)).to.be.revertedWith( + await expect(new ExposedBallot__factory(owner).deploy(ZERO_ADDRESS, votingDelegation.address)).to.be.revertedWith( 'Vote: DPS address is zero.', ); }); @@ -34,21 +33,20 @@ describe('Ballot', () => { describe('init', () => { it('should initialize ballot state variables', async () => { - await ballot.init('foo', BigNumber.from(0), ['bar', 'baz']); + await ballot.init('foo', 'bar', ['baz', 'qux']); expect(await ballot.subject()).to.equals('foo'); - expect(await ballot.tagIndex()).to.equals(BigNumber.from(0)); - expect(await ballot.getChoices()).to.deep.equals(['bar', 'baz']); + expect(await ballot.topic()).to.equals('bar'); + expect(await ballot.getChoices()).to.deep.equals(['baz', 'qux']); expect(await ballot.getResults()).to.deep.equals([BigNumber.from(0), BigNumber.from(0)]); }); }); describe('vote', () => { beforeEach(async () => { - await ballotTagManager.addTag('foo'); - await ballot.init('foo', BigNumber.from(0), ['bar', 'baz']); + await ballot.init('foo', 'qux', ['bar', 'baz']); }); it('should throw if ballot is closed', async () => { - await ballot.closeBallot(); + await ballot.close(); await expect(ballot.connect(accounts[0]).vote(BigNumber.from(0))).to.revertedWith('Voting: Ballot is closed.'); }); it('should throw if proposal does not exist', async () => { @@ -56,9 +54,9 @@ describe('Ballot', () => { 'Voting: Choice index is too high.', ); }); - it('should throw if voter has granted proxy on the tag', async () => { + it('should throw if voter has granted proxy on the topic', async () => { await agentDPS.transfer(accounts[1], 25000, 18); - await votingProxy.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0)); + await votingDelegation.connect(accounts[0]).delegate(accounts[1].address, 'qux'); await expect(ballot.connect(accounts[0]).vote(BigNumber.from(0))).to.revertedWith('Voting: Vote is delegated.'); }); it('should throw if voter has less than 25k DPS', async () => { @@ -77,21 +75,20 @@ describe('Ballot', () => { describe('closeBallot', async () => { beforeEach(async () => { - await ballotTagManager.addTag('foo'); - await ballot.init('foo', BigNumber.from(0), ['bar', 'baz']); + await ballot.init('foo', 'qux', ['bar', 'baz']); }); it('should throw if ballot is not closed', async () => { - await ballot.closeBallot(); - await expect(ballot.closeBallot()).to.revertedWith('Voting: Ballot already closed.'); + await ballot.close(); + await expect(ballot.close()).to.revertedWith('Voting: Ballot already closed.'); }); it('should show results', async () => { await agentDPS.transfer(accounts[0], 25000, 18); await agentDPS.transfer(accounts[1], 25000, 18); await agentDPS.transfer(accounts[2], 25000, 18); - await votingProxy.connect(accounts[2]).grantProxy(accounts[1].address, BigNumber.from(0)); + await votingDelegation.connect(accounts[2]).delegate(accounts[1].address, 'qux'); await ballot.connect(accounts[0]).vote(BigNumber.from(0)); await ballot.connect(accounts[1]).vote(BigNumber.from(1)); - await ballot.closeBallot(); + await ballot.close(); expect(await ballot.getResults()).to.deep.equals([parseUnits('25000', 18), parseUnits('50000', 18)]); }); }); diff --git a/test/BallotFactory.spec.ts b/test/BallotFactory.spec.ts index 52f7f0a..236437f 100644 --- a/test/BallotFactory.spec.ts +++ b/test/BallotFactory.spec.ts @@ -1,48 +1,34 @@ import { expect } from 'chai'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { ZERO_ADDRESS } from '../lib/constants'; -import { Ballot, BallotFactory, BallotFactory__factory, BallotTagManager, DeepSquare, VotingProxy } from '../typings'; +import { Ballot, BallotFactory, BallotFactory__factory, DeepSquare } from '../typings'; import setup from './testing/setup'; import setupVoting from './testing/setupVoting'; -describe('Ballot Factory', async () => { +describe.only('Ballot Factory', async () => { let owner: SignerWithAddress; let DPS: DeepSquare; - let ballotTagManager: BallotTagManager; - let votingProxy: VotingProxy; let ballotImplementation: Ballot; let ballotFactory: BallotFactory; beforeEach(async () => { ({ owner, DPS } = await setup()); - ({ ballotTagManager, votingProxy, ballotImplementation, ballotFactory } = await setupVoting(owner, DPS)); + ({ ballotImplementation, ballotFactory } = await setupVoting(owner, DPS)); }); describe('constructor', () => { it('should revert if the DPS contract is the zero address', async () => { - await expect(new BallotFactory__factory(owner).deploy(ZERO_ADDRESS, votingProxy.address)).to.be.revertedWith( + await expect(new BallotFactory__factory(owner).deploy(ZERO_ADDRESS)).to.be.revertedWith( 'BallotFactory: Implementation address should not be zero address', ); }); - it('should revert if the Ballot tag manager is the zero address', async () => { - await expect( - new BallotFactory__factory(owner).deploy(ballotImplementation.address, ZERO_ADDRESS), - ).to.be.revertedWith('BallotFactory: Ballot tag manager address should not be zero address'); - }); }); describe('createBallot', () => { - it('should throw if tag does not exist', async () => { - await expect(ballotFactory.createBallot('foo', 0, ['bar', 'baz'])).to.revertedWith( - 'BallotFactory: Tag index is too high.', - ); - }); - it('should create a new ballot', async () => { - await ballotTagManager.addTag('foo'); await ballotFactory.setImplementationAddress(ballotImplementation.address); const [ballotAddress] = await ballotFactory - .createBallot('foo', 0, ['bar', 'baz']) + .createBallot('foo', 'qux', ['bar', 'baz']) .then(async (t) => (await t.wait()).events?.find((e) => e.event === 'BallotCreated')?.args ?? []); expect(await ballotFactory.getBallots()).to.deep.equals([ballotAddress]); }); diff --git a/test/VotingDelegation.spec.ts b/test/VotingDelegation.spec.ts new file mode 100644 index 0000000..f32d447 --- /dev/null +++ b/test/VotingDelegation.spec.ts @@ -0,0 +1,78 @@ +import { expect } from 'chai'; +import { parseUnits } from '@ethersproject/units'; +import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { ZERO_ADDRESS } from '../lib/constants'; +import { DeepSquare, VotingDelegation, VotingDelegation__factory } from '../typings'; +import { ERC20Agent } from './testing/ERC20Agent'; +import setup from './testing/setup'; +import setupVoting from './testing/setupVoting'; + +describe('Voting delegation', async () => { + let owner: SignerWithAddress; + let accounts: SignerWithAddress[]; + let DPS: DeepSquare; + let agentDPS: ERC20Agent; + let votingDelegation: VotingDelegation; + + beforeEach(async () => { + ({ owner, accounts, DPS, agentDPS } = await setup()); + ({ votingDelegation } = await setupVoting(owner, DPS)); + }); + + describe('constructor', () => { + it('should revert if the DPS contract is the zero address', async () => { + await expect(new VotingDelegation__factory(owner).deploy(ZERO_ADDRESS)).to.be.revertedWith( + 'VotingDelegation: DPS address is zero.', + ); + }); + }); + + describe('delegate', () => { + it('should throw if delegate has less than 25k DPS', async () => { + await expect(votingDelegation.connect(accounts[0]).delegate(accounts[1].address, 'foo')).to.revertedWith( + 'VotingDelegation: Proxy has not enough DPS.', + ); + }); + it('should register delegation', async () => { + await agentDPS.transfer(accounts[1], 25000, 18); + await votingDelegation.connect(accounts[0]).delegate(accounts[1].address, 'foo'); + expect(await votingDelegation.delegators(accounts[1].address, 'foo')).to.deep.equals([accounts[0].address]); + expect(await votingDelegation.representative(accounts[0].address, 'foo')).to.equals(accounts[1].address); + }); + it('should change delegation', async () => { + await agentDPS.transfer(accounts[1], 25000, 18); + await votingDelegation.connect(accounts[0]).delegate(accounts[1].address, 'foo'); + await agentDPS.transfer(accounts[2], 25000, 18); + await votingDelegation.connect(accounts[0]).delegate(accounts[2].address, 'foo'); + expect(await votingDelegation.delegators(accounts[1].address, 'foo')).to.deep.equals([]); + expect(await votingDelegation.delegators(accounts[2].address, 'foo')).to.deep.equals([accounts[0].address]); + expect(await votingDelegation.representative(accounts[0].address, 'foo')).to.equals(accounts[2].address); + }); + it('should remove delegation', async () => { + await agentDPS.transfer(accounts[1], 25000, 18); + await votingDelegation.connect(accounts[0]).delegate(accounts[1].address, 'foo'); + await votingDelegation.connect(accounts[0]).delegate(ZERO_ADDRESS, 'foo'); + expect(await votingDelegation.delegators(accounts[1].address, 'foo')).to.deep.equals([]); + expect(await votingDelegation.representative(accounts[0].address, 'foo')).to.equals(ZERO_ADDRESS); + }); + }); + + describe('proxyAmount', () => { + it('should returns total proxy vote power', async () => { + await agentDPS.transfer(accounts[0], 55555, 18); + await agentDPS.transfer(accounts[1], 25000, 18); + await votingDelegation.connect(accounts[0]).delegate(accounts[1].address, 'foo'); + expect(await votingDelegation.delegationAmount(accounts[1].address, 'foo')).to.equals(parseUnits('55555', 18)); + }); + }); + + describe('hasDelegated', () => { + it('should returns if a voter has delegated his vote on specified tag', async () => { + await agentDPS.transfer(accounts[0], 25000, 18); + await agentDPS.transfer(accounts[1], 25000, 18); + await votingDelegation.connect(accounts[0]).delegate(accounts[1].address, 'foo'); + expect(await votingDelegation.hasDelegated(accounts[0].address, 'foo')).to.equals(true); + expect(await votingDelegation.hasDelegated(accounts[1].address, 'foo')).to.equals(false); + }); + }); +}); diff --git a/test/VotingProxy.spec.ts b/test/VotingProxy.spec.ts deleted file mode 100644 index 15b7066..0000000 --- a/test/VotingProxy.spec.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { expect } from 'chai'; -import { BigNumber } from '@ethersproject/bignumber'; -import { parseUnits } from '@ethersproject/units'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; -import { ZERO_ADDRESS } from '../lib/constants'; -import { BallotTagManager, DeepSquare, ExposedVotingProxy, ExposedVotingProxy__factory } from '../typings'; -import { ERC20Agent } from './testing/ERC20Agent'; -import setup from './testing/setup'; -import setupVoting from './testing/setupVoting'; - -describe('Voting proxy', async () => { - let owner: SignerWithAddress; - let accounts: SignerWithAddress[]; - let DPS: DeepSquare; - let agentDPS: ERC20Agent; - let ballotTagManager: BallotTagManager; - let votingProxy: ExposedVotingProxy; - - beforeEach(async () => { - ({ owner, accounts, DPS, agentDPS } = await setup()); - ({ ballotTagManager, votingProxy } = await setupVoting(owner, DPS)); - }); - - describe('constructor', () => { - it('should revert if the DPS contract is the zero address', async () => { - await expect( - new ExposedVotingProxy__factory(owner).deploy(ZERO_ADDRESS, ballotTagManager.address), - ).to.be.revertedWith('VotingProxy: DPS address is zero.'); - }); - it('should revert if the Ballot tag manager is the zero address', async () => { - await expect(new ExposedVotingProxy__factory(owner).deploy(DPS.address, ZERO_ADDRESS)).to.be.revertedWith( - 'VotingProxy: Ballot tag manager address is zero.', - ); - }); - }); - - describe('grantProxy', () => { - it('should throw if tag does not exist', async () => { - await expect(votingProxy.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0))).to.revertedWith( - 'VotingProxy: Tag index is too high', - ); - }); - it('should throw if delegate has less than 25k DPS', async () => { - await ballotTagManager.addTag('foo'); - await expect(votingProxy.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0))).to.revertedWith( - 'VotingProxy: Proxy has not enough DPS.', - ); - }); - it('should register delegation', async () => { - await ballotTagManager.addTag('foo'); - await agentDPS.transfer(accounts[1], 25000, 18); - await votingProxy.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0)); - expect(await votingProxy._delegates(accounts[1].address, BigNumber.from(0))).to.deep.equals([ - accounts[0].address, - ]); - expect(await votingProxy._proxyVoters(accounts[0].address, BigNumber.from(0))).to.equals(accounts[1].address); - }); - it('should change delegation', async () => { - await ballotTagManager.addTag('foo'); - await agentDPS.transfer(accounts[1], 25000, 18); - await votingProxy.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0)); - await agentDPS.transfer(accounts[2], 25000, 18); - await votingProxy.connect(accounts[0]).grantProxy(accounts[2].address, BigNumber.from(0)); - expect(await votingProxy._delegates(accounts[1].address, BigNumber.from(0))).to.deep.equals([]); - expect(await votingProxy._delegates(accounts[2].address, BigNumber.from(0))).to.deep.equals([ - accounts[0].address, - ]); - expect(await votingProxy._proxyVoters(accounts[0].address, BigNumber.from(0))).to.equals(accounts[2].address); - }); - it('should remove delegation', async () => { - await ballotTagManager.addTag('foo'); - await agentDPS.transfer(accounts[1], 25000, 18); - await votingProxy.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0)); - await votingProxy.connect(accounts[0]).grantProxy(ZERO_ADDRESS, BigNumber.from(0)); - expect(await votingProxy._delegates(accounts[1].address, BigNumber.from(0))).to.deep.equals([]); - expect(await votingProxy._proxyVoters(accounts[0].address, BigNumber.from(0))).to.equals(ZERO_ADDRESS); - }); - }); - - describe('proxyAmount', () => { - it('should throw if tag does not exist', async () => { - await expect(votingProxy.proxyAmount(accounts[1].address, BigNumber.from(0))).to.revertedWith( - 'VotingProxy: Tag index is too high', - ); - }); - it('should returns total proxy vote power', async () => { - await ballotTagManager.addTag('foo'); - await agentDPS.transfer(accounts[0], 55555, 18); - await agentDPS.transfer(accounts[1], 25000, 18); - await votingProxy.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0)); - expect(await votingProxy.proxyAmount(accounts[1].address, BigNumber.from(0))).to.equals(parseUnits('55555', 18)); - }); - }); - - describe('hasDelegated', () => { - it('should returns if a voter has delegated his vote on specified tag', async () => { - await ballotTagManager.addTag('foo'); - await agentDPS.transfer(accounts[0], 25000, 18); - await agentDPS.transfer(accounts[1], 25000, 18); - await votingProxy.connect(accounts[0]).grantProxy(accounts[1].address, BigNumber.from(0)); - expect(await votingProxy.hasDelegated(accounts[0].address, BigNumber.from(0))).to.equals(true); - expect(await votingProxy.hasDelegated(accounts[1].address, BigNumber.from(0))).to.equals(false); - }); - }); -}); diff --git a/test/testing/setupVoting.ts b/test/testing/setupVoting.ts index 49814e2..d989576 100644 --- a/test/testing/setupVoting.ts +++ b/test/testing/setupVoting.ts @@ -4,32 +4,24 @@ import { Ballot__factory, BallotFactory, BallotFactory__factory, - BallotTagManager, - BallotTagManager__factory, DeepSquare, - ExposedVotingProxy, - ExposedVotingProxy__factory, + VotingDelegation, + VotingDelegation__factory, } from '../../typings'; interface SetupVotingOutput { - ballotTagManager: BallotTagManager; - votingProxy: ExposedVotingProxy; + votingDelegation: VotingDelegation; ballotImplementation: Ballot; ballotFactory: BallotFactory; } export default async function setupVoting(owner: SignerWithAddress, DPS: DeepSquare): Promise { - const ballotTagManager = await new BallotTagManager__factory(owner).deploy(); - const votingProxy = await new ExposedVotingProxy__factory(owner).deploy(DPS.address, ballotTagManager.address); - const ballotImplementation = await new Ballot__factory(owner).deploy(DPS.address, votingProxy.address); - const ballotFactory = await new BallotFactory__factory(owner).deploy( - ballotImplementation.address, - ballotTagManager.address, - ); + const votingDelegation = await new VotingDelegation__factory(owner).deploy(DPS.address); + const ballotImplementation = await new Ballot__factory(owner).deploy(DPS.address, votingDelegation.address); + const ballotFactory = await new BallotFactory__factory(owner).deploy(ballotImplementation.address); return { - ballotTagManager, - votingProxy, + votingDelegation, ballotImplementation, ballotFactory, }; diff --git a/typings/contracts/Ballot.ts b/typings/contracts/Ballot.ts index 9c41067..2ac09f1 100644 --- a/typings/contracts/Ballot.ts +++ b/typings/contracts/Ballot.ts @@ -30,17 +30,17 @@ export interface BallotInterface extends utils.Interface { functions: { "DPS()": FunctionFragment; "choices(uint256)": FunctionFragment; - "closeBallot()": FunctionFragment; + "close()": FunctionFragment; "closed()": FunctionFragment; "getChoices()": FunctionFragment; "getResults()": FunctionFragment; - "init(string,uint32,string[])": FunctionFragment; + "init(string,string,string[])": FunctionFragment; "owner()": FunctionFragment; "proxy()": FunctionFragment; "renounceOwnership()": FunctionFragment; "resultStorage(uint256)": FunctionFragment; "subject()": FunctionFragment; - "tagIndex()": FunctionFragment; + "topic()": FunctionFragment; "transferOwnership(address)": FunctionFragment; "vote(uint32)": FunctionFragment; }; @@ -49,7 +49,7 @@ export interface BallotInterface extends utils.Interface { nameOrSignatureOrTopic: | "DPS" | "choices" - | "closeBallot" + | "close" | "closed" | "getChoices" | "getResults" @@ -59,7 +59,7 @@ export interface BallotInterface extends utils.Interface { | "renounceOwnership" | "resultStorage" | "subject" - | "tagIndex" + | "topic" | "transferOwnership" | "vote" ): FunctionFragment; @@ -69,10 +69,7 @@ export interface BallotInterface extends utils.Interface { functionFragment: "choices", values: [BigNumberish] ): string; - encodeFunctionData( - functionFragment: "closeBallot", - values?: undefined - ): string; + encodeFunctionData(functionFragment: "close", values?: undefined): string; encodeFunctionData(functionFragment: "closed", values?: undefined): string; encodeFunctionData( functionFragment: "getChoices", @@ -84,7 +81,7 @@ export interface BallotInterface extends utils.Interface { ): string; encodeFunctionData( functionFragment: "init", - values: [string, BigNumberish, string[]] + values: [string, string, string[]] ): string; encodeFunctionData(functionFragment: "owner", values?: undefined): string; encodeFunctionData(functionFragment: "proxy", values?: undefined): string; @@ -97,7 +94,7 @@ export interface BallotInterface extends utils.Interface { values: [BigNumberish] ): string; encodeFunctionData(functionFragment: "subject", values?: undefined): string; - encodeFunctionData(functionFragment: "tagIndex", values?: undefined): string; + encodeFunctionData(functionFragment: "topic", values?: undefined): string; encodeFunctionData( functionFragment: "transferOwnership", values: [string] @@ -106,10 +103,7 @@ export interface BallotInterface extends utils.Interface { decodeFunctionResult(functionFragment: "DPS", data: BytesLike): Result; decodeFunctionResult(functionFragment: "choices", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "closeBallot", - data: BytesLike - ): Result; + decodeFunctionResult(functionFragment: "close", data: BytesLike): Result; decodeFunctionResult(functionFragment: "closed", data: BytesLike): Result; decodeFunctionResult(functionFragment: "getChoices", data: BytesLike): Result; decodeFunctionResult(functionFragment: "getResults", data: BytesLike): Result; @@ -125,7 +119,7 @@ export interface BallotInterface extends utils.Interface { data: BytesLike ): Result; decodeFunctionResult(functionFragment: "subject", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "tagIndex", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "topic", data: BytesLike): Result; decodeFunctionResult( functionFragment: "transferOwnership", data: BytesLike @@ -182,7 +176,7 @@ export interface Ballot extends BaseContract { choices(arg0: BigNumberish, overrides?: CallOverrides): Promise<[string]>; - closeBallot( + close( overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -194,7 +188,7 @@ export interface Ballot extends BaseContract { init( _subject: string, - _tagIndex: BigNumberish, + _topic: string, _choices: string[], overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -214,7 +208,7 @@ export interface Ballot extends BaseContract { subject(overrides?: CallOverrides): Promise<[string]>; - tagIndex(overrides?: CallOverrides): Promise<[number]>; + topic(overrides?: CallOverrides): Promise<[string]>; transferOwnership( newOwner: string, @@ -231,7 +225,7 @@ export interface Ballot extends BaseContract { choices(arg0: BigNumberish, overrides?: CallOverrides): Promise; - closeBallot( + close( overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -243,7 +237,7 @@ export interface Ballot extends BaseContract { init( _subject: string, - _tagIndex: BigNumberish, + _topic: string, _choices: string[], overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -263,7 +257,7 @@ export interface Ballot extends BaseContract { subject(overrides?: CallOverrides): Promise; - tagIndex(overrides?: CallOverrides): Promise; + topic(overrides?: CallOverrides): Promise; transferOwnership( newOwner: string, @@ -280,7 +274,7 @@ export interface Ballot extends BaseContract { choices(arg0: BigNumberish, overrides?: CallOverrides): Promise; - closeBallot(overrides?: CallOverrides): Promise; + close(overrides?: CallOverrides): Promise; closed(overrides?: CallOverrides): Promise; @@ -290,7 +284,7 @@ export interface Ballot extends BaseContract { init( _subject: string, - _tagIndex: BigNumberish, + _topic: string, _choices: string[], overrides?: CallOverrides ): Promise; @@ -308,7 +302,7 @@ export interface Ballot extends BaseContract { subject(overrides?: CallOverrides): Promise; - tagIndex(overrides?: CallOverrides): Promise; + topic(overrides?: CallOverrides): Promise; transferOwnership( newOwner: string, @@ -334,7 +328,7 @@ export interface Ballot extends BaseContract { choices(arg0: BigNumberish, overrides?: CallOverrides): Promise; - closeBallot( + close( overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -346,7 +340,7 @@ export interface Ballot extends BaseContract { init( _subject: string, - _tagIndex: BigNumberish, + _topic: string, _choices: string[], overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -366,7 +360,7 @@ export interface Ballot extends BaseContract { subject(overrides?: CallOverrides): Promise; - tagIndex(overrides?: CallOverrides): Promise; + topic(overrides?: CallOverrides): Promise; transferOwnership( newOwner: string, @@ -387,7 +381,7 @@ export interface Ballot extends BaseContract { overrides?: CallOverrides ): Promise; - closeBallot( + close( overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -399,7 +393,7 @@ export interface Ballot extends BaseContract { init( _subject: string, - _tagIndex: BigNumberish, + _topic: string, _choices: string[], overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -419,7 +413,7 @@ export interface Ballot extends BaseContract { subject(overrides?: CallOverrides): Promise; - tagIndex(overrides?: CallOverrides): Promise; + topic(overrides?: CallOverrides): Promise; transferOwnership( newOwner: string, diff --git a/typings/contracts/BallotTagManager.ts b/typings/contracts/BallotTagManager.ts deleted file mode 100644 index e07758d..0000000 --- a/typings/contracts/BallotTagManager.ts +++ /dev/null @@ -1,236 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../common"; - -export interface BallotTagManagerInterface extends utils.Interface { - functions: { - "addTag(string)": FunctionFragment; - "getTags()": FunctionFragment; - "owner()": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "tags(uint256)": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "addTag" - | "getTags" - | "owner" - | "renounceOwnership" - | "tags" - | "transferOwnership" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "addTag", values: [string]): string; - encodeFunctionData(functionFragment: "getTags", values?: undefined): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "tags", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - - decodeFunctionResult(functionFragment: "addTag", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getTags", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "tags", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - - events: { - "OwnershipTransferred(address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; -} - -export interface OwnershipTransferredEventObject { - previousOwner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent< - [string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; - -export interface BallotTagManager extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: BallotTagManagerInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - addTag( - name: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getTags(overrides?: CallOverrides): Promise<[string[]]>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tags(arg0: BigNumberish, overrides?: CallOverrides): Promise<[string]>; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - addTag( - name: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getTags(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tags(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - addTag(name: string, overrides?: CallOverrides): Promise; - - getTags(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - tags(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "OwnershipTransferred(address,address)"( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - }; - - estimateGas: { - addTag( - name: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getTags(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tags(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - addTag( - name: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getTags(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tags( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/typings/contracts/testing/ExposedVotingProxy.ts b/typings/contracts/VotingDelegation.ts similarity index 74% rename from typings/contracts/testing/ExposedVotingProxy.ts rename to typings/contracts/VotingDelegation.ts index ac61eb7..0b868de 100644 --- a/typings/contracts/testing/ExposedVotingProxy.ts +++ b/typings/contracts/VotingDelegation.ts @@ -4,7 +4,6 @@ import type { BaseContract, BigNumber, - BigNumberish, BytesLike, CallOverrides, ContractTransaction, @@ -24,103 +23,93 @@ import type { TypedEvent, TypedListener, OnEvent, -} from "../../common"; +} from "../common"; -export interface ExposedVotingProxyInterface extends utils.Interface { +export interface VotingDelegationInterface extends utils.Interface { functions: { "DPS()": FunctionFragment; - "_delegates(address,uint32)": FunctionFragment; - "_proxyVoters(address,uint32)": FunctionFragment; "ballotFactory()": FunctionFragment; - "ballotTagManager()": FunctionFragment; - "grantProxy(address,uint32)": FunctionFragment; - "hasDelegated(address,uint32)": FunctionFragment; + "delegate(address,string)": FunctionFragment; + "delegationAmount(address,string)": FunctionFragment; + "delegators(address,string)": FunctionFragment; + "hasDelegated(address,string)": FunctionFragment; "owner()": FunctionFragment; - "proxyAmount(address,uint32)": FunctionFragment; "renounceOwnership()": FunctionFragment; + "representative(address,string)": FunctionFragment; "transferOwnership(address)": FunctionFragment; }; getFunction( nameOrSignatureOrTopic: | "DPS" - | "_delegates" - | "_proxyVoters" | "ballotFactory" - | "ballotTagManager" - | "grantProxy" + | "delegate" + | "delegationAmount" + | "delegators" | "hasDelegated" | "owner" - | "proxyAmount" | "renounceOwnership" + | "representative" | "transferOwnership" ): FunctionFragment; encodeFunctionData(functionFragment: "DPS", values?: undefined): string; - encodeFunctionData( - functionFragment: "_delegates", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "_proxyVoters", - values: [string, BigNumberish] - ): string; encodeFunctionData( functionFragment: "ballotFactory", values?: undefined ): string; encodeFunctionData( - functionFragment: "ballotTagManager", - values?: undefined + functionFragment: "delegate", + values: [string, string] ): string; encodeFunctionData( - functionFragment: "grantProxy", - values: [string, BigNumberish] + functionFragment: "delegationAmount", + values: [string, string] ): string; encodeFunctionData( - functionFragment: "hasDelegated", - values: [string, BigNumberish] + functionFragment: "delegators", + values: [string, string] ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; encodeFunctionData( - functionFragment: "proxyAmount", - values: [string, BigNumberish] + functionFragment: "hasDelegated", + values: [string, string] ): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; encodeFunctionData( functionFragment: "renounceOwnership", values?: undefined ): string; + encodeFunctionData( + functionFragment: "representative", + values: [string, string] + ): string; encodeFunctionData( functionFragment: "transferOwnership", values: [string] ): string; decodeFunctionResult(functionFragment: "DPS", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "_delegates", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_proxyVoters", - data: BytesLike - ): Result; decodeFunctionResult( functionFragment: "ballotFactory", data: BytesLike ): Result; + decodeFunctionResult(functionFragment: "delegate", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "ballotTagManager", + functionFragment: "delegationAmount", data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "grantProxy", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "delegators", data: BytesLike): Result; decodeFunctionResult( functionFragment: "hasDelegated", data: BytesLike ): Result; decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "proxyAmount", + functionFragment: "renounceOwnership", data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "renounceOwnership", + functionFragment: "representative", data: BytesLike ): Result; decodeFunctionResult( @@ -147,12 +136,12 @@ export type OwnershipTransferredEvent = TypedEvent< export type OwnershipTransferredEventFilter = TypedEventFilter; -export interface ExposedVotingProxy extends BaseContract { +export interface VotingDelegation extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; attach(addressOrName: string): this; deployed(): Promise; - interface: ExposedVotingProxyInterface; + interface: VotingDelegationInterface; queryFilter( event: TypedEventFilter, @@ -176,46 +165,44 @@ export interface ExposedVotingProxy extends BaseContract { functions: { DPS(overrides?: CallOverrides): Promise<[string]>; - _delegates( - to: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise<[string[]]>; - - _proxyVoters( - from: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - ballotFactory(overrides?: CallOverrides): Promise<[string]>; - ballotTagManager(overrides?: CallOverrides): Promise<[string]>; - - grantProxy( + delegate( to: string, - tagIndex: BigNumberish, + topic: string, overrides?: Overrides & { from?: string | Promise } ): Promise; - hasDelegated( + delegationAmount( voter: string, - tagIndex: BigNumberish, + topic: string, overrides?: CallOverrides - ): Promise<[boolean]>; + ): Promise<[BigNumber]>; - owner(overrides?: CallOverrides): Promise<[string]>; + delegators( + to: string, + topic: string, + overrides?: CallOverrides + ): Promise<[string[]]>; - proxyAmount( + hasDelegated( voter: string, - tagIndex: BigNumberish, + topic: string, overrides?: CallOverrides - ): Promise<[BigNumber]>; + ): Promise<[boolean]>; + + owner(overrides?: CallOverrides): Promise<[string]>; renounceOwnership( overrides?: Overrides & { from?: string | Promise } ): Promise; + representative( + from: string, + topic: string, + overrides?: CallOverrides + ): Promise<[string]>; + transferOwnership( newOwner: string, overrides?: Overrides & { from?: string | Promise } @@ -224,46 +211,44 @@ export interface ExposedVotingProxy extends BaseContract { DPS(overrides?: CallOverrides): Promise; - _delegates( - to: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - _proxyVoters( - from: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - ballotFactory(overrides?: CallOverrides): Promise; - ballotTagManager(overrides?: CallOverrides): Promise; - - grantProxy( + delegate( to: string, - tagIndex: BigNumberish, + topic: string, overrides?: Overrides & { from?: string | Promise } ): Promise; - hasDelegated( + delegationAmount( voter: string, - tagIndex: BigNumberish, + topic: string, overrides?: CallOverrides - ): Promise; + ): Promise; - owner(overrides?: CallOverrides): Promise; + delegators( + to: string, + topic: string, + overrides?: CallOverrides + ): Promise; - proxyAmount( + hasDelegated( voter: string, - tagIndex: BigNumberish, + topic: string, overrides?: CallOverrides - ): Promise; + ): Promise; + + owner(overrides?: CallOverrides): Promise; renounceOwnership( overrides?: Overrides & { from?: string | Promise } ): Promise; + representative( + from: string, + topic: string, + overrides?: CallOverrides + ): Promise; + transferOwnership( newOwner: string, overrides?: Overrides & { from?: string | Promise } @@ -272,44 +257,42 @@ export interface ExposedVotingProxy extends BaseContract { callStatic: { DPS(overrides?: CallOverrides): Promise; - _delegates( + ballotFactory(overrides?: CallOverrides): Promise; + + delegate( to: string, - tagIndex: BigNumberish, + topic: string, overrides?: CallOverrides - ): Promise; + ): Promise; - _proxyVoters( - from: string, - tagIndex: BigNumberish, + delegationAmount( + voter: string, + topic: string, overrides?: CallOverrides - ): Promise; - - ballotFactory(overrides?: CallOverrides): Promise; - - ballotTagManager(overrides?: CallOverrides): Promise; + ): Promise; - grantProxy( + delegators( to: string, - tagIndex: BigNumberish, + topic: string, overrides?: CallOverrides - ): Promise; + ): Promise; hasDelegated( voter: string, - tagIndex: BigNumberish, + topic: string, overrides?: CallOverrides ): Promise; owner(overrides?: CallOverrides): Promise; - proxyAmount( - voter: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - renounceOwnership(overrides?: CallOverrides): Promise; + representative( + from: string, + topic: string, + overrides?: CallOverrides + ): Promise; + transferOwnership( newOwner: string, overrides?: CallOverrides @@ -330,46 +313,44 @@ export interface ExposedVotingProxy extends BaseContract { estimateGas: { DPS(overrides?: CallOverrides): Promise; - _delegates( + ballotFactory(overrides?: CallOverrides): Promise; + + delegate( to: string, - tagIndex: BigNumberish, - overrides?: CallOverrides + topic: string, + overrides?: Overrides & { from?: string | Promise } ): Promise; - _proxyVoters( - from: string, - tagIndex: BigNumberish, + delegationAmount( + voter: string, + topic: string, overrides?: CallOverrides ): Promise; - ballotFactory(overrides?: CallOverrides): Promise; - - ballotTagManager(overrides?: CallOverrides): Promise; - - grantProxy( + delegators( to: string, - tagIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + topic: string, + overrides?: CallOverrides ): Promise; hasDelegated( voter: string, - tagIndex: BigNumberish, + topic: string, overrides?: CallOverrides ): Promise; owner(overrides?: CallOverrides): Promise; - proxyAmount( - voter: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - renounceOwnership( overrides?: Overrides & { from?: string | Promise } ): Promise; + representative( + from: string, + topic: string, + overrides?: CallOverrides + ): Promise; + transferOwnership( newOwner: string, overrides?: Overrides & { from?: string | Promise } @@ -379,46 +360,44 @@ export interface ExposedVotingProxy extends BaseContract { populateTransaction: { DPS(overrides?: CallOverrides): Promise; - _delegates( + ballotFactory(overrides?: CallOverrides): Promise; + + delegate( to: string, - tagIndex: BigNumberish, - overrides?: CallOverrides + topic: string, + overrides?: Overrides & { from?: string | Promise } ): Promise; - _proxyVoters( - from: string, - tagIndex: BigNumberish, + delegationAmount( + voter: string, + topic: string, overrides?: CallOverrides ): Promise; - ballotFactory(overrides?: CallOverrides): Promise; - - ballotTagManager(overrides?: CallOverrides): Promise; - - grantProxy( + delegators( to: string, - tagIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + topic: string, + overrides?: CallOverrides ): Promise; hasDelegated( voter: string, - tagIndex: BigNumberish, + topic: string, overrides?: CallOverrides ): Promise; owner(overrides?: CallOverrides): Promise; - proxyAmount( - voter: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - renounceOwnership( overrides?: Overrides & { from?: string | Promise } ): Promise; + representative( + from: string, + topic: string, + overrides?: CallOverrides + ): Promise; + transferOwnership( newOwner: string, overrides?: Overrides & { from?: string | Promise } diff --git a/typings/contracts/VotingProxy.ts b/typings/contracts/VotingProxy.ts deleted file mode 100644 index 4831f44..0000000 --- a/typings/contracts/VotingProxy.ts +++ /dev/null @@ -1,350 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../common"; - -export interface VotingProxyInterface extends utils.Interface { - functions: { - "DPS()": FunctionFragment; - "ballotFactory()": FunctionFragment; - "ballotTagManager()": FunctionFragment; - "grantProxy(address,uint32)": FunctionFragment; - "hasDelegated(address,uint32)": FunctionFragment; - "owner()": FunctionFragment; - "proxyAmount(address,uint32)": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "DPS" - | "ballotFactory" - | "ballotTagManager" - | "grantProxy" - | "hasDelegated" - | "owner" - | "proxyAmount" - | "renounceOwnership" - | "transferOwnership" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "DPS", values?: undefined): string; - encodeFunctionData( - functionFragment: "ballotFactory", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "ballotTagManager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "grantProxy", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "hasDelegated", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "proxyAmount", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - - decodeFunctionResult(functionFragment: "DPS", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "ballotFactory", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "ballotTagManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "grantProxy", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "hasDelegated", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "proxyAmount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - - events: { - "OwnershipTransferred(address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; -} - -export interface OwnershipTransferredEventObject { - previousOwner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent< - [string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; - -export interface VotingProxy extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: VotingProxyInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - DPS(overrides?: CallOverrides): Promise<[string]>; - - ballotFactory(overrides?: CallOverrides): Promise<[string]>; - - ballotTagManager(overrides?: CallOverrides): Promise<[string]>; - - grantProxy( - to: string, - tagIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - hasDelegated( - voter: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - proxyAmount( - voter: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - DPS(overrides?: CallOverrides): Promise; - - ballotFactory(overrides?: CallOverrides): Promise; - - ballotTagManager(overrides?: CallOverrides): Promise; - - grantProxy( - to: string, - tagIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - hasDelegated( - voter: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - proxyAmount( - voter: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - DPS(overrides?: CallOverrides): Promise; - - ballotFactory(overrides?: CallOverrides): Promise; - - ballotTagManager(overrides?: CallOverrides): Promise; - - grantProxy( - to: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasDelegated( - voter: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - proxyAmount( - voter: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "OwnershipTransferred(address,address)"( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - }; - - estimateGas: { - DPS(overrides?: CallOverrides): Promise; - - ballotFactory(overrides?: CallOverrides): Promise; - - ballotTagManager(overrides?: CallOverrides): Promise; - - grantProxy( - to: string, - tagIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - hasDelegated( - voter: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - proxyAmount( - voter: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - DPS(overrides?: CallOverrides): Promise; - - ballotFactory(overrides?: CallOverrides): Promise; - - ballotTagManager(overrides?: CallOverrides): Promise; - - grantProxy( - to: string, - tagIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - hasDelegated( - voter: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - proxyAmount( - voter: string, - tagIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/typings/contracts/factories/BallotFactory.ts b/typings/contracts/factories/BallotFactory.ts index 8d6d7a3..620fb5e 100644 --- a/typings/contracts/factories/BallotFactory.ts +++ b/typings/contracts/factories/BallotFactory.ts @@ -29,8 +29,7 @@ import type { export interface BallotFactoryInterface extends utils.Interface { functions: { "ballotAddresses(uint256)": FunctionFragment; - "ballotTagManager()": FunctionFragment; - "createBallot(string,uint32,string[])": FunctionFragment; + "createBallot(string,string,string[])": FunctionFragment; "getBallots()": FunctionFragment; "implementationAddress()": FunctionFragment; "owner()": FunctionFragment; @@ -42,7 +41,6 @@ export interface BallotFactoryInterface extends utils.Interface { getFunction( nameOrSignatureOrTopic: | "ballotAddresses" - | "ballotTagManager" | "createBallot" | "getBallots" | "implementationAddress" @@ -56,13 +54,9 @@ export interface BallotFactoryInterface extends utils.Interface { functionFragment: "ballotAddresses", values: [BigNumberish] ): string; - encodeFunctionData( - functionFragment: "ballotTagManager", - values?: undefined - ): string; encodeFunctionData( functionFragment: "createBallot", - values: [string, BigNumberish, string[]] + values: [string, string, string[]] ): string; encodeFunctionData( functionFragment: "getBallots", @@ -90,10 +84,6 @@ export interface BallotFactoryInterface extends utils.Interface { functionFragment: "ballotAddresses", data: BytesLike ): Result; - decodeFunctionResult( - functionFragment: "ballotTagManager", - data: BytesLike - ): Result; decodeFunctionResult( functionFragment: "createBallot", data: BytesLike @@ -177,11 +167,9 @@ export interface BallotFactory extends BaseContract { overrides?: CallOverrides ): Promise<[string]>; - ballotTagManager(overrides?: CallOverrides): Promise<[string]>; - createBallot( subject: string, - tagIndex: BigNumberish, + topic: string, _choices: string[], overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -212,11 +200,9 @@ export interface BallotFactory extends BaseContract { overrides?: CallOverrides ): Promise; - ballotTagManager(overrides?: CallOverrides): Promise; - createBallot( subject: string, - tagIndex: BigNumberish, + topic: string, _choices: string[], overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -247,11 +233,9 @@ export interface BallotFactory extends BaseContract { overrides?: CallOverrides ): Promise; - ballotTagManager(overrides?: CallOverrides): Promise; - createBallot( subject: string, - tagIndex: BigNumberish, + topic: string, _choices: string[], overrides?: CallOverrides ): Promise; @@ -295,11 +279,9 @@ export interface BallotFactory extends BaseContract { overrides?: CallOverrides ): Promise; - ballotTagManager(overrides?: CallOverrides): Promise; - createBallot( subject: string, - tagIndex: BigNumberish, + topic: string, _choices: string[], overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -331,11 +313,9 @@ export interface BallotFactory extends BaseContract { overrides?: CallOverrides ): Promise; - ballotTagManager(overrides?: CallOverrides): Promise; - createBallot( subject: string, - tagIndex: BigNumberish, + topic: string, _choices: string[], overrides?: Overrides & { from?: string | Promise } ): Promise; diff --git a/typings/contracts/testing/ExposedBallot.ts b/typings/contracts/testing/ExposedBallot.ts index acc7b69..0503e31 100644 --- a/typings/contracts/testing/ExposedBallot.ts +++ b/typings/contracts/testing/ExposedBallot.ts @@ -49,17 +49,17 @@ export interface ExposedBallotInterface extends utils.Interface { "DPS()": FunctionFragment; "_results()": FunctionFragment; "choices(uint256)": FunctionFragment; - "closeBallot()": FunctionFragment; + "close()": FunctionFragment; "closed()": FunctionFragment; "getChoices()": FunctionFragment; "getResults()": FunctionFragment; - "init(string,uint32,string[])": FunctionFragment; + "init(string,string,string[])": FunctionFragment; "owner()": FunctionFragment; "proxy()": FunctionFragment; "renounceOwnership()": FunctionFragment; "resultStorage(uint256)": FunctionFragment; "subject()": FunctionFragment; - "tagIndex()": FunctionFragment; + "topic()": FunctionFragment; "transferOwnership(address)": FunctionFragment; "vote(uint32)": FunctionFragment; }; @@ -69,7 +69,7 @@ export interface ExposedBallotInterface extends utils.Interface { | "DPS" | "_results" | "choices" - | "closeBallot" + | "close" | "closed" | "getChoices" | "getResults" @@ -79,7 +79,7 @@ export interface ExposedBallotInterface extends utils.Interface { | "renounceOwnership" | "resultStorage" | "subject" - | "tagIndex" + | "topic" | "transferOwnership" | "vote" ): FunctionFragment; @@ -90,10 +90,7 @@ export interface ExposedBallotInterface extends utils.Interface { functionFragment: "choices", values: [BigNumberish] ): string; - encodeFunctionData( - functionFragment: "closeBallot", - values?: undefined - ): string; + encodeFunctionData(functionFragment: "close", values?: undefined): string; encodeFunctionData(functionFragment: "closed", values?: undefined): string; encodeFunctionData( functionFragment: "getChoices", @@ -105,7 +102,7 @@ export interface ExposedBallotInterface extends utils.Interface { ): string; encodeFunctionData( functionFragment: "init", - values: [string, BigNumberish, string[]] + values: [string, string, string[]] ): string; encodeFunctionData(functionFragment: "owner", values?: undefined): string; encodeFunctionData(functionFragment: "proxy", values?: undefined): string; @@ -118,7 +115,7 @@ export interface ExposedBallotInterface extends utils.Interface { values: [BigNumberish] ): string; encodeFunctionData(functionFragment: "subject", values?: undefined): string; - encodeFunctionData(functionFragment: "tagIndex", values?: undefined): string; + encodeFunctionData(functionFragment: "topic", values?: undefined): string; encodeFunctionData( functionFragment: "transferOwnership", values: [string] @@ -128,10 +125,7 @@ export interface ExposedBallotInterface extends utils.Interface { decodeFunctionResult(functionFragment: "DPS", data: BytesLike): Result; decodeFunctionResult(functionFragment: "_results", data: BytesLike): Result; decodeFunctionResult(functionFragment: "choices", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "closeBallot", - data: BytesLike - ): Result; + decodeFunctionResult(functionFragment: "close", data: BytesLike): Result; decodeFunctionResult(functionFragment: "closed", data: BytesLike): Result; decodeFunctionResult(functionFragment: "getChoices", data: BytesLike): Result; decodeFunctionResult(functionFragment: "getResults", data: BytesLike): Result; @@ -147,7 +141,7 @@ export interface ExposedBallotInterface extends utils.Interface { data: BytesLike ): Result; decodeFunctionResult(functionFragment: "subject", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "tagIndex", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "topic", data: BytesLike): Result; decodeFunctionResult( functionFragment: "transferOwnership", data: BytesLike @@ -208,7 +202,7 @@ export interface ExposedBallot extends BaseContract { choices(arg0: BigNumberish, overrides?: CallOverrides): Promise<[string]>; - closeBallot( + close( overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -220,7 +214,7 @@ export interface ExposedBallot extends BaseContract { init( _subject: string, - _tagIndex: BigNumberish, + _topic: string, _choices: string[], overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -240,7 +234,7 @@ export interface ExposedBallot extends BaseContract { subject(overrides?: CallOverrides): Promise<[string]>; - tagIndex(overrides?: CallOverrides): Promise<[number]>; + topic(overrides?: CallOverrides): Promise<[string]>; transferOwnership( newOwner: string, @@ -261,7 +255,7 @@ export interface ExposedBallot extends BaseContract { choices(arg0: BigNumberish, overrides?: CallOverrides): Promise; - closeBallot( + close( overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -273,7 +267,7 @@ export interface ExposedBallot extends BaseContract { init( _subject: string, - _tagIndex: BigNumberish, + _topic: string, _choices: string[], overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -293,7 +287,7 @@ export interface ExposedBallot extends BaseContract { subject(overrides?: CallOverrides): Promise; - tagIndex(overrides?: CallOverrides): Promise; + topic(overrides?: CallOverrides): Promise; transferOwnership( newOwner: string, @@ -314,7 +308,7 @@ export interface ExposedBallot extends BaseContract { choices(arg0: BigNumberish, overrides?: CallOverrides): Promise; - closeBallot(overrides?: CallOverrides): Promise; + close(overrides?: CallOverrides): Promise; closed(overrides?: CallOverrides): Promise; @@ -324,7 +318,7 @@ export interface ExposedBallot extends BaseContract { init( _subject: string, - _tagIndex: BigNumberish, + _topic: string, _choices: string[], overrides?: CallOverrides ): Promise; @@ -342,7 +336,7 @@ export interface ExposedBallot extends BaseContract { subject(overrides?: CallOverrides): Promise; - tagIndex(overrides?: CallOverrides): Promise; + topic(overrides?: CallOverrides): Promise; transferOwnership( newOwner: string, @@ -370,7 +364,7 @@ export interface ExposedBallot extends BaseContract { choices(arg0: BigNumberish, overrides?: CallOverrides): Promise; - closeBallot( + close( overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -382,7 +376,7 @@ export interface ExposedBallot extends BaseContract { init( _subject: string, - _tagIndex: BigNumberish, + _topic: string, _choices: string[], overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -402,7 +396,7 @@ export interface ExposedBallot extends BaseContract { subject(overrides?: CallOverrides): Promise; - tagIndex(overrides?: CallOverrides): Promise; + topic(overrides?: CallOverrides): Promise; transferOwnership( newOwner: string, @@ -425,7 +419,7 @@ export interface ExposedBallot extends BaseContract { overrides?: CallOverrides ): Promise; - closeBallot( + close( overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -437,7 +431,7 @@ export interface ExposedBallot extends BaseContract { init( _subject: string, - _tagIndex: BigNumberish, + _topic: string, _choices: string[], overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -457,7 +451,7 @@ export interface ExposedBallot extends BaseContract { subject(overrides?: CallOverrides): Promise; - tagIndex(overrides?: CallOverrides): Promise; + topic(overrides?: CallOverrides): Promise; transferOwnership( newOwner: string, diff --git a/typings/factories/contracts/BallotTagManager__factory.ts b/typings/factories/contracts/BallotTagManager__factory.ts deleted file mode 100644 index a50a5cd..0000000 --- a/typings/factories/contracts/BallotTagManager__factory.ts +++ /dev/null @@ -1,159 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - BallotTagManager, - BallotTagManagerInterface, -} from "../../contracts/BallotTagManager"; - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - inputs: [ - { - internalType: "string", - name: "name", - type: "string", - }, - ], - name: "addTag", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "getTags", - outputs: [ - { - internalType: "string[]", - name: "", - type: "string[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "tags", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6107208061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806320822abc14610067578063715018a6146100905780638da5cb5b1461009a578063995d9ab7146100b5578063de0cc45b146100ca578063f2fde38b146100dd575b600080fd5b61007a6100753660046104a8565b6100f0565b604051610087919061050e565b60405180910390f35b61009861019c565b005b6000546040516001600160a01b039091168152602001610087565b6100bd6101db565b6040516100879190610528565b6100986100d83660046105a0565b6102b4565b6100986100eb366004610651565b610324565b6001818154811061010057600080fd5b90600052602060002001600091509050805461011b9061067a565b80601f01602080910402602001604051908101604052809291908181526020018280546101479061067a565b80156101945780601f1061016957610100808354040283529160200191610194565b820191906000526020600020905b81548152906001019060200180831161017757829003601f168201915b505050505081565b6000546001600160a01b031633146101cf5760405162461bcd60e51b81526004016101c6906106b5565b60405180910390fd5b6101d960006103bf565b565b60606001805480602002602001604051908101604052809291908181526020016000905b828210156102ab57838290600052602060002001805461021e9061067a565b80601f016020809104026020016040519081016040528092919081815260200182805461024a9061067a565b80156102975780601f1061026c57610100808354040283529160200191610297565b820191906000526020600020905b81548152906001019060200180831161027a57829003601f168201915b5050505050815260200190600101906101ff565b50505050905090565b6000546001600160a01b031633146102de5760405162461bcd60e51b81526004016101c6906106b5565b6001805480820182556000919091528151610320917fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60190602084019061040f565b5050565b6000546001600160a01b0316331461034e5760405162461bcd60e51b81526004016101c6906106b5565b6001600160a01b0381166103b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101c6565b6103bc816103bf565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805461041b9061067a565b90600052602060002090601f01602090048101928261043d5760008555610483565b82601f1061045657805160ff1916838001178555610483565b82800160010185558215610483579182015b82811115610483578251825591602001919060010190610468565b5061048f929150610493565b5090565b5b8082111561048f5760008155600101610494565b6000602082840312156104ba57600080fd5b5035919050565b6000815180845260005b818110156104e7576020818501810151868301820152016104cb565b818111156104f9576000602083870101525b50601f01601f19169290920160200192915050565b60208152600061052160208301846104c1565b9392505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561057d57603f1988860301845261056b8583516104c1565b9450928501929085019060010161054f565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156105b257600080fd5b813567ffffffffffffffff808211156105ca57600080fd5b818401915084601f8301126105de57600080fd5b8135818111156105f0576105f061058a565b604051601f8201601f19908116603f011681019083821181831017156106185761061861058a565b8160405282815287602084870101111561063157600080fd5b826020860160208301376000928101602001929092525095945050505050565b60006020828403121561066357600080fd5b81356001600160a01b038116811461052157600080fd5b600181811c9082168061068e57607f821691505b602082108114156106af57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260408201526060019056fea26469706673582212202deacce286c3bc340044fc85de041a295bac873a613fa01c6388a10406de9e5d64736f6c63430008090033"; - -type BallotTagManagerConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: BallotTagManagerConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class BallotTagManager__factory extends ContractFactory { - constructor(...args: BallotTagManagerConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): BallotTagManager { - return super.attach(address) as BallotTagManager; - } - override connect(signer: Signer): BallotTagManager__factory { - return super.connect(signer) as BallotTagManager__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): BallotTagManagerInterface { - return new utils.Interface(_abi) as BallotTagManagerInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): BallotTagManager { - return new Contract(address, _abi, signerOrProvider) as BallotTagManager; - } -} diff --git a/typings/factories/contracts/Ballot__factory.ts b/typings/factories/contracts/Ballot__factory.ts index 22d0ac7..841d171 100644 --- a/typings/factories/contracts/Ballot__factory.ts +++ b/typings/factories/contracts/Ballot__factory.ts @@ -14,7 +14,7 @@ const _abi = [ type: "address", }, { - internalType: "contract VotingProxy", + internalType: "contract VotingDelegation", name: "_proxy", type: "address", }, @@ -75,7 +75,7 @@ const _abi = [ }, { inputs: [], - name: "closeBallot", + name: "close", outputs: [], stateMutability: "nonpayable", type: "function", @@ -127,9 +127,9 @@ const _abi = [ type: "string", }, { - internalType: "uint32", - name: "_tagIndex", - type: "uint32", + internalType: "string", + name: "_topic", + type: "string", }, { internalType: "string[]", @@ -160,7 +160,7 @@ const _abi = [ name: "proxy", outputs: [ { - internalType: "contract VotingProxy", + internalType: "contract VotingDelegation", name: "", type: "address", }, @@ -209,12 +209,12 @@ const _abi = [ }, { inputs: [], - name: "tagIndex", + name: "topic", outputs: [ { - internalType: "uint32", + internalType: "string", name: "", - type: "uint32", + type: "string", }, ], stateMutability: "view", @@ -249,7 +249,7 @@ const _abi = [ ]; const _bytecode = - "0x60a06040523480156200001157600080fd5b50604051620014163803806200141683398101604081905262000034916200012c565b6200003f33620000c3565b6001600160a01b0382166200009a5760405162461bcd60e51b815260206004820152601a60248201527f566f74653a204450532061646472657373206973207a65726f2e000000000000604482015260640160405180910390fd5b6001600160a01b03918216608052600180546001600160a01b031916919092161790556200016b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200012957600080fd5b50565b600080604083850312156200014057600080fd5b82516200014d8162000113565b6020840151909250620001608162000113565b809150509250929050565b608051611281620001956000396000818161021f0152818161055e015261091d01526112816000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80639094c76311610097578063ec55688911610066578063ec55688914610207578063ef4e06ec1461021a578063f2fde38b14610241578063f6fd7fde1461025457600080fd5b80639094c763146101c457806398c81bbf146101d7578063a97b8b4d146101ec578063c1d1d5c1146101f457600080fd5b806359037b89116100d357806359037b8914610157578063597e1fb514610178578063715018a6146101955780638da5cb5b1461019f57600080fd5b80630a59a98c146100fa5780634717f97c1461011857806349499d861461012d575b600080fd5b610102610267565b60405161010f9190610e5d565b60405180910390f35b6101206102f5565b60405161010f9190610e77565b60035461014290610100900463ffffffff1681565b60405163ffffffff909116815260200161010f565b61016a610165366004610ebb565b61034d565b60405190815260200161010f565b6003546101859060ff1681565b604051901515815260200161010f565b61019d61036e565b005b6000546001600160a01b03165b6040516001600160a01b03909116815260200161010f565b61019d6101d2366004610eed565b6103ad565b6101df6106d8565b60405161010f9190610f08565b61019d6107b1565b61019d610202366004611021565b610a0b565b6001546101ac906001600160a01b031681565b6101ac7f000000000000000000000000000000000000000000000000000000000000000081565b61019d61024f366004611118565b610b7a565b610102610262366004610ebb565b610c12565b6002805461027490611141565b80601f01602080910402602001604051908101604052809291908181526020018280546102a090611141565b80156102ed5780601f106102c2576101008083540402835291602001916102ed565b820191906000526020600020905b8154815290600101906020018083116102d057829003601f168201915b505050505081565b6060600580548060200260200160405190810160405280929190818152602001828054801561034357602002820191906000526020600020905b81548152602001906001019080831161032f575b5050505050905090565b6005818154811061035d57600080fd5b600091825260209091200154905081565b6000546001600160a01b031633146103a15760405162461bcd60e51b81526004016103989061117c565b60405180910390fd5b6103ab6000610c3d565b565b60035460ff16156104005760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e000000000000006044820152606401610398565b60045463ffffffff8216106104615760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2043686f69636520696e64657820697320746f6f20686967686044820152601760f91b6064820152608401610398565b600154600354604051632dd7519b60e21b815233600482015261010090910463ffffffff1660248201526001600160a01b039091169063b75d466c9060440160206040518083038186803b1580156104b857600080fd5b505afa1580156104cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f091906111b1565b1561053d5760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e0000000000006044820152606401610398565b6040516370a0823160e01b815233600482015269054b40b1f852bda00000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b1580156105a857600080fd5b505afa1580156105bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e091906111d3565b101561062e5760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e006044820152606401610398565b33600090815260076020526040902054640100000000900460ff166106af57336000818152600760205260408120805464ff0000000019166401000000001790556006805460018101825591527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b03191690911790555b336000908152600760205260409020805463ffffffff191663ffffffff92909216919091179055565b60606004805480602002602001604051908101604052809291908181526020016000905b828210156107a857838290600052602060002001805461071b90611141565b80601f016020809104026020016040519081016040528092919081815260200182805461074790611141565b80156107945780601f1061076957610100808354040283529160200191610794565b820191906000526020600020905b81548152906001019060200180831161077757829003601f168201915b5050505050815260200190600101906106fc565b50505050905090565b6000546001600160a01b031633146107db5760405162461bcd60e51b81526004016103989061117c565b60035460ff161561082e5760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e00006044820152606401610398565b6003805460ff1916600117905560005b600654811015610a085760006006828154811061085d5761085d6111ec565b60009182526020909120015460015460035460405163c143c6db60e01b81526001600160a01b039384166004820181905261010090920463ffffffff16602482015290935091169063c143c6db9060440160206040518083038186803b1580156108c657600080fd5b505afa1580156108da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fe91906111d3565b6040516370a0823160e01b81526001600160a01b0383811660048301527f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b15801561095f57600080fd5b505afa158015610973573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099791906111d3565b6109a19190611218565b6001600160a01b03821660009081526007602052604090205460058054909163ffffffff169081106109d5576109d56111ec565b9060005260206000200160008282546109ee9190611218565b90915550829150610a00905081611230565b91505061083e565b50565b600054600160a81b900460ff16610a2f57600054600160a01b900460ff1615610a33565b303b155b610a965760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610398565b600054600160a81b900460ff16158015610ac0576000805461ffff60a01b191661010160a01b1790555b8351610ad3906002906020870190610c8d565b506003805464ffffffffff191661010063ffffffff86160260ff19161790558151610b05906004906020850190610d11565b5060045467ffffffffffffffff811115610b2157610b21610f6a565b604051908082528060200260200182016040528015610b4a578160200160208202803683370190505b508051610b5f91600591602090910190610d6a565b508015610b74576000805460ff60a81b191690555b50505050565b6000546001600160a01b03163314610ba45760405162461bcd60e51b81526004016103989061117c565b6001600160a01b038116610c095760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610398565b610a0881610c3d565b60048181548110610c2257600080fd5b90600052602060002001600091509050805461027490611141565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054610c9990611141565b90600052602060002090601f016020900481019282610cbb5760008555610d01565b82601f10610cd457805160ff1916838001178555610d01565b82800160010185558215610d01579182015b82811115610d01578251825591602001919060010190610ce6565b50610d0d929150610da4565b5090565b828054828255906000526020600020908101928215610d5e579160200282015b82811115610d5e5782518051610d4e918491602090910190610c8d565b5091602001919060010190610d31565b50610d0d929150610db9565b828054828255906000526020600020908101928215610d015791602002820182811115610d01578251825591602001919060010190610ce6565b5b80821115610d0d5760008155600101610da5565b80821115610d0d576000610dcd8282610dd6565b50600101610db9565b508054610de290611141565b6000825580601f10610df2575050565b601f016020900490600052602060002090810190610a089190610da4565b6000815180845260005b81811015610e3657602081850181015186830182015201610e1a565b81811115610e48576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610e706020830184610e10565b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610eaf57835183529284019291840191600101610e93565b50909695505050505050565b600060208284031215610ecd57600080fd5b5035919050565b803563ffffffff81168114610ee857600080fd5b919050565b600060208284031215610eff57600080fd5b610e7082610ed4565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015610f5d57603f19888603018452610f4b858351610e10565b94509285019290850190600101610f2f565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610fa957610fa9610f6a565b604052919050565b600082601f830112610fc257600080fd5b813567ffffffffffffffff811115610fdc57610fdc610f6a565b610fef601f8201601f1916602001610f80565b81815284602083860101111561100457600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561103657600080fd5b833567ffffffffffffffff8082111561104e57600080fd5b61105a87838801610fb1565b94506020915061106b828701610ed4565b935060408601358181111561107f57600080fd5b8601601f8101881361109057600080fd5b8035828111156110a2576110a2610f6a565b8060051b6110b1858201610f80565b918252828101850191858101908b8411156110cb57600080fd5b86850192505b83831015611107578235868111156110e95760008081fd5b6110f78d8983890101610fb1565b83525091860191908601906110d1565b809750505050505050509250925092565b60006020828403121561112a57600080fd5b81356001600160a01b0381168114610e7057600080fd5b600181811c9082168061115557607f821691505b6020821081141561117657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156111c357600080fd5b81518015158114610e7057600080fd5b6000602082840312156111e557600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561122b5761122b611202565b500190565b600060001982141561124457611244611202565b506001019056fea2646970667358221220aa74553098366ebcba86a952061cb9d784c1f6faa4e1be8b6d880505160fddbf64736f6c63430008090033"; + "0x60c060405269054b40b1f852bda0000060a0523480156200001f57600080fd5b50604051620014d1380380620014d183398101604081905262000042916200013a565b6200004d33620000d1565b6001600160a01b038216620000a85760405162461bcd60e51b815260206004820152601a60248201527f566f74653a204450532061646472657373206973207a65726f2e000000000000604482015260640160405180910390fd5b6001600160a01b03918216608052600180546001600160a01b0319169190921617905562000179565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200013757600080fd5b50565b600080604083850312156200014e57600080fd5b82516200015b8162000121565b60208401519092506200016e8162000121565b809150509250929050565b60805160a051611324620001ad600039600061076e0152600081816101fd01528181610439015261079001526113246000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80639094c76311610097578063ec55688911610066578063ec556889146101e5578063ef4e06ec146101f8578063f2fde38b1461021f578063f6fd7fde1461023257600080fd5b80639094c763146101a257806398c81bbf146101b5578063bf63a577146101ca578063e254be56146101d257600080fd5b806359037b89116100d357806359037b8914610137578063597e1fb514610158578063715018a6146101755780638da5cb5b1461017d57600080fd5b80630a59a98c146100fa57806343d726d6146101185780634717f97c14610122575b600080fd5b610102610245565b60405161010f9190610e42565b60405180910390f35b6101206102d3565b005b61012a610527565b60405161010f9190610e5c565b61014a610145366004610ea0565b61057f565b60405190815260200161010f565b6003546101659060ff1681565b604051901515815260200161010f565b6101206105a0565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161010f565b6101206101b0366004610eb9565b6105d6565b6101bd61090a565b60405161010f9190610edf565b6101026109e3565b6101206101e0366004610ff8565b6109f0565b60015461018a906001600160a01b031681565b61018a7f000000000000000000000000000000000000000000000000000000000000000081565b61012061022d366004611102565b610b5f565b610102610240366004610ea0565b610bf7565b600280546102529061112b565b80601f016020809104026020016040519081016040528092919081815260200182805461027e9061112b565b80156102cb5780601f106102a0576101008083540402835291602001916102cb565b820191906000526020600020905b8154815290600101906020018083116102ae57829003601f168201915b505050505081565b6000546001600160a01b031633146103065760405162461bcd60e51b81526004016102fd90611166565b60405180910390fd5b60035460ff16156103595760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e000060448201526064016102fd565b6003805460ff1916600117905560005b600754811015610524576000600782815481106103885761038861119b565b6000918252602090912001546001546040516302fbd00360e21b81526001600160a01b039283169350911690630bef400c906103ca90849060049081016111b1565b60206040518083038186803b1580156103e257600080fd5b505afa1580156103f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041a919061126a565b6040516370a0823160e01b81526001600160a01b0383811660048301527f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b15801561047b57600080fd5b505afa15801561048f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b3919061126a565b6104bd9190611299565b6001600160a01b03821660009081526008602052604090205460068054909163ffffffff169081106104f1576104f161119b565b90600052602060002001600082825461050a9190611299565b9091555082915061051c9050816112b1565b915050610369565b50565b6060600680548060200260200160405190810160405280929190818152602001828054801561057557602002820191906000526020600020905b815481526020019060010190808311610561575b5050505050905090565b6006818154811061058f57600080fd5b600091825260209091200154905081565b6000546001600160a01b031633146105ca5760405162461bcd60e51b81526004016102fd90611166565b6105d46000610c22565b565b60035460ff16156106295760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e0000000000000060448201526064016102fd565b60055463ffffffff82161061068a5760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2043686f69636520696e64657820697320746f6f20686967686044820152601760f91b60648201526084016102fd565b60015460405163442f655160e01b81526001600160a01b039091169063442f6551906106bc90339060049081016111b1565b60206040518083038186803b1580156106d457600080fd5b505afa1580156106e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070c91906112cc565b156107595760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e00000000000060448201526064016102fd565b6040516370a0823160e01b81523360048201527f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b1580156107da57600080fd5b505afa1580156107ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610812919061126a565b10156108605760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e0060448201526064016102fd565b33600090815260086020526040902054640100000000900460ff166108e157336000818152600860205260408120805464ff0000000019166401000000001790556007805460018101825591527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b03191690911790555b336000908152600860205260409020805463ffffffff191663ffffffff92909216919091179055565b60606005805480602002602001604051908101604052809291908181526020016000905b828210156109da57838290600052602060002001805461094d9061112b565b80601f01602080910402602001604051908101604052809291908181526020018280546109799061112b565b80156109c65780601f1061099b576101008083540402835291602001916109c6565b820191906000526020600020905b8154815290600101906020018083116109a957829003601f168201915b50505050508152602001906001019061092e565b50505050905090565b600480546102529061112b565b600054600160a81b900460ff16610a1457600054600160a01b900460ff1615610a18565b303b155b610a7b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102fd565b600054600160a81b900460ff16158015610aa5576000805461ffff60a01b191661010160a01b1790555b8351610ab8906002906020870190610c72565b508251610acc906004906020860190610c72565b506003805460ff191690558151610aea906005906020850190610cf6565b5060055467ffffffffffffffff811115610b0657610b06610f41565b604051908082528060200260200182016040528015610b2f578160200160208202803683370190505b508051610b4491600691602090910190610d4f565b508015610b59576000805460ff60a81b191690555b50505050565b6000546001600160a01b03163314610b895760405162461bcd60e51b81526004016102fd90611166565b6001600160a01b038116610bee5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102fd565b61052481610c22565b60058181548110610c0757600080fd5b9060005260206000200160009150905080546102529061112b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054610c7e9061112b565b90600052602060002090601f016020900481019282610ca05760008555610ce6565b82601f10610cb957805160ff1916838001178555610ce6565b82800160010185558215610ce6579182015b82811115610ce6578251825591602001919060010190610ccb565b50610cf2929150610d89565b5090565b828054828255906000526020600020908101928215610d43579160200282015b82811115610d435782518051610d33918491602090910190610c72565b5091602001919060010190610d16565b50610cf2929150610d9e565b828054828255906000526020600020908101928215610ce65791602002820182811115610ce6578251825591602001919060010190610ccb565b5b80821115610cf25760008155600101610d8a565b80821115610cf2576000610db28282610dbb565b50600101610d9e565b508054610dc79061112b565b6000825580601f10610dd7575050565b601f0160209004906000526020600020908101906105249190610d89565b6000815180845260005b81811015610e1b57602081850181015186830182015201610dff565b81811115610e2d576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610e556020830184610df5565b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610e9457835183529284019291840191600101610e78565b50909695505050505050565b600060208284031215610eb257600080fd5b5035919050565b600060208284031215610ecb57600080fd5b813563ffffffff81168114610e5557600080fd5b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015610f3457603f19888603018452610f22858351610df5565b94509285019290850190600101610f06565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610f8057610f80610f41565b604052919050565b600082601f830112610f9957600080fd5b813567ffffffffffffffff811115610fb357610fb3610f41565b610fc6601f8201601f1916602001610f57565b818152846020838601011115610fdb57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561100d57600080fd5b833567ffffffffffffffff8082111561102557600080fd5b61103187838801610f88565b945060209150818601358181111561104857600080fd5b61105488828901610f88565b94505060408601358181111561106957600080fd5b8601601f8101881361107a57600080fd5b80358281111561108c5761108c610f41565b8060051b61109b858201610f57565b918252828101850191858101908b8411156110b557600080fd5b86850192505b838310156110f1578235868111156110d35760008081fd5b6110e18d8983890101610f88565b83525091860191908601906110bb565b809750505050505050509250925092565b60006020828403121561111457600080fd5b81356001600160a01b0381168114610e5557600080fd5b600181811c9082168061113f57607f821691505b6020821081141561116057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60018060a01b0383168152600060206040818401526000845481600182811c9150808316806111e157607f831692505b8583108114156111ff57634e487b7160e01b85526022600452602485fd5b604088018390526060880181801561121e576001811461122f5761125a565b60ff1986168252878201965061125a565b60008b81526020902060005b868110156112545781548482015290850190890161123b565b83019750505b50949a9950505050505050505050565b60006020828403121561127c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156112ac576112ac611283565b500190565b60006000198214156112c5576112c5611283565b5060010190565b6000602082840312156112de57600080fd5b81518015158114610e5557600080fdfea2646970667358221220eccdb140a33527273ef7838e01ada0af9f99cf4d6aa8fc661b24fcf13763a1a764736f6c63430008090033"; type BallotConstructorParams = | [signer?: Signer] diff --git a/typings/factories/contracts/VotingDelegation__factory.ts b/typings/factories/contracts/VotingDelegation__factory.ts new file mode 100644 index 0000000..a75541d --- /dev/null +++ b/typings/factories/contracts/VotingDelegation__factory.ts @@ -0,0 +1,267 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { + VotingDelegation, + VotingDelegationInterface, +} from "../../contracts/VotingDelegation"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IERC20Metadata", + name: "_DPS", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + inputs: [], + name: "DPS", + outputs: [ + { + internalType: "contract IERC20Metadata", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "ballotFactory", + outputs: [ + { + internalType: "contract BallotFactory", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "string", + name: "topic", + type: "string", + }, + ], + name: "delegate", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "voter", + type: "address", + }, + { + internalType: "string", + name: "topic", + type: "string", + }, + ], + name: "delegationAmount", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "string", + name: "topic", + type: "string", + }, + ], + name: "delegators", + outputs: [ + { + internalType: "address[]", + name: "", + type: "address[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "voter", + type: "address", + }, + { + internalType: "string", + name: "topic", + type: "string", + }, + ], + name: "hasDelegated", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address", + }, + { + internalType: "string", + name: "topic", + type: "string", + }, + ], + name: "representative", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +]; + +const _bytecode = + "0x60c060405269054b40b1f852bda0000060a05234801561001e57600080fd5b50604051610d07380380610d0783398101604081905261003d91610110565b610046336100c0565b6001600160a01b0381166100af5760405162461bcd60e51b815260206004820152602660248201527f566f74696e6744656c65676174696f6e3a204450532061646472657373206973604482015265103d32b9379760d11b606482015260840160405180910390fd5b6001600160a01b0316608052610140565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561012257600080fd5b81516001600160a01b038116811461013957600080fd5b9392505050565b60805160a051610b9461017360003960006103910152600081816101930152818161024a01526103b30152610b946000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638da5cb5b116100665780638da5cb5b14610156578063ceb0b9351461017b578063ef4e06ec1461018e578063f2fde38b146101b5578063fc196713146101c857600080fd5b80630bef400c146100a3578063442f6551146100c95780635e12967914610119578063694ec60e1461012e578063715018a61461014e575b600080fd5b6100b66100b136600461097f565b610206565b6040519081526020015b60405180910390f35b6101096100d736600461097f565b6001600160a01b0391821660009081526003602090815260408083208451948301949094208352929052205416151590565b60405190151581526020016100c0565b61012c61012736600461097f565b610372565b005b61014161013c36600461097f565b610676565b6040516100c09190610a41565b61012c6107cc565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100c0565b600154610163906001600160a01b031681565b6101637f000000000000000000000000000000000000000000000000000000000000000081565b61012c6101c3366004610a8e565b610832565b6101636101d636600461097f565b6001600160a01b039182166000908152600360209081526040808320845194830194909420835292905220541690565b805160208201206000908190815b6001600160a01b038616600090815260026020908152604080832085845290915290206001015463ffffffff82161015610368577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a0823160026000896001600160a01b03166001600160a01b0316815260200190815260200160002060008581526020019081526020016000206001018363ffffffff16815481106102c7576102c7610ab0565b60009182526020909120015460405160e083901b6001600160e01b03191681526001600160a01b03909116600482015260240160206040518083038186803b15801561031257600080fd5b505afa158015610326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034a9190610ac6565b6103549084610af5565b92508061036081610b0d565b915050610214565b5090949350505050565b6040516370a0823160e01b81526001600160a01b0383811660048301527f0000000000000000000000000000000000000000000000000000000000000000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b1580156103f757600080fd5b505afa15801561040b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042f9190610ac6565b10158061044357506001600160a01b038216155b6104a85760405162461bcd60e51b815260206004820152602b60248201527f566f74696e6744656c65676174696f6e3a2050726f787920686173206e6f742060448201526a32b737bab3b4102228299760a91b60648201526084015b60405180910390fd5b805160208083019190912033600090815260038352604080822083835290935291909120546001600160a01b0316156105df573360008181526003602090815260408083208584528252808320546001600160a01b031683526002825280832085845282528083209383529083905290205460018281018054909161052c91610b31565b8154811061053c5761053c610ab0565b6000918252602090912001546001830180546001600160a01b03909216918390811061056a5761056a610ab0565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001018054806105ab576105ab610b48565b60008281526020808220830160001990810180546001600160a01b0319169055909201909255338252929092525060408120555b336000908152600360209081526040808320848452909152902080546001600160a01b0319166001600160a01b03851690811790915515610671576001600160a01b038316600090815260026020908152604080832084845282528083206001808201805433808852938652938620849055908301815584529190922090910180546001600160a01b03191690911790555b505050565b80516020808301919091206001600160a01b0384166000908152600283526040808220838352909352918220600101546060929067ffffffffffffffff8111156106c2576106c2610969565b6040519080825280602002602001820160405280156106eb578160200160208202803683370190505b50905060005b6001600160a01b038616600090815260026020908152604080832086845290915290206001015463ffffffff821610156107c3576001600160a01b03861660009081526002602090815260408083208684529091529020600101805463ffffffff831690811061076357610763610ab0565b9060005260206000200160009054906101000a90046001600160a01b0316828263ffffffff168151811061079957610799610ab0565b6001600160a01b0390921660209283029190910190910152806107bb81610b0d565b9150506106f1565b50949350505050565b6000546001600160a01b031633146108265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161049f565b61083060006108fd565b565b6000546001600160a01b0316331461088c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161049f565b6001600160a01b0381166108f15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161049f565b6108fa816108fd565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461096457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561099257600080fd5b61099b8361094d565b9150602083013567ffffffffffffffff808211156109b857600080fd5b818501915085601f8301126109cc57600080fd5b8135818111156109de576109de610969565b604051601f8201601f19908116603f01168101908382118183101715610a0657610a06610969565b81604052828152886020848701011115610a1f57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b81811015610a825783516001600160a01b031683529284019291840191600101610a5d565b50909695505050505050565b600060208284031215610aa057600080fd5b610aa98261094d565b9392505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610ad857600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610b0857610b08610adf565b500190565b600063ffffffff80831681811415610b2757610b27610adf565b6001019392505050565b600082821015610b4357610b43610adf565b500390565b634e487b7160e01b600052603160045260246000fdfea26469706673582212206f59477b5b5cd1f501022e79f32bed6a10e049c7c6cdb377929dfd06e1a8758864736f6c63430008090033"; + +type VotingDelegationConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: VotingDelegationConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class VotingDelegation__factory extends ContractFactory { + constructor(...args: VotingDelegationConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _DPS: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise { + return super.deploy(_DPS, overrides || {}) as Promise; + } + override getDeployTransaction( + _DPS: string, + overrides?: Overrides & { from?: string | Promise } + ): TransactionRequest { + return super.getDeployTransaction(_DPS, overrides || {}); + } + override attach(address: string): VotingDelegation { + return super.attach(address) as VotingDelegation; + } + override connect(signer: Signer): VotingDelegation__factory { + return super.connect(signer) as VotingDelegation__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): VotingDelegationInterface { + return new utils.Interface(_abi) as VotingDelegationInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): VotingDelegation { + return new Contract(address, _abi, signerOrProvider) as VotingDelegation; + } +} diff --git a/typings/factories/contracts/VotingProxy__factory.ts b/typings/factories/contracts/VotingProxy__factory.ts deleted file mode 100644 index 88b05de..0000000 --- a/typings/factories/contracts/VotingProxy__factory.ts +++ /dev/null @@ -1,243 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - VotingProxy, - VotingProxyInterface, -} from "../../contracts/VotingProxy"; - -const _abi = [ - { - inputs: [ - { - internalType: "contract IERC20Metadata", - name: "_DPS", - type: "address", - }, - { - internalType: "contract BallotTagManager", - name: "_ballotTagManager", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - inputs: [], - name: "DPS", - outputs: [ - { - internalType: "contract IERC20Metadata", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ballotFactory", - outputs: [ - { - internalType: "contract BallotFactory", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ballotTagManager", - outputs: [ - { - internalType: "contract BallotTagManager", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint32", - name: "tagIndex", - type: "uint32", - }, - ], - name: "grantProxy", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "voter", - type: "address", - }, - { - internalType: "uint32", - name: "tagIndex", - type: "uint32", - }, - ], - name: "hasDelegated", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "voter", - type: "address", - }, - { - internalType: "uint32", - name: "tagIndex", - type: "uint32", - }, - ], - name: "proxyAmount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60a060405234801561001057600080fd5b50604051610e57380380610e5783398101604081905261002f9161019c565b61003833610134565b6001600160a01b03821661009d5760405162461bcd60e51b815260206004820152602160248201527f566f74696e6750726f78793a204450532061646472657373206973207a65726f6044820152601760f91b60648201526084015b60405180910390fd5b6001600160a01b03811661010c5760405162461bcd60e51b815260206004820152603060248201527f566f74696e6750726f78793a2042616c6c6f7420746167206d616e616765722060448201526f30b2323932b9b99034b9903d32b9379760811b6064820152608401610094565b6001600160a01b03918216608052600280546001600160a01b031916919092161790556101d6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461019957600080fd5b50565b600080604083850312156101af57600080fd5b82516101ba81610184565b60208401519092506101cb81610184565b809150509250929050565b608051610c586101ff6000396000818161017f015281816102ee01526107770152610c586000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063b75d466c11610066578063b75d466c146100f6578063c143c6db14610146578063ceb0b93514610167578063ef4e06ec1461017a578063f2fde38b146101a157600080fd5b80633e7ee19f14610098578063715018a6146100c857806374773a45146100d25780638da5cb5b146100e5575b600080fd5b6002546100ab906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100d06101b4565b005b6100d06100e0366004610950565b61021f565b6000546001600160a01b03166100ab565b610136610104366004610950565b6001600160a01b03918216600090815260046020908152604080832063ffffffff949094168352929052205416151590565b60405190151581526020016100bf565b610159610154366004610950565b610637565b6040519081526020016100bf565b6001546100ab906001600160a01b031681565b6100ab7f000000000000000000000000000000000000000000000000000000000000000081565b6100d06101af366004610990565b610819565b6000546001600160a01b031633146102135760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b61021d60006108e4565b565b6002546040805163995d9ab760e01b8152905163ffffffff8416926001600160a01b03169163995d9ab7916004808301926000929190829003018186803b15801561026957600080fd5b505afa15801561027d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102a591908101906109f9565b51116102c35760405162461bcd60e51b815260040161020a90610b30565b6040516370a0823160e01b81526001600160a01b03838116600483015269054b40b1f852bda00000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b15801561033257600080fd5b505afa158015610346573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061036a9190610b72565b10158061037e57506001600160a01b038216155b6103d95760405162461bcd60e51b815260206004820152602660248201527f566f74696e6750726f78793a2050726f787920686173206e6f7420656e6f756760448201526534102228299760d11b606482015260840161020a565b33600090815260046020908152604080832063ffffffff851684529091529020546001600160a01b0316156105515733600081815260046020908152604080832063ffffffff808716808652918452828520546001600160a01b031685526003845282852091855290835281842094845291849052822054600284015490821692600185810193919261046c9216610ba1565b63ffffffff90811682526020808301939093526040918201600090812054858316825260018781019586905293822080546001600160a01b0319166001600160a01b03909216919091179055600286015490939284926104cc9216610ba1565b63ffffffff90811682526020808301939093526040918201600090812080546001600160a01b0319166001600160a01b039690961695909517909455338452918590528220805463ffffffff191690556002840180549091169161052f83610bc6565b91906101000a81548163ffffffff021916908363ffffffff1602179055505050505b33600090815260046020908152604080832063ffffffff85168452909152902080546001600160a01b0319166001600160a01b03841690811790915515610633576001600160a01b038216600090815260036020908152604080832063ffffffff808616855290835281842060028101805433808852838752858820805463ffffffff1916928616929092179091558154841687526001830190955292852080546001600160a01b0319169094179093558154929392169161061283610be6565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505b5050565b60008163ffffffff16600260009054906101000a90046001600160a01b03166001600160a01b031663995d9ab76040518163ffffffff1660e01b815260040160006040518083038186803b15801561068e57600080fd5b505afa1580156106a2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106ca91908101906109f9565b51116106e85760405162461bcd60e51b815260040161020a90610b30565b6000805b6001600160a01b038516600090815260036020908152604080832063ffffffff808916855292529091206002015481169082161015610811576001600160a01b03858116600090815260036020908152604080832063ffffffff89811685529083528184209086168452600101909152908190205490516370a0823160e01b815290821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b1580156107bb57600080fd5b505afa1580156107cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f39190610b72565b6107fd9083610c0a565b91508061080981610be6565b9150506106ec565b509392505050565b6000546001600160a01b031633146108735760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161020a565b6001600160a01b0381166108d85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161020a565b6108e1816108e4565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461094b57600080fd5b919050565b6000806040838503121561096357600080fd5b61096c83610934565b9150602083013563ffffffff8116811461098557600080fd5b809150509250929050565b6000602082840312156109a257600080fd5b6109ab82610934565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156109f1576109f16109b2565b604052919050565b60006020808385031215610a0c57600080fd5b825167ffffffffffffffff80821115610a2457600080fd5b8185019150601f8681840112610a3957600080fd5b825182811115610a4b57610a4b6109b2565b8060051b610a5a8682016109c8565b918252848101860191868101908a841115610a7457600080fd5b87870192505b83831015610b2257825186811115610a925760008081fd5b8701603f81018c13610aa45760008081fd5b8881015187811115610ab857610ab86109b2565b610ac9818801601f19168b016109c8565b81815260408e81848601011115610ae05760008081fd5b60005b83811015610afe578481018201518382018e01528c01610ae3565b83811115610b0f5760008d85850101525b5050845250509187019190870190610a7a565b9a9950505050505050505050565b60208082526022908201527f566f74696e6750726f78793a2054616720696e64657820697320746f6f2068696040820152610ced60f31b606082015260800190565b600060208284031215610b8457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff83811690831681811015610bbe57610bbe610b8b565b039392505050565b600063ffffffff821680610bdc57610bdc610b8b565b6000190192915050565b600063ffffffff80831681811415610c0057610c00610b8b565b6001019392505050565b60008219821115610c1d57610c1d610b8b565b50019056fea264697066735822122002defa9c0b3b6636079ab495b8e6e5443f2229b805338d45431d3da20aabc73564736f6c63430008090033"; - -type VotingProxyConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: VotingProxyConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class VotingProxy__factory extends ContractFactory { - constructor(...args: VotingProxyConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _DPS: string, - _ballotTagManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _DPS, - _ballotTagManager, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _DPS: string, - _ballotTagManager: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_DPS, _ballotTagManager, overrides || {}); - } - override attach(address: string): VotingProxy { - return super.attach(address) as VotingProxy; - } - override connect(signer: Signer): VotingProxy__factory { - return super.connect(signer) as VotingProxy__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): VotingProxyInterface { - return new utils.Interface(_abi) as VotingProxyInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): VotingProxy { - return new Contract(address, _abi, signerOrProvider) as VotingProxy; - } -} diff --git a/typings/factories/contracts/factories/BallotFactory__factory.ts b/typings/factories/contracts/factories/BallotFactory__factory.ts index e375580..5694bbc 100644 --- a/typings/factories/contracts/factories/BallotFactory__factory.ts +++ b/typings/factories/contracts/factories/BallotFactory__factory.ts @@ -16,11 +16,6 @@ const _abi = [ name: "_implementationAddress", type: "address", }, - { - internalType: "contract BallotTagManager", - name: "_ballotTagManager", - type: "address", - }, ], stateMutability: "nonpayable", type: "constructor", @@ -76,19 +71,6 @@ const _abi = [ stateMutability: "view", type: "function", }, - { - inputs: [], - name: "ballotTagManager", - outputs: [ - { - internalType: "contract BallotTagManager", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, { inputs: [ { @@ -97,9 +79,9 @@ const _abi = [ type: "string", }, { - internalType: "uint32", - name: "tagIndex", - type: "uint32", + internalType: "string", + name: "topic", + type: "string", }, { internalType: "string[]", @@ -187,7 +169,7 @@ const _abi = [ ]; const _bytecode = - "0x608060405234801561001057600080fd5b50604051610d4d380380610d4d83398101604081905261002f916101de565b61003833610176565b6001600160a01b0382166100bb576040805162461bcd60e51b81526020600482015260248101919091527f42616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616460448201527f64726573732073686f756c64206e6f74206265207a65726f206164647265737360648201526084015b60405180910390fd5b6001600160a01b0381166101455760405162461bcd60e51b8152602060048201526044602482018190527f42616c6c6f74466163746f72793a2042616c6c6f7420746167206d616e616765908201527f7220616464726573732073686f756c64206e6f74206265207a65726f206164646064820152637265737360e01b608482015260a4016100b2565b600280546001600160a01b039384166001600160a01b03199182161790915560038054929093169116179055610218565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101db57600080fd5b50565b600080604083850312156101f157600080fd5b82516101fc816101c6565b602084015190925061020d816101c6565b809150509250929050565b610b26806102276000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063a7a9845311610066578063a7a98453146100f6578063b97a231914610109578063eb87c6dc1461011c578063ecade2f014610131578063f2fde38b1461014457600080fd5b806324db32ac146100985780633e7ee19f146100ad578063715018a6146100dd5780638da5cb5b146100e5575b600080fd5b6100ab6100a636600461076d565b610157565b005b6003546100c0906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ab610370565b6000546001600160a01b03166100c0565b6100c061010436600461085d565b6103a6565b6002546100c0906001600160a01b031681565b6101246103d0565b6040516100d49190610876565b6100ab61013f3660046108c3565b610432565b6100ab6101523660046108c3565b6104fc565b6000546001600160a01b0316331461018a5760405162461bcd60e51b8152600401610181906108f3565b60405180910390fd5b6003546040805163995d9ab760e01b8152905163ffffffff8516926001600160a01b03169163995d9ab7916004808301926000929190829003018186803b1580156101d457600080fd5b505afa1580156101e8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102109190810190610958565b511161026c5760405162461bcd60e51b815260206004820152602560248201527f42616c6c6f74466163746f72793a2054616720696e64657820697320746f6f206044820152643434b3b41760d91b6064820152608401610181565b600254600090610284906001600160a01b0316610597565b60405163c1d1d5c160e01b81529091506001600160a01b0382169063c1d1d5c1906102b790879087908790600401610a71565b600060405180830381600087803b1580156102d157600080fd5b505af11580156102e5573d6000803e3d6000fd5b50506001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0385169081179091556040519081527f165f4a0bebf649c196135ba0519a9a51da33d33a9e4d096b71050c2c97ec670f9250602001905060405180910390a150505050565b6000546001600160a01b0316331461039a5760405162461bcd60e51b8152600401610181906108f3565b6103a46000610634565b565b600181815481106103b657600080fd5b6000918252602090912001546001600160a01b0316905081565b6060600180548060200260200160405190810160405280929190818152602001828054801561042857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161040a575b5050505050905090565b6000546001600160a01b0316331461045c5760405162461bcd60e51b8152600401610181906108f3565b6001600160a01b0381166104da576040805162461bcd60e51b81526020600482015260248101919091527f42616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616460448201527f64726573732073686f756c64206e6f74206265207a65726f20616464726573736064820152608401610181565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146105265760405162461bcd60e51b8152600401610181906108f3565b6001600160a01b03811661058b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610181565b61059481610634565b50565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b03811661062f5760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b6044820152606401610181565b919050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156106c3576106c3610684565b604052919050565b600067ffffffffffffffff8211156106e5576106e5610684565b50601f01601f191660200190565b600082601f83011261070457600080fd5b8135610717610712826106cb565b61069a565b81815284602083860101111561072c57600080fd5b816020850160208301376000918101602001919091529392505050565b600067ffffffffffffffff82111561076357610763610684565b5060051b60200190565b60008060006060848603121561078257600080fd5b833567ffffffffffffffff8082111561079a57600080fd5b6107a6878388016106f3565b9450602091508186013563ffffffff811681146107c257600080fd5b93506040860135818111156107d657600080fd5b8601601f810188136107e757600080fd5b80356107f561071282610749565b81815260059190911b8201840190848101908a83111561081457600080fd5b8584015b8381101561084c578035868111156108305760008081fd5b61083e8d89838901016106f3565b845250918601918601610818565b508096505050505050509250925092565b60006020828403121561086f57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156108b75783516001600160a01b031683529284019291840191600101610892565b50909695505050505050565b6000602082840312156108d557600080fd5b81356001600160a01b03811681146108ec57600080fd5b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60005b8381101561094357818101518382015260200161092b565b83811115610952576000848401525b50505050565b6000602080838503121561096b57600080fd5b825167ffffffffffffffff8082111561098357600080fd5b818501915085601f83011261099757600080fd5b81516109a561071282610749565b81815260059190911b830184019084810190888311156109c457600080fd5b8585015b83811015610a38578051858111156109e05760008081fd5b8601603f81018b136109f25760008081fd5b878101516040610a04610712836106cb565b8281528d82848601011115610a195760008081fd5b610a28838c8301848701610928565b86525050509186019186016109c8565b5098975050505050505050565b60008151808452610a5d816020860160208601610928565b601f01601f19169290920160200192915050565b606081526000610a846060830186610a45565b602063ffffffff86168185015283820360408501528185518084528284019150828160051b85010183880160005b83811015610ae057601f19878403018552610ace838351610a45565b94860194925090850190600101610ab2565b50909a995050505050505050505056fea26469706673582212202a23348d5e6fa6e233f30166087a7e20ef01425cbe19718950bc1da2bed511e664736f6c63430008090033"; + "0x608060405234801561001057600080fd5b50604051610a84380380610a8483398101604081905261002f9161012f565b610038336100df565b6001600160a01b0381166100ba576040805162461bcd60e51b81526020600482015260248101919091527f42616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616460448201527f64726573732073686f756c64206e6f74206265207a65726f2061646472657373606482015260840160405180910390fd5b600280546001600160a01b0319166001600160a01b039290921691909117905561015f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561014157600080fd5b81516001600160a01b038116811461015857600080fd5b9392505050565b6109168061016e6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063d62d80891161005b578063d62d8089146100e7578063eb87c6dc146100fa578063ecade2f01461010f578063f2fde38b1461012257600080fd5b8063715018a61461008d5780638da5cb5b14610097578063a7a98453146100c1578063b97a2319146100d4575b600080fd5b610095610135565b005b6000546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b6100a46100cf366004610580565b610174565b6002546100a4906001600160a01b031681565b6100956100f5366004610650565b61019e565b6101026102cc565b6040516100b8919061075a565b61009561011d3660046107a7565b61032e565b6100956101303660046107a7565b6103f8565b6000546001600160a01b031633146101685760405162461bcd60e51b815260040161015f906107d7565b60405180910390fd5b6101726000610493565b565b6001818154811061018457600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146101c85760405162461bcd60e51b815260040161015f906107d7565b6002546000906101e0906001600160a01b03166104e3565b60405163712a5f2b60e11b81529091506001600160a01b0382169063e254be569061021390879087908790600401610859565b600060405180830381600087803b15801561022d57600080fd5b505af1158015610241573d6000803e3d6000fd5b50506001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0385169081179091556040519081527f165f4a0bebf649c196135ba0519a9a51da33d33a9e4d096b71050c2c97ec670f9250602001905060405180910390a150505050565b6060600180548060200260200160405190810160405280929190818152602001828054801561032457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610306575b5050505050905090565b6000546001600160a01b031633146103585760405162461bcd60e51b815260040161015f906107d7565b6001600160a01b0381166103d6576040805162461bcd60e51b81526020600482015260248101919091527f42616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616460448201527f64726573732073686f756c64206e6f74206265207a65726f2061646472657373606482015260840161015f565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146104225760405162461bcd60e51b815260040161015f906107d7565b6001600160a01b0381166104875760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161015f565b61049081610493565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b03811661057b5760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015260640161015f565b919050565b60006020828403121561059257600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156105d8576105d8610599565b604052919050565b600082601f8301126105f157600080fd5b813567ffffffffffffffff81111561060b5761060b610599565b61061e601f8201601f19166020016105af565b81815284602083860101111561063357600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561066557600080fd5b833567ffffffffffffffff8082111561067d57600080fd5b610689878388016105e0565b94506020915081860135818111156106a057600080fd5b6106ac888289016105e0565b9450506040860135818111156106c157600080fd5b8601601f810188136106d257600080fd5b8035828111156106e4576106e4610599565b8060051b6106f38582016105af565b918252828101850191858101908b84111561070d57600080fd5b86850192505b838310156107495782358681111561072b5760008081fd5b6107398d89838901016105e0565b8352509186019190860190610713565b809750505050505050509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561079b5783516001600160a01b031683529284019291840191600101610776565b50909695505050505050565b6000602082840312156107b957600080fd5b81356001600160a01b03811681146107d057600080fd5b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000815180845260005b8181101561083257602081850181015186830182015201610816565b81811115610844576000602083870101525b50601f01601f19169290920160200192915050565b60608152600061086c606083018661080c565b60208382038185015261087f828761080c565b915083820360408501528185518084528284019150828160051b85010183880160005b838110156108d057601f198784030185526108be83835161080c565b948601949250908501906001016108a2565b50909a995050505050505050505056fea2646970667358221220c44b42184d0fd271686900d38019c56cb47696b3471cc28260b5b5cf67aac2d064736f6c63430008090033"; type BallotFactoryConstructorParams = | [signer?: Signer] @@ -208,25 +190,18 @@ export class BallotFactory__factory extends ContractFactory { override deploy( _implementationAddress: string, - _ballotTagManager: string, overrides?: Overrides & { from?: string | Promise } ): Promise { return super.deploy( _implementationAddress, - _ballotTagManager, overrides || {} ) as Promise; } override getDeployTransaction( _implementationAddress: string, - _ballotTagManager: string, overrides?: Overrides & { from?: string | Promise } ): TransactionRequest { - return super.getDeployTransaction( - _implementationAddress, - _ballotTagManager, - overrides || {} - ); + return super.getDeployTransaction(_implementationAddress, overrides || {}); } override attach(address: string): BallotFactory { return super.attach(address) as BallotFactory; diff --git a/typings/factories/contracts/testing/ExposedBallot__factory.ts b/typings/factories/contracts/testing/ExposedBallot__factory.ts index 71051f0..83ae67b 100644 --- a/typings/factories/contracts/testing/ExposedBallot__factory.ts +++ b/typings/factories/contracts/testing/ExposedBallot__factory.ts @@ -17,7 +17,7 @@ const _abi = [ type: "address", }, { - internalType: "contract VotingProxy", + internalType: "contract VotingDelegation", name: "_proxy", type: "address", }, @@ -115,7 +115,7 @@ const _abi = [ }, { inputs: [], - name: "closeBallot", + name: "close", outputs: [], stateMutability: "nonpayable", type: "function", @@ -167,9 +167,9 @@ const _abi = [ type: "string", }, { - internalType: "uint32", - name: "_tagIndex", - type: "uint32", + internalType: "string", + name: "_topic", + type: "string", }, { internalType: "string[]", @@ -200,7 +200,7 @@ const _abi = [ name: "proxy", outputs: [ { - internalType: "contract VotingProxy", + internalType: "contract VotingDelegation", name: "", type: "address", }, @@ -249,12 +249,12 @@ const _abi = [ }, { inputs: [], - name: "tagIndex", + name: "topic", outputs: [ { - internalType: "uint32", + internalType: "string", name: "", - type: "uint32", + type: "string", }, ], stateMutability: "view", @@ -289,7 +289,7 @@ const _abi = [ ]; const _bytecode = - "0x60a06040523480156200001157600080fd5b506040516200163838038062001638833981016040819052620000349162000131565b81816200004133620000c8565b6001600160a01b0382166200009c5760405162461bcd60e51b815260206004820152601a60248201527f566f74653a204450532061646472657373206973207a65726f2e000000000000604482015260640160405180910390fd5b6001600160a01b03918216608052600180546001600160a01b0319169190921617905550620001709050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200012e57600080fd5b50565b600080604083850312156200014557600080fd5b8251620001528162000118565b6020840151909250620001658162000118565b809150509250929050565b60805161149e6200019a6000396000818161023f015281816106d10152610a90015261149e6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639094c76311610097578063ec55688911610066578063ec55688914610227578063ef4e06ec1461023a578063f2fde38b14610261578063f6fd7fde1461027457600080fd5b80639094c763146101e457806398c81bbf146101f7578063a97b8b4d1461020c578063c1d1d5c11461021457600080fd5b806359037b89116100d357806359037b8914610177578063597e1fb514610198578063715018a6146101b55780638da5cb5b146101bf57600080fd5b80630a59a98c1461010557806327454ea8146101235780634717f97c1461013857806349499d861461014d575b600080fd5b61010d610287565b60405161011a9190611015565b60405180910390f35b61012b610315565b60405161011a919061102f565b610140610468565b60405161011a919061109a565b60035461016290610100900463ffffffff1681565b60405163ffffffff909116815260200161011a565b61018a6101853660046110de565b6104c0565b60405190815260200161011a565b6003546101a59060ff1681565b604051901515815260200161011a565b6101bd6104e1565b005b6000546001600160a01b03165b6040516001600160a01b03909116815260200161011a565b6101bd6101f2366004611110565b610520565b6101ff61084b565b60405161011a919061112b565b6101bd610924565b6101bd610222366004611244565b610b7e565b6001546101cc906001600160a01b031681565b6101cc7f000000000000000000000000000000000000000000000000000000000000000081565b6101bd61026f36600461133b565b610ced565b61010d6102823660046110de565b610d85565b6002805461029490611364565b80601f01602080910402602001604051908101604052809291908181526020018280546102c090611364565b801561030d5780601f106102e25761010080835404028352916020019161030d565b820191906000526020600020905b8154815290600101906020018083116102f057829003601f168201915b505050505081565b60065460609060009067ffffffffffffffff8111156103365761033661118d565b60405190808252806020026020018201604052801561036f57816020015b61035c610e00565b8152602001906001900390816103545790505b50905060005b6006548110156104625760405180604001604052806006838154811061039d5761039d611399565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b0316815260200160076000600685815481106103e0576103e0611399565b60009182526020808320909101546001600160a01b03168352828101939093526040918201902081518083019092525463ffffffff8116825260ff640100000000909104161515918101919091529052825183908390811061044457610444611399565b6020026020010181905250808061045a906113c5565b915050610375565b50919050565b606060058054806020026020016040519081016040528092919081815260200182805480156104b657602002820191906000526020600020905b8154815260200190600101908083116104a2575b5050505050905090565b600581815481106104d057600080fd5b600091825260209091200154905081565b6000546001600160a01b031633146105145760405162461bcd60e51b815260040161050b906113e0565b60405180910390fd5b61051e6000610db0565b565b60035460ff16156105735760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e00000000000000604482015260640161050b565b60045463ffffffff8216106105d45760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2043686f69636520696e64657820697320746f6f20686967686044820152601760f91b606482015260840161050b565b600154600354604051632dd7519b60e21b815233600482015261010090910463ffffffff1660248201526001600160a01b039091169063b75d466c9060440160206040518083038186803b15801561062b57600080fd5b505afa15801561063f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106639190611415565b156106b05760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e000000000000604482015260640161050b565b6040516370a0823160e01b815233600482015269054b40b1f852bda00000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561071b57600080fd5b505afa15801561072f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107539190611437565b10156107a15760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e00604482015260640161050b565b33600090815260076020526040902054640100000000900460ff1661082257336000818152600760205260408120805464ff0000000019166401000000001790556006805460018101825591527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b03191690911790555b336000908152600760205260409020805463ffffffff191663ffffffff92909216919091179055565b60606004805480602002602001604051908101604052809291908181526020016000905b8282101561091b57838290600052602060002001805461088e90611364565b80601f01602080910402602001604051908101604052809291908181526020018280546108ba90611364565b80156109075780601f106108dc57610100808354040283529160200191610907565b820191906000526020600020905b8154815290600101906020018083116108ea57829003601f168201915b50505050508152602001906001019061086f565b50505050905090565b6000546001600160a01b0316331461094e5760405162461bcd60e51b815260040161050b906113e0565b60035460ff16156109a15760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e0000604482015260640161050b565b6003805460ff1916600117905560005b600654811015610b7b576000600682815481106109d0576109d0611399565b60009182526020909120015460015460035460405163c143c6db60e01b81526001600160a01b039384166004820181905261010090920463ffffffff16602482015290935091169063c143c6db9060440160206040518083038186803b158015610a3957600080fd5b505afa158015610a4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a719190611437565b6040516370a0823160e01b81526001600160a01b0383811660048301527f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b158015610ad257600080fd5b505afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611437565b610b149190611450565b6001600160a01b03821660009081526007602052604090205460058054909163ffffffff16908110610b4857610b48611399565b906000526020600020016000828254610b619190611450565b90915550829150610b739050816113c5565b9150506109b1565b50565b600054600160a81b900460ff16610ba257600054600160a01b900460ff1615610ba6565b303b155b610c095760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161050b565b600054600160a81b900460ff16158015610c33576000805461ffff60a01b191661010160a01b1790555b8351610c46906002906020870190610e45565b506003805464ffffffffff191661010063ffffffff86160260ff19161790558151610c78906004906020850190610ec9565b5060045467ffffffffffffffff811115610c9457610c9461118d565b604051908082528060200260200182016040528015610cbd578160200160208202803683370190505b508051610cd291600591602090910190610f22565b508015610ce7576000805460ff60a81b191690555b50505050565b6000546001600160a01b03163314610d175760405162461bcd60e51b815260040161050b906113e0565b6001600160a01b038116610d7c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161050b565b610b7b81610db0565b60048181548110610d9557600080fd5b90600052602060002001600091509050805461029490611364565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604051806040016040528060006001600160a01b03168152602001610e406040518060400160405280600063ffffffff1681526020016000151581525090565b905290565b828054610e5190611364565b90600052602060002090601f016020900481019282610e735760008555610eb9565b82601f10610e8c57805160ff1916838001178555610eb9565b82800160010185558215610eb9579182015b82811115610eb9578251825591602001919060010190610e9e565b50610ec5929150610f5c565b5090565b828054828255906000526020600020908101928215610f16579160200282015b82811115610f165782518051610f06918491602090910190610e45565b5091602001919060010190610ee9565b50610ec5929150610f71565b828054828255906000526020600020908101928215610eb95791602002820182811115610eb9578251825591602001919060010190610e9e565b5b80821115610ec55760008155600101610f5d565b80821115610ec5576000610f858282610f8e565b50600101610f71565b508054610f9a90611364565b6000825580601f10610faa575050565b601f016020900490600052602060002090810190610b7b9190610f5c565b6000815180845260005b81811015610fee57602081850181015186830182015201610fd2565b81811115611000576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006110286020830184610fc8565b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101561108d57815180516001600160a01b03168552860151805163ffffffff16878601528601511515858501526060909301929085019060010161104c565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156110d2578351835292840192918401916001016110b6565b50909695505050505050565b6000602082840312156110f057600080fd5b5035919050565b803563ffffffff8116811461110b57600080fd5b919050565b60006020828403121561112257600080fd5b611028826110f7565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561118057603f1988860301845261116e858351610fc8565b94509285019290850190600101611152565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111cc576111cc61118d565b604052919050565b600082601f8301126111e557600080fd5b813567ffffffffffffffff8111156111ff576111ff61118d565b611212601f8201601f19166020016111a3565b81815284602083860101111561122757600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561125957600080fd5b833567ffffffffffffffff8082111561127157600080fd5b61127d878388016111d4565b94506020915061128e8287016110f7565b93506040860135818111156112a257600080fd5b8601601f810188136112b357600080fd5b8035828111156112c5576112c561118d565b8060051b6112d48582016111a3565b918252828101850191858101908b8411156112ee57600080fd5b86850192505b8383101561132a5782358681111561130c5760008081fd5b61131a8d89838901016111d4565b83525091860191908601906112f4565b809750505050505050509250925092565b60006020828403121561134d57600080fd5b81356001600160a01b038116811461102857600080fd5b600181811c9082168061137857607f821691505b6020821081141561046257634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156113d9576113d96113af565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561142757600080fd5b8151801515811461102857600080fd5b60006020828403121561144957600080fd5b5051919050565b60008219821115611463576114636113af565b50019056fea2646970667358221220cc29abb2a74888c66c6f25ea2bdef32d7942e5fcc14e009d78bc6ab9d550a35b64736f6c63430008090033"; + "0x60c060405269054b40b1f852bda0000060a0523480156200001f57600080fd5b50604051620016f3380380620016f383398101604081905262000042916200013f565b81816200004f33620000d6565b6001600160a01b038216620000aa5760405162461bcd60e51b815260206004820152601a60248201527f566f74653a204450532061646472657373206973207a65726f2e000000000000604482015260640160405180910390fd5b6001600160a01b03918216608052600180546001600160a01b03191691909216179055506200017e9050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200013c57600080fd5b50565b600080604083850312156200015357600080fd5b8251620001608162000126565b6020840151909250620001738162000126565b809150509250929050565b60805160a051611541620001b260003960006108e101526000818161021d015281816105ac015261090301526115416000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639094c76311610097578063ec55688911610066578063ec55688914610205578063ef4e06ec14610218578063f2fde38b1461023f578063f6fd7fde1461025257600080fd5b80639094c763146101c257806398c81bbf146101d5578063bf63a577146101ea578063e254be56146101f257600080fd5b806359037b89116100d357806359037b8914610157578063597e1fb514610178578063715018a6146101955780638da5cb5b1461019d57600080fd5b80630a59a98c1461010557806327454ea81461012357806343d726d6146101385780634717f97c14610142575b600080fd5b61010d610265565b60405161011a9190610ffa565b60405180910390f35b61012b6102f3565b60405161011a9190611014565b610140610446565b005b61014a61069a565b60405161011a919061107f565b61016a6101653660046110c3565b6106f2565b60405190815260200161011a565b6003546101859060ff1681565b604051901515815260200161011a565b610140610713565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161011a565b6101406101d03660046110dc565b610749565b6101dd610a7d565b60405161011a9190611102565b61010d610b56565b61014061020036600461121b565b610b63565b6001546101aa906001600160a01b031681565b6101aa7f000000000000000000000000000000000000000000000000000000000000000081565b61014061024d366004611325565b610cd2565b61010d6102603660046110c3565b610d6a565b600280546102729061134e565b80601f016020809104026020016040519081016040528092919081815260200182805461029e9061134e565b80156102eb5780601f106102c0576101008083540402835291602001916102eb565b820191906000526020600020905b8154815290600101906020018083116102ce57829003601f168201915b505050505081565b60075460609060009067ffffffffffffffff81111561031457610314611164565b60405190808252806020026020018201604052801561034d57816020015b61033a610de5565b8152602001906001900390816103325790505b50905060005b6007548110156104405760405180604001604052806007838154811061037b5761037b611383565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b0316815260200160086000600785815481106103be576103be611383565b60009182526020808320909101546001600160a01b03168352828101939093526040918201902081518083019092525463ffffffff8116825260ff640100000000909104161515918101919091529052825183908390811061042257610422611383565b60200260200101819052508080610438906113af565b915050610353565b50919050565b6000546001600160a01b031633146104795760405162461bcd60e51b8152600401610470906113ca565b60405180910390fd5b60035460ff16156104cc5760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e00006044820152606401610470565b6003805460ff1916600117905560005b600754811015610697576000600782815481106104fb576104fb611383565b6000918252602090912001546001546040516302fbd00360e21b81526001600160a01b039283169350911690630bef400c9061053d90849060049081016113ff565b60206040518083038186803b15801561055557600080fd5b505afa158015610569573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058d91906114b8565b6040516370a0823160e01b81526001600160a01b0383811660048301527f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b1580156105ee57600080fd5b505afa158015610602573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062691906114b8565b61063091906114d1565b6001600160a01b03821660009081526008602052604090205460068054909163ffffffff1690811061066457610664611383565b90600052602060002001600082825461067d91906114d1565b9091555082915061068f9050816113af565b9150506104dc565b50565b606060068054806020026020016040519081016040528092919081815260200182805480156106e857602002820191906000526020600020905b8154815260200190600101908083116106d4575b5050505050905090565b6006818154811061070257600080fd5b600091825260209091200154905081565b6000546001600160a01b0316331461073d5760405162461bcd60e51b8152600401610470906113ca565b6107476000610d95565b565b60035460ff161561079c5760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e000000000000006044820152606401610470565b60055463ffffffff8216106107fd5760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2043686f69636520696e64657820697320746f6f20686967686044820152601760f91b6064820152608401610470565b60015460405163442f655160e01b81526001600160a01b039091169063442f65519061082f90339060049081016113ff565b60206040518083038186803b15801561084757600080fd5b505afa15801561085b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087f91906114e9565b156108cc5760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e0000000000006044820152606401610470565b6040516370a0823160e01b81523360048201527f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561094d57600080fd5b505afa158015610961573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098591906114b8565b10156109d35760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e006044820152606401610470565b33600090815260086020526040902054640100000000900460ff16610a5457336000818152600860205260408120805464ff0000000019166401000000001790556007805460018101825591527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b03191690911790555b336000908152600860205260409020805463ffffffff191663ffffffff92909216919091179055565b60606005805480602002602001604051908101604052809291908181526020016000905b82821015610b4d578382906000526020600020018054610ac09061134e565b80601f0160208091040260200160405190810160405280929190818152602001828054610aec9061134e565b8015610b395780601f10610b0e57610100808354040283529160200191610b39565b820191906000526020600020905b815481529060010190602001808311610b1c57829003601f168201915b505050505081526020019060010190610aa1565b50505050905090565b600480546102729061134e565b600054600160a81b900460ff16610b8757600054600160a01b900460ff1615610b8b565b303b155b610bee5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610470565b600054600160a81b900460ff16158015610c18576000805461ffff60a01b191661010160a01b1790555b8351610c2b906002906020870190610e2a565b508251610c3f906004906020860190610e2a565b506003805460ff191690558151610c5d906005906020850190610eae565b5060055467ffffffffffffffff811115610c7957610c79611164565b604051908082528060200260200182016040528015610ca2578160200160208202803683370190505b508051610cb791600691602090910190610f07565b508015610ccc576000805460ff60a81b191690555b50505050565b6000546001600160a01b03163314610cfc5760405162461bcd60e51b8152600401610470906113ca565b6001600160a01b038116610d615760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610470565b61069781610d95565b60058181548110610d7a57600080fd5b9060005260206000200160009150905080546102729061134e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604051806040016040528060006001600160a01b03168152602001610e256040518060400160405280600063ffffffff1681526020016000151581525090565b905290565b828054610e369061134e565b90600052602060002090601f016020900481019282610e585760008555610e9e565b82601f10610e7157805160ff1916838001178555610e9e565b82800160010185558215610e9e579182015b82811115610e9e578251825591602001919060010190610e83565b50610eaa929150610f41565b5090565b828054828255906000526020600020908101928215610efb579160200282015b82811115610efb5782518051610eeb918491602090910190610e2a565b5091602001919060010190610ece565b50610eaa929150610f56565b828054828255906000526020600020908101928215610e9e5791602002820182811115610e9e578251825591602001919060010190610e83565b5b80821115610eaa5760008155600101610f42565b80821115610eaa576000610f6a8282610f73565b50600101610f56565b508054610f7f9061134e565b6000825580601f10610f8f575050565b601f0160209004906000526020600020908101906106979190610f41565b6000815180845260005b81811015610fd357602081850181015186830182015201610fb7565b81811115610fe5576000602083870101525b50601f01601f19169290920160200192915050565b60208152600061100d6020830184610fad565b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101561107257815180516001600160a01b03168552860151805163ffffffff168786015286015115158585015260609093019290850190600101611031565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156110b75783518352928401929184019160010161109b565b50909695505050505050565b6000602082840312156110d557600080fd5b5035919050565b6000602082840312156110ee57600080fd5b813563ffffffff8116811461100d57600080fd5b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561115757603f19888603018452611145858351610fad565b94509285019290850190600101611129565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111a3576111a3611164565b604052919050565b600082601f8301126111bc57600080fd5b813567ffffffffffffffff8111156111d6576111d6611164565b6111e9601f8201601f191660200161117a565b8181528460208386010111156111fe57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561123057600080fd5b833567ffffffffffffffff8082111561124857600080fd5b611254878388016111ab565b945060209150818601358181111561126b57600080fd5b611277888289016111ab565b94505060408601358181111561128c57600080fd5b8601601f8101881361129d57600080fd5b8035828111156112af576112af611164565b8060051b6112be85820161117a565b918252828101850191858101908b8411156112d857600080fd5b86850192505b83831015611314578235868111156112f65760008081fd5b6113048d89838901016111ab565b83525091860191908601906112de565b809750505050505050509250925092565b60006020828403121561133757600080fd5b81356001600160a01b038116811461100d57600080fd5b600181811c9082168061136257607f821691505b6020821081141561044057634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156113c3576113c3611399565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60018060a01b0383168152600060206040818401526000845481600182811c91508083168061142f57607f831692505b85831081141561144d57634e487b7160e01b85526022600452602485fd5b604088018390526060880181801561146c576001811461147d576114a8565b60ff198616825287820196506114a8565b60008b81526020902060005b868110156114a257815484820152908501908901611489565b83019750505b50949a9950505050505050505050565b6000602082840312156114ca57600080fd5b5051919050565b600082198211156114e4576114e4611399565b500190565b6000602082840312156114fb57600080fd5b8151801515811461100d57600080fdfea26469706673582212206ad87eee659303e33b667671e7df60761cf4b91048252020db33d5731fdf09d164736f6c63430008090033"; type ExposedBallotConstructorParams = | [signer?: Signer] diff --git a/typings/factories/contracts/testing/ExposedVotingProxy__factory.ts b/typings/factories/contracts/testing/ExposedVotingProxy__factory.ts deleted file mode 100644 index a35c305..0000000 --- a/typings/factories/contracts/testing/ExposedVotingProxy__factory.ts +++ /dev/null @@ -1,291 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - ExposedVotingProxy, - ExposedVotingProxyInterface, -} from "../../../contracts/testing/ExposedVotingProxy"; - -const _abi = [ - { - inputs: [ - { - internalType: "contract IERC20Metadata", - name: "_DPS", - type: "address", - }, - { - internalType: "contract BallotTagManager", - name: "_ballotTagManager", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - inputs: [], - name: "DPS", - outputs: [ - { - internalType: "contract IERC20Metadata", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint32", - name: "tagIndex", - type: "uint32", - }, - ], - name: "_delegates", - outputs: [ - { - internalType: "address[]", - name: "", - type: "address[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "uint32", - name: "tagIndex", - type: "uint32", - }, - ], - name: "_proxyVoters", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ballotFactory", - outputs: [ - { - internalType: "contract BallotFactory", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ballotTagManager", - outputs: [ - { - internalType: "contract BallotTagManager", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint32", - name: "tagIndex", - type: "uint32", - }, - ], - name: "grantProxy", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "voter", - type: "address", - }, - { - internalType: "uint32", - name: "tagIndex", - type: "uint32", - }, - ], - name: "hasDelegated", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "voter", - type: "address", - }, - { - internalType: "uint32", - name: "tagIndex", - type: "uint32", - }, - ], - name: "proxyAmount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60a060405234801561001057600080fd5b5060405161106738038061106783398101604081905261002f916101a1565b818161003a33610139565b6001600160a01b03821661009f5760405162461bcd60e51b815260206004820152602160248201527f566f74696e6750726f78793a204450532061646472657373206973207a65726f6044820152601760f91b60648201526084015b60405180910390fd5b6001600160a01b03811661010e5760405162461bcd60e51b815260206004820152603060248201527f566f74696e6750726f78793a2042616c6c6f7420746167206d616e616765722060448201526f30b2323932b9b99034b9903d32b9379760811b6064820152608401610096565b6001600160a01b03918216608052600280546001600160a01b03191691909216179055506101db9050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461019e57600080fd5b50565b600080604083850312156101b457600080fd5b82516101bf81610189565b60208401519092506101d081610189565b809150509250929050565b608051610e63610204600039600081816101f70152818161049e01526109270152610e636000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063b75d466c11610071578063b75d466c14610130578063c143c6db14610180578063c43e163d146101a1578063ceb0b935146101df578063ef4e06ec146101f2578063f2fde38b1461021957600080fd5b80631d700c53146100ae5780633e7ee19f146100d7578063715018a61461010257806374773a451461010c5780638da5cb5b1461011f575b600080fd5b6100c16100bc366004610af8565b61022c565b6040516100ce9190610b38565b60405180910390f35b6002546100ea906001600160a01b031681565b6040516001600160a01b0390911681526020016100ce565b61010a610364565b005b61010a61011a366004610af8565b6103cf565b6000546001600160a01b03166100ea565b61017061013e366004610af8565b6001600160a01b03918216600090815260046020908152604080832063ffffffff949094168352929052205416151590565b60405190151581526020016100ce565b61019361018e366004610af8565b6107e7565b6040519081526020016100ce565b6100ea6101af366004610af8565b6001600160a01b03918216600090815260046020908152604080832063ffffffff94909416835292905220541690565b6001546100ea906001600160a01b031681565b6100ea7f000000000000000000000000000000000000000000000000000000000000000081565b61010a610227366004610b85565b6109c1565b6001600160a01b038216600090815260036020908152604080832063ffffffff80861685529252822060020154606092911667ffffffffffffffff81111561027657610276610ba7565b60405190808252806020026020018201604052801561029f578160200160208202803683370190505b50905060005b6001600160a01b038516600090815260036020908152604080832063ffffffff80891685529252909120600201548116908216101561035c576001600160a01b03808616600090815260036020908152604080832063ffffffff808a1685529083528184209086168085526001909101909252909120548451921691849190811061033257610332610bbd565b6001600160a01b03909216602092830291909101909101528061035481610be9565b9150506102a5565b509392505050565b6000546001600160a01b031633146103c35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6103cd6000610a8c565b565b6002546040805163995d9ab760e01b8152905163ffffffff8416926001600160a01b03169163995d9ab7916004808301926000929190829003018186803b15801561041957600080fd5b505afa15801561042d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104559190810190610c3e565b51116104735760405162461bcd60e51b81526004016103ba90610d75565b6040516370a0823160e01b81526001600160a01b03838116600483015269054b40b1f852bda00000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b1580156104e257600080fd5b505afa1580156104f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051a9190610db7565b10158061052e57506001600160a01b038216155b6105895760405162461bcd60e51b815260206004820152602660248201527f566f74696e6750726f78793a2050726f787920686173206e6f7420656e6f756760448201526534102228299760d11b60648201526084016103ba565b33600090815260046020908152604080832063ffffffff851684529091529020546001600160a01b0316156107015733600081815260046020908152604080832063ffffffff808716808652918452828520546001600160a01b031685526003845282852091855290835281842094845291849052822054600284015490821692600185810193919261061c9216610dd0565b63ffffffff90811682526020808301939093526040918201600090812054858316825260018781019586905293822080546001600160a01b0319166001600160a01b039092169190911790556002860154909392849261067c9216610dd0565b63ffffffff90811682526020808301939093526040918201600090812080546001600160a01b0319166001600160a01b039690961695909517909455338452918590528220805463ffffffff19169055600284018054909116916106df83610df5565b91906101000a81548163ffffffff021916908363ffffffff1602179055505050505b33600090815260046020908152604080832063ffffffff85168452909152902080546001600160a01b0319166001600160a01b038416908117909155156107e3576001600160a01b038216600090815260036020908152604080832063ffffffff808616855290835281842060028101805433808852838752858820805463ffffffff1916928616929092179091558154841687526001830190955292852080546001600160a01b031916909417909355815492939216916107c283610be9565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505b5050565b60008163ffffffff16600260009054906101000a90046001600160a01b03166001600160a01b031663995d9ab76040518163ffffffff1660e01b815260040160006040518083038186803b15801561083e57600080fd5b505afa158015610852573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261087a9190810190610c3e565b51116108985760405162461bcd60e51b81526004016103ba90610d75565b6000805b6001600160a01b038516600090815260036020908152604080832063ffffffff80891685529252909120600201548116908216101561035c576001600160a01b03858116600090815260036020908152604080832063ffffffff89811685529083528184209086168452600101909152908190205490516370a0823160e01b815290821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b15801561096b57600080fd5b505afa15801561097f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a39190610db7565b6109ad9083610e15565b9150806109b981610be9565b91505061089c565b6000546001600160a01b03163314610a1b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103ba565b6001600160a01b038116610a805760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103ba565b610a8981610a8c565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b0381168114610af357600080fd5b919050565b60008060408385031215610b0b57600080fd5b610b1483610adc565b9150602083013563ffffffff81168114610b2d57600080fd5b809150509250929050565b6020808252825182820181905260009190848201906040850190845b81811015610b795783516001600160a01b031683529284019291840191600101610b54565b50909695505050505050565b600060208284031215610b9757600080fd5b610ba082610adc565b9392505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600063ffffffff80831681811415610c0357610c03610bd3565b6001019392505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715610c3657610c36610ba7565b604052919050565b60006020808385031215610c5157600080fd5b825167ffffffffffffffff80821115610c6957600080fd5b8185019150601f8681840112610c7e57600080fd5b825182811115610c9057610c90610ba7565b8060051b610c9f868201610c0d565b918252848101860191868101908a841115610cb957600080fd5b87870192505b83831015610d6757825186811115610cd75760008081fd5b8701603f81018c13610ce95760008081fd5b8881015187811115610cfd57610cfd610ba7565b610d0e818801601f19168b01610c0d565b81815260408e81848601011115610d255760008081fd5b60005b83811015610d43578481018201518382018e01528c01610d28565b83811115610d545760008d85850101525b5050845250509187019190870190610cbf565b9a9950505050505050505050565b60208082526022908201527f566f74696e6750726f78793a2054616720696e64657820697320746f6f2068696040820152610ced60f31b606082015260800190565b600060208284031215610dc957600080fd5b5051919050565b600063ffffffff83811690831681811015610ded57610ded610bd3565b039392505050565b600063ffffffff821680610e0b57610e0b610bd3565b6000190192915050565b60008219821115610e2857610e28610bd3565b50019056fea26469706673582212207bad19eb300f4f3fda2779bee1850de99ee223ff056cfb49bd0e56f01f38838c64736f6c63430008090033"; - -type ExposedVotingProxyConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ExposedVotingProxyConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ExposedVotingProxy__factory extends ContractFactory { - constructor(...args: ExposedVotingProxyConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _DPS: string, - _ballotTagManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _DPS, - _ballotTagManager, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _DPS: string, - _ballotTagManager: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_DPS, _ballotTagManager, overrides || {}); - } - override attach(address: string): ExposedVotingProxy { - return super.attach(address) as ExposedVotingProxy; - } - override connect(signer: Signer): ExposedVotingProxy__factory { - return super.connect(signer) as ExposedVotingProxy__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ExposedVotingProxyInterface { - return new utils.Interface(_abi) as ExposedVotingProxyInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ExposedVotingProxy { - return new Contract(address, _abi, signerOrProvider) as ExposedVotingProxy; - } -} diff --git a/typings/hardhat.d.ts b/typings/hardhat.d.ts index dbf742a..17d6222 100644 --- a/typings/hardhat.d.ts +++ b/typings/hardhat.d.ts @@ -52,10 +52,6 @@ declare module "hardhat/types/runtime" { name: "Ballot", signerOrOptions?: ethers.Signer | FactoryOptions ): Promise; - getContractFactory( - name: "BallotTagManager", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; getContractFactory( name: "DeepSquare", signerOrOptions?: ethers.Signer | FactoryOptions @@ -100,10 +96,6 @@ declare module "hardhat/types/runtime" { name: "ExposedBallot", signerOrOptions?: ethers.Signer | FactoryOptions ): Promise; - getContractFactory( - name: "ExposedVotingProxy", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; getContractFactory( name: "BridgeToken", signerOrOptions?: ethers.Signer | FactoryOptions @@ -125,9 +117,9 @@ declare module "hardhat/types/runtime" { signerOrOptions?: ethers.Signer | FactoryOptions ): Promise; getContractFactory( - name: "VotingProxy", + name: "VotingDelegation", signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; + ): Promise; getContractAt( name: "AggregatorV3Interface", @@ -179,11 +171,6 @@ declare module "hardhat/types/runtime" { address: string, signer?: ethers.Signer ): Promise; - getContractAt( - name: "BallotTagManager", - address: string, - signer?: ethers.Signer - ): Promise; getContractAt( name: "DeepSquare", address: string, @@ -239,11 +226,6 @@ declare module "hardhat/types/runtime" { address: string, signer?: ethers.Signer ): Promise; - getContractAt( - name: "ExposedVotingProxy", - address: string, - signer?: ethers.Signer - ): Promise; getContractAt( name: "BridgeToken", address: string, @@ -270,10 +252,10 @@ declare module "hardhat/types/runtime" { signer?: ethers.Signer ): Promise; getContractAt( - name: "VotingProxy", + name: "VotingDelegation", address: string, signer?: ethers.Signer - ): Promise; + ): Promise; // default types getContractFactory( From 5784383452fb52dfadbf3dd9d7b818c20f1bde9f Mon Sep 17 00:00:00 2001 From: valentinpollart Date: Mon, 25 Apr 2022 16:47:01 +0200 Subject: [PATCH 10/25] fix: update import methods in test --- test/Ballot.spec.ts | 5 ++++- test/BallotFactory.spec.ts | 5 ++++- test/VotingDelegation.spec.ts | 4 +++- test/testing/setupVoting.ts | 16 +++++++--------- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/test/Ballot.spec.ts b/test/Ballot.spec.ts index 1420a0c..8a7f7af 100644 --- a/test/Ballot.spec.ts +++ b/test/Ballot.spec.ts @@ -3,7 +3,10 @@ import { BigNumber } from '@ethersproject/bignumber'; import { parseUnits } from '@ethersproject/units'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { ZERO_ADDRESS } from '../lib/constants'; -import { DeepSquare, ExposedBallot, ExposedBallot__factory, VotingDelegation } from '../typings'; +import { DeepSquare } from '../typings/contracts/DeepSquare'; +import { VotingDelegation } from '../typings/contracts/VotingDelegation'; +import { ExposedBallot } from '../typings/contracts/testing/ExposedBallot'; +import { ExposedBallot__factory } from '../typings/factories/contracts/testing/ExposedBallot__factory'; import { ERC20Agent } from './testing/ERC20Agent'; import setup from './testing/setup'; import setupVoting from './testing/setupVoting'; diff --git a/test/BallotFactory.spec.ts b/test/BallotFactory.spec.ts index 236437f..ee09c16 100644 --- a/test/BallotFactory.spec.ts +++ b/test/BallotFactory.spec.ts @@ -1,7 +1,10 @@ import { expect } from 'chai'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { ZERO_ADDRESS } from '../lib/constants'; -import { Ballot, BallotFactory, BallotFactory__factory, DeepSquare } from '../typings'; +import { Ballot } from '../typings/contracts/Ballot'; +import { DeepSquare } from '../typings/contracts/DeepSquare'; +import { BallotFactory } from '../typings/contracts/factories/BallotFactory'; +import { BallotFactory__factory } from '../typings/factories/contracts/factories/BallotFactory__factory'; import setup from './testing/setup'; import setupVoting from './testing/setupVoting'; diff --git a/test/VotingDelegation.spec.ts b/test/VotingDelegation.spec.ts index f32d447..470ae48 100644 --- a/test/VotingDelegation.spec.ts +++ b/test/VotingDelegation.spec.ts @@ -2,7 +2,9 @@ import { expect } from 'chai'; import { parseUnits } from '@ethersproject/units'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { ZERO_ADDRESS } from '../lib/constants'; -import { DeepSquare, VotingDelegation, VotingDelegation__factory } from '../typings'; +import { DeepSquare } from '../typings/contracts/DeepSquare'; +import { VotingDelegation } from '../typings/contracts/VotingDelegation'; +import { VotingDelegation__factory } from '../typings/factories/contracts/VotingDelegation__factory'; import { ERC20Agent } from './testing/ERC20Agent'; import setup from './testing/setup'; import setupVoting from './testing/setupVoting'; diff --git a/test/testing/setupVoting.ts b/test/testing/setupVoting.ts index d989576..55bf9da 100644 --- a/test/testing/setupVoting.ts +++ b/test/testing/setupVoting.ts @@ -1,13 +1,11 @@ import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; -import { - Ballot, - Ballot__factory, - BallotFactory, - BallotFactory__factory, - DeepSquare, - VotingDelegation, - VotingDelegation__factory, -} from '../../typings'; +import { Ballot } from '../../typings/contracts/Ballot'; +import { DeepSquare } from '../../typings/contracts/DeepSquare'; +import { VotingDelegation } from '../../typings/contracts/VotingDelegation'; +import { BallotFactory } from '../../typings/contracts/factories/BallotFactory'; +import { Ballot__factory } from '../../typings/factories/contracts/Ballot__factory'; +import { VotingDelegation__factory } from '../../typings/factories/contracts/VotingDelegation__factory'; +import { BallotFactory__factory } from '../../typings/factories/contracts/factories/BallotFactory__factory'; interface SetupVotingOutput { votingDelegation: VotingDelegation; From c4db792119712d2de268e55bd72e6b4782ea93e2 Mon Sep 17 00:00:00 2001 From: valentinpollart Date: Mon, 25 Apr 2022 16:52:57 +0200 Subject: [PATCH 11/25] fix: reenable all tests --- test/BallotFactory.spec.ts | 2 +- test/BallotTagManager.spec.ts | 23 ----------------------- 2 files changed, 1 insertion(+), 24 deletions(-) delete mode 100644 test/BallotTagManager.spec.ts diff --git a/test/BallotFactory.spec.ts b/test/BallotFactory.spec.ts index ee09c16..39891d9 100644 --- a/test/BallotFactory.spec.ts +++ b/test/BallotFactory.spec.ts @@ -8,7 +8,7 @@ import { BallotFactory__factory } from '../typings/factories/contracts/factories import setup from './testing/setup'; import setupVoting from './testing/setupVoting'; -describe.only('Ballot Factory', async () => { +describe('Ballot Factory', async () => { let owner: SignerWithAddress; let DPS: DeepSquare; let ballotImplementation: Ballot; diff --git a/test/BallotTagManager.spec.ts b/test/BallotTagManager.spec.ts deleted file mode 100644 index 47ba50c..0000000 --- a/test/BallotTagManager.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { expect } from 'chai'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; -import { BallotTagManager, BallotTagManager__factory } from '../typings'; -import setup from './testing/setup'; - -describe('BallotTagManager', () => { - let owner: SignerWithAddress; - let ballotTagManager: BallotTagManager; - - beforeEach(async () => { - ({ owner } = await setup()); - ballotTagManager = await new BallotTagManager__factory(owner).deploy(); - }); - - describe('addTag', () => { - it('should add a tag to the tag list', async () => { - await ballotTagManager.addTag('foo'); - expect(await ballotTagManager.getTags()).to.deep.equals(['foo']); - await ballotTagManager.addTag('bar'); - expect(await ballotTagManager.getTags()).to.deep.equals(['foo', 'bar']); - }); - }); -}); From c94a71a131a224ddb563f73fbaaea1739cda7093 Mon Sep 17 00:00:00 2001 From: Clarisse Tarrou Date: Tue, 26 Apr 2022 11:25:38 +0200 Subject: [PATCH 12/25] feat(deploy-vote): first draft of a deployment script for the voting contract --- scripts/deploy-vote.ts | 67 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 scripts/deploy-vote.ts diff --git a/scripts/deploy-vote.ts b/scripts/deploy-vote.ts new file mode 100644 index 0000000..8b37233 --- /dev/null +++ b/scripts/deploy-vote.ts @@ -0,0 +1,67 @@ +import { ethers, network } from 'hardhat'; +import { parseUnits } from '@ethersproject/units'; +import { DeepSquare__factory } from '../typings'; +import { Ballot__factory } from '../typings/factories/contracts/Ballot__factory'; +import { VotingDelegation__factory } from '../typings/factories/contracts/VotingDelegation__factory'; +import { BallotFactory__factory } from '../typings/factories/contracts/factories/BallotFactory__factory'; + +type NetworkName = 'hardhat' | 'mainnet' | 'fuji'; +type ContractName = 'DeepSquare'; + +const addresses: Record> = { + DeepSquare: { + hardhat: '0xf192cae2e7cd4048bea307368015e3647c49338e', + mainnet: '0xf192cae2e7cd4048bea307368015e3647c49338e', + fuji: '0x270D1399744874C72f95873eB9606172D155669D', + }, +}; + +async function main() { + const networkName = network.name as NetworkName; + const [deployer, ...accounts] = await ethers.getSigners(); + + const DeepSquareFactory = new DeepSquare__factory(deployer); + const DeepSquare = DeepSquareFactory.attach(addresses.DeepSquare[networkName]); + + const gnosisAddress = await DeepSquare.owner(); + + console.log('deployer:', deployer.address); + console.log('gnosis:', gnosisAddress); + + const votingDelegation = await new VotingDelegation__factory(deployer).deploy(DeepSquare.address); + const ballotImplementation = await new Ballot__factory(deployer).deploy(DeepSquare.address, votingDelegation.address); + const ballotFactory = await new BallotFactory__factory(deployer).deploy(ballotImplementation.address); + + if (networkName === 'fuji') { + const ballotCreationTransaction = await ballotFactory.createBallot( + 'Is this deployment functional ?', + 'Deployment', + ['Yes', 'No'], + ); + const cloneAddress: string = (await ballotCreationTransaction.wait()).events?.pop()?.args?.[0]; + console.log('Voting clone deploy at: ', cloneAddress); + const clone = new Ballot__factory(deployer).attach(cloneAddress); + await DeepSquare.connect(gnosisAddress).transfer(deployer.address, parseUnits('50000', 18)); + await clone.vote(0); + await DeepSquare.connect(gnosisAddress).transfer(accounts[0].address, parseUnits('25000', 18)); + await clone.connect(accounts[0].address).vote(0); + await DeepSquare.connect(gnosisAddress).transfer(accounts[1].address, parseUnits('25000', 18)); + await clone.connect(accounts[1].address).vote(1); + + await clone.close(); + console.log('Vote results: '); + const choices = await clone.getChoices(); + for (const [index, result] of (await clone.getResults()).entries()) { + console.log(`${choices[index]}: ${result.toString()}`); + } + } + + await votingDelegation.transferOwnership(gnosisAddress); + await ballotImplementation.renounceOwnership(); + await ballotFactory.transferOwnership(gnosisAddress); +} + +main().catch((e) => { + console.error(e); + process.exit(1); +}); From c060583e4b079fe61f315f80e990f9280d47023b Mon Sep 17 00:00:00 2001 From: valentinpollart Date: Tue, 26 Apr 2022 15:25:49 +0200 Subject: [PATCH 13/25] feat: add deployment script, fix several bugs --- contracts/Ballot.sol | 11 ++++-- contracts/factories/BallotFactory.sol | 12 ++++-- scripts/deploy-vote.ts | 37 +++++++++++++------ test/Ballot.spec.ts | 13 +++++-- test/BallotFactory.spec.ts | 7 +++- test/testing/setupVoting.ts | 2 +- typings/contracts/Ballot.ts | 33 ++++++++++++++++- typings/contracts/factories/BallotFactory.ts | 14 +++++++ typings/contracts/testing/ExposedBallot.ts | 33 ++++++++++++++++- .../factories/contracts/Ballot__factory.ts | 30 ++++++++++++++- .../contracts/VotingDelegation__factory.ts | 2 +- .../factories/BallotFactory__factory.ts | 29 ++++++++++++++- .../testing/ExposedBallot__factory.ts | 30 ++++++++++++++- 13 files changed, 220 insertions(+), 33 deletions(-) diff --git a/contracts/Ballot.sol b/contracts/Ballot.sol index 46dd67f..4da9ddb 100644 --- a/contracts/Ballot.sol +++ b/contracts/Ballot.sol @@ -8,8 +8,9 @@ import "@openzeppelin/contracts/proxy/utils/Initializable.sol"; import "./VotingDelegation.sol"; contract Ballot is Ownable, Initializable { - IERC20Metadata public immutable DPS; + IERC20Metadata public DPS; VotingDelegation public proxy; + BallotFactory public factory; struct Vote { uint32 choiceIndex; @@ -35,12 +36,15 @@ contract Ballot is Ownable, Initializable { proxy = _proxy; } - function init(string memory _subject, string memory _topic, string[] memory _choices) public initializer { + function init(IERC20Metadata _DPS, VotingDelegation _proxy, BallotFactory _factory, string memory _subject, string memory _topic, string[] memory _choices) public initializer { subject = _subject; topic = _topic; closed = false; choices = _choices; resultStorage = new uint256[](choices.length); + DPS = _DPS; + proxy = _proxy; + factory = _factory; } function getChoices() external view returns(string[] memory) { @@ -67,7 +71,8 @@ contract Ballot is Ownable, Initializable { votes[msg.sender].choiceIndex = choiceIndex; } - function close() external onlyOwner { + function close() external { + require(msg.sender == factory.owner(), "Voting: Restricted to factory owner."); require(!closed, "Voting: Ballot already closed."); closed = true; diff --git a/contracts/factories/BallotFactory.sol b/contracts/factories/BallotFactory.sol index ba46366..3d40478 100644 --- a/contracts/factories/BallotFactory.sol +++ b/contracts/factories/BallotFactory.sol @@ -3,25 +3,29 @@ pragma solidity ^0.8.0; import "@openzeppelin/contracts/access/Ownable.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "@openzeppelin/contracts/proxy/Clones.sol"; import "../Ballot.sol"; import "../VotingDelegation.sol"; contract BallotFactory is Ownable { + IERC20Metadata public DPS; address[] public ballotAddresses; address public implementationAddress; event BallotCreated(address ballotAddress); - constructor(address _implementationAddress){ + constructor(IERC20Metadata _DPS, address _implementationAddress){ + require(address(_DPS) != address(0), "BallotFactory: Implementation address should not be zero address"); require(_implementationAddress != address(0), "BallotFactory: Implementation address should not be zero address"); - implementationAddress = _implementationAddress; + DPS = _DPS; + implementationAddress = _implementationAddress; } function createBallot(string memory subject, string memory topic, string[] memory _choices) external onlyOwner { + Ballot implementation = Ballot(implementationAddress); address cloneAddress = Clones.clone(implementationAddress); - Ballot(cloneAddress).init(subject, topic, _choices); - + Ballot(cloneAddress).init(implementation.DPS(), implementation.proxy(), this, subject, topic, _choices); ballotAddresses.push(cloneAddress); emit BallotCreated(cloneAddress); } diff --git a/scripts/deploy-vote.ts b/scripts/deploy-vote.ts index 8b37233..592ddb8 100644 --- a/scripts/deploy-vote.ts +++ b/scripts/deploy-vote.ts @@ -1,7 +1,7 @@ import { ethers, network } from 'hardhat'; -import { parseUnits } from '@ethersproject/units'; -import { DeepSquare__factory } from '../typings'; +import {formatUnits, parseUnits} from '@ethersproject/units'; import { Ballot__factory } from '../typings/factories/contracts/Ballot__factory'; +import { DeepSquare__factory } from '../typings/factories/contracts/DeepSquare__factory'; import { VotingDelegation__factory } from '../typings/factories/contracts/VotingDelegation__factory'; import { BallotFactory__factory } from '../typings/factories/contracts/factories/BallotFactory__factory'; @@ -18,7 +18,7 @@ const addresses: Record> = { async function main() { const networkName = network.name as NetworkName; - const [deployer, ...accounts] = await ethers.getSigners(); + const [deployer, dpsHolder, ...accounts] = await ethers.getSigners(); const DeepSquareFactory = new DeepSquare__factory(deployer); const DeepSquare = DeepSquareFactory.attach(addresses.DeepSquare[networkName]); @@ -28,9 +28,17 @@ async function main() { console.log('deployer:', deployer.address); console.log('gnosis:', gnosisAddress); + const avaxBalance = await deployer.getBalance(); + const votingDelegation = await new VotingDelegation__factory(deployer).deploy(DeepSquare.address); + console.log('votingDelegation:', votingDelegation.address); const ballotImplementation = await new Ballot__factory(deployer).deploy(DeepSquare.address, votingDelegation.address); - const ballotFactory = await new BallotFactory__factory(deployer).deploy(ballotImplementation.address); + console.log('ballotImplementation:', ballotImplementation.address); + const ballotFactory = await new BallotFactory__factory(deployer).deploy( + DeepSquare.address, + ballotImplementation.address, + ); + console.log('ballotFactory:', ballotFactory.address); if (networkName === 'fuji') { const ballotCreationTransaction = await ballotFactory.createBallot( @@ -39,14 +47,16 @@ async function main() { ['Yes', 'No'], ); const cloneAddress: string = (await ballotCreationTransaction.wait()).events?.pop()?.args?.[0]; - console.log('Voting clone deploy at: ', cloneAddress); + console.log('Voting clone deployed at:', cloneAddress); const clone = new Ballot__factory(deployer).attach(cloneAddress); - await DeepSquare.connect(gnosisAddress).transfer(deployer.address, parseUnits('50000', 18)); - await clone.vote(0); - await DeepSquare.connect(gnosisAddress).transfer(accounts[0].address, parseUnits('25000', 18)); - await clone.connect(accounts[0].address).vote(0); - await DeepSquare.connect(gnosisAddress).transfer(accounts[1].address, parseUnits('25000', 18)); - await clone.connect(accounts[1].address).vote(1); + + await DeepSquare.connect(dpsHolder).transfer(accounts[0].address, parseUnits('50000', 18)); + await clone.connect(accounts[0]).vote(0); + console.log('Voting with:' + accounts[0].address); + + await DeepSquare.connect(dpsHolder).transfer(accounts[1].address, parseUnits('25000', 18)); + await clone.connect(accounts[1]).vote(1); + console.log('Voting with:' + accounts[1].address); await clone.close(); console.log('Vote results: '); @@ -57,8 +67,13 @@ async function main() { } await votingDelegation.transferOwnership(gnosisAddress); + console.log('Transferred voting delegation contract ownership to ' + gnosisAddress); await ballotImplementation.renounceOwnership(); + console.log('Renounced to ballot implementation ownership.'); await ballotFactory.transferOwnership(gnosisAddress); + console.log('Transferred ballot factory contract ownership to ' + gnosisAddress); + + console.log('Deployment cost : ' + formatUnits(avaxBalance.sub(await deployer.getBalance()), 18)); } main().catch((e) => { diff --git a/test/Ballot.spec.ts b/test/Ballot.spec.ts index 8a7f7af..06ada7a 100644 --- a/test/Ballot.spec.ts +++ b/test/Ballot.spec.ts @@ -5,6 +5,7 @@ import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { ZERO_ADDRESS } from '../lib/constants'; import { DeepSquare } from '../typings/contracts/DeepSquare'; import { VotingDelegation } from '../typings/contracts/VotingDelegation'; +import { BallotFactory } from '../typings/contracts/factories/BallotFactory'; import { ExposedBallot } from '../typings/contracts/testing/ExposedBallot'; import { ExposedBallot__factory } from '../typings/factories/contracts/testing/ExposedBallot__factory'; import { ERC20Agent } from './testing/ERC20Agent'; @@ -18,10 +19,11 @@ describe('Ballot', () => { let ballot: ExposedBallot; let agentDPS: ERC20Agent; let votingDelegation: VotingDelegation; + let ballotFactory: BallotFactory; beforeEach(async () => { ({ owner, accounts, DPS, agentDPS } = await setup()); - ({ votingDelegation } = await setupVoting(owner, DPS)); + ({ votingDelegation, ballotFactory } = await setupVoting(owner, DPS)); ballot = await new ExposedBallot__factory(owner).deploy(DPS.address, votingDelegation.address); }); @@ -36,7 +38,7 @@ describe('Ballot', () => { describe('init', () => { it('should initialize ballot state variables', async () => { - await ballot.init('foo', 'bar', ['baz', 'qux']); + await ballot.init(DPS.address, votingDelegation.address, ballotFactory.address, 'foo', 'bar', ['baz', 'qux']); expect(await ballot.subject()).to.equals('foo'); expect(await ballot.topic()).to.equals('bar'); expect(await ballot.getChoices()).to.deep.equals(['baz', 'qux']); @@ -46,7 +48,7 @@ describe('Ballot', () => { describe('vote', () => { beforeEach(async () => { - await ballot.init('foo', 'qux', ['bar', 'baz']); + await ballot.init(DPS.address, votingDelegation.address, ballotFactory.address, 'foo', 'qux', ['bar', 'baz']); }); it('should throw if ballot is closed', async () => { await ballot.close(); @@ -78,7 +80,10 @@ describe('Ballot', () => { describe('closeBallot', async () => { beforeEach(async () => { - await ballot.init('foo', 'qux', ['bar', 'baz']); + await ballot.init(DPS.address, votingDelegation.address, ballotFactory.address, 'foo', 'qux', ['bar', 'baz']); + }); + it('should throw if is not the factory owner', async () => { + await expect(ballot.connect(accounts[0]).close()).to.revertedWith('Voting: Restricted to factory owner.'); }); it('should throw if ballot is not closed', async () => { await ballot.close(); diff --git a/test/BallotFactory.spec.ts b/test/BallotFactory.spec.ts index 39891d9..1e20108 100644 --- a/test/BallotFactory.spec.ts +++ b/test/BallotFactory.spec.ts @@ -21,7 +21,12 @@ describe('Ballot Factory', async () => { describe('constructor', () => { it('should revert if the DPS contract is the zero address', async () => { - await expect(new BallotFactory__factory(owner).deploy(ZERO_ADDRESS)).to.be.revertedWith( + await expect( + new BallotFactory__factory(owner).deploy(ZERO_ADDRESS, ballotImplementation.address), + ).to.be.revertedWith('BallotFactory: Implementation address should not be zero address'); + }); + it('should revert if the DPS contract is the zero address', async () => { + await expect(new BallotFactory__factory(owner).deploy(DPS.address, ZERO_ADDRESS)).to.be.revertedWith( 'BallotFactory: Implementation address should not be zero address', ); }); diff --git a/test/testing/setupVoting.ts b/test/testing/setupVoting.ts index 55bf9da..5bce1a6 100644 --- a/test/testing/setupVoting.ts +++ b/test/testing/setupVoting.ts @@ -16,7 +16,7 @@ interface SetupVotingOutput { export default async function setupVoting(owner: SignerWithAddress, DPS: DeepSquare): Promise { const votingDelegation = await new VotingDelegation__factory(owner).deploy(DPS.address); const ballotImplementation = await new Ballot__factory(owner).deploy(DPS.address, votingDelegation.address); - const ballotFactory = await new BallotFactory__factory(owner).deploy(ballotImplementation.address); + const ballotFactory = await new BallotFactory__factory(owner).deploy(DPS.address, ballotImplementation.address); return { votingDelegation, diff --git a/typings/contracts/Ballot.ts b/typings/contracts/Ballot.ts index 2ac09f1..643de98 100644 --- a/typings/contracts/Ballot.ts +++ b/typings/contracts/Ballot.ts @@ -32,9 +32,10 @@ export interface BallotInterface extends utils.Interface { "choices(uint256)": FunctionFragment; "close()": FunctionFragment; "closed()": FunctionFragment; + "factory()": FunctionFragment; "getChoices()": FunctionFragment; "getResults()": FunctionFragment; - "init(string,string,string[])": FunctionFragment; + "init(address,address,address,string,string,string[])": FunctionFragment; "owner()": FunctionFragment; "proxy()": FunctionFragment; "renounceOwnership()": FunctionFragment; @@ -51,6 +52,7 @@ export interface BallotInterface extends utils.Interface { | "choices" | "close" | "closed" + | "factory" | "getChoices" | "getResults" | "init" @@ -71,6 +73,7 @@ export interface BallotInterface extends utils.Interface { ): string; encodeFunctionData(functionFragment: "close", values?: undefined): string; encodeFunctionData(functionFragment: "closed", values?: undefined): string; + encodeFunctionData(functionFragment: "factory", values?: undefined): string; encodeFunctionData( functionFragment: "getChoices", values?: undefined @@ -81,7 +84,7 @@ export interface BallotInterface extends utils.Interface { ): string; encodeFunctionData( functionFragment: "init", - values: [string, string, string[]] + values: [string, string, string, string, string, string[]] ): string; encodeFunctionData(functionFragment: "owner", values?: undefined): string; encodeFunctionData(functionFragment: "proxy", values?: undefined): string; @@ -105,6 +108,7 @@ export interface BallotInterface extends utils.Interface { decodeFunctionResult(functionFragment: "choices", data: BytesLike): Result; decodeFunctionResult(functionFragment: "close", data: BytesLike): Result; decodeFunctionResult(functionFragment: "closed", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "factory", data: BytesLike): Result; decodeFunctionResult(functionFragment: "getChoices", data: BytesLike): Result; decodeFunctionResult(functionFragment: "getResults", data: BytesLike): Result; decodeFunctionResult(functionFragment: "init", data: BytesLike): Result; @@ -182,11 +186,16 @@ export interface Ballot extends BaseContract { closed(overrides?: CallOverrides): Promise<[boolean]>; + factory(overrides?: CallOverrides): Promise<[string]>; + getChoices(overrides?: CallOverrides): Promise<[string[]]>; getResults(overrides?: CallOverrides): Promise<[BigNumber[]]>; init( + _DPS: string, + _proxy: string, + _factory: string, _subject: string, _topic: string, _choices: string[], @@ -231,11 +240,16 @@ export interface Ballot extends BaseContract { closed(overrides?: CallOverrides): Promise; + factory(overrides?: CallOverrides): Promise; + getChoices(overrides?: CallOverrides): Promise; getResults(overrides?: CallOverrides): Promise; init( + _DPS: string, + _proxy: string, + _factory: string, _subject: string, _topic: string, _choices: string[], @@ -278,11 +292,16 @@ export interface Ballot extends BaseContract { closed(overrides?: CallOverrides): Promise; + factory(overrides?: CallOverrides): Promise; + getChoices(overrides?: CallOverrides): Promise; getResults(overrides?: CallOverrides): Promise; init( + _DPS: string, + _proxy: string, + _factory: string, _subject: string, _topic: string, _choices: string[], @@ -334,11 +353,16 @@ export interface Ballot extends BaseContract { closed(overrides?: CallOverrides): Promise; + factory(overrides?: CallOverrides): Promise; + getChoices(overrides?: CallOverrides): Promise; getResults(overrides?: CallOverrides): Promise; init( + _DPS: string, + _proxy: string, + _factory: string, _subject: string, _topic: string, _choices: string[], @@ -387,11 +411,16 @@ export interface Ballot extends BaseContract { closed(overrides?: CallOverrides): Promise; + factory(overrides?: CallOverrides): Promise; + getChoices(overrides?: CallOverrides): Promise; getResults(overrides?: CallOverrides): Promise; init( + _DPS: string, + _proxy: string, + _factory: string, _subject: string, _topic: string, _choices: string[], diff --git a/typings/contracts/factories/BallotFactory.ts b/typings/contracts/factories/BallotFactory.ts index 620fb5e..9e2af7f 100644 --- a/typings/contracts/factories/BallotFactory.ts +++ b/typings/contracts/factories/BallotFactory.ts @@ -28,6 +28,7 @@ import type { export interface BallotFactoryInterface extends utils.Interface { functions: { + "DPS()": FunctionFragment; "ballotAddresses(uint256)": FunctionFragment; "createBallot(string,string,string[])": FunctionFragment; "getBallots()": FunctionFragment; @@ -40,6 +41,7 @@ export interface BallotFactoryInterface extends utils.Interface { getFunction( nameOrSignatureOrTopic: + | "DPS" | "ballotAddresses" | "createBallot" | "getBallots" @@ -50,6 +52,7 @@ export interface BallotFactoryInterface extends utils.Interface { | "transferOwnership" ): FunctionFragment; + encodeFunctionData(functionFragment: "DPS", values?: undefined): string; encodeFunctionData( functionFragment: "ballotAddresses", values: [BigNumberish] @@ -80,6 +83,7 @@ export interface BallotFactoryInterface extends utils.Interface { values: [string] ): string; + decodeFunctionResult(functionFragment: "DPS", data: BytesLike): Result; decodeFunctionResult( functionFragment: "ballotAddresses", data: BytesLike @@ -162,6 +166,8 @@ export interface BallotFactory extends BaseContract { removeListener: OnEvent; functions: { + DPS(overrides?: CallOverrides): Promise<[string]>; + ballotAddresses( arg0: BigNumberish, overrides?: CallOverrides @@ -195,6 +201,8 @@ export interface BallotFactory extends BaseContract { ): Promise; }; + DPS(overrides?: CallOverrides): Promise; + ballotAddresses( arg0: BigNumberish, overrides?: CallOverrides @@ -228,6 +236,8 @@ export interface BallotFactory extends BaseContract { ): Promise; callStatic: { + DPS(overrides?: CallOverrides): Promise; + ballotAddresses( arg0: BigNumberish, overrides?: CallOverrides @@ -274,6 +284,8 @@ export interface BallotFactory extends BaseContract { }; estimateGas: { + DPS(overrides?: CallOverrides): Promise; + ballotAddresses( arg0: BigNumberish, overrides?: CallOverrides @@ -308,6 +320,8 @@ export interface BallotFactory extends BaseContract { }; populateTransaction: { + DPS(overrides?: CallOverrides): Promise; + ballotAddresses( arg0: BigNumberish, overrides?: CallOverrides diff --git a/typings/contracts/testing/ExposedBallot.ts b/typings/contracts/testing/ExposedBallot.ts index 0503e31..9359501 100644 --- a/typings/contracts/testing/ExposedBallot.ts +++ b/typings/contracts/testing/ExposedBallot.ts @@ -51,9 +51,10 @@ export interface ExposedBallotInterface extends utils.Interface { "choices(uint256)": FunctionFragment; "close()": FunctionFragment; "closed()": FunctionFragment; + "factory()": FunctionFragment; "getChoices()": FunctionFragment; "getResults()": FunctionFragment; - "init(string,string,string[])": FunctionFragment; + "init(address,address,address,string,string,string[])": FunctionFragment; "owner()": FunctionFragment; "proxy()": FunctionFragment; "renounceOwnership()": FunctionFragment; @@ -71,6 +72,7 @@ export interface ExposedBallotInterface extends utils.Interface { | "choices" | "close" | "closed" + | "factory" | "getChoices" | "getResults" | "init" @@ -92,6 +94,7 @@ export interface ExposedBallotInterface extends utils.Interface { ): string; encodeFunctionData(functionFragment: "close", values?: undefined): string; encodeFunctionData(functionFragment: "closed", values?: undefined): string; + encodeFunctionData(functionFragment: "factory", values?: undefined): string; encodeFunctionData( functionFragment: "getChoices", values?: undefined @@ -102,7 +105,7 @@ export interface ExposedBallotInterface extends utils.Interface { ): string; encodeFunctionData( functionFragment: "init", - values: [string, string, string[]] + values: [string, string, string, string, string, string[]] ): string; encodeFunctionData(functionFragment: "owner", values?: undefined): string; encodeFunctionData(functionFragment: "proxy", values?: undefined): string; @@ -127,6 +130,7 @@ export interface ExposedBallotInterface extends utils.Interface { decodeFunctionResult(functionFragment: "choices", data: BytesLike): Result; decodeFunctionResult(functionFragment: "close", data: BytesLike): Result; decodeFunctionResult(functionFragment: "closed", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "factory", data: BytesLike): Result; decodeFunctionResult(functionFragment: "getChoices", data: BytesLike): Result; decodeFunctionResult(functionFragment: "getResults", data: BytesLike): Result; decodeFunctionResult(functionFragment: "init", data: BytesLike): Result; @@ -208,11 +212,16 @@ export interface ExposedBallot extends BaseContract { closed(overrides?: CallOverrides): Promise<[boolean]>; + factory(overrides?: CallOverrides): Promise<[string]>; + getChoices(overrides?: CallOverrides): Promise<[string[]]>; getResults(overrides?: CallOverrides): Promise<[BigNumber[]]>; init( + _DPS: string, + _proxy: string, + _factory: string, _subject: string, _topic: string, _choices: string[], @@ -261,11 +270,16 @@ export interface ExposedBallot extends BaseContract { closed(overrides?: CallOverrides): Promise; + factory(overrides?: CallOverrides): Promise; + getChoices(overrides?: CallOverrides): Promise; getResults(overrides?: CallOverrides): Promise; init( + _DPS: string, + _proxy: string, + _factory: string, _subject: string, _topic: string, _choices: string[], @@ -312,11 +326,16 @@ export interface ExposedBallot extends BaseContract { closed(overrides?: CallOverrides): Promise; + factory(overrides?: CallOverrides): Promise; + getChoices(overrides?: CallOverrides): Promise; getResults(overrides?: CallOverrides): Promise; init( + _DPS: string, + _proxy: string, + _factory: string, _subject: string, _topic: string, _choices: string[], @@ -370,11 +389,16 @@ export interface ExposedBallot extends BaseContract { closed(overrides?: CallOverrides): Promise; + factory(overrides?: CallOverrides): Promise; + getChoices(overrides?: CallOverrides): Promise; getResults(overrides?: CallOverrides): Promise; init( + _DPS: string, + _proxy: string, + _factory: string, _subject: string, _topic: string, _choices: string[], @@ -425,11 +449,16 @@ export interface ExposedBallot extends BaseContract { closed(overrides?: CallOverrides): Promise; + factory(overrides?: CallOverrides): Promise; + getChoices(overrides?: CallOverrides): Promise; getResults(overrides?: CallOverrides): Promise; init( + _DPS: string, + _proxy: string, + _factory: string, _subject: string, _topic: string, _choices: string[], diff --git a/typings/factories/contracts/Ballot__factory.ts b/typings/factories/contracts/Ballot__factory.ts index 841d171..01e37cb 100644 --- a/typings/factories/contracts/Ballot__factory.ts +++ b/typings/factories/contracts/Ballot__factory.ts @@ -93,6 +93,19 @@ const _abi = [ stateMutability: "view", type: "function", }, + { + inputs: [], + name: "factory", + outputs: [ + { + internalType: "contract BallotFactory", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [], name: "getChoices", @@ -121,6 +134,21 @@ const _abi = [ }, { inputs: [ + { + internalType: "contract IERC20Metadata", + name: "_DPS", + type: "address", + }, + { + internalType: "contract VotingDelegation", + name: "_proxy", + type: "address", + }, + { + internalType: "contract BallotFactory", + name: "_factory", + type: "address", + }, { internalType: "string", name: "_subject", @@ -249,7 +277,7 @@ const _abi = [ ]; const _bytecode = - "0x60c060405269054b40b1f852bda0000060a0523480156200001f57600080fd5b50604051620014d1380380620014d183398101604081905262000042916200013a565b6200004d33620000d1565b6001600160a01b038216620000a85760405162461bcd60e51b815260206004820152601a60248201527f566f74653a204450532061646472657373206973207a65726f2e000000000000604482015260640160405180910390fd5b6001600160a01b03918216608052600180546001600160a01b0319169190921617905562000179565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200013757600080fd5b50565b600080604083850312156200014e57600080fd5b82516200015b8162000121565b60208401519092506200016e8162000121565b809150509250929050565b60805160a051611324620001ad600039600061076e0152600081816101fd01528181610439015261079001526113246000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80639094c76311610097578063ec55688911610066578063ec556889146101e5578063ef4e06ec146101f8578063f2fde38b1461021f578063f6fd7fde1461023257600080fd5b80639094c763146101a257806398c81bbf146101b5578063bf63a577146101ca578063e254be56146101d257600080fd5b806359037b89116100d357806359037b8914610137578063597e1fb514610158578063715018a6146101755780638da5cb5b1461017d57600080fd5b80630a59a98c146100fa57806343d726d6146101185780634717f97c14610122575b600080fd5b610102610245565b60405161010f9190610e42565b60405180910390f35b6101206102d3565b005b61012a610527565b60405161010f9190610e5c565b61014a610145366004610ea0565b61057f565b60405190815260200161010f565b6003546101659060ff1681565b604051901515815260200161010f565b6101206105a0565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161010f565b6101206101b0366004610eb9565b6105d6565b6101bd61090a565b60405161010f9190610edf565b6101026109e3565b6101206101e0366004610ff8565b6109f0565b60015461018a906001600160a01b031681565b61018a7f000000000000000000000000000000000000000000000000000000000000000081565b61012061022d366004611102565b610b5f565b610102610240366004610ea0565b610bf7565b600280546102529061112b565b80601f016020809104026020016040519081016040528092919081815260200182805461027e9061112b565b80156102cb5780601f106102a0576101008083540402835291602001916102cb565b820191906000526020600020905b8154815290600101906020018083116102ae57829003601f168201915b505050505081565b6000546001600160a01b031633146103065760405162461bcd60e51b81526004016102fd90611166565b60405180910390fd5b60035460ff16156103595760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e000060448201526064016102fd565b6003805460ff1916600117905560005b600754811015610524576000600782815481106103885761038861119b565b6000918252602090912001546001546040516302fbd00360e21b81526001600160a01b039283169350911690630bef400c906103ca90849060049081016111b1565b60206040518083038186803b1580156103e257600080fd5b505afa1580156103f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041a919061126a565b6040516370a0823160e01b81526001600160a01b0383811660048301527f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b15801561047b57600080fd5b505afa15801561048f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b3919061126a565b6104bd9190611299565b6001600160a01b03821660009081526008602052604090205460068054909163ffffffff169081106104f1576104f161119b565b90600052602060002001600082825461050a9190611299565b9091555082915061051c9050816112b1565b915050610369565b50565b6060600680548060200260200160405190810160405280929190818152602001828054801561057557602002820191906000526020600020905b815481526020019060010190808311610561575b5050505050905090565b6006818154811061058f57600080fd5b600091825260209091200154905081565b6000546001600160a01b031633146105ca5760405162461bcd60e51b81526004016102fd90611166565b6105d46000610c22565b565b60035460ff16156106295760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e0000000000000060448201526064016102fd565b60055463ffffffff82161061068a5760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2043686f69636520696e64657820697320746f6f20686967686044820152601760f91b60648201526084016102fd565b60015460405163442f655160e01b81526001600160a01b039091169063442f6551906106bc90339060049081016111b1565b60206040518083038186803b1580156106d457600080fd5b505afa1580156106e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070c91906112cc565b156107595760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e00000000000060448201526064016102fd565b6040516370a0823160e01b81523360048201527f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b1580156107da57600080fd5b505afa1580156107ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610812919061126a565b10156108605760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e0060448201526064016102fd565b33600090815260086020526040902054640100000000900460ff166108e157336000818152600860205260408120805464ff0000000019166401000000001790556007805460018101825591527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b03191690911790555b336000908152600860205260409020805463ffffffff191663ffffffff92909216919091179055565b60606005805480602002602001604051908101604052809291908181526020016000905b828210156109da57838290600052602060002001805461094d9061112b565b80601f01602080910402602001604051908101604052809291908181526020018280546109799061112b565b80156109c65780601f1061099b576101008083540402835291602001916109c6565b820191906000526020600020905b8154815290600101906020018083116109a957829003601f168201915b50505050508152602001906001019061092e565b50505050905090565b600480546102529061112b565b600054600160a81b900460ff16610a1457600054600160a01b900460ff1615610a18565b303b155b610a7b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102fd565b600054600160a81b900460ff16158015610aa5576000805461ffff60a01b191661010160a01b1790555b8351610ab8906002906020870190610c72565b508251610acc906004906020860190610c72565b506003805460ff191690558151610aea906005906020850190610cf6565b5060055467ffffffffffffffff811115610b0657610b06610f41565b604051908082528060200260200182016040528015610b2f578160200160208202803683370190505b508051610b4491600691602090910190610d4f565b508015610b59576000805460ff60a81b191690555b50505050565b6000546001600160a01b03163314610b895760405162461bcd60e51b81526004016102fd90611166565b6001600160a01b038116610bee5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102fd565b61052481610c22565b60058181548110610c0757600080fd5b9060005260206000200160009150905080546102529061112b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054610c7e9061112b565b90600052602060002090601f016020900481019282610ca05760008555610ce6565b82601f10610cb957805160ff1916838001178555610ce6565b82800160010185558215610ce6579182015b82811115610ce6578251825591602001919060010190610ccb565b50610cf2929150610d89565b5090565b828054828255906000526020600020908101928215610d43579160200282015b82811115610d435782518051610d33918491602090910190610c72565b5091602001919060010190610d16565b50610cf2929150610d9e565b828054828255906000526020600020908101928215610ce65791602002820182811115610ce6578251825591602001919060010190610ccb565b5b80821115610cf25760008155600101610d8a565b80821115610cf2576000610db28282610dbb565b50600101610d9e565b508054610dc79061112b565b6000825580601f10610dd7575050565b601f0160209004906000526020600020908101906105249190610d89565b6000815180845260005b81811015610e1b57602081850181015186830182015201610dff565b81811115610e2d576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610e556020830184610df5565b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610e9457835183529284019291840191600101610e78565b50909695505050505050565b600060208284031215610eb257600080fd5b5035919050565b600060208284031215610ecb57600080fd5b813563ffffffff81168114610e5557600080fd5b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015610f3457603f19888603018452610f22858351610df5565b94509285019290850190600101610f06565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610f8057610f80610f41565b604052919050565b600082601f830112610f9957600080fd5b813567ffffffffffffffff811115610fb357610fb3610f41565b610fc6601f8201601f1916602001610f57565b818152846020838601011115610fdb57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561100d57600080fd5b833567ffffffffffffffff8082111561102557600080fd5b61103187838801610f88565b945060209150818601358181111561104857600080fd5b61105488828901610f88565b94505060408601358181111561106957600080fd5b8601601f8101881361107a57600080fd5b80358281111561108c5761108c610f41565b8060051b61109b858201610f57565b918252828101850191858101908b8411156110b557600080fd5b86850192505b838310156110f1578235868111156110d35760008081fd5b6110e18d8983890101610f88565b83525091860191908601906110bb565b809750505050505050509250925092565b60006020828403121561111457600080fd5b81356001600160a01b0381168114610e5557600080fd5b600181811c9082168061113f57607f821691505b6020821081141561116057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60018060a01b0383168152600060206040818401526000845481600182811c9150808316806111e157607f831692505b8583108114156111ff57634e487b7160e01b85526022600452602485fd5b604088018390526060880181801561121e576001811461122f5761125a565b60ff1986168252878201965061125a565b60008b81526020902060005b868110156112545781548482015290850190890161123b565b83019750505b50949a9950505050505050505050565b60006020828403121561127c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156112ac576112ac611283565b500190565b60006000198214156112c5576112c5611283565b5060010190565b6000602082840312156112de57600080fd5b81518015158114610e5557600080fdfea2646970667358221220eccdb140a33527273ef7838e01ada0af9f99cf4d6aa8fc661b24fcf13763a1a764736f6c63430008090033"; + "0x60a060405269054b40b1f852bda000006080523480156200001f57600080fd5b506040516200162338038062001623833981016040819052620000429162000143565b6200004d33620000da565b6001600160a01b038216620000a85760405162461bcd60e51b815260206004820152601a60248201527f566f74653a204450532061646472657373206973207a65726f2e000000000000604482015260640160405180910390fd5b600180546001600160a01b039384166001600160a01b0319918216179091556002805492909316911617905562000182565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200014057600080fd5b50565b600080604083850312156200015757600080fd5b825162000164816200012a565b602084015190925062000177816200012a565b809150509250929050565b6080516114856200019e6000396000610a0401526114856000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639094c76311610097578063ec55688911610066578063ec55688914610203578063ef4e06ec14610216578063f2fde38b14610229578063f6fd7fde1461023c57600080fd5b80639094c763146101c057806398c81bbf146101d3578063bf63a577146101e8578063c45a0155146101f057600080fd5b806359037b89116100d357806359037b8914610155578063597e1fb514610176578063715018a6146101935780638da5cb5b1461019b57600080fd5b80630a59a98c146101055780631917d6c01461012357806343d726d6146101385780634717f97c14610140575b600080fd5b61010d61024f565b60405161011a9190610f78565b60405180910390f35b61013661013136600461105e565b6102dd565b005b610136610491565b610148610789565b60405161011a91906111a2565b6101686101633660046111e6565b6107e1565b60405190815260200161011a565b6005546101839060ff1681565b604051901515815260200161011a565b610136610802565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161011a565b6101366101ce3660046111ff565b610868565b6101db610b7f565b60405161011a9190611225565b61010d610c58565b6003546101a8906001600160a01b031681565b6002546101a8906001600160a01b031681565b6001546101a8906001600160a01b031681565b610136610237366004611287565b610c65565b61010d61024a3660046111e6565b610d2d565b6004805461025c906112a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610288906112a4565b80156102d55780601f106102aa576101008083540402835291602001916102d5565b820191906000526020600020905b8154815290600101906020018083116102b857829003601f168201915b505050505081565b600054600160a81b900460ff1661030157600054600160a01b900460ff1615610305565b303b155b61036d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b600054600160a81b900460ff16158015610397576000805461ffff60a01b191661010160a01b1790555b83516103aa906004906020870190610da8565b5082516103be906006906020860190610da8565b506005805460ff1916905581516103dc906007906020850190610e2c565b5060075467ffffffffffffffff8111156103f8576103f8610fa7565b604051908082528060200260200182016040528015610421578160200160208202803683370190505b50805161043691600891602090910190610e85565b50600180546001600160a01b03808a166001600160a01b0319928316179092556002805489841690831617905560038054928816929091169190911790558015610488576000805460ff60a81b191690555b50505050505050565b600360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104df57600080fd5b505afa1580156104f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051791906112df565b6001600160a01b0316336001600160a01b0316146105835760405162461bcd60e51b8152602060048201526024808201527f566f74696e673a205265737472696374656420746f20666163746f7279206f776044820152633732b91760e11b6064820152608401610364565b60055460ff16156105d65760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e00006044820152606401610364565b6005805460ff1916600117905560005b60095481101561078657600060098281548110610605576106056112fc565b6000918252602090912001546002546040516302fbd00360e21b81526001600160a01b039283169350911690630bef400c90610648908490600690600401611312565b60206040518083038186803b15801561066057600080fd5b505afa158015610674573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069891906113cb565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a082319060240160206040518083038186803b1580156106dd57600080fd5b505afa1580156106f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071591906113cb565b61071f91906113fa565b6001600160a01b0382166000908152600a602052604090205460088054909163ffffffff16908110610753576107536112fc565b90600052602060002001600082825461076c91906113fa565b9091555082915061077e905081611412565b9150506105e6565b50565b606060088054806020026020016040519081016040528092919081815260200182805480156107d757602002820191906000526020600020905b8154815260200190600101908083116107c3575b5050505050905090565b600881815481106107f157600080fd5b600091825260209091200154905081565b6000546001600160a01b0316331461085c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610364565b6108666000610d58565b565b60055460ff16156108bb5760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e000000000000006044820152606401610364565b60075463ffffffff82161061091c5760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2043686f69636520696e64657820697320746f6f20686967686044820152601760f91b6064820152608401610364565b60025460405163442f655160e01b81526001600160a01b039091169063442f65519061094f903390600690600401611312565b60206040518083038186803b15801561096757600080fd5b505afa15801561097b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099f919061142d565b156109ec5760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e0000000000006044820152606401610364565b6001546040516370a0823160e01b81523360048201527f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316906370a082319060240160206040518083038186803b158015610a4f57600080fd5b505afa158015610a63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8791906113cb565b1015610ad55760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e006044820152606401610364565b336000908152600a6020526040902054640100000000900460ff16610b5657336000818152600a60205260408120805464ff0000000019166401000000001790556009805460018101825591527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b03191690911790555b336000908152600a60205260409020805463ffffffff191663ffffffff92909216919091179055565b60606007805480602002602001604051908101604052809291908181526020016000905b82821015610c4f578382906000526020600020018054610bc2906112a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610bee906112a4565b8015610c3b5780601f10610c1057610100808354040283529160200191610c3b565b820191906000526020600020905b815481529060010190602001808311610c1e57829003601f168201915b505050505081526020019060010190610ba3565b50505050905090565b6006805461025c906112a4565b6000546001600160a01b03163314610cbf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610364565b6001600160a01b038116610d245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610364565b61078681610d58565b60078181548110610d3d57600080fd5b90600052602060002001600091509050805461025c906112a4565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054610db4906112a4565b90600052602060002090601f016020900481019282610dd65760008555610e1c565b82601f10610def57805160ff1916838001178555610e1c565b82800160010185558215610e1c579182015b82811115610e1c578251825591602001919060010190610e01565b50610e28929150610ebf565b5090565b828054828255906000526020600020908101928215610e79579160200282015b82811115610e795782518051610e69918491602090910190610da8565b5091602001919060010190610e4c565b50610e28929150610ed4565b828054828255906000526020600020908101928215610e1c5791602002820182811115610e1c578251825591602001919060010190610e01565b5b80821115610e285760008155600101610ec0565b80821115610e28576000610ee88282610ef1565b50600101610ed4565b508054610efd906112a4565b6000825580601f10610f0d575050565b601f0160209004906000526020600020908101906107869190610ebf565b6000815180845260005b81811015610f5157602081850181015186830182015201610f35565b81811115610f63576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610f8b6020830184610f2b565b9392505050565b6001600160a01b038116811461078657600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610fe657610fe6610fa7565b604052919050565b600082601f830112610fff57600080fd5b813567ffffffffffffffff81111561101957611019610fa7565b61102c601f8201601f1916602001610fbd565b81815284602083860101111561104157600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561107757600080fd5b6110818735610f92565b8635955060208088013561109481610f92565b955060408801356110a481610f92565b9450606088013567ffffffffffffffff808211156110c157600080fd5b6110cd8b838c01610fee565b955060808a01359150808211156110e357600080fd5b6110ef8b838c01610fee565b945060a08a013591508082111561110557600080fd5b818a0191508a601f83011261111957600080fd5b81358181111561112b5761112b610fa7565b8060051b61113a858201610fbd565b918252838101850191858101908e84111561115457600080fd5b86860192505b8383101561118e57848335111561117057600080fd5b61117f8f888535890101610fee565b8252918601919086019061115a565b809750505050505050509295509295509295565b6020808252825182820181905260009190848201906040850190845b818110156111da578351835292840192918401916001016111be565b50909695505050505050565b6000602082840312156111f857600080fd5b5035919050565b60006020828403121561121157600080fd5b813563ffffffff81168114610f8b57600080fd5b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561127a57603f19888603018452611268858351610f2b565b9450928501929085019060010161124c565b5092979650505050505050565b60006020828403121561129957600080fd5b8135610f8b81610f92565b600181811c908216806112b857607f821691505b602082108114156112d957634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156112f157600080fd5b8151610f8b81610f92565b634e487b7160e01b600052603260045260246000fd5b60018060a01b0383168152600060206040818401526000845481600182811c91508083168061134257607f831692505b85831081141561136057634e487b7160e01b85526022600452602485fd5b604088018390526060880181801561137f5760018114611390576113bb565b60ff198616825287820196506113bb565b60008b81526020902060005b868110156113b55781548482015290850190890161139c565b83019750505b50949a9950505050505050505050565b6000602082840312156113dd57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561140d5761140d6113e4565b500190565b6000600019821415611426576114266113e4565b5060010190565b60006020828403121561143f57600080fd5b81518015158114610f8b57600080fdfea2646970667358221220ee62986625fcc0239cd69651f8e957b229f9d95f4cbb73f47cec96bd15257f9c64736f6c63430008090033"; type BallotConstructorParams = | [signer?: Signer] diff --git a/typings/factories/contracts/VotingDelegation__factory.ts b/typings/factories/contracts/VotingDelegation__factory.ts index a75541d..e5acfe9 100644 --- a/typings/factories/contracts/VotingDelegation__factory.ts +++ b/typings/factories/contracts/VotingDelegation__factory.ts @@ -215,7 +215,7 @@ const _abi = [ ]; const _bytecode = - "0x60c060405269054b40b1f852bda0000060a05234801561001e57600080fd5b50604051610d07380380610d0783398101604081905261003d91610110565b610046336100c0565b6001600160a01b0381166100af5760405162461bcd60e51b815260206004820152602660248201527f566f74696e6744656c65676174696f6e3a204450532061646472657373206973604482015265103d32b9379760d11b606482015260840160405180910390fd5b6001600160a01b0316608052610140565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561012257600080fd5b81516001600160a01b038116811461013957600080fd5b9392505050565b60805160a051610b9461017360003960006103910152600081816101930152818161024a01526103b30152610b946000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638da5cb5b116100665780638da5cb5b14610156578063ceb0b9351461017b578063ef4e06ec1461018e578063f2fde38b146101b5578063fc196713146101c857600080fd5b80630bef400c146100a3578063442f6551146100c95780635e12967914610119578063694ec60e1461012e578063715018a61461014e575b600080fd5b6100b66100b136600461097f565b610206565b6040519081526020015b60405180910390f35b6101096100d736600461097f565b6001600160a01b0391821660009081526003602090815260408083208451948301949094208352929052205416151590565b60405190151581526020016100c0565b61012c61012736600461097f565b610372565b005b61014161013c36600461097f565b610676565b6040516100c09190610a41565b61012c6107cc565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100c0565b600154610163906001600160a01b031681565b6101637f000000000000000000000000000000000000000000000000000000000000000081565b61012c6101c3366004610a8e565b610832565b6101636101d636600461097f565b6001600160a01b039182166000908152600360209081526040808320845194830194909420835292905220541690565b805160208201206000908190815b6001600160a01b038616600090815260026020908152604080832085845290915290206001015463ffffffff82161015610368577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a0823160026000896001600160a01b03166001600160a01b0316815260200190815260200160002060008581526020019081526020016000206001018363ffffffff16815481106102c7576102c7610ab0565b60009182526020909120015460405160e083901b6001600160e01b03191681526001600160a01b03909116600482015260240160206040518083038186803b15801561031257600080fd5b505afa158015610326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034a9190610ac6565b6103549084610af5565b92508061036081610b0d565b915050610214565b5090949350505050565b6040516370a0823160e01b81526001600160a01b0383811660048301527f0000000000000000000000000000000000000000000000000000000000000000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b1580156103f757600080fd5b505afa15801561040b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042f9190610ac6565b10158061044357506001600160a01b038216155b6104a85760405162461bcd60e51b815260206004820152602b60248201527f566f74696e6744656c65676174696f6e3a2050726f787920686173206e6f742060448201526a32b737bab3b4102228299760a91b60648201526084015b60405180910390fd5b805160208083019190912033600090815260038352604080822083835290935291909120546001600160a01b0316156105df573360008181526003602090815260408083208584528252808320546001600160a01b031683526002825280832085845282528083209383529083905290205460018281018054909161052c91610b31565b8154811061053c5761053c610ab0565b6000918252602090912001546001830180546001600160a01b03909216918390811061056a5761056a610ab0565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001018054806105ab576105ab610b48565b60008281526020808220830160001990810180546001600160a01b0319169055909201909255338252929092525060408120555b336000908152600360209081526040808320848452909152902080546001600160a01b0319166001600160a01b03851690811790915515610671576001600160a01b038316600090815260026020908152604080832084845282528083206001808201805433808852938652938620849055908301815584529190922090910180546001600160a01b03191690911790555b505050565b80516020808301919091206001600160a01b0384166000908152600283526040808220838352909352918220600101546060929067ffffffffffffffff8111156106c2576106c2610969565b6040519080825280602002602001820160405280156106eb578160200160208202803683370190505b50905060005b6001600160a01b038616600090815260026020908152604080832086845290915290206001015463ffffffff821610156107c3576001600160a01b03861660009081526002602090815260408083208684529091529020600101805463ffffffff831690811061076357610763610ab0565b9060005260206000200160009054906101000a90046001600160a01b0316828263ffffffff168151811061079957610799610ab0565b6001600160a01b0390921660209283029190910190910152806107bb81610b0d565b9150506106f1565b50949350505050565b6000546001600160a01b031633146108265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161049f565b61083060006108fd565b565b6000546001600160a01b0316331461088c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161049f565b6001600160a01b0381166108f15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161049f565b6108fa816108fd565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461096457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561099257600080fd5b61099b8361094d565b9150602083013567ffffffffffffffff808211156109b857600080fd5b818501915085601f8301126109cc57600080fd5b8135818111156109de576109de610969565b604051601f8201601f19908116603f01168101908382118183101715610a0657610a06610969565b81604052828152886020848701011115610a1f57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b81811015610a825783516001600160a01b031683529284019291840191600101610a5d565b50909695505050505050565b600060208284031215610aa057600080fd5b610aa98261094d565b9392505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610ad857600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610b0857610b08610adf565b500190565b600063ffffffff80831681811415610b2757610b27610adf565b6001019392505050565b600082821015610b4357610b43610adf565b500390565b634e487b7160e01b600052603160045260246000fdfea26469706673582212206f59477b5b5cd1f501022e79f32bed6a10e049c7c6cdb377929dfd06e1a8758864736f6c63430008090033"; + "0x60c060405269054b40b1f852bda0000060a05234801561001e57600080fd5b50604051610d07380380610d0783398101604081905261003d91610110565b610046336100c0565b6001600160a01b0381166100af5760405162461bcd60e51b815260206004820152602660248201527f566f74696e6744656c65676174696f6e3a204450532061646472657373206973604482015265103d32b9379760d11b606482015260840160405180910390fd5b6001600160a01b0316608052610140565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561012257600080fd5b81516001600160a01b038116811461013957600080fd5b9392505050565b60805160a051610b9461017360003960006103910152600081816101930152818161024a01526103b30152610b946000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638da5cb5b116100665780638da5cb5b14610156578063ceb0b9351461017b578063ef4e06ec1461018e578063f2fde38b146101b5578063fc196713146101c857600080fd5b80630bef400c146100a3578063442f6551146100c95780635e12967914610119578063694ec60e1461012e578063715018a61461014e575b600080fd5b6100b66100b136600461097f565b610206565b6040519081526020015b60405180910390f35b6101096100d736600461097f565b6001600160a01b0391821660009081526003602090815260408083208451948301949094208352929052205416151590565b60405190151581526020016100c0565b61012c61012736600461097f565b610372565b005b61014161013c36600461097f565b610676565b6040516100c09190610a41565b61012c6107cc565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100c0565b600154610163906001600160a01b031681565b6101637f000000000000000000000000000000000000000000000000000000000000000081565b61012c6101c3366004610a8e565b610832565b6101636101d636600461097f565b6001600160a01b039182166000908152600360209081526040808320845194830194909420835292905220541690565b805160208201206000908190815b6001600160a01b038616600090815260026020908152604080832085845290915290206001015463ffffffff82161015610368577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a0823160026000896001600160a01b03166001600160a01b0316815260200190815260200160002060008581526020019081526020016000206001018363ffffffff16815481106102c7576102c7610ab0565b60009182526020909120015460405160e083901b6001600160e01b03191681526001600160a01b03909116600482015260240160206040518083038186803b15801561031257600080fd5b505afa158015610326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034a9190610ac6565b6103549084610af5565b92508061036081610b0d565b915050610214565b5090949350505050565b6040516370a0823160e01b81526001600160a01b0383811660048301527f0000000000000000000000000000000000000000000000000000000000000000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b1580156103f757600080fd5b505afa15801561040b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042f9190610ac6565b10158061044357506001600160a01b038216155b6104a85760405162461bcd60e51b815260206004820152602b60248201527f566f74696e6744656c65676174696f6e3a2050726f787920686173206e6f742060448201526a32b737bab3b4102228299760a91b60648201526084015b60405180910390fd5b805160208083019190912033600090815260038352604080822083835290935291909120546001600160a01b0316156105df573360008181526003602090815260408083208584528252808320546001600160a01b031683526002825280832085845282528083209383529083905290205460018281018054909161052c91610b31565b8154811061053c5761053c610ab0565b6000918252602090912001546001830180546001600160a01b03909216918390811061056a5761056a610ab0565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001018054806105ab576105ab610b48565b60008281526020808220830160001990810180546001600160a01b0319169055909201909255338252929092525060408120555b336000908152600360209081526040808320848452909152902080546001600160a01b0319166001600160a01b03851690811790915515610671576001600160a01b038316600090815260026020908152604080832084845282528083206001808201805433808852938652938620849055908301815584529190922090910180546001600160a01b03191690911790555b505050565b80516020808301919091206001600160a01b0384166000908152600283526040808220838352909352918220600101546060929067ffffffffffffffff8111156106c2576106c2610969565b6040519080825280602002602001820160405280156106eb578160200160208202803683370190505b50905060005b6001600160a01b038616600090815260026020908152604080832086845290915290206001015463ffffffff821610156107c3576001600160a01b03861660009081526002602090815260408083208684529091529020600101805463ffffffff831690811061076357610763610ab0565b9060005260206000200160009054906101000a90046001600160a01b0316828263ffffffff168151811061079957610799610ab0565b6001600160a01b0390921660209283029190910190910152806107bb81610b0d565b9150506106f1565b50949350505050565b6000546001600160a01b031633146108265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161049f565b61083060006108fd565b565b6000546001600160a01b0316331461088c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161049f565b6001600160a01b0381166108f15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161049f565b6108fa816108fd565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461096457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561099257600080fd5b61099b8361094d565b9150602083013567ffffffffffffffff808211156109b857600080fd5b818501915085601f8301126109cc57600080fd5b8135818111156109de576109de610969565b604051601f8201601f19908116603f01168101908382118183101715610a0657610a06610969565b81604052828152886020848701011115610a1f57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b81811015610a825783516001600160a01b031683529284019291840191600101610a5d565b50909695505050505050565b600060208284031215610aa057600080fd5b610aa98261094d565b9392505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610ad857600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610b0857610b08610adf565b500190565b600063ffffffff80831681811415610b2757610b27610adf565b6001019392505050565b600082821015610b4357610b43610adf565b500390565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220de3dd9ab89334784668138d7f747b8ed6b497a1b8260ea6ff6be6a94ae78d8a964736f6c63430008090033"; type VotingDelegationConstructorParams = | [signer?: Signer] diff --git a/typings/factories/contracts/factories/BallotFactory__factory.ts b/typings/factories/contracts/factories/BallotFactory__factory.ts index 5694bbc..aa9dfd2 100644 --- a/typings/factories/contracts/factories/BallotFactory__factory.ts +++ b/typings/factories/contracts/factories/BallotFactory__factory.ts @@ -11,6 +11,11 @@ import type { const _abi = [ { inputs: [ + { + internalType: "contract IERC20Metadata", + name: "_DPS", + type: "address", + }, { internalType: "address", name: "_implementationAddress", @@ -52,6 +57,19 @@ const _abi = [ name: "OwnershipTransferred", type: "event", }, + { + inputs: [], + name: "DPS", + outputs: [ + { + internalType: "contract IERC20Metadata", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { @@ -169,7 +187,7 @@ const _abi = [ ]; const _bytecode = - "0x608060405234801561001057600080fd5b50604051610a84380380610a8483398101604081905261002f9161012f565b610038336100df565b6001600160a01b0381166100ba576040805162461bcd60e51b81526020600482015260248101919091527f42616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616460448201527f64726573732073686f756c64206e6f74206265207a65726f2061646472657373606482015260840160405180910390fd5b600280546001600160a01b0319166001600160a01b039290921691909117905561015f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561014157600080fd5b81516001600160a01b038116811461015857600080fd5b9392505050565b6109168061016e6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063d62d80891161005b578063d62d8089146100e7578063eb87c6dc146100fa578063ecade2f01461010f578063f2fde38b1461012257600080fd5b8063715018a61461008d5780638da5cb5b14610097578063a7a98453146100c1578063b97a2319146100d4575b600080fd5b610095610135565b005b6000546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b6100a46100cf366004610580565b610174565b6002546100a4906001600160a01b031681565b6100956100f5366004610650565b61019e565b6101026102cc565b6040516100b8919061075a565b61009561011d3660046107a7565b61032e565b6100956101303660046107a7565b6103f8565b6000546001600160a01b031633146101685760405162461bcd60e51b815260040161015f906107d7565b60405180910390fd5b6101726000610493565b565b6001818154811061018457600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146101c85760405162461bcd60e51b815260040161015f906107d7565b6002546000906101e0906001600160a01b03166104e3565b60405163712a5f2b60e11b81529091506001600160a01b0382169063e254be569061021390879087908790600401610859565b600060405180830381600087803b15801561022d57600080fd5b505af1158015610241573d6000803e3d6000fd5b50506001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0385169081179091556040519081527f165f4a0bebf649c196135ba0519a9a51da33d33a9e4d096b71050c2c97ec670f9250602001905060405180910390a150505050565b6060600180548060200260200160405190810160405280929190818152602001828054801561032457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610306575b5050505050905090565b6000546001600160a01b031633146103585760405162461bcd60e51b815260040161015f906107d7565b6001600160a01b0381166103d6576040805162461bcd60e51b81526020600482015260248101919091527f42616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616460448201527f64726573732073686f756c64206e6f74206265207a65726f2061646472657373606482015260840161015f565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146104225760405162461bcd60e51b815260040161015f906107d7565b6001600160a01b0381166104875760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161015f565b61049081610493565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b03811661057b5760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015260640161015f565b919050565b60006020828403121561059257600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156105d8576105d8610599565b604052919050565b600082601f8301126105f157600080fd5b813567ffffffffffffffff81111561060b5761060b610599565b61061e601f8201601f19166020016105af565b81815284602083860101111561063357600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561066557600080fd5b833567ffffffffffffffff8082111561067d57600080fd5b610689878388016105e0565b94506020915081860135818111156106a057600080fd5b6106ac888289016105e0565b9450506040860135818111156106c157600080fd5b8601601f810188136106d257600080fd5b8035828111156106e4576106e4610599565b8060051b6106f38582016105af565b918252828101850191858101908b84111561070d57600080fd5b86850192505b838310156107495782358681111561072b5760008081fd5b6107398d89838901016105e0565b8352509186019190860190610713565b809750505050505050509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561079b5783516001600160a01b031683529284019291840191600101610776565b50909695505050505050565b6000602082840312156107b957600080fd5b81356001600160a01b03811681146107d057600080fd5b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000815180845260005b8181101561083257602081850181015186830182015201610816565b81811115610844576000602083870101525b50601f01601f19169290920160200192915050565b60608152600061086c606083018661080c565b60208382038185015261087f828761080c565b915083820360408501528185518084528284019150828160051b85010183880160005b838110156108d057601f198784030185526108be83835161080c565b948601949250908501906001016108a2565b50909a995050505050505050505056fea2646970667358221220c44b42184d0fd271686900d38019c56cb47696b3471cc28260b5b5cf67aac2d064736f6c63430008090033"; + "0x608060405234801561001057600080fd5b50604051610c77380380610c7783398101604081905261002f9161018a565b61003833610122565b6001600160a01b038216610097576040805162461bcd60e51b8152602060048201526024810191909152600080516020610c378339815191526044820152600080516020610c5783398151915260648201526084015b60405180910390fd5b6001600160a01b0381166100f1576040805162461bcd60e51b8152602060048201526024810191909152600080516020610c378339815191526044820152600080516020610c57833981519152606482015260840161008e565b600180546001600160a01b039384166001600160a01b031991821617909155600380549290931691161790556101c4565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461018757600080fd5b50565b6000806040838503121561019d57600080fd5b82516101a881610172565b60208401519092506101b981610172565b809150509250929050565b610a64806101d36000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063d62d808911610066578063d62d8089146100f2578063eb87c6dc14610105578063ecade2f01461011a578063ef4e06ec1461012d578063f2fde38b1461014057600080fd5b8063715018a6146100985780638da5cb5b146100a2578063a7a98453146100cc578063b97a2319146100df575b600080fd5b6100a0610153565b005b6000546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b6100af6100da366004610684565b610192565b6003546100af906001600160a01b031681565b6100a0610100366004610754565b6101bc565b61010d6103d0565b6040516100c3919061085e565b6100a06101283660046108c0565b610432565b6001546100af906001600160a01b031681565b6100a061014e3660046108c0565b6104fc565b6000546001600160a01b031633146101865760405162461bcd60e51b815260040161017d906108e4565b60405180910390fd5b6101906000610597565b565b600281815481106101a257600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146101e65760405162461bcd60e51b815260040161017d906108e4565b6003546001600160a01b031660006101fd826105e7565b9050806001600160a01b0316631917d6c0836001600160a01b031663ef4e06ec6040518163ffffffff1660e01b815260040160206040518083038186803b15801561024757600080fd5b505afa15801561025b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027f9190610919565b846001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b1580156102b857600080fd5b505afa1580156102cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f09190610919565b308989896040518763ffffffff1660e01b815260040161031596959493929190610983565b600060405180830381600087803b15801561032f57600080fd5b505af1158015610343573d6000803e3d6000fd5b5050600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040519081527f165f4a0bebf649c196135ba0519a9a51da33d33a9e4d096b71050c2c97ec670f9250602001905060405180910390a15050505050565b6060600280548060200260200160405190810160405280929190818152602001828054801561042857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161040a575b5050505050905090565b6000546001600160a01b0316331461045c5760405162461bcd60e51b815260040161017d906108e4565b6001600160a01b0381166104da576040805162461bcd60e51b81526020600482015260248101919091527f42616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616460448201527f64726573732073686f756c64206e6f74206265207a65726f2061646472657373606482015260840161017d565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146105265760405162461bcd60e51b815260040161017d906108e4565b6001600160a01b03811661058b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161017d565b61059481610597565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b03811661067f5760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015260640161017d565b919050565b60006020828403121561069657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156106dc576106dc61069d565b604052919050565b600082601f8301126106f557600080fd5b813567ffffffffffffffff81111561070f5761070f61069d565b610722601f8201601f19166020016106b3565b81815284602083860101111561073757600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561076957600080fd5b833567ffffffffffffffff8082111561078157600080fd5b61078d878388016106e4565b94506020915081860135818111156107a457600080fd5b6107b0888289016106e4565b9450506040860135818111156107c557600080fd5b8601601f810188136107d657600080fd5b8035828111156107e8576107e861069d565b8060051b6107f78582016106b3565b918252828101850191858101908b84111561081157600080fd5b86850192505b8383101561084d5782358681111561082f5760008081fd5b61083d8d89838901016106e4565b8352509186019190860190610817565b809750505050505050509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561089f5783516001600160a01b03168352928401929184019160010161087a565b50909695505050505050565b6001600160a01b038116811461059457600080fd5b6000602082840312156108d257600080fd5b81356108dd816108ab565b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561092b57600080fd5b81516108dd816108ab565b6000815180845260005b8181101561095c57602081850181015186830182015201610940565b8181111561096e576000602083870101525b50601f01601f19169290920160200192915050565b600060018060a01b038089168352602081891681850152818816604085015260c060608501526109b660c0850188610936565b915083820360808501526109ca8287610936565b915083820360a08501528185518084528284019150828160051b85010183880160005b83811015610a1b57601f19878403018552610a09838351610936565b948601949250908501906001016109ed565b50909d9c5050505050505050505050505056fea26469706673582212209fa97be4d676d82d8d133bf31943116c33dbd47dee236341399a12510816e63d64736f6c6343000809003342616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616464726573732073686f756c64206e6f74206265207a65726f2061646472657373"; type BallotFactoryConstructorParams = | [signer?: Signer] @@ -189,19 +207,26 @@ export class BallotFactory__factory extends ContractFactory { } override deploy( + _DPS: string, _implementationAddress: string, overrides?: Overrides & { from?: string | Promise } ): Promise { return super.deploy( + _DPS, _implementationAddress, overrides || {} ) as Promise; } override getDeployTransaction( + _DPS: string, _implementationAddress: string, overrides?: Overrides & { from?: string | Promise } ): TransactionRequest { - return super.getDeployTransaction(_implementationAddress, overrides || {}); + return super.getDeployTransaction( + _DPS, + _implementationAddress, + overrides || {} + ); } override attach(address: string): BallotFactory { return super.attach(address) as BallotFactory; diff --git a/typings/factories/contracts/testing/ExposedBallot__factory.ts b/typings/factories/contracts/testing/ExposedBallot__factory.ts index 83ae67b..379b4c0 100644 --- a/typings/factories/contracts/testing/ExposedBallot__factory.ts +++ b/typings/factories/contracts/testing/ExposedBallot__factory.ts @@ -133,6 +133,19 @@ const _abi = [ stateMutability: "view", type: "function", }, + { + inputs: [], + name: "factory", + outputs: [ + { + internalType: "contract BallotFactory", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [], name: "getChoices", @@ -161,6 +174,21 @@ const _abi = [ }, { inputs: [ + { + internalType: "contract IERC20Metadata", + name: "_DPS", + type: "address", + }, + { + internalType: "contract VotingDelegation", + name: "_proxy", + type: "address", + }, + { + internalType: "contract BallotFactory", + name: "_factory", + type: "address", + }, { internalType: "string", name: "_subject", @@ -289,7 +317,7 @@ const _abi = [ ]; const _bytecode = - "0x60c060405269054b40b1f852bda0000060a0523480156200001f57600080fd5b50604051620016f3380380620016f383398101604081905262000042916200013f565b81816200004f33620000d6565b6001600160a01b038216620000aa5760405162461bcd60e51b815260206004820152601a60248201527f566f74653a204450532061646472657373206973207a65726f2e000000000000604482015260640160405180910390fd5b6001600160a01b03918216608052600180546001600160a01b03191691909216179055506200017e9050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200013c57600080fd5b50565b600080604083850312156200015357600080fd5b8251620001608162000126565b6020840151909250620001738162000126565b809150509250929050565b60805160a051611541620001b260003960006108e101526000818161021d015281816105ac015261090301526115416000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639094c76311610097578063ec55688911610066578063ec55688914610205578063ef4e06ec14610218578063f2fde38b1461023f578063f6fd7fde1461025257600080fd5b80639094c763146101c257806398c81bbf146101d5578063bf63a577146101ea578063e254be56146101f257600080fd5b806359037b89116100d357806359037b8914610157578063597e1fb514610178578063715018a6146101955780638da5cb5b1461019d57600080fd5b80630a59a98c1461010557806327454ea81461012357806343d726d6146101385780634717f97c14610142575b600080fd5b61010d610265565b60405161011a9190610ffa565b60405180910390f35b61012b6102f3565b60405161011a9190611014565b610140610446565b005b61014a61069a565b60405161011a919061107f565b61016a6101653660046110c3565b6106f2565b60405190815260200161011a565b6003546101859060ff1681565b604051901515815260200161011a565b610140610713565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161011a565b6101406101d03660046110dc565b610749565b6101dd610a7d565b60405161011a9190611102565b61010d610b56565b61014061020036600461121b565b610b63565b6001546101aa906001600160a01b031681565b6101aa7f000000000000000000000000000000000000000000000000000000000000000081565b61014061024d366004611325565b610cd2565b61010d6102603660046110c3565b610d6a565b600280546102729061134e565b80601f016020809104026020016040519081016040528092919081815260200182805461029e9061134e565b80156102eb5780601f106102c0576101008083540402835291602001916102eb565b820191906000526020600020905b8154815290600101906020018083116102ce57829003601f168201915b505050505081565b60075460609060009067ffffffffffffffff81111561031457610314611164565b60405190808252806020026020018201604052801561034d57816020015b61033a610de5565b8152602001906001900390816103325790505b50905060005b6007548110156104405760405180604001604052806007838154811061037b5761037b611383565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b0316815260200160086000600785815481106103be576103be611383565b60009182526020808320909101546001600160a01b03168352828101939093526040918201902081518083019092525463ffffffff8116825260ff640100000000909104161515918101919091529052825183908390811061042257610422611383565b60200260200101819052508080610438906113af565b915050610353565b50919050565b6000546001600160a01b031633146104795760405162461bcd60e51b8152600401610470906113ca565b60405180910390fd5b60035460ff16156104cc5760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e00006044820152606401610470565b6003805460ff1916600117905560005b600754811015610697576000600782815481106104fb576104fb611383565b6000918252602090912001546001546040516302fbd00360e21b81526001600160a01b039283169350911690630bef400c9061053d90849060049081016113ff565b60206040518083038186803b15801561055557600080fd5b505afa158015610569573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058d91906114b8565b6040516370a0823160e01b81526001600160a01b0383811660048301527f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b1580156105ee57600080fd5b505afa158015610602573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062691906114b8565b61063091906114d1565b6001600160a01b03821660009081526008602052604090205460068054909163ffffffff1690811061066457610664611383565b90600052602060002001600082825461067d91906114d1565b9091555082915061068f9050816113af565b9150506104dc565b50565b606060068054806020026020016040519081016040528092919081815260200182805480156106e857602002820191906000526020600020905b8154815260200190600101908083116106d4575b5050505050905090565b6006818154811061070257600080fd5b600091825260209091200154905081565b6000546001600160a01b0316331461073d5760405162461bcd60e51b8152600401610470906113ca565b6107476000610d95565b565b60035460ff161561079c5760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e000000000000006044820152606401610470565b60055463ffffffff8216106107fd5760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2043686f69636520696e64657820697320746f6f20686967686044820152601760f91b6064820152608401610470565b60015460405163442f655160e01b81526001600160a01b039091169063442f65519061082f90339060049081016113ff565b60206040518083038186803b15801561084757600080fd5b505afa15801561085b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087f91906114e9565b156108cc5760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e0000000000006044820152606401610470565b6040516370a0823160e01b81523360048201527f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561094d57600080fd5b505afa158015610961573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098591906114b8565b10156109d35760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e006044820152606401610470565b33600090815260086020526040902054640100000000900460ff16610a5457336000818152600860205260408120805464ff0000000019166401000000001790556007805460018101825591527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b03191690911790555b336000908152600860205260409020805463ffffffff191663ffffffff92909216919091179055565b60606005805480602002602001604051908101604052809291908181526020016000905b82821015610b4d578382906000526020600020018054610ac09061134e565b80601f0160208091040260200160405190810160405280929190818152602001828054610aec9061134e565b8015610b395780601f10610b0e57610100808354040283529160200191610b39565b820191906000526020600020905b815481529060010190602001808311610b1c57829003601f168201915b505050505081526020019060010190610aa1565b50505050905090565b600480546102729061134e565b600054600160a81b900460ff16610b8757600054600160a01b900460ff1615610b8b565b303b155b610bee5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610470565b600054600160a81b900460ff16158015610c18576000805461ffff60a01b191661010160a01b1790555b8351610c2b906002906020870190610e2a565b508251610c3f906004906020860190610e2a565b506003805460ff191690558151610c5d906005906020850190610eae565b5060055467ffffffffffffffff811115610c7957610c79611164565b604051908082528060200260200182016040528015610ca2578160200160208202803683370190505b508051610cb791600691602090910190610f07565b508015610ccc576000805460ff60a81b191690555b50505050565b6000546001600160a01b03163314610cfc5760405162461bcd60e51b8152600401610470906113ca565b6001600160a01b038116610d615760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610470565b61069781610d95565b60058181548110610d7a57600080fd5b9060005260206000200160009150905080546102729061134e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604051806040016040528060006001600160a01b03168152602001610e256040518060400160405280600063ffffffff1681526020016000151581525090565b905290565b828054610e369061134e565b90600052602060002090601f016020900481019282610e585760008555610e9e565b82601f10610e7157805160ff1916838001178555610e9e565b82800160010185558215610e9e579182015b82811115610e9e578251825591602001919060010190610e83565b50610eaa929150610f41565b5090565b828054828255906000526020600020908101928215610efb579160200282015b82811115610efb5782518051610eeb918491602090910190610e2a565b5091602001919060010190610ece565b50610eaa929150610f56565b828054828255906000526020600020908101928215610e9e5791602002820182811115610e9e578251825591602001919060010190610e83565b5b80821115610eaa5760008155600101610f42565b80821115610eaa576000610f6a8282610f73565b50600101610f56565b508054610f7f9061134e565b6000825580601f10610f8f575050565b601f0160209004906000526020600020908101906106979190610f41565b6000815180845260005b81811015610fd357602081850181015186830182015201610fb7565b81811115610fe5576000602083870101525b50601f01601f19169290920160200192915050565b60208152600061100d6020830184610fad565b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101561107257815180516001600160a01b03168552860151805163ffffffff168786015286015115158585015260609093019290850190600101611031565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156110b75783518352928401929184019160010161109b565b50909695505050505050565b6000602082840312156110d557600080fd5b5035919050565b6000602082840312156110ee57600080fd5b813563ffffffff8116811461100d57600080fd5b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561115757603f19888603018452611145858351610fad565b94509285019290850190600101611129565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111a3576111a3611164565b604052919050565b600082601f8301126111bc57600080fd5b813567ffffffffffffffff8111156111d6576111d6611164565b6111e9601f8201601f191660200161117a565b8181528460208386010111156111fe57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561123057600080fd5b833567ffffffffffffffff8082111561124857600080fd5b611254878388016111ab565b945060209150818601358181111561126b57600080fd5b611277888289016111ab565b94505060408601358181111561128c57600080fd5b8601601f8101881361129d57600080fd5b8035828111156112af576112af611164565b8060051b6112be85820161117a565b918252828101850191858101908b8411156112d857600080fd5b86850192505b83831015611314578235868111156112f65760008081fd5b6113048d89838901016111ab565b83525091860191908601906112de565b809750505050505050509250925092565b60006020828403121561133757600080fd5b81356001600160a01b038116811461100d57600080fd5b600181811c9082168061136257607f821691505b6020821081141561044057634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156113c3576113c3611399565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60018060a01b0383168152600060206040818401526000845481600182811c91508083168061142f57607f831692505b85831081141561144d57634e487b7160e01b85526022600452602485fd5b604088018390526060880181801561146c576001811461147d576114a8565b60ff198616825287820196506114a8565b60008b81526020902060005b868110156114a257815484820152908501908901611489565b83019750505b50949a9950505050505050505050565b6000602082840312156114ca57600080fd5b5051919050565b600082198211156114e4576114e4611399565b500190565b6000602082840312156114fb57600080fd5b8151801515811461100d57600080fdfea26469706673582212206ad87eee659303e33b667671e7df60761cf4b91048252020db33d5731fdf09d164736f6c63430008090033"; + "0x60a060405269054b40b1f852bda000006080523480156200001f57600080fd5b506040516200184538038062001845833981016040819052620000429162000148565b81816200004f33620000df565b6001600160a01b038216620000aa5760405162461bcd60e51b815260206004820152601a60248201527f566f74653a204450532061646472657373206973207a65726f2e000000000000604482015260640160405180910390fd5b600180546001600160a01b039384166001600160a01b0319918216179091556002805492909316911617905550620001879050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200014557600080fd5b50565b600080604083850312156200015c57600080fd5b825162000169816200012f565b60208401519092506200017c816200012f565b809150509250929050565b6080516116a2620001a36000396000610b7701526116a26000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80638da5cb5b116100a2578063c45a015511610071578063c45a015514610210578063ec55688914610223578063ef4e06ec14610236578063f2fde38b14610249578063f6fd7fde1461025c57600080fd5b80638da5cb5b146101bb5780639094c763146101e057806398c81bbf146101f3578063bf63a5771461020857600080fd5b80634717f97c116100de5780634717f97c1461016057806359037b8914610175578063597e1fb514610196578063715018a6146101b357600080fd5b80630a59a98c146101105780631917d6c01461012e57806327454ea81461014357806343d726d614610158575b600080fd5b61011861026f565b6040516101259190611130565b60405180910390f35b61014161013c366004611216565b6102fd565b005b61014b6104b1565b604051610125919061135a565b610141610604565b6101686108fc565b60405161012591906113c5565b610188610183366004611409565b610954565b604051908152602001610125565b6005546101a39060ff1681565b6040519015158152602001610125565b610141610975565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610125565b6101416101ee366004611422565b6109db565b6101fb610cf2565b6040516101259190611448565b610118610dcb565b6003546101c8906001600160a01b031681565b6002546101c8906001600160a01b031681565b6001546101c8906001600160a01b031681565b6101416102573660046114aa565b610dd8565b61011861026a366004611409565b610ea0565b6004805461027c906114c7565b80601f01602080910402602001604051908101604052809291908181526020018280546102a8906114c7565b80156102f55780601f106102ca576101008083540402835291602001916102f5565b820191906000526020600020905b8154815290600101906020018083116102d857829003601f168201915b505050505081565b600054600160a81b900460ff1661032157600054600160a01b900460ff1615610325565b303b155b61038d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b600054600160a81b900460ff161580156103b7576000805461ffff60a01b191661010160a01b1790555b83516103ca906004906020870190610f1b565b5082516103de906006906020860190610f1b565b506005805460ff1916905581516103fc906007906020850190610f9f565b5060075467ffffffffffffffff8111156104185761041861115f565b604051908082528060200260200182016040528015610441578160200160208202803683370190505b50805161045691600891602090910190610ff8565b50600180546001600160a01b03808a166001600160a01b03199283161790925560028054898416908316179055600380549288169290911691909117905580156104a8576000805460ff60a81b191690555b50505050505050565b60095460609060009067ffffffffffffffff8111156104d2576104d261115f565b60405190808252806020026020018201604052801561050b57816020015b6104f8611032565b8152602001906001900390816104f05790505b50905060005b6009548110156105fe57604051806040016040528060098381548110610539576105396114fc565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03168152602001600a60006009858154811061057c5761057c6114fc565b60009182526020808320909101546001600160a01b03168352828101939093526040918201902081518083019092525463ffffffff8116825260ff64010000000090910416151591810191909152905282518390839081106105e0576105e06114fc565b602002602001018190525080806105f690611528565b915050610511565b50919050565b600360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561065257600080fd5b505afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a9190611543565b6001600160a01b0316336001600160a01b0316146106f65760405162461bcd60e51b8152602060048201526024808201527f566f74696e673a205265737472696374656420746f20666163746f7279206f776044820152633732b91760e11b6064820152608401610384565b60055460ff16156107495760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e00006044820152606401610384565b6005805460ff1916600117905560005b6009548110156108f957600060098281548110610778576107786114fc565b6000918252602090912001546002546040516302fbd00360e21b81526001600160a01b039283169350911690630bef400c906107bb908490600690600401611560565b60206040518083038186803b1580156107d357600080fd5b505afa1580156107e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080b9190611619565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a082319060240160206040518083038186803b15801561085057600080fd5b505afa158015610864573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108889190611619565b6108929190611632565b6001600160a01b0382166000908152600a602052604090205460088054909163ffffffff169081106108c6576108c66114fc565b9060005260206000200160008282546108df9190611632565b909155508291506108f1905081611528565b915050610759565b50565b6060600880548060200260200160405190810160405280929190818152602001828054801561094a57602002820191906000526020600020905b815481526020019060010190808311610936575b5050505050905090565b6008818154811061096457600080fd5b600091825260209091200154905081565b6000546001600160a01b031633146109cf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610384565b6109d96000610ecb565b565b60055460ff1615610a2e5760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e000000000000006044820152606401610384565b60075463ffffffff821610610a8f5760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2043686f69636520696e64657820697320746f6f20686967686044820152601760f91b6064820152608401610384565b60025460405163442f655160e01b81526001600160a01b039091169063442f655190610ac2903390600690600401611560565b60206040518083038186803b158015610ada57600080fd5b505afa158015610aee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b12919061164a565b15610b5f5760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e0000000000006044820152606401610384565b6001546040516370a0823160e01b81523360048201527f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316906370a082319060240160206040518083038186803b158015610bc257600080fd5b505afa158015610bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfa9190611619565b1015610c485760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e006044820152606401610384565b336000908152600a6020526040902054640100000000900460ff16610cc957336000818152600a60205260408120805464ff0000000019166401000000001790556009805460018101825591527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b03191690911790555b336000908152600a60205260409020805463ffffffff191663ffffffff92909216919091179055565b60606007805480602002602001604051908101604052809291908181526020016000905b82821015610dc2578382906000526020600020018054610d35906114c7565b80601f0160208091040260200160405190810160405280929190818152602001828054610d61906114c7565b8015610dae5780601f10610d8357610100808354040283529160200191610dae565b820191906000526020600020905b815481529060010190602001808311610d9157829003601f168201915b505050505081526020019060010190610d16565b50505050905090565b6006805461027c906114c7565b6000546001600160a01b03163314610e325760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610384565b6001600160a01b038116610e975760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610384565b6108f981610ecb565b60078181548110610eb057600080fd5b90600052602060002001600091509050805461027c906114c7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054610f27906114c7565b90600052602060002090601f016020900481019282610f495760008555610f8f565b82601f10610f6257805160ff1916838001178555610f8f565b82800160010185558215610f8f579182015b82811115610f8f578251825591602001919060010190610f74565b50610f9b929150611077565b5090565b828054828255906000526020600020908101928215610fec579160200282015b82811115610fec5782518051610fdc918491602090910190610f1b565b5091602001919060010190610fbf565b50610f9b92915061108c565b828054828255906000526020600020908101928215610f8f5791602002820182811115610f8f578251825591602001919060010190610f74565b604051806040016040528060006001600160a01b031681526020016110726040518060400160405280600063ffffffff1681526020016000151581525090565b905290565b5b80821115610f9b5760008155600101611078565b80821115610f9b5760006110a082826110a9565b5060010161108c565b5080546110b5906114c7565b6000825580601f106110c5575050565b601f0160209004906000526020600020908101906108f99190611077565b6000815180845260005b81811015611109576020818501810151868301820152016110ed565b8181111561111b576000602083870101525b50601f01601f19169290920160200192915050565b60208152600061114360208301846110e3565b9392505050565b6001600160a01b03811681146108f957600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561119e5761119e61115f565b604052919050565b600082601f8301126111b757600080fd5b813567ffffffffffffffff8111156111d1576111d161115f565b6111e4601f8201601f1916602001611175565b8181528460208386010111156111f957600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561122f57600080fd5b611239873561114a565b8635955060208088013561124c8161114a565b9550604088013561125c8161114a565b9450606088013567ffffffffffffffff8082111561127957600080fd5b6112858b838c016111a6565b955060808a013591508082111561129b57600080fd5b6112a78b838c016111a6565b945060a08a01359150808211156112bd57600080fd5b818a0191508a601f8301126112d157600080fd5b8135818111156112e3576112e361115f565b8060051b6112f2858201611175565b918252838101850191858101908e84111561130c57600080fd5b86860192505b8383101561134657848335111561132857600080fd5b6113378f8885358901016111a6565b82529186019190860190611312565b809750505050505050509295509295509295565b602080825282518282018190526000919060409081850190868401855b828110156113b857815180516001600160a01b03168552860151805163ffffffff168786015286015115158585015260609093019290850190600101611377565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156113fd578351835292840192918401916001016113e1565b50909695505050505050565b60006020828403121561141b57600080fd5b5035919050565b60006020828403121561143457600080fd5b813563ffffffff8116811461114357600080fd5b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561149d57603f1988860301845261148b8583516110e3565b9450928501929085019060010161146f565b5092979650505050505050565b6000602082840312156114bc57600080fd5b81356111438161114a565b600181811c908216806114db57607f821691505b602082108114156105fe57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561153c5761153c611512565b5060010190565b60006020828403121561155557600080fd5b81516111438161114a565b60018060a01b0383168152600060206040818401526000845481600182811c91508083168061159057607f831692505b8583108114156115ae57634e487b7160e01b85526022600452602485fd5b60408801839052606088018180156115cd57600181146115de57611609565b60ff19861682528782019650611609565b60008b81526020902060005b86811015611603578154848201529085019089016115ea565b83019750505b50949a9950505050505050505050565b60006020828403121561162b57600080fd5b5051919050565b6000821982111561164557611645611512565b500190565b60006020828403121561165c57600080fd5b8151801515811461114357600080fdfea2646970667358221220d99d59966bcdc357425331a44e10aac185bb3b9b1004c4ec1b5a9c8998c7295564736f6c63430008090033"; type ExposedBallotConstructorParams = | [signer?: Signer] From c5c369fbd623b15805ab46e5664af260f0a1543a Mon Sep 17 00:00:00 2001 From: valentinpollart Date: Tue, 26 Apr 2022 15:27:17 +0200 Subject: [PATCH 14/25] fix: run lint --- scripts/deploy-vote.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/deploy-vote.ts b/scripts/deploy-vote.ts index 592ddb8..09308fc 100644 --- a/scripts/deploy-vote.ts +++ b/scripts/deploy-vote.ts @@ -1,5 +1,5 @@ import { ethers, network } from 'hardhat'; -import {formatUnits, parseUnits} from '@ethersproject/units'; +import { formatUnits, parseUnits } from '@ethersproject/units'; import { Ballot__factory } from '../typings/factories/contracts/Ballot__factory'; import { DeepSquare__factory } from '../typings/factories/contracts/DeepSquare__factory'; import { VotingDelegation__factory } from '../typings/factories/contracts/VotingDelegation__factory'; From de64c684442fcf16603f69af49fc96fc3614111b Mon Sep 17 00:00:00 2001 From: valentinpollart Date: Wed, 27 Apr 2022 12:09:50 +0200 Subject: [PATCH 15/25] feat: add comments for all voting related contracts, moved voting related contract to dedicated folder --- contracts/{ => voting}/Ballot.sol | 81 ++- .../{factories => voting}/BallotFactory.sol | 41 +- contracts/{ => voting}/VotingDelegation.sol | 49 +- .../{ => voting}/testing/ExposedBallot.sol | 2 +- test/Ballot.spec.ts | 19 +- test/BallotFactory.spec.ts | 6 +- test/DeepSquare.spec.ts | 2 +- test/VotingDelegation.spec.ts | 4 +- test/testing/setupVoting.ts | 14 +- typings/contracts/testing/ExposedBallot.ts | 495 ------------------ typings/contracts/{ => voting}/Ballot.ts | 2 +- .../{factories => voting}/BallotFactory.ts | 10 +- .../{ => voting}/VotingDelegation.ts | 2 +- .../factories/contracts/Ballot__factory.ts | 328 ------------ .../contracts/VotingDelegation__factory.ts | 267 ---------- .../testing/ExposedBallot__factory.ts | 375 ------------- .../BallotFactory__factory.ts | 6 +- .../contracts/voting/Ballot__factory.ts | 308 +++++++++++ .../voting/VotingDelegation__factory.ts | 267 ++++++++++ typings/hardhat.d.ts | 36 ++ 20 files changed, 793 insertions(+), 1521 deletions(-) rename contracts/{ => voting}/Ballot.sol (52%) rename contracts/{factories => voting}/BallotFactory.sol (51%) rename contracts/{ => voting}/VotingDelegation.sol (60%) rename contracts/{ => voting}/testing/ExposedBallot.sol (85%) delete mode 100644 typings/contracts/testing/ExposedBallot.ts rename typings/contracts/{ => voting}/Ballot.ts (99%) rename typings/contracts/{factories => voting}/BallotFactory.ts (98%) rename typings/contracts/{ => voting}/VotingDelegation.ts (99%) delete mode 100644 typings/factories/contracts/Ballot__factory.ts delete mode 100644 typings/factories/contracts/VotingDelegation__factory.ts delete mode 100644 typings/factories/contracts/testing/ExposedBallot__factory.ts rename typings/factories/contracts/{factories => voting}/BallotFactory__factory.ts (98%) create mode 100644 typings/factories/contracts/voting/Ballot__factory.ts create mode 100644 typings/factories/contracts/voting/VotingDelegation__factory.ts diff --git a/contracts/Ballot.sol b/contracts/voting/Ballot.sol similarity index 52% rename from contracts/Ballot.sol rename to contracts/voting/Ballot.sol index 4da9ddb..9830e90 100644 --- a/contracts/Ballot.sol +++ b/contracts/voting/Ballot.sol @@ -6,10 +6,22 @@ import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "@openzeppelin/contracts/proxy/utils/Initializable.sol"; import "./VotingDelegation.sol"; +import "./BallotFactory.sol"; + +/** + * @title Ballot + * @author Mathieu Bour, Valentin Pollart, Clarisse Tarrou and Charly Mancel for the DeepSquare Association. + * @dev Implementation of a ballot for a voting feature. + */ contract Ballot is Ownable, Initializable { + // @dev Contract defining the DPS token IERC20Metadata public DPS; + + // @dev Contract allowing user to delegate their vote on specific topics VotingDelegation public proxy; + + // @dev The ballot factory BallotFactory public factory; struct Vote { @@ -17,25 +29,56 @@ contract Ballot is Ownable, Initializable { bool hasVoted; } + /** + * @notice The subject or question of the vote + */ string public subject; + + /** + * @notice Whether users can still vote or not + */ bool public closed; + + /** + * @notice The topic of the vote, used to know if user has delegated or has delegation on this vote + */ string public topic; + + /** + * @notice The diffrent choices of the vote + */ string[] public choices; + + /** + * @notice The results of this vote, which are available only once the vote has been closed + */ uint256[] public resultStorage; + + /** + * @notice The minimum amount a user must have to be able to vote (25k DPS) + */ uint256 immutable votingLimit = 25e3 * 1e18; + /** + * @notice The list of all voters + */ address[] internal voters; - mapping(address => Vote) internal votes; - constructor( - IERC20Metadata _DPS, - VotingDelegation _proxy - ) { - require(address(_DPS) != address(0), "Vote: DPS address is zero."); - DPS = _DPS; - proxy = _proxy; - } + /** + * @notice The choice selected by each voter + */ + mapping(address => Vote) internal votes; + /** + * @notice Set up all state variable for clone contracts. + * @dev Can only be called once, usually right after contract creation. + * @param _DPS The contract defining the DPS token + * @param _proxy The contract allowing users to delegates their vote on specific topics + * @param _factory The factory that created this clone contract instance + * @param _subject The subject or question of the vote + * @param _topic The topic of the vote + * @param _choices The different choices for this vote + */ function init(IERC20Metadata _DPS, VotingDelegation _proxy, BallotFactory _factory, string memory _subject, string memory _topic, string[] memory _choices) public initializer { subject = _subject; topic = _topic; @@ -47,14 +90,30 @@ contract Ballot is Ownable, Initializable { factory = _factory; } + /** + * @notice Returns all choices of the vote + */ function getChoices() external view returns(string[] memory) { return choices; } + /** + * @notice Returns all results of the vote. + * @dev Available only once the vote has been closed. + */ function getResults() external view returns (uint256[] memory) { return resultStorage; } + /** + * @notice Send vote for given choice. + * @dev Requirements: + * - Vote MUST be open. + * - Choice MUST be available in the choices array. + * - Voter MUST NOT have delegated his vote. + * - Voter MUST have at least 25k DPS. + * @param choiceIndex the index of the selected choice in the choices array + */ function vote(uint32 choiceIndex) external { require(!closed, "Voting: Ballot is closed."); require(choices.length > choiceIndex, "Voting: Choice index is too high."); @@ -71,6 +130,10 @@ contract Ballot is Ownable, Initializable { votes[msg.sender].choiceIndex = choiceIndex; } + /** + * @notice Close the vote, preventing users to vote afterwards + * @dev The caller MUST be the ballot factory owner + */ function close() external { require(msg.sender == factory.owner(), "Voting: Restricted to factory owner."); require(!closed, "Voting: Ballot already closed."); diff --git a/contracts/factories/BallotFactory.sol b/contracts/voting/BallotFactory.sol similarity index 51% rename from contracts/factories/BallotFactory.sol rename to contracts/voting/BallotFactory.sol index 3d40478..66c3d31 100644 --- a/contracts/factories/BallotFactory.sol +++ b/contracts/voting/BallotFactory.sol @@ -5,36 +5,67 @@ pragma solidity ^0.8.0; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "@openzeppelin/contracts/proxy/Clones.sol"; -import "../Ballot.sol"; -import "../VotingDelegation.sol"; +import "./Ballot.sol"; +import "./VotingDelegation.sol"; +/** + * @title BallotFactory + * @author Mathieu Bour, Valentin Pollart, Clarisse Tarrou and Charly Mancel for the DeepSquare Association. + * @dev Implementation of ballot factory, accordingly to EIP 1167 nomenclature for minimal proxy implementation + */ contract BallotFactory is Ownable { + // @dev Contract defining the DPS token IERC20Metadata public DPS; + + // @dev The list of all ballot contract clones address[] public ballotAddresses; + + // @dev The address of the ballot implementation used as ballot contract proxy address public implementationAddress; + /** + * @dev Event fired each time a ballot contract clone is created + * @param ballotAddress The address of the created clone contract + */ event BallotCreated(address ballotAddress); + /** + * @param _DPS The DPS contract address + * @param _implementationAddress The ballot contract proxy address + */ constructor(IERC20Metadata _DPS, address _implementationAddress){ require(address(_DPS) != address(0), "BallotFactory: Implementation address should not be zero address"); require(_implementationAddress != address(0), "BallotFactory: Implementation address should not be zero address"); DPS = _DPS; - implementationAddress = _implementationAddress; + implementationAddress = _implementationAddress; } - function createBallot(string memory subject, string memory topic, string[] memory _choices) external onlyOwner { + /** + * @notice Creates a new ballot contract clone + * @param subject The subject or question of the vote + * @param topic The topic of the vote + * @param choices The different choices for this vote + */ + function createBallot(string memory subject, string memory topic, string[] memory choices) external onlyOwner { Ballot implementation = Ballot(implementationAddress); address cloneAddress = Clones.clone(implementationAddress); - Ballot(cloneAddress).init(implementation.DPS(), implementation.proxy(), this, subject, topic, _choices); + Ballot(cloneAddress).init(implementation.DPS(), implementation.proxy(), this, subject, topic, choices); ballotAddresses.push(cloneAddress); emit BallotCreated(cloneAddress); } + /** + * @notice Set up the new ballot proxy address + * @param newAddress The address of the new ballot proxy contract + */ function setImplementationAddress(address newAddress) external onlyOwner { require(newAddress != address(0), "BallotFactory: Implementation address should not be zero address"); implementationAddress = newAddress; } + /** + * @notice Returns all ballot clone addresses. + */ function getBallots() external view returns (address[] memory) { return ballotAddresses; } diff --git a/contracts/VotingDelegation.sol b/contracts/voting/VotingDelegation.sol similarity index 60% rename from contracts/VotingDelegation.sol rename to contracts/voting/VotingDelegation.sol index cc4926e..cab23a0 100644 --- a/contracts/VotingDelegation.sol +++ b/contracts/voting/VotingDelegation.sol @@ -2,11 +2,20 @@ pragma solidity ^0.8.0; +import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; -import "./factories/BallotFactory.sol"; +import "./BallotFactory.sol"; +/** + * @title BallotFactory + * @author Mathieu Bour, Valentin Pollart, Clarisse Tarrou and Charly Mancel for the DeepSquare Association. + * @dev Implementation of vote delegation contract for a voting feature + */ contract VotingDelegation is Ownable { - IERC20Metadata public immutable DPS; + // @dev Contract defining the DPS token + IERC20Metadata public DPS; + + // @dev The ballot factory BallotFactory public ballotFactory; struct Grants { @@ -14,18 +23,29 @@ contract VotingDelegation is Ownable { address[] delegators; } + // @dev The minimum amount of DPS a user must have to receive vote delegations (25k DPS) uint256 immutable delegatingLimit = 25e3 * 1e18; - mapping(address => mapping(bytes32 => Grants)) internal delegates; // proxy => tag => voters + // @dev A list of delegations received by a user user per topic + mapping(address => mapping(bytes32 => Grants)) internal delegates; // representative => tag => delegators - mapping(address => mapping(bytes32 => address)) internal proxyVoters; // voter => tag => proxy + // @dev The representative of a user per topic + mapping(address => mapping(bytes32 => address)) internal proxyVoters; // delegator => tag => representative + /** + * @param _DPS The DPS contract address + */ constructor(IERC20Metadata _DPS) { require(address(_DPS) != address(0), "VotingDelegation: DPS address is zero."); DPS = _DPS; } + /** + * @notice Give delegation to another user on a topic. The representative MUST either have at least 25k DPS or be the zero address (which correspond to removing the delegation) + * @param to The user to give delegation to + * @param topic The topic on which you give delegation + */ function delegate(address to, string memory topic) external { require(DPS.balanceOf(to) >= delegatingLimit || to == address(0), "VotingDelegation: Proxy has not enough DPS."); bytes32 topicHash = keccak256(bytes(topic)); @@ -47,6 +67,12 @@ contract VotingDelegation is Ownable { } } + /** + * @notice Computes the vote power a user have on a topic through delegation + * @dev The total does not include the user own vote power + * @param voter The address of the voter + * @param topic The delegation topic + */ function delegationAmount(address voter, string memory topic) public view returns (uint256) { uint256 total; bytes32 topicHash = keccak256(bytes(topic)); @@ -56,10 +82,20 @@ contract VotingDelegation is Ownable { return total; } + /** + * @notice Returns whether or not the voter has given delegation on given topic + * @param voter The address of the voter + * @param topic The delegation topic + */ function hasDelegated(address voter, string memory topic) external view returns (bool) { return proxyVoters[voter][keccak256(bytes(topic))] != address(0); } + /** + * @notice Returns all delegations a voter has on a given topic + * @param to The address of the voter + * @param topic The delegation topic + */ function delegators(address to, string memory topic) external view returns(address[] memory) { bytes32 topicHash = keccak256(bytes(topic)); address[] memory proxies = new address[](delegates[to][topicHash].delegators.length); @@ -69,6 +105,11 @@ contract VotingDelegation is Ownable { return proxies; } + /** + * @notice Returns the address of the representative of a voter has on a given topic + * @param from The address of the voter + * @param topic The delegation topic + */ function representative(address from, string memory topic) external view returns(address) { return proxyVoters[from][keccak256(bytes(topic))]; } diff --git a/contracts/testing/ExposedBallot.sol b/contracts/voting/testing/ExposedBallot.sol similarity index 85% rename from contracts/testing/ExposedBallot.sol rename to contracts/voting/testing/ExposedBallot.sol index 41e8610..e39bf94 100644 --- a/contracts/testing/ExposedBallot.sol +++ b/contracts/voting/testing/ExposedBallot.sol @@ -6,7 +6,7 @@ import "../Ballot.sol"; contract ExposedBallot is Ballot { - constructor(IERC20Metadata _DPS, VotingDelegation _proxy) Ballot(_DPS, _proxy) {} + constructor() Ballot() {} struct ResultSample { address voter; diff --git a/test/Ballot.spec.ts b/test/Ballot.spec.ts index 06ada7a..4bc6818 100644 --- a/test/Ballot.spec.ts +++ b/test/Ballot.spec.ts @@ -2,12 +2,11 @@ import { expect } from 'chai'; import { BigNumber } from '@ethersproject/bignumber'; import { parseUnits } from '@ethersproject/units'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; -import { ZERO_ADDRESS } from '../lib/constants'; import { DeepSquare } from '../typings/contracts/DeepSquare'; -import { VotingDelegation } from '../typings/contracts/VotingDelegation'; -import { BallotFactory } from '../typings/contracts/factories/BallotFactory'; -import { ExposedBallot } from '../typings/contracts/testing/ExposedBallot'; -import { ExposedBallot__factory } from '../typings/factories/contracts/testing/ExposedBallot__factory'; +import { BallotFactory } from '../typings/contracts/voting/BallotFactory'; +import { VotingDelegation } from '../typings/contracts/voting/VotingDelegation'; +import { ExposedBallot } from '../typings/contracts/voting/testing/ExposedBallot'; +import { ExposedBallot__factory } from '../typings/factories/contracts/voting/testing/ExposedBallot__factory'; import { ERC20Agent } from './testing/ERC20Agent'; import setup from './testing/setup'; import setupVoting from './testing/setupVoting'; @@ -25,15 +24,7 @@ describe('Ballot', () => { ({ owner, accounts, DPS, agentDPS } = await setup()); ({ votingDelegation, ballotFactory } = await setupVoting(owner, DPS)); - ballot = await new ExposedBallot__factory(owner).deploy(DPS.address, votingDelegation.address); - }); - - describe('constructor', () => { - it('should revert if the DPS contract is the zero address', async () => { - await expect(new ExposedBallot__factory(owner).deploy(ZERO_ADDRESS, votingDelegation.address)).to.be.revertedWith( - 'Vote: DPS address is zero.', - ); - }); + ballot = await new ExposedBallot__factory(owner).deploy(); }); describe('init', () => { diff --git a/test/BallotFactory.spec.ts b/test/BallotFactory.spec.ts index 1e20108..dabc010 100644 --- a/test/BallotFactory.spec.ts +++ b/test/BallotFactory.spec.ts @@ -1,10 +1,10 @@ import { expect } from 'chai'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { ZERO_ADDRESS } from '../lib/constants'; -import { Ballot } from '../typings/contracts/Ballot'; import { DeepSquare } from '../typings/contracts/DeepSquare'; -import { BallotFactory } from '../typings/contracts/factories/BallotFactory'; -import { BallotFactory__factory } from '../typings/factories/contracts/factories/BallotFactory__factory'; +import { Ballot } from '../typings/contracts/voting/Ballot'; +import { BallotFactory } from '../typings/contracts/voting/BallotFactory'; +import { BallotFactory__factory } from '../typings/factories/contracts/voting/BallotFactory__factory'; import setup from './testing/setup'; import setupVoting from './testing/setupVoting'; diff --git a/test/DeepSquare.spec.ts b/test/DeepSquare.spec.ts index d1f851d..270111b 100644 --- a/test/DeepSquare.spec.ts +++ b/test/DeepSquare.spec.ts @@ -1,7 +1,7 @@ import { expect } from 'chai'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { DPS_TOTAL_SUPPLY } from '../lib/constants'; -import { DeepSquare } from '../typings'; +import { DeepSquare } from '../typings/contracts/DeepSquare'; import { ERC20Agent } from './testing/ERC20Agent'; import { randomInt } from './testing/random'; import setup from './testing/setup'; diff --git a/test/VotingDelegation.spec.ts b/test/VotingDelegation.spec.ts index 470ae48..436749b 100644 --- a/test/VotingDelegation.spec.ts +++ b/test/VotingDelegation.spec.ts @@ -3,8 +3,8 @@ import { parseUnits } from '@ethersproject/units'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { ZERO_ADDRESS } from '../lib/constants'; import { DeepSquare } from '../typings/contracts/DeepSquare'; -import { VotingDelegation } from '../typings/contracts/VotingDelegation'; -import { VotingDelegation__factory } from '../typings/factories/contracts/VotingDelegation__factory'; +import { VotingDelegation } from '../typings/contracts/voting/VotingDelegation'; +import { VotingDelegation__factory } from '../typings/factories/contracts/voting/VotingDelegation__factory'; import { ERC20Agent } from './testing/ERC20Agent'; import setup from './testing/setup'; import setupVoting from './testing/setupVoting'; diff --git a/test/testing/setupVoting.ts b/test/testing/setupVoting.ts index 5bce1a6..d23b8ed 100644 --- a/test/testing/setupVoting.ts +++ b/test/testing/setupVoting.ts @@ -1,11 +1,11 @@ import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; -import { Ballot } from '../../typings/contracts/Ballot'; import { DeepSquare } from '../../typings/contracts/DeepSquare'; -import { VotingDelegation } from '../../typings/contracts/VotingDelegation'; -import { BallotFactory } from '../../typings/contracts/factories/BallotFactory'; -import { Ballot__factory } from '../../typings/factories/contracts/Ballot__factory'; -import { VotingDelegation__factory } from '../../typings/factories/contracts/VotingDelegation__factory'; -import { BallotFactory__factory } from '../../typings/factories/contracts/factories/BallotFactory__factory'; +import { Ballot } from '../../typings/contracts/voting/Ballot'; +import { BallotFactory } from '../../typings/contracts/voting/BallotFactory'; +import { VotingDelegation } from '../../typings/contracts/voting/VotingDelegation'; +import { BallotFactory__factory } from '../../typings/factories/contracts/voting/BallotFactory__factory'; +import { Ballot__factory } from '../../typings/factories/contracts/voting/Ballot__factory'; +import { VotingDelegation__factory } from '../../typings/factories/contracts/voting/VotingDelegation__factory'; interface SetupVotingOutput { votingDelegation: VotingDelegation; @@ -15,7 +15,7 @@ interface SetupVotingOutput { export default async function setupVoting(owner: SignerWithAddress, DPS: DeepSquare): Promise { const votingDelegation = await new VotingDelegation__factory(owner).deploy(DPS.address); - const ballotImplementation = await new Ballot__factory(owner).deploy(DPS.address, votingDelegation.address); + const ballotImplementation = await new Ballot__factory(owner).deploy(); const ballotFactory = await new BallotFactory__factory(owner).deploy(DPS.address, ballotImplementation.address); return { diff --git a/typings/contracts/testing/ExposedBallot.ts b/typings/contracts/testing/ExposedBallot.ts deleted file mode 100644 index 9359501..0000000 --- a/typings/contracts/testing/ExposedBallot.ts +++ /dev/null @@ -1,495 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export declare namespace Ballot { - export type VoteStruct = { choiceIndex: BigNumberish; hasVoted: boolean }; - - export type VoteStructOutput = [number, boolean] & { - choiceIndex: number; - hasVoted: boolean; - }; -} - -export declare namespace ExposedBallot { - export type ResultSampleStruct = { voter: string; vote: Ballot.VoteStruct }; - - export type ResultSampleStructOutput = [string, Ballot.VoteStructOutput] & { - voter: string; - vote: Ballot.VoteStructOutput; - }; -} - -export interface ExposedBallotInterface extends utils.Interface { - functions: { - "DPS()": FunctionFragment; - "_results()": FunctionFragment; - "choices(uint256)": FunctionFragment; - "close()": FunctionFragment; - "closed()": FunctionFragment; - "factory()": FunctionFragment; - "getChoices()": FunctionFragment; - "getResults()": FunctionFragment; - "init(address,address,address,string,string,string[])": FunctionFragment; - "owner()": FunctionFragment; - "proxy()": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "resultStorage(uint256)": FunctionFragment; - "subject()": FunctionFragment; - "topic()": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - "vote(uint32)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "DPS" - | "_results" - | "choices" - | "close" - | "closed" - | "factory" - | "getChoices" - | "getResults" - | "init" - | "owner" - | "proxy" - | "renounceOwnership" - | "resultStorage" - | "subject" - | "topic" - | "transferOwnership" - | "vote" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "DPS", values?: undefined): string; - encodeFunctionData(functionFragment: "_results", values?: undefined): string; - encodeFunctionData( - functionFragment: "choices", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "close", values?: undefined): string; - encodeFunctionData(functionFragment: "closed", values?: undefined): string; - encodeFunctionData(functionFragment: "factory", values?: undefined): string; - encodeFunctionData( - functionFragment: "getChoices", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getResults", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "init", - values: [string, string, string, string, string, string[]] - ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData(functionFragment: "proxy", values?: undefined): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "resultStorage", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "subject", values?: undefined): string; - encodeFunctionData(functionFragment: "topic", values?: undefined): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - encodeFunctionData(functionFragment: "vote", values: [BigNumberish]): string; - - decodeFunctionResult(functionFragment: "DPS", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "_results", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "choices", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "close", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "closed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "factory", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getChoices", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getResults", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "init", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "proxy", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "resultStorage", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "subject", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "topic", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "vote", data: BytesLike): Result; - - events: { - "OwnershipTransferred(address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; -} - -export interface OwnershipTransferredEventObject { - previousOwner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent< - [string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; - -export interface ExposedBallot extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ExposedBallotInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - DPS(overrides?: CallOverrides): Promise<[string]>; - - _results( - overrides?: CallOverrides - ): Promise<[ExposedBallot.ResultSampleStructOutput[]]>; - - choices(arg0: BigNumberish, overrides?: CallOverrides): Promise<[string]>; - - close( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - closed(overrides?: CallOverrides): Promise<[boolean]>; - - factory(overrides?: CallOverrides): Promise<[string]>; - - getChoices(overrides?: CallOverrides): Promise<[string[]]>; - - getResults(overrides?: CallOverrides): Promise<[BigNumber[]]>; - - init( - _DPS: string, - _proxy: string, - _factory: string, - _subject: string, - _topic: string, - _choices: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - owner(overrides?: CallOverrides): Promise<[string]>; - - proxy(overrides?: CallOverrides): Promise<[string]>; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - resultStorage( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - subject(overrides?: CallOverrides): Promise<[string]>; - - topic(overrides?: CallOverrides): Promise<[string]>; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - vote( - choiceIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - DPS(overrides?: CallOverrides): Promise; - - _results( - overrides?: CallOverrides - ): Promise; - - choices(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - close( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - closed(overrides?: CallOverrides): Promise; - - factory(overrides?: CallOverrides): Promise; - - getChoices(overrides?: CallOverrides): Promise; - - getResults(overrides?: CallOverrides): Promise; - - init( - _DPS: string, - _proxy: string, - _factory: string, - _subject: string, - _topic: string, - _choices: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - proxy(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - resultStorage( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - subject(overrides?: CallOverrides): Promise; - - topic(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - vote( - choiceIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - DPS(overrides?: CallOverrides): Promise; - - _results( - overrides?: CallOverrides - ): Promise; - - choices(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - close(overrides?: CallOverrides): Promise; - - closed(overrides?: CallOverrides): Promise; - - factory(overrides?: CallOverrides): Promise; - - getChoices(overrides?: CallOverrides): Promise; - - getResults(overrides?: CallOverrides): Promise; - - init( - _DPS: string, - _proxy: string, - _factory: string, - _subject: string, - _topic: string, - _choices: string[], - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - proxy(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - resultStorage( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - subject(overrides?: CallOverrides): Promise; - - topic(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - - vote(choiceIndex: BigNumberish, overrides?: CallOverrides): Promise; - }; - - filters: { - "OwnershipTransferred(address,address)"( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - }; - - estimateGas: { - DPS(overrides?: CallOverrides): Promise; - - _results(overrides?: CallOverrides): Promise; - - choices(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - close( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - closed(overrides?: CallOverrides): Promise; - - factory(overrides?: CallOverrides): Promise; - - getChoices(overrides?: CallOverrides): Promise; - - getResults(overrides?: CallOverrides): Promise; - - init( - _DPS: string, - _proxy: string, - _factory: string, - _subject: string, - _topic: string, - _choices: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - proxy(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - resultStorage( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - subject(overrides?: CallOverrides): Promise; - - topic(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - vote( - choiceIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - DPS(overrides?: CallOverrides): Promise; - - _results(overrides?: CallOverrides): Promise; - - choices( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - close( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - closed(overrides?: CallOverrides): Promise; - - factory(overrides?: CallOverrides): Promise; - - getChoices(overrides?: CallOverrides): Promise; - - getResults(overrides?: CallOverrides): Promise; - - init( - _DPS: string, - _proxy: string, - _factory: string, - _subject: string, - _topic: string, - _choices: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - proxy(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - resultStorage( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - subject(overrides?: CallOverrides): Promise; - - topic(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - vote( - choiceIndex: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/typings/contracts/Ballot.ts b/typings/contracts/voting/Ballot.ts similarity index 99% rename from typings/contracts/Ballot.ts rename to typings/contracts/voting/Ballot.ts index 643de98..c6743cc 100644 --- a/typings/contracts/Ballot.ts +++ b/typings/contracts/voting/Ballot.ts @@ -24,7 +24,7 @@ import type { TypedEvent, TypedListener, OnEvent, -} from "../common"; +} from "../../common"; export interface BallotInterface extends utils.Interface { functions: { diff --git a/typings/contracts/factories/BallotFactory.ts b/typings/contracts/voting/BallotFactory.ts similarity index 98% rename from typings/contracts/factories/BallotFactory.ts rename to typings/contracts/voting/BallotFactory.ts index 9e2af7f..8bf7147 100644 --- a/typings/contracts/factories/BallotFactory.ts +++ b/typings/contracts/voting/BallotFactory.ts @@ -176,7 +176,7 @@ export interface BallotFactory extends BaseContract { createBallot( subject: string, topic: string, - _choices: string[], + choices: string[], overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -211,7 +211,7 @@ export interface BallotFactory extends BaseContract { createBallot( subject: string, topic: string, - _choices: string[], + choices: string[], overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -246,7 +246,7 @@ export interface BallotFactory extends BaseContract { createBallot( subject: string, topic: string, - _choices: string[], + choices: string[], overrides?: CallOverrides ): Promise; @@ -294,7 +294,7 @@ export interface BallotFactory extends BaseContract { createBallot( subject: string, topic: string, - _choices: string[], + choices: string[], overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -330,7 +330,7 @@ export interface BallotFactory extends BaseContract { createBallot( subject: string, topic: string, - _choices: string[], + choices: string[], overrides?: Overrides & { from?: string | Promise } ): Promise; diff --git a/typings/contracts/VotingDelegation.ts b/typings/contracts/voting/VotingDelegation.ts similarity index 99% rename from typings/contracts/VotingDelegation.ts rename to typings/contracts/voting/VotingDelegation.ts index 0b868de..3ac6ee7 100644 --- a/typings/contracts/VotingDelegation.ts +++ b/typings/contracts/voting/VotingDelegation.ts @@ -23,7 +23,7 @@ import type { TypedEvent, TypedListener, OnEvent, -} from "../common"; +} from "../../common"; export interface VotingDelegationInterface extends utils.Interface { functions: { diff --git a/typings/factories/contracts/Ballot__factory.ts b/typings/factories/contracts/Ballot__factory.ts deleted file mode 100644 index 01e37cb..0000000 --- a/typings/factories/contracts/Ballot__factory.ts +++ /dev/null @@ -1,328 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { Ballot, BallotInterface } from "../../contracts/Ballot"; - -const _abi = [ - { - inputs: [ - { - internalType: "contract IERC20Metadata", - name: "_DPS", - type: "address", - }, - { - internalType: "contract VotingDelegation", - name: "_proxy", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - inputs: [], - name: "DPS", - outputs: [ - { - internalType: "contract IERC20Metadata", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "choices", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "close", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "closed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "factory", - outputs: [ - { - internalType: "contract BallotFactory", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getChoices", - outputs: [ - { - internalType: "string[]", - name: "", - type: "string[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getResults", - outputs: [ - { - internalType: "uint256[]", - name: "", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20Metadata", - name: "_DPS", - type: "address", - }, - { - internalType: "contract VotingDelegation", - name: "_proxy", - type: "address", - }, - { - internalType: "contract BallotFactory", - name: "_factory", - type: "address", - }, - { - internalType: "string", - name: "_subject", - type: "string", - }, - { - internalType: "string", - name: "_topic", - type: "string", - }, - { - internalType: "string[]", - name: "_choices", - type: "string[]", - }, - ], - name: "init", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxy", - outputs: [ - { - internalType: "contract VotingDelegation", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "resultStorage", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "subject", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "topic", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint32", - name: "choiceIndex", - type: "uint32", - }, - ], - name: "vote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60a060405269054b40b1f852bda000006080523480156200001f57600080fd5b506040516200162338038062001623833981016040819052620000429162000143565b6200004d33620000da565b6001600160a01b038216620000a85760405162461bcd60e51b815260206004820152601a60248201527f566f74653a204450532061646472657373206973207a65726f2e000000000000604482015260640160405180910390fd5b600180546001600160a01b039384166001600160a01b0319918216179091556002805492909316911617905562000182565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200014057600080fd5b50565b600080604083850312156200015757600080fd5b825162000164816200012a565b602084015190925062000177816200012a565b809150509250929050565b6080516114856200019e6000396000610a0401526114856000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639094c76311610097578063ec55688911610066578063ec55688914610203578063ef4e06ec14610216578063f2fde38b14610229578063f6fd7fde1461023c57600080fd5b80639094c763146101c057806398c81bbf146101d3578063bf63a577146101e8578063c45a0155146101f057600080fd5b806359037b89116100d357806359037b8914610155578063597e1fb514610176578063715018a6146101935780638da5cb5b1461019b57600080fd5b80630a59a98c146101055780631917d6c01461012357806343d726d6146101385780634717f97c14610140575b600080fd5b61010d61024f565b60405161011a9190610f78565b60405180910390f35b61013661013136600461105e565b6102dd565b005b610136610491565b610148610789565b60405161011a91906111a2565b6101686101633660046111e6565b6107e1565b60405190815260200161011a565b6005546101839060ff1681565b604051901515815260200161011a565b610136610802565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161011a565b6101366101ce3660046111ff565b610868565b6101db610b7f565b60405161011a9190611225565b61010d610c58565b6003546101a8906001600160a01b031681565b6002546101a8906001600160a01b031681565b6001546101a8906001600160a01b031681565b610136610237366004611287565b610c65565b61010d61024a3660046111e6565b610d2d565b6004805461025c906112a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610288906112a4565b80156102d55780601f106102aa576101008083540402835291602001916102d5565b820191906000526020600020905b8154815290600101906020018083116102b857829003601f168201915b505050505081565b600054600160a81b900460ff1661030157600054600160a01b900460ff1615610305565b303b155b61036d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b600054600160a81b900460ff16158015610397576000805461ffff60a01b191661010160a01b1790555b83516103aa906004906020870190610da8565b5082516103be906006906020860190610da8565b506005805460ff1916905581516103dc906007906020850190610e2c565b5060075467ffffffffffffffff8111156103f8576103f8610fa7565b604051908082528060200260200182016040528015610421578160200160208202803683370190505b50805161043691600891602090910190610e85565b50600180546001600160a01b03808a166001600160a01b0319928316179092556002805489841690831617905560038054928816929091169190911790558015610488576000805460ff60a81b191690555b50505050505050565b600360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104df57600080fd5b505afa1580156104f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051791906112df565b6001600160a01b0316336001600160a01b0316146105835760405162461bcd60e51b8152602060048201526024808201527f566f74696e673a205265737472696374656420746f20666163746f7279206f776044820152633732b91760e11b6064820152608401610364565b60055460ff16156105d65760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e00006044820152606401610364565b6005805460ff1916600117905560005b60095481101561078657600060098281548110610605576106056112fc565b6000918252602090912001546002546040516302fbd00360e21b81526001600160a01b039283169350911690630bef400c90610648908490600690600401611312565b60206040518083038186803b15801561066057600080fd5b505afa158015610674573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069891906113cb565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a082319060240160206040518083038186803b1580156106dd57600080fd5b505afa1580156106f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071591906113cb565b61071f91906113fa565b6001600160a01b0382166000908152600a602052604090205460088054909163ffffffff16908110610753576107536112fc565b90600052602060002001600082825461076c91906113fa565b9091555082915061077e905081611412565b9150506105e6565b50565b606060088054806020026020016040519081016040528092919081815260200182805480156107d757602002820191906000526020600020905b8154815260200190600101908083116107c3575b5050505050905090565b600881815481106107f157600080fd5b600091825260209091200154905081565b6000546001600160a01b0316331461085c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610364565b6108666000610d58565b565b60055460ff16156108bb5760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e000000000000006044820152606401610364565b60075463ffffffff82161061091c5760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2043686f69636520696e64657820697320746f6f20686967686044820152601760f91b6064820152608401610364565b60025460405163442f655160e01b81526001600160a01b039091169063442f65519061094f903390600690600401611312565b60206040518083038186803b15801561096757600080fd5b505afa15801561097b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099f919061142d565b156109ec5760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e0000000000006044820152606401610364565b6001546040516370a0823160e01b81523360048201527f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316906370a082319060240160206040518083038186803b158015610a4f57600080fd5b505afa158015610a63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8791906113cb565b1015610ad55760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e006044820152606401610364565b336000908152600a6020526040902054640100000000900460ff16610b5657336000818152600a60205260408120805464ff0000000019166401000000001790556009805460018101825591527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b03191690911790555b336000908152600a60205260409020805463ffffffff191663ffffffff92909216919091179055565b60606007805480602002602001604051908101604052809291908181526020016000905b82821015610c4f578382906000526020600020018054610bc2906112a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610bee906112a4565b8015610c3b5780601f10610c1057610100808354040283529160200191610c3b565b820191906000526020600020905b815481529060010190602001808311610c1e57829003601f168201915b505050505081526020019060010190610ba3565b50505050905090565b6006805461025c906112a4565b6000546001600160a01b03163314610cbf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610364565b6001600160a01b038116610d245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610364565b61078681610d58565b60078181548110610d3d57600080fd5b90600052602060002001600091509050805461025c906112a4565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054610db4906112a4565b90600052602060002090601f016020900481019282610dd65760008555610e1c565b82601f10610def57805160ff1916838001178555610e1c565b82800160010185558215610e1c579182015b82811115610e1c578251825591602001919060010190610e01565b50610e28929150610ebf565b5090565b828054828255906000526020600020908101928215610e79579160200282015b82811115610e795782518051610e69918491602090910190610da8565b5091602001919060010190610e4c565b50610e28929150610ed4565b828054828255906000526020600020908101928215610e1c5791602002820182811115610e1c578251825591602001919060010190610e01565b5b80821115610e285760008155600101610ec0565b80821115610e28576000610ee88282610ef1565b50600101610ed4565b508054610efd906112a4565b6000825580601f10610f0d575050565b601f0160209004906000526020600020908101906107869190610ebf565b6000815180845260005b81811015610f5157602081850181015186830182015201610f35565b81811115610f63576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610f8b6020830184610f2b565b9392505050565b6001600160a01b038116811461078657600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610fe657610fe6610fa7565b604052919050565b600082601f830112610fff57600080fd5b813567ffffffffffffffff81111561101957611019610fa7565b61102c601f8201601f1916602001610fbd565b81815284602083860101111561104157600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561107757600080fd5b6110818735610f92565b8635955060208088013561109481610f92565b955060408801356110a481610f92565b9450606088013567ffffffffffffffff808211156110c157600080fd5b6110cd8b838c01610fee565b955060808a01359150808211156110e357600080fd5b6110ef8b838c01610fee565b945060a08a013591508082111561110557600080fd5b818a0191508a601f83011261111957600080fd5b81358181111561112b5761112b610fa7565b8060051b61113a858201610fbd565b918252838101850191858101908e84111561115457600080fd5b86860192505b8383101561118e57848335111561117057600080fd5b61117f8f888535890101610fee565b8252918601919086019061115a565b809750505050505050509295509295509295565b6020808252825182820181905260009190848201906040850190845b818110156111da578351835292840192918401916001016111be565b50909695505050505050565b6000602082840312156111f857600080fd5b5035919050565b60006020828403121561121157600080fd5b813563ffffffff81168114610f8b57600080fd5b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561127a57603f19888603018452611268858351610f2b565b9450928501929085019060010161124c565b5092979650505050505050565b60006020828403121561129957600080fd5b8135610f8b81610f92565b600181811c908216806112b857607f821691505b602082108114156112d957634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156112f157600080fd5b8151610f8b81610f92565b634e487b7160e01b600052603260045260246000fd5b60018060a01b0383168152600060206040818401526000845481600182811c91508083168061134257607f831692505b85831081141561136057634e487b7160e01b85526022600452602485fd5b604088018390526060880181801561137f5760018114611390576113bb565b60ff198616825287820196506113bb565b60008b81526020902060005b868110156113b55781548482015290850190890161139c565b83019750505b50949a9950505050505050505050565b6000602082840312156113dd57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561140d5761140d6113e4565b500190565b6000600019821415611426576114266113e4565b5060010190565b60006020828403121561143f57600080fd5b81518015158114610f8b57600080fdfea2646970667358221220ee62986625fcc0239cd69651f8e957b229f9d95f4cbb73f47cec96bd15257f9c64736f6c63430008090033"; - -type BallotConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: BallotConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class Ballot__factory extends ContractFactory { - constructor(...args: BallotConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _DPS: string, - _proxy: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(_DPS, _proxy, overrides || {}) as Promise; - } - override getDeployTransaction( - _DPS: string, - _proxy: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_DPS, _proxy, overrides || {}); - } - override attach(address: string): Ballot { - return super.attach(address) as Ballot; - } - override connect(signer: Signer): Ballot__factory { - return super.connect(signer) as Ballot__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): BallotInterface { - return new utils.Interface(_abi) as BallotInterface; - } - static connect(address: string, signerOrProvider: Signer | Provider): Ballot { - return new Contract(address, _abi, signerOrProvider) as Ballot; - } -} diff --git a/typings/factories/contracts/VotingDelegation__factory.ts b/typings/factories/contracts/VotingDelegation__factory.ts deleted file mode 100644 index e5acfe9..0000000 --- a/typings/factories/contracts/VotingDelegation__factory.ts +++ /dev/null @@ -1,267 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - VotingDelegation, - VotingDelegationInterface, -} from "../../contracts/VotingDelegation"; - -const _abi = [ - { - inputs: [ - { - internalType: "contract IERC20Metadata", - name: "_DPS", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - inputs: [], - name: "DPS", - outputs: [ - { - internalType: "contract IERC20Metadata", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ballotFactory", - outputs: [ - { - internalType: "contract BallotFactory", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "string", - name: "topic", - type: "string", - }, - ], - name: "delegate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "voter", - type: "address", - }, - { - internalType: "string", - name: "topic", - type: "string", - }, - ], - name: "delegationAmount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "string", - name: "topic", - type: "string", - }, - ], - name: "delegators", - outputs: [ - { - internalType: "address[]", - name: "", - type: "address[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "voter", - type: "address", - }, - { - internalType: "string", - name: "topic", - type: "string", - }, - ], - name: "hasDelegated", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "string", - name: "topic", - type: "string", - }, - ], - name: "representative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60c060405269054b40b1f852bda0000060a05234801561001e57600080fd5b50604051610d07380380610d0783398101604081905261003d91610110565b610046336100c0565b6001600160a01b0381166100af5760405162461bcd60e51b815260206004820152602660248201527f566f74696e6744656c65676174696f6e3a204450532061646472657373206973604482015265103d32b9379760d11b606482015260840160405180910390fd5b6001600160a01b0316608052610140565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561012257600080fd5b81516001600160a01b038116811461013957600080fd5b9392505050565b60805160a051610b9461017360003960006103910152600081816101930152818161024a01526103b30152610b946000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638da5cb5b116100665780638da5cb5b14610156578063ceb0b9351461017b578063ef4e06ec1461018e578063f2fde38b146101b5578063fc196713146101c857600080fd5b80630bef400c146100a3578063442f6551146100c95780635e12967914610119578063694ec60e1461012e578063715018a61461014e575b600080fd5b6100b66100b136600461097f565b610206565b6040519081526020015b60405180910390f35b6101096100d736600461097f565b6001600160a01b0391821660009081526003602090815260408083208451948301949094208352929052205416151590565b60405190151581526020016100c0565b61012c61012736600461097f565b610372565b005b61014161013c36600461097f565b610676565b6040516100c09190610a41565b61012c6107cc565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100c0565b600154610163906001600160a01b031681565b6101637f000000000000000000000000000000000000000000000000000000000000000081565b61012c6101c3366004610a8e565b610832565b6101636101d636600461097f565b6001600160a01b039182166000908152600360209081526040808320845194830194909420835292905220541690565b805160208201206000908190815b6001600160a01b038616600090815260026020908152604080832085845290915290206001015463ffffffff82161015610368577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a0823160026000896001600160a01b03166001600160a01b0316815260200190815260200160002060008581526020019081526020016000206001018363ffffffff16815481106102c7576102c7610ab0565b60009182526020909120015460405160e083901b6001600160e01b03191681526001600160a01b03909116600482015260240160206040518083038186803b15801561031257600080fd5b505afa158015610326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034a9190610ac6565b6103549084610af5565b92508061036081610b0d565b915050610214565b5090949350505050565b6040516370a0823160e01b81526001600160a01b0383811660048301527f0000000000000000000000000000000000000000000000000000000000000000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b1580156103f757600080fd5b505afa15801561040b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042f9190610ac6565b10158061044357506001600160a01b038216155b6104a85760405162461bcd60e51b815260206004820152602b60248201527f566f74696e6744656c65676174696f6e3a2050726f787920686173206e6f742060448201526a32b737bab3b4102228299760a91b60648201526084015b60405180910390fd5b805160208083019190912033600090815260038352604080822083835290935291909120546001600160a01b0316156105df573360008181526003602090815260408083208584528252808320546001600160a01b031683526002825280832085845282528083209383529083905290205460018281018054909161052c91610b31565b8154811061053c5761053c610ab0565b6000918252602090912001546001830180546001600160a01b03909216918390811061056a5761056a610ab0565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001018054806105ab576105ab610b48565b60008281526020808220830160001990810180546001600160a01b0319169055909201909255338252929092525060408120555b336000908152600360209081526040808320848452909152902080546001600160a01b0319166001600160a01b03851690811790915515610671576001600160a01b038316600090815260026020908152604080832084845282528083206001808201805433808852938652938620849055908301815584529190922090910180546001600160a01b03191690911790555b505050565b80516020808301919091206001600160a01b0384166000908152600283526040808220838352909352918220600101546060929067ffffffffffffffff8111156106c2576106c2610969565b6040519080825280602002602001820160405280156106eb578160200160208202803683370190505b50905060005b6001600160a01b038616600090815260026020908152604080832086845290915290206001015463ffffffff821610156107c3576001600160a01b03861660009081526002602090815260408083208684529091529020600101805463ffffffff831690811061076357610763610ab0565b9060005260206000200160009054906101000a90046001600160a01b0316828263ffffffff168151811061079957610799610ab0565b6001600160a01b0390921660209283029190910190910152806107bb81610b0d565b9150506106f1565b50949350505050565b6000546001600160a01b031633146108265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161049f565b61083060006108fd565b565b6000546001600160a01b0316331461088c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161049f565b6001600160a01b0381166108f15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161049f565b6108fa816108fd565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461096457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561099257600080fd5b61099b8361094d565b9150602083013567ffffffffffffffff808211156109b857600080fd5b818501915085601f8301126109cc57600080fd5b8135818111156109de576109de610969565b604051601f8201601f19908116603f01168101908382118183101715610a0657610a06610969565b81604052828152886020848701011115610a1f57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b81811015610a825783516001600160a01b031683529284019291840191600101610a5d565b50909695505050505050565b600060208284031215610aa057600080fd5b610aa98261094d565b9392505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610ad857600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610b0857610b08610adf565b500190565b600063ffffffff80831681811415610b2757610b27610adf565b6001019392505050565b600082821015610b4357610b43610adf565b500390565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220de3dd9ab89334784668138d7f747b8ed6b497a1b8260ea6ff6be6a94ae78d8a964736f6c63430008090033"; - -type VotingDelegationConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: VotingDelegationConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class VotingDelegation__factory extends ContractFactory { - constructor(...args: VotingDelegationConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _DPS: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(_DPS, overrides || {}) as Promise; - } - override getDeployTransaction( - _DPS: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_DPS, overrides || {}); - } - override attach(address: string): VotingDelegation { - return super.attach(address) as VotingDelegation; - } - override connect(signer: Signer): VotingDelegation__factory { - return super.connect(signer) as VotingDelegation__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): VotingDelegationInterface { - return new utils.Interface(_abi) as VotingDelegationInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): VotingDelegation { - return new Contract(address, _abi, signerOrProvider) as VotingDelegation; - } -} diff --git a/typings/factories/contracts/testing/ExposedBallot__factory.ts b/typings/factories/contracts/testing/ExposedBallot__factory.ts deleted file mode 100644 index 379b4c0..0000000 --- a/typings/factories/contracts/testing/ExposedBallot__factory.ts +++ /dev/null @@ -1,375 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - ExposedBallot, - ExposedBallotInterface, -} from "../../../contracts/testing/ExposedBallot"; - -const _abi = [ - { - inputs: [ - { - internalType: "contract IERC20Metadata", - name: "_DPS", - type: "address", - }, - { - internalType: "contract VotingDelegation", - name: "_proxy", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - inputs: [], - name: "DPS", - outputs: [ - { - internalType: "contract IERC20Metadata", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_results", - outputs: [ - { - components: [ - { - internalType: "address", - name: "voter", - type: "address", - }, - { - components: [ - { - internalType: "uint32", - name: "choiceIndex", - type: "uint32", - }, - { - internalType: "bool", - name: "hasVoted", - type: "bool", - }, - ], - internalType: "struct Ballot.Vote", - name: "vote", - type: "tuple", - }, - ], - internalType: "struct ExposedBallot.ResultSample[]", - name: "", - type: "tuple[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "choices", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "close", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "closed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "factory", - outputs: [ - { - internalType: "contract BallotFactory", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getChoices", - outputs: [ - { - internalType: "string[]", - name: "", - type: "string[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getResults", - outputs: [ - { - internalType: "uint256[]", - name: "", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20Metadata", - name: "_DPS", - type: "address", - }, - { - internalType: "contract VotingDelegation", - name: "_proxy", - type: "address", - }, - { - internalType: "contract BallotFactory", - name: "_factory", - type: "address", - }, - { - internalType: "string", - name: "_subject", - type: "string", - }, - { - internalType: "string", - name: "_topic", - type: "string", - }, - { - internalType: "string[]", - name: "_choices", - type: "string[]", - }, - ], - name: "init", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxy", - outputs: [ - { - internalType: "contract VotingDelegation", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "resultStorage", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "subject", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "topic", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint32", - name: "choiceIndex", - type: "uint32", - }, - ], - name: "vote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60a060405269054b40b1f852bda000006080523480156200001f57600080fd5b506040516200184538038062001845833981016040819052620000429162000148565b81816200004f33620000df565b6001600160a01b038216620000aa5760405162461bcd60e51b815260206004820152601a60248201527f566f74653a204450532061646472657373206973207a65726f2e000000000000604482015260640160405180910390fd5b600180546001600160a01b039384166001600160a01b0319918216179091556002805492909316911617905550620001879050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200014557600080fd5b50565b600080604083850312156200015c57600080fd5b825162000169816200012f565b60208401519092506200017c816200012f565b809150509250929050565b6080516116a2620001a36000396000610b7701526116a26000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80638da5cb5b116100a2578063c45a015511610071578063c45a015514610210578063ec55688914610223578063ef4e06ec14610236578063f2fde38b14610249578063f6fd7fde1461025c57600080fd5b80638da5cb5b146101bb5780639094c763146101e057806398c81bbf146101f3578063bf63a5771461020857600080fd5b80634717f97c116100de5780634717f97c1461016057806359037b8914610175578063597e1fb514610196578063715018a6146101b357600080fd5b80630a59a98c146101105780631917d6c01461012e57806327454ea81461014357806343d726d614610158575b600080fd5b61011861026f565b6040516101259190611130565b60405180910390f35b61014161013c366004611216565b6102fd565b005b61014b6104b1565b604051610125919061135a565b610141610604565b6101686108fc565b60405161012591906113c5565b610188610183366004611409565b610954565b604051908152602001610125565b6005546101a39060ff1681565b6040519015158152602001610125565b610141610975565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610125565b6101416101ee366004611422565b6109db565b6101fb610cf2565b6040516101259190611448565b610118610dcb565b6003546101c8906001600160a01b031681565b6002546101c8906001600160a01b031681565b6001546101c8906001600160a01b031681565b6101416102573660046114aa565b610dd8565b61011861026a366004611409565b610ea0565b6004805461027c906114c7565b80601f01602080910402602001604051908101604052809291908181526020018280546102a8906114c7565b80156102f55780601f106102ca576101008083540402835291602001916102f5565b820191906000526020600020905b8154815290600101906020018083116102d857829003601f168201915b505050505081565b600054600160a81b900460ff1661032157600054600160a01b900460ff1615610325565b303b155b61038d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b600054600160a81b900460ff161580156103b7576000805461ffff60a01b191661010160a01b1790555b83516103ca906004906020870190610f1b565b5082516103de906006906020860190610f1b565b506005805460ff1916905581516103fc906007906020850190610f9f565b5060075467ffffffffffffffff8111156104185761041861115f565b604051908082528060200260200182016040528015610441578160200160208202803683370190505b50805161045691600891602090910190610ff8565b50600180546001600160a01b03808a166001600160a01b03199283161790925560028054898416908316179055600380549288169290911691909117905580156104a8576000805460ff60a81b191690555b50505050505050565b60095460609060009067ffffffffffffffff8111156104d2576104d261115f565b60405190808252806020026020018201604052801561050b57816020015b6104f8611032565b8152602001906001900390816104f05790505b50905060005b6009548110156105fe57604051806040016040528060098381548110610539576105396114fc565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03168152602001600a60006009858154811061057c5761057c6114fc565b60009182526020808320909101546001600160a01b03168352828101939093526040918201902081518083019092525463ffffffff8116825260ff64010000000090910416151591810191909152905282518390839081106105e0576105e06114fc565b602002602001018190525080806105f690611528565b915050610511565b50919050565b600360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561065257600080fd5b505afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a9190611543565b6001600160a01b0316336001600160a01b0316146106f65760405162461bcd60e51b8152602060048201526024808201527f566f74696e673a205265737472696374656420746f20666163746f7279206f776044820152633732b91760e11b6064820152608401610384565b60055460ff16156107495760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e00006044820152606401610384565b6005805460ff1916600117905560005b6009548110156108f957600060098281548110610778576107786114fc565b6000918252602090912001546002546040516302fbd00360e21b81526001600160a01b039283169350911690630bef400c906107bb908490600690600401611560565b60206040518083038186803b1580156107d357600080fd5b505afa1580156107e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080b9190611619565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a082319060240160206040518083038186803b15801561085057600080fd5b505afa158015610864573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108889190611619565b6108929190611632565b6001600160a01b0382166000908152600a602052604090205460088054909163ffffffff169081106108c6576108c66114fc565b9060005260206000200160008282546108df9190611632565b909155508291506108f1905081611528565b915050610759565b50565b6060600880548060200260200160405190810160405280929190818152602001828054801561094a57602002820191906000526020600020905b815481526020019060010190808311610936575b5050505050905090565b6008818154811061096457600080fd5b600091825260209091200154905081565b6000546001600160a01b031633146109cf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610384565b6109d96000610ecb565b565b60055460ff1615610a2e5760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e000000000000006044820152606401610384565b60075463ffffffff821610610a8f5760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2043686f69636520696e64657820697320746f6f20686967686044820152601760f91b6064820152608401610384565b60025460405163442f655160e01b81526001600160a01b039091169063442f655190610ac2903390600690600401611560565b60206040518083038186803b158015610ada57600080fd5b505afa158015610aee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b12919061164a565b15610b5f5760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e0000000000006044820152606401610384565b6001546040516370a0823160e01b81523360048201527f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316906370a082319060240160206040518083038186803b158015610bc257600080fd5b505afa158015610bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfa9190611619565b1015610c485760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e006044820152606401610384565b336000908152600a6020526040902054640100000000900460ff16610cc957336000818152600a60205260408120805464ff0000000019166401000000001790556009805460018101825591527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b03191690911790555b336000908152600a60205260409020805463ffffffff191663ffffffff92909216919091179055565b60606007805480602002602001604051908101604052809291908181526020016000905b82821015610dc2578382906000526020600020018054610d35906114c7565b80601f0160208091040260200160405190810160405280929190818152602001828054610d61906114c7565b8015610dae5780601f10610d8357610100808354040283529160200191610dae565b820191906000526020600020905b815481529060010190602001808311610d9157829003601f168201915b505050505081526020019060010190610d16565b50505050905090565b6006805461027c906114c7565b6000546001600160a01b03163314610e325760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610384565b6001600160a01b038116610e975760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610384565b6108f981610ecb565b60078181548110610eb057600080fd5b90600052602060002001600091509050805461027c906114c7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054610f27906114c7565b90600052602060002090601f016020900481019282610f495760008555610f8f565b82601f10610f6257805160ff1916838001178555610f8f565b82800160010185558215610f8f579182015b82811115610f8f578251825591602001919060010190610f74565b50610f9b929150611077565b5090565b828054828255906000526020600020908101928215610fec579160200282015b82811115610fec5782518051610fdc918491602090910190610f1b565b5091602001919060010190610fbf565b50610f9b92915061108c565b828054828255906000526020600020908101928215610f8f5791602002820182811115610f8f578251825591602001919060010190610f74565b604051806040016040528060006001600160a01b031681526020016110726040518060400160405280600063ffffffff1681526020016000151581525090565b905290565b5b80821115610f9b5760008155600101611078565b80821115610f9b5760006110a082826110a9565b5060010161108c565b5080546110b5906114c7565b6000825580601f106110c5575050565b601f0160209004906000526020600020908101906108f99190611077565b6000815180845260005b81811015611109576020818501810151868301820152016110ed565b8181111561111b576000602083870101525b50601f01601f19169290920160200192915050565b60208152600061114360208301846110e3565b9392505050565b6001600160a01b03811681146108f957600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561119e5761119e61115f565b604052919050565b600082601f8301126111b757600080fd5b813567ffffffffffffffff8111156111d1576111d161115f565b6111e4601f8201601f1916602001611175565b8181528460208386010111156111f957600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561122f57600080fd5b611239873561114a565b8635955060208088013561124c8161114a565b9550604088013561125c8161114a565b9450606088013567ffffffffffffffff8082111561127957600080fd5b6112858b838c016111a6565b955060808a013591508082111561129b57600080fd5b6112a78b838c016111a6565b945060a08a01359150808211156112bd57600080fd5b818a0191508a601f8301126112d157600080fd5b8135818111156112e3576112e361115f565b8060051b6112f2858201611175565b918252838101850191858101908e84111561130c57600080fd5b86860192505b8383101561134657848335111561132857600080fd5b6113378f8885358901016111a6565b82529186019190860190611312565b809750505050505050509295509295509295565b602080825282518282018190526000919060409081850190868401855b828110156113b857815180516001600160a01b03168552860151805163ffffffff168786015286015115158585015260609093019290850190600101611377565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156113fd578351835292840192918401916001016113e1565b50909695505050505050565b60006020828403121561141b57600080fd5b5035919050565b60006020828403121561143457600080fd5b813563ffffffff8116811461114357600080fd5b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561149d57603f1988860301845261148b8583516110e3565b9450928501929085019060010161146f565b5092979650505050505050565b6000602082840312156114bc57600080fd5b81356111438161114a565b600181811c908216806114db57607f821691505b602082108114156105fe57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561153c5761153c611512565b5060010190565b60006020828403121561155557600080fd5b81516111438161114a565b60018060a01b0383168152600060206040818401526000845481600182811c91508083168061159057607f831692505b8583108114156115ae57634e487b7160e01b85526022600452602485fd5b60408801839052606088018180156115cd57600181146115de57611609565b60ff19861682528782019650611609565b60008b81526020902060005b86811015611603578154848201529085019089016115ea565b83019750505b50949a9950505050505050505050565b60006020828403121561162b57600080fd5b5051919050565b6000821982111561164557611645611512565b500190565b60006020828403121561165c57600080fd5b8151801515811461114357600080fdfea2646970667358221220d99d59966bcdc357425331a44e10aac185bb3b9b1004c4ec1b5a9c8998c7295564736f6c63430008090033"; - -type ExposedBallotConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ExposedBallotConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ExposedBallot__factory extends ContractFactory { - constructor(...args: ExposedBallotConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _DPS: string, - _proxy: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _DPS, - _proxy, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _DPS: string, - _proxy: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_DPS, _proxy, overrides || {}); - } - override attach(address: string): ExposedBallot { - return super.attach(address) as ExposedBallot; - } - override connect(signer: Signer): ExposedBallot__factory { - return super.connect(signer) as ExposedBallot__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ExposedBallotInterface { - return new utils.Interface(_abi) as ExposedBallotInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ExposedBallot { - return new Contract(address, _abi, signerOrProvider) as ExposedBallot; - } -} diff --git a/typings/factories/contracts/factories/BallotFactory__factory.ts b/typings/factories/contracts/voting/BallotFactory__factory.ts similarity index 98% rename from typings/factories/contracts/factories/BallotFactory__factory.ts rename to typings/factories/contracts/voting/BallotFactory__factory.ts index aa9dfd2..d6e747f 100644 --- a/typings/factories/contracts/factories/BallotFactory__factory.ts +++ b/typings/factories/contracts/voting/BallotFactory__factory.ts @@ -6,7 +6,7 @@ import type { Provider, TransactionRequest } from "@ethersproject/providers"; import type { BallotFactory, BallotFactoryInterface, -} from "../../../contracts/factories/BallotFactory"; +} from "../../../contracts/voting/BallotFactory"; const _abi = [ { @@ -103,7 +103,7 @@ const _abi = [ }, { internalType: "string[]", - name: "_choices", + name: "choices", type: "string[]", }, ], @@ -187,7 +187,7 @@ const _abi = [ ]; const _bytecode = - "0x608060405234801561001057600080fd5b50604051610c77380380610c7783398101604081905261002f9161018a565b61003833610122565b6001600160a01b038216610097576040805162461bcd60e51b8152602060048201526024810191909152600080516020610c378339815191526044820152600080516020610c5783398151915260648201526084015b60405180910390fd5b6001600160a01b0381166100f1576040805162461bcd60e51b8152602060048201526024810191909152600080516020610c378339815191526044820152600080516020610c57833981519152606482015260840161008e565b600180546001600160a01b039384166001600160a01b031991821617909155600380549290931691161790556101c4565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461018757600080fd5b50565b6000806040838503121561019d57600080fd5b82516101a881610172565b60208401519092506101b981610172565b809150509250929050565b610a64806101d36000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063d62d808911610066578063d62d8089146100f2578063eb87c6dc14610105578063ecade2f01461011a578063ef4e06ec1461012d578063f2fde38b1461014057600080fd5b8063715018a6146100985780638da5cb5b146100a2578063a7a98453146100cc578063b97a2319146100df575b600080fd5b6100a0610153565b005b6000546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b6100af6100da366004610684565b610192565b6003546100af906001600160a01b031681565b6100a0610100366004610754565b6101bc565b61010d6103d0565b6040516100c3919061085e565b6100a06101283660046108c0565b610432565b6001546100af906001600160a01b031681565b6100a061014e3660046108c0565b6104fc565b6000546001600160a01b031633146101865760405162461bcd60e51b815260040161017d906108e4565b60405180910390fd5b6101906000610597565b565b600281815481106101a257600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146101e65760405162461bcd60e51b815260040161017d906108e4565b6003546001600160a01b031660006101fd826105e7565b9050806001600160a01b0316631917d6c0836001600160a01b031663ef4e06ec6040518163ffffffff1660e01b815260040160206040518083038186803b15801561024757600080fd5b505afa15801561025b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027f9190610919565b846001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b1580156102b857600080fd5b505afa1580156102cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f09190610919565b308989896040518763ffffffff1660e01b815260040161031596959493929190610983565b600060405180830381600087803b15801561032f57600080fd5b505af1158015610343573d6000803e3d6000fd5b5050600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040519081527f165f4a0bebf649c196135ba0519a9a51da33d33a9e4d096b71050c2c97ec670f9250602001905060405180910390a15050505050565b6060600280548060200260200160405190810160405280929190818152602001828054801561042857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161040a575b5050505050905090565b6000546001600160a01b0316331461045c5760405162461bcd60e51b815260040161017d906108e4565b6001600160a01b0381166104da576040805162461bcd60e51b81526020600482015260248101919091527f42616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616460448201527f64726573732073686f756c64206e6f74206265207a65726f2061646472657373606482015260840161017d565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146105265760405162461bcd60e51b815260040161017d906108e4565b6001600160a01b03811661058b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161017d565b61059481610597565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b03811661067f5760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015260640161017d565b919050565b60006020828403121561069657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156106dc576106dc61069d565b604052919050565b600082601f8301126106f557600080fd5b813567ffffffffffffffff81111561070f5761070f61069d565b610722601f8201601f19166020016106b3565b81815284602083860101111561073757600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561076957600080fd5b833567ffffffffffffffff8082111561078157600080fd5b61078d878388016106e4565b94506020915081860135818111156107a457600080fd5b6107b0888289016106e4565b9450506040860135818111156107c557600080fd5b8601601f810188136107d657600080fd5b8035828111156107e8576107e861069d565b8060051b6107f78582016106b3565b918252828101850191858101908b84111561081157600080fd5b86850192505b8383101561084d5782358681111561082f5760008081fd5b61083d8d89838901016106e4565b8352509186019190860190610817565b809750505050505050509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561089f5783516001600160a01b03168352928401929184019160010161087a565b50909695505050505050565b6001600160a01b038116811461059457600080fd5b6000602082840312156108d257600080fd5b81356108dd816108ab565b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561092b57600080fd5b81516108dd816108ab565b6000815180845260005b8181101561095c57602081850181015186830182015201610940565b8181111561096e576000602083870101525b50601f01601f19169290920160200192915050565b600060018060a01b038089168352602081891681850152818816604085015260c060608501526109b660c0850188610936565b915083820360808501526109ca8287610936565b915083820360a08501528185518084528284019150828160051b85010183880160005b83811015610a1b57601f19878403018552610a09838351610936565b948601949250908501906001016109ed565b50909d9c5050505050505050505050505056fea26469706673582212209fa97be4d676d82d8d133bf31943116c33dbd47dee236341399a12510816e63d64736f6c6343000809003342616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616464726573732073686f756c64206e6f74206265207a65726f2061646472657373"; + "0x608060405234801561001057600080fd5b50604051610c77380380610c7783398101604081905261002f9161018a565b61003833610122565b6001600160a01b038216610097576040805162461bcd60e51b8152602060048201526024810191909152600080516020610c378339815191526044820152600080516020610c5783398151915260648201526084015b60405180910390fd5b6001600160a01b0381166100f1576040805162461bcd60e51b8152602060048201526024810191909152600080516020610c378339815191526044820152600080516020610c57833981519152606482015260840161008e565b600180546001600160a01b039384166001600160a01b031991821617909155600380549290931691161790556101c4565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461018757600080fd5b50565b6000806040838503121561019d57600080fd5b82516101a881610172565b60208401519092506101b981610172565b809150509250929050565b610a64806101d36000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063d62d808911610066578063d62d8089146100f2578063eb87c6dc14610105578063ecade2f01461011a578063ef4e06ec1461012d578063f2fde38b1461014057600080fd5b8063715018a6146100985780638da5cb5b146100a2578063a7a98453146100cc578063b97a2319146100df575b600080fd5b6100a0610153565b005b6000546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b6100af6100da366004610684565b610192565b6003546100af906001600160a01b031681565b6100a0610100366004610754565b6101bc565b61010d6103d0565b6040516100c3919061085e565b6100a06101283660046108c0565b610432565b6001546100af906001600160a01b031681565b6100a061014e3660046108c0565b6104fc565b6000546001600160a01b031633146101865760405162461bcd60e51b815260040161017d906108e4565b60405180910390fd5b6101906000610597565b565b600281815481106101a257600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146101e65760405162461bcd60e51b815260040161017d906108e4565b6003546001600160a01b031660006101fd826105e7565b9050806001600160a01b0316631917d6c0836001600160a01b031663ef4e06ec6040518163ffffffff1660e01b815260040160206040518083038186803b15801561024757600080fd5b505afa15801561025b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027f9190610919565b846001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b1580156102b857600080fd5b505afa1580156102cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f09190610919565b308989896040518763ffffffff1660e01b815260040161031596959493929190610983565b600060405180830381600087803b15801561032f57600080fd5b505af1158015610343573d6000803e3d6000fd5b5050600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040519081527f165f4a0bebf649c196135ba0519a9a51da33d33a9e4d096b71050c2c97ec670f9250602001905060405180910390a15050505050565b6060600280548060200260200160405190810160405280929190818152602001828054801561042857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161040a575b5050505050905090565b6000546001600160a01b0316331461045c5760405162461bcd60e51b815260040161017d906108e4565b6001600160a01b0381166104da576040805162461bcd60e51b81526020600482015260248101919091527f42616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616460448201527f64726573732073686f756c64206e6f74206265207a65726f2061646472657373606482015260840161017d565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146105265760405162461bcd60e51b815260040161017d906108e4565b6001600160a01b03811661058b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161017d565b61059481610597565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b03811661067f5760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015260640161017d565b919050565b60006020828403121561069657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156106dc576106dc61069d565b604052919050565b600082601f8301126106f557600080fd5b813567ffffffffffffffff81111561070f5761070f61069d565b610722601f8201601f19166020016106b3565b81815284602083860101111561073757600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561076957600080fd5b833567ffffffffffffffff8082111561078157600080fd5b61078d878388016106e4565b94506020915081860135818111156107a457600080fd5b6107b0888289016106e4565b9450506040860135818111156107c557600080fd5b8601601f810188136107d657600080fd5b8035828111156107e8576107e861069d565b8060051b6107f78582016106b3565b918252828101850191858101908b84111561081157600080fd5b86850192505b8383101561084d5782358681111561082f5760008081fd5b61083d8d89838901016106e4565b8352509186019190860190610817565b809750505050505050509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561089f5783516001600160a01b03168352928401929184019160010161087a565b50909695505050505050565b6001600160a01b038116811461059457600080fd5b6000602082840312156108d257600080fd5b81356108dd816108ab565b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561092b57600080fd5b81516108dd816108ab565b6000815180845260005b8181101561095c57602081850181015186830182015201610940565b8181111561096e576000602083870101525b50601f01601f19169290920160200192915050565b600060018060a01b038089168352602081891681850152818816604085015260c060608501526109b660c0850188610936565b915083820360808501526109ca8287610936565b915083820360a08501528185518084528284019150828160051b85010183880160005b83811015610a1b57601f19878403018552610a09838351610936565b948601949250908501906001016109ed565b50909d9c5050505050505050505050505056fea2646970667358221220364eb110f79d6d0a9c6ed29e28d4af50d9a94728ae3b489aaabfbcf8e43b2e5864736f6c6343000809003342616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616464726573732073686f756c64206e6f74206265207a65726f2061646472657373"; type BallotFactoryConstructorParams = | [signer?: Signer] diff --git a/typings/factories/contracts/voting/Ballot__factory.ts b/typings/factories/contracts/voting/Ballot__factory.ts new file mode 100644 index 0000000..67a806a --- /dev/null +++ b/typings/factories/contracts/voting/Ballot__factory.ts @@ -0,0 +1,308 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { Ballot, BallotInterface } from "../../../contracts/voting/Ballot"; + +const _abi = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + inputs: [], + name: "DPS", + outputs: [ + { + internalType: "contract IERC20Metadata", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "choices", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "close", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "closed", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "factory", + outputs: [ + { + internalType: "contract BallotFactory", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getChoices", + outputs: [ + { + internalType: "string[]", + name: "", + type: "string[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getResults", + outputs: [ + { + internalType: "uint256[]", + name: "", + type: "uint256[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IERC20Metadata", + name: "_DPS", + type: "address", + }, + { + internalType: "contract VotingDelegation", + name: "_proxy", + type: "address", + }, + { + internalType: "contract BallotFactory", + name: "_factory", + type: "address", + }, + { + internalType: "string", + name: "_subject", + type: "string", + }, + { + internalType: "string", + name: "_topic", + type: "string", + }, + { + internalType: "string[]", + name: "_choices", + type: "string[]", + }, + ], + name: "init", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "proxy", + outputs: [ + { + internalType: "contract VotingDelegation", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "resultStorage", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "subject", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "topic", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint32", + name: "choiceIndex", + type: "uint32", + }, + ], + name: "vote", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +]; + +const _bytecode = + "0x60a060405269054b40b1f852bda0000060805234801561001e57600080fd5b506100283361002d565b61007d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6080516114856100986000396000610a0401526114856000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639094c76311610097578063ec55688911610066578063ec55688914610203578063ef4e06ec14610216578063f2fde38b14610229578063f6fd7fde1461023c57600080fd5b80639094c763146101c057806398c81bbf146101d3578063bf63a577146101e8578063c45a0155146101f057600080fd5b806359037b89116100d357806359037b8914610155578063597e1fb514610176578063715018a6146101935780638da5cb5b1461019b57600080fd5b80630a59a98c146101055780631917d6c01461012357806343d726d6146101385780634717f97c14610140575b600080fd5b61010d61024f565b60405161011a9190610f78565b60405180910390f35b61013661013136600461105e565b6102dd565b005b610136610491565b610148610789565b60405161011a91906111a2565b6101686101633660046111e6565b6107e1565b60405190815260200161011a565b6005546101839060ff1681565b604051901515815260200161011a565b610136610802565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161011a565b6101366101ce3660046111ff565b610868565b6101db610b7f565b60405161011a9190611225565b61010d610c58565b6003546101a8906001600160a01b031681565b6002546101a8906001600160a01b031681565b6001546101a8906001600160a01b031681565b610136610237366004611287565b610c65565b61010d61024a3660046111e6565b610d2d565b6004805461025c906112a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610288906112a4565b80156102d55780601f106102aa576101008083540402835291602001916102d5565b820191906000526020600020905b8154815290600101906020018083116102b857829003601f168201915b505050505081565b600054600160a81b900460ff1661030157600054600160a01b900460ff1615610305565b303b155b61036d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b600054600160a81b900460ff16158015610397576000805461ffff60a01b191661010160a01b1790555b83516103aa906004906020870190610da8565b5082516103be906006906020860190610da8565b506005805460ff1916905581516103dc906007906020850190610e2c565b5060075467ffffffffffffffff8111156103f8576103f8610fa7565b604051908082528060200260200182016040528015610421578160200160208202803683370190505b50805161043691600891602090910190610e85565b50600180546001600160a01b03808a166001600160a01b0319928316179092556002805489841690831617905560038054928816929091169190911790558015610488576000805460ff60a81b191690555b50505050505050565b600360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104df57600080fd5b505afa1580156104f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051791906112df565b6001600160a01b0316336001600160a01b0316146105835760405162461bcd60e51b8152602060048201526024808201527f566f74696e673a205265737472696374656420746f20666163746f7279206f776044820152633732b91760e11b6064820152608401610364565b60055460ff16156105d65760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e00006044820152606401610364565b6005805460ff1916600117905560005b60095481101561078657600060098281548110610605576106056112fc565b6000918252602090912001546002546040516302fbd00360e21b81526001600160a01b039283169350911690630bef400c90610648908490600690600401611312565b60206040518083038186803b15801561066057600080fd5b505afa158015610674573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069891906113cb565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a082319060240160206040518083038186803b1580156106dd57600080fd5b505afa1580156106f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071591906113cb565b61071f91906113fa565b6001600160a01b0382166000908152600a602052604090205460088054909163ffffffff16908110610753576107536112fc565b90600052602060002001600082825461076c91906113fa565b9091555082915061077e905081611412565b9150506105e6565b50565b606060088054806020026020016040519081016040528092919081815260200182805480156107d757602002820191906000526020600020905b8154815260200190600101908083116107c3575b5050505050905090565b600881815481106107f157600080fd5b600091825260209091200154905081565b6000546001600160a01b0316331461085c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610364565b6108666000610d58565b565b60055460ff16156108bb5760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e000000000000006044820152606401610364565b60075463ffffffff82161061091c5760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2043686f69636520696e64657820697320746f6f20686967686044820152601760f91b6064820152608401610364565b60025460405163442f655160e01b81526001600160a01b039091169063442f65519061094f903390600690600401611312565b60206040518083038186803b15801561096757600080fd5b505afa15801561097b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099f919061142d565b156109ec5760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e0000000000006044820152606401610364565b6001546040516370a0823160e01b81523360048201527f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316906370a082319060240160206040518083038186803b158015610a4f57600080fd5b505afa158015610a63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8791906113cb565b1015610ad55760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e006044820152606401610364565b336000908152600a6020526040902054640100000000900460ff16610b5657336000818152600a60205260408120805464ff0000000019166401000000001790556009805460018101825591527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b03191690911790555b336000908152600a60205260409020805463ffffffff191663ffffffff92909216919091179055565b60606007805480602002602001604051908101604052809291908181526020016000905b82821015610c4f578382906000526020600020018054610bc2906112a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610bee906112a4565b8015610c3b5780601f10610c1057610100808354040283529160200191610c3b565b820191906000526020600020905b815481529060010190602001808311610c1e57829003601f168201915b505050505081526020019060010190610ba3565b50505050905090565b6006805461025c906112a4565b6000546001600160a01b03163314610cbf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610364565b6001600160a01b038116610d245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610364565b61078681610d58565b60078181548110610d3d57600080fd5b90600052602060002001600091509050805461025c906112a4565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054610db4906112a4565b90600052602060002090601f016020900481019282610dd65760008555610e1c565b82601f10610def57805160ff1916838001178555610e1c565b82800160010185558215610e1c579182015b82811115610e1c578251825591602001919060010190610e01565b50610e28929150610ebf565b5090565b828054828255906000526020600020908101928215610e79579160200282015b82811115610e795782518051610e69918491602090910190610da8565b5091602001919060010190610e4c565b50610e28929150610ed4565b828054828255906000526020600020908101928215610e1c5791602002820182811115610e1c578251825591602001919060010190610e01565b5b80821115610e285760008155600101610ec0565b80821115610e28576000610ee88282610ef1565b50600101610ed4565b508054610efd906112a4565b6000825580601f10610f0d575050565b601f0160209004906000526020600020908101906107869190610ebf565b6000815180845260005b81811015610f5157602081850181015186830182015201610f35565b81811115610f63576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610f8b6020830184610f2b565b9392505050565b6001600160a01b038116811461078657600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610fe657610fe6610fa7565b604052919050565b600082601f830112610fff57600080fd5b813567ffffffffffffffff81111561101957611019610fa7565b61102c601f8201601f1916602001610fbd565b81815284602083860101111561104157600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561107757600080fd5b6110818735610f92565b8635955060208088013561109481610f92565b955060408801356110a481610f92565b9450606088013567ffffffffffffffff808211156110c157600080fd5b6110cd8b838c01610fee565b955060808a01359150808211156110e357600080fd5b6110ef8b838c01610fee565b945060a08a013591508082111561110557600080fd5b818a0191508a601f83011261111957600080fd5b81358181111561112b5761112b610fa7565b8060051b61113a858201610fbd565b918252838101850191858101908e84111561115457600080fd5b86860192505b8383101561118e57848335111561117057600080fd5b61117f8f888535890101610fee565b8252918601919086019061115a565b809750505050505050509295509295509295565b6020808252825182820181905260009190848201906040850190845b818110156111da578351835292840192918401916001016111be565b50909695505050505050565b6000602082840312156111f857600080fd5b5035919050565b60006020828403121561121157600080fd5b813563ffffffff81168114610f8b57600080fd5b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561127a57603f19888603018452611268858351610f2b565b9450928501929085019060010161124c565b5092979650505050505050565b60006020828403121561129957600080fd5b8135610f8b81610f92565b600181811c908216806112b857607f821691505b602082108114156112d957634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156112f157600080fd5b8151610f8b81610f92565b634e487b7160e01b600052603260045260246000fd5b60018060a01b0383168152600060206040818401526000845481600182811c91508083168061134257607f831692505b85831081141561136057634e487b7160e01b85526022600452602485fd5b604088018390526060880181801561137f5760018114611390576113bb565b60ff198616825287820196506113bb565b60008b81526020902060005b868110156113b55781548482015290850190890161139c565b83019750505b50949a9950505050505050505050565b6000602082840312156113dd57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561140d5761140d6113e4565b500190565b6000600019821415611426576114266113e4565b5060010190565b60006020828403121561143f57600080fd5b81518015158114610f8b57600080fdfea264697066735822122039f7929615c53f0bc31594382d218f477450cfb4714978c4d49397b689bdf06064736f6c63430008090033"; + +type BallotConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: BallotConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class Ballot__factory extends ContractFactory { + constructor(...args: BallotConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: string | Promise } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: string | Promise } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): Ballot { + return super.attach(address) as Ballot; + } + override connect(signer: Signer): Ballot__factory { + return super.connect(signer) as Ballot__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): BallotInterface { + return new utils.Interface(_abi) as BallotInterface; + } + static connect(address: string, signerOrProvider: Signer | Provider): Ballot { + return new Contract(address, _abi, signerOrProvider) as Ballot; + } +} diff --git a/typings/factories/contracts/voting/VotingDelegation__factory.ts b/typings/factories/contracts/voting/VotingDelegation__factory.ts new file mode 100644 index 0000000..f92b4af --- /dev/null +++ b/typings/factories/contracts/voting/VotingDelegation__factory.ts @@ -0,0 +1,267 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { + VotingDelegation, + VotingDelegationInterface, +} from "../../../contracts/voting/VotingDelegation"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IERC20Metadata", + name: "_DPS", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + inputs: [], + name: "DPS", + outputs: [ + { + internalType: "contract IERC20Metadata", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "ballotFactory", + outputs: [ + { + internalType: "contract BallotFactory", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "string", + name: "topic", + type: "string", + }, + ], + name: "delegate", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "voter", + type: "address", + }, + { + internalType: "string", + name: "topic", + type: "string", + }, + ], + name: "delegationAmount", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "string", + name: "topic", + type: "string", + }, + ], + name: "delegators", + outputs: [ + { + internalType: "address[]", + name: "", + type: "address[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "voter", + type: "address", + }, + { + internalType: "string", + name: "topic", + type: "string", + }, + ], + name: "hasDelegated", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address", + }, + { + internalType: "string", + name: "topic", + type: "string", + }, + ], + name: "representative", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +]; + +const _bytecode = + "0x60a060405269054b40b1f852bda0000060805234801561001e57600080fd5b50604051610c9f380380610c9f83398101604081905261003d91610124565b610046336100d4565b6001600160a01b0381166100af5760405162461bcd60e51b815260206004820152602660248201527f566f74696e6744656c65676174696f6e3a204450532061646472657373206973604482015265103d32b9379760d11b606482015260840160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055610154565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561013657600080fd5b81516001600160a01b038116811461014d57600080fd5b9392505050565b608051610b3061016f60003960006103500152610b306000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638da5cb5b116100665780638da5cb5b14610156578063ceb0b9351461017b578063ef4e06ec1461018e578063f2fde38b146101a1578063fc196713146101b457600080fd5b80630bef400c146100a3578063442f6551146100c95780635e12967914610119578063694ec60e1461012e578063715018a61461014e575b600080fd5b6100b66100b136600461091b565b6101f2565b6040519081526020015b60405180910390f35b6101096100d736600461091b565b6001600160a01b0391821660009081526004602090815260408083208451948301949094208352929052205416151590565b60405190151581526020016100c0565b61012c61012736600461091b565b61032e565b005b61014161013c36600461091b565b610612565b6040516100c091906109dd565b61012c610768565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100c0565b600254610163906001600160a01b031681565b600154610163906001600160a01b031681565b61012c6101af366004610a2a565b6107ce565b6101636101c236600461091b565b6001600160a01b039182166000908152600460209081526040808320845194830194909420835292905220541690565b805160208201206000908190815b6001600160a01b038616600090815260036020908152604080832085845290915290206001015463ffffffff8216101561032457600180546001600160a01b0388811660009081526003602090815260408083208884529091529020909201805492909116916370a08231919063ffffffff851690811061028357610283610a4c565b60009182526020909120015460405160e083901b6001600160e01b03191681526001600160a01b03909116600482015260240160206040518083038186803b1580156102ce57600080fd5b505afa1580156102e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103069190610a62565b6103109084610a91565b92508061031c81610aa9565b915050610200565b5090949350505050565b6001546040516370a0823160e01b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000009216906370a082319060240160206040518083038186803b15801561039357600080fd5b505afa1580156103a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cb9190610a62565b1015806103df57506001600160a01b038216155b6104445760405162461bcd60e51b815260206004820152602b60248201527f566f74696e6744656c65676174696f6e3a2050726f787920686173206e6f742060448201526a32b737bab3b4102228299760a91b60648201526084015b60405180910390fd5b805160208083019190912033600090815260048352604080822083835290935291909120546001600160a01b03161561057b573360008181526004602090815260408083208584528252808320546001600160a01b03168352600382528083208584528252808320938352908390529020546001828101805490916104c891610acd565b815481106104d8576104d8610a4c565b6000918252602090912001546001830180546001600160a01b03909216918390811061050657610506610a4c565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508160010180548061054757610547610ae4565b60008281526020808220830160001990810180546001600160a01b0319169055909201909255338252929092525060408120555b336000908152600460209081526040808320848452909152902080546001600160a01b0319166001600160a01b0385169081179091551561060d576001600160a01b038316600090815260036020908152604080832084845282528083206001808201805433808852938652938620849055908301815584529190922090910180546001600160a01b03191690911790555b505050565b80516020808301919091206001600160a01b0384166000908152600383526040808220838352909352918220600101546060929067ffffffffffffffff81111561065e5761065e610905565b604051908082528060200260200182016040528015610687578160200160208202803683370190505b50905060005b6001600160a01b038616600090815260036020908152604080832086845290915290206001015463ffffffff8216101561075f576001600160a01b03861660009081526003602090815260408083208684529091529020600101805463ffffffff83169081106106ff576106ff610a4c565b9060005260206000200160009054906101000a90046001600160a01b0316828263ffffffff168151811061073557610735610a4c565b6001600160a01b03909216602092830291909101909101528061075781610aa9565b91505061068d565b50949350505050565b6000546001600160a01b031633146107c25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161043b565b6107cc6000610899565b565b6000546001600160a01b031633146108285760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161043b565b6001600160a01b03811661088d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161043b565b61089681610899565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461090057600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561092e57600080fd5b610937836108e9565b9150602083013567ffffffffffffffff8082111561095457600080fd5b818501915085601f83011261096857600080fd5b81358181111561097a5761097a610905565b604051601f8201601f19908116603f011681019083821181831017156109a2576109a2610905565b816040528281528860208487010111156109bb57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b81811015610a1e5783516001600160a01b0316835292840192918401916001016109f9565b50909695505050505050565b600060208284031215610a3c57600080fd5b610a45826108e9565b9392505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610a7457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610aa457610aa4610a7b565b500190565b600063ffffffff80831681811415610ac357610ac3610a7b565b6001019392505050565b600082821015610adf57610adf610a7b565b500390565b634e487b7160e01b600052603160045260246000fdfea26469706673582212200a362f094a337aa4b98a892276a12f922c6dfc17f6a49669577e8d3cf16a9a2c64736f6c63430008090033"; + +type VotingDelegationConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: VotingDelegationConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class VotingDelegation__factory extends ContractFactory { + constructor(...args: VotingDelegationConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _DPS: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise { + return super.deploy(_DPS, overrides || {}) as Promise; + } + override getDeployTransaction( + _DPS: string, + overrides?: Overrides & { from?: string | Promise } + ): TransactionRequest { + return super.getDeployTransaction(_DPS, overrides || {}); + } + override attach(address: string): VotingDelegation { + return super.attach(address) as VotingDelegation; + } + override connect(signer: Signer): VotingDelegation__factory { + return super.connect(signer) as VotingDelegation__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): VotingDelegationInterface { + return new utils.Interface(_abi) as VotingDelegationInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): VotingDelegation { + return new Contract(address, _abi, signerOrProvider) as VotingDelegation; + } +} diff --git a/typings/hardhat.d.ts b/typings/hardhat.d.ts index 17d6222..6fb339a 100644 --- a/typings/hardhat.d.ts +++ b/typings/hardhat.d.ts @@ -116,6 +116,22 @@ declare module "hardhat/types/runtime" { name: "IERC20Metadata", signerOrOptions?: ethers.Signer | FactoryOptions ): Promise; + getContractFactory( + name: "Ballot", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + getContractFactory( + name: "BallotFactory", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + getContractFactory( + name: "ExposedBallot", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + getContractFactory( + name: "VotingDelegation", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; getContractFactory( name: "VotingDelegation", signerOrOptions?: ethers.Signer | FactoryOptions @@ -251,6 +267,26 @@ declare module "hardhat/types/runtime" { address: string, signer?: ethers.Signer ): Promise; + getContractAt( + name: "Ballot", + address: string, + signer?: ethers.Signer + ): Promise; + getContractAt( + name: "BallotFactory", + address: string, + signer?: ethers.Signer + ): Promise; + getContractAt( + name: "ExposedBallot", + address: string, + signer?: ethers.Signer + ): Promise; + getContractAt( + name: "VotingDelegation", + address: string, + signer?: ethers.Signer + ): Promise; getContractAt( name: "VotingDelegation", address: string, From a285925e116d515e6d6b6b1284e2c2cb2aa9ecdd Mon Sep 17 00:00:00 2001 From: valentinpollart Date: Thu, 28 Apr 2022 11:03:46 +0200 Subject: [PATCH 16/25] feat: separate open and closed ballots in the factory --- contracts/voting/Ballot.sol | 1 + contracts/voting/BallotFactory.sol | 39 +++++- test/BallotFactory.spec.ts | 13 ++ typings/contracts/voting/BallotFactory.ts | 124 +++++++++++++++--- .../voting/BallotFactory__factory.ts | 45 ++++++- .../contracts/voting/Ballot__factory.ts | 2 +- .../voting/VotingDelegation__factory.ts | 2 +- typings/hardhat.d.ts | 36 ----- 8 files changed, 197 insertions(+), 65 deletions(-) diff --git a/contracts/voting/Ballot.sol b/contracts/voting/Ballot.sol index 9830e90..2d67e16 100644 --- a/contracts/voting/Ballot.sol +++ b/contracts/voting/Ballot.sol @@ -144,6 +144,7 @@ contract Ballot is Ownable, Initializable { address voter = voters[i]; resultStorage[votes[voter].choiceIndex] += DPS.balanceOf(voter) + proxy.delegationAmount(voter, topic); } + factory.archiveBallot(); } diff --git a/contracts/voting/BallotFactory.sol b/contracts/voting/BallotFactory.sol index 66c3d31..cdf9295 100644 --- a/contracts/voting/BallotFactory.sol +++ b/contracts/voting/BallotFactory.sol @@ -17,8 +17,11 @@ contract BallotFactory is Ownable { // @dev Contract defining the DPS token IERC20Metadata public DPS; - // @dev The list of all ballot contract clones - address[] public ballotAddresses; + // @dev The list of all active ballot contract clones + address[] public activeBallotAddresses; + + // @dev The list of all archived ballot contract clones + address[] public archivedBallotAddresses; // @dev The address of the ballot implementation used as ballot contract proxy address public implementationAddress; @@ -50,10 +53,27 @@ contract BallotFactory is Ownable { Ballot implementation = Ballot(implementationAddress); address cloneAddress = Clones.clone(implementationAddress); Ballot(cloneAddress).init(implementation.DPS(), implementation.proxy(), this, subject, topic, choices); - ballotAddresses.push(cloneAddress); + activeBallotAddresses.push(cloneAddress); emit BallotCreated(cloneAddress); } + /** + * @notice Archive a ballot and remove it from the active ballot list + * @dev It can be perform only by the ballot itself by calling this method within its close method. + */ + function archiveBallot() external { + bool isBallotContract = false; + for(uint i = 0; i < activeBallotAddresses.length; i++) { + if (activeBallotAddresses[i] == msg.sender) { + isBallotContract = true; + archivedBallotAddresses.push(activeBallotAddresses[i]); + activeBallotAddresses[i] = activeBallotAddresses[activeBallotAddresses.length - 1]; + activeBallotAddresses.pop(); + return; + } + } + } + /** * @notice Set up the new ballot proxy address * @param newAddress The address of the new ballot proxy contract @@ -64,9 +84,16 @@ contract BallotFactory is Ownable { } /** - * @notice Returns all ballot clone addresses. + * @notice Returns all active ballot clone addresses. + */ + function getActiveBallots() external view returns (address[] memory) { + return activeBallotAddresses; + } + + /** + * @notice Returns all archived ballot clone addresses. */ - function getBallots() external view returns (address[] memory) { - return ballotAddresses; + function getArchivedBallots() external view returns (address[] memory) { + return archivedBallotAddresses; } } diff --git a/test/BallotFactory.spec.ts b/test/BallotFactory.spec.ts index dabc010..df00769 100644 --- a/test/BallotFactory.spec.ts +++ b/test/BallotFactory.spec.ts @@ -5,6 +5,7 @@ import { DeepSquare } from '../typings/contracts/DeepSquare'; import { Ballot } from '../typings/contracts/voting/Ballot'; import { BallotFactory } from '../typings/contracts/voting/BallotFactory'; import { BallotFactory__factory } from '../typings/factories/contracts/voting/BallotFactory__factory'; +import { Ballot__factory } from '../typings/factories/contracts/voting/Ballot__factory'; import setup from './testing/setup'; import setupVoting from './testing/setupVoting'; @@ -42,6 +43,18 @@ describe('Ballot Factory', async () => { }); }); + describe.only('archiveBallot', () => { + it('should archive an active ballot', async () => { + await ballotFactory.setImplementationAddress(ballotImplementation.address); + const [ballotAddress] = await ballotFactory + .createBallot('foo', 'qux', ['bar', 'baz']) + .then(async (t) => (await t.wait()).events?.find((e) => e.event === 'BallotCreated')?.args ?? []); + await new Ballot__factory(owner).attach(ballotAddress).close(); + expect(await ballotFactory.getActiveBallots()).to.deep.equals([]); + expect(await ballotFactory.getArchivedBallots()).to.deep.equals([ballotAddress]); + }); + }); + describe('setImplementationAddress', () => { it('should throw if implementation address is zero address', async () => { await expect(ballotFactory.setImplementationAddress(ZERO_ADDRESS)).to.revertedWith( diff --git a/typings/contracts/voting/BallotFactory.ts b/typings/contracts/voting/BallotFactory.ts index 8bf7147..a300dd7 100644 --- a/typings/contracts/voting/BallotFactory.ts +++ b/typings/contracts/voting/BallotFactory.ts @@ -29,9 +29,12 @@ import type { export interface BallotFactoryInterface extends utils.Interface { functions: { "DPS()": FunctionFragment; - "ballotAddresses(uint256)": FunctionFragment; + "activeBallotAddresses(uint256)": FunctionFragment; + "archiveBallot()": FunctionFragment; + "archivedBallotAddresses(uint256)": FunctionFragment; "createBallot(string,string,string[])": FunctionFragment; - "getBallots()": FunctionFragment; + "getActiveBallots()": FunctionFragment; + "getArchivedBallots()": FunctionFragment; "implementationAddress()": FunctionFragment; "owner()": FunctionFragment; "renounceOwnership()": FunctionFragment; @@ -42,9 +45,12 @@ export interface BallotFactoryInterface extends utils.Interface { getFunction( nameOrSignatureOrTopic: | "DPS" - | "ballotAddresses" + | "activeBallotAddresses" + | "archiveBallot" + | "archivedBallotAddresses" | "createBallot" - | "getBallots" + | "getActiveBallots" + | "getArchivedBallots" | "implementationAddress" | "owner" | "renounceOwnership" @@ -54,7 +60,15 @@ export interface BallotFactoryInterface extends utils.Interface { encodeFunctionData(functionFragment: "DPS", values?: undefined): string; encodeFunctionData( - functionFragment: "ballotAddresses", + functionFragment: "activeBallotAddresses", + values: [BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "archiveBallot", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "archivedBallotAddresses", values: [BigNumberish] ): string; encodeFunctionData( @@ -62,7 +76,11 @@ export interface BallotFactoryInterface extends utils.Interface { values: [string, string, string[]] ): string; encodeFunctionData( - functionFragment: "getBallots", + functionFragment: "getActiveBallots", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getArchivedBallots", values?: undefined ): string; encodeFunctionData( @@ -85,14 +103,29 @@ export interface BallotFactoryInterface extends utils.Interface { decodeFunctionResult(functionFragment: "DPS", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "ballotAddresses", + functionFragment: "activeBallotAddresses", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "archiveBallot", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "archivedBallotAddresses", data: BytesLike ): Result; decodeFunctionResult( functionFragment: "createBallot", data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "getBallots", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "getActiveBallots", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getArchivedBallots", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "implementationAddress", data: BytesLike @@ -168,7 +201,16 @@ export interface BallotFactory extends BaseContract { functions: { DPS(overrides?: CallOverrides): Promise<[string]>; - ballotAddresses( + activeBallotAddresses( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise<[string]>; + + archiveBallot( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + archivedBallotAddresses( arg0: BigNumberish, overrides?: CallOverrides ): Promise<[string]>; @@ -180,7 +222,9 @@ export interface BallotFactory extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - getBallots(overrides?: CallOverrides): Promise<[string[]]>; + getActiveBallots(overrides?: CallOverrides): Promise<[string[]]>; + + getArchivedBallots(overrides?: CallOverrides): Promise<[string[]]>; implementationAddress(overrides?: CallOverrides): Promise<[string]>; @@ -203,7 +247,16 @@ export interface BallotFactory extends BaseContract { DPS(overrides?: CallOverrides): Promise; - ballotAddresses( + activeBallotAddresses( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise; + + archiveBallot( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + archivedBallotAddresses( arg0: BigNumberish, overrides?: CallOverrides ): Promise; @@ -215,7 +268,9 @@ export interface BallotFactory extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - getBallots(overrides?: CallOverrides): Promise; + getActiveBallots(overrides?: CallOverrides): Promise; + + getArchivedBallots(overrides?: CallOverrides): Promise; implementationAddress(overrides?: CallOverrides): Promise; @@ -238,7 +293,14 @@ export interface BallotFactory extends BaseContract { callStatic: { DPS(overrides?: CallOverrides): Promise; - ballotAddresses( + activeBallotAddresses( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise; + + archiveBallot(overrides?: CallOverrides): Promise; + + archivedBallotAddresses( arg0: BigNumberish, overrides?: CallOverrides ): Promise; @@ -250,7 +312,9 @@ export interface BallotFactory extends BaseContract { overrides?: CallOverrides ): Promise; - getBallots(overrides?: CallOverrides): Promise; + getActiveBallots(overrides?: CallOverrides): Promise; + + getArchivedBallots(overrides?: CallOverrides): Promise; implementationAddress(overrides?: CallOverrides): Promise; @@ -286,7 +350,16 @@ export interface BallotFactory extends BaseContract { estimateGas: { DPS(overrides?: CallOverrides): Promise; - ballotAddresses( + activeBallotAddresses( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise; + + archiveBallot( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + archivedBallotAddresses( arg0: BigNumberish, overrides?: CallOverrides ): Promise; @@ -298,7 +371,9 @@ export interface BallotFactory extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - getBallots(overrides?: CallOverrides): Promise; + getActiveBallots(overrides?: CallOverrides): Promise; + + getArchivedBallots(overrides?: CallOverrides): Promise; implementationAddress(overrides?: CallOverrides): Promise; @@ -322,7 +397,16 @@ export interface BallotFactory extends BaseContract { populateTransaction: { DPS(overrides?: CallOverrides): Promise; - ballotAddresses( + activeBallotAddresses( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise; + + archiveBallot( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + archivedBallotAddresses( arg0: BigNumberish, overrides?: CallOverrides ): Promise; @@ -334,7 +418,11 @@ export interface BallotFactory extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - getBallots(overrides?: CallOverrides): Promise; + getActiveBallots(overrides?: CallOverrides): Promise; + + getArchivedBallots( + overrides?: CallOverrides + ): Promise; implementationAddress( overrides?: CallOverrides diff --git a/typings/factories/contracts/voting/BallotFactory__factory.ts b/typings/factories/contracts/voting/BallotFactory__factory.ts index d6e747f..31e0f7b 100644 --- a/typings/factories/contracts/voting/BallotFactory__factory.ts +++ b/typings/factories/contracts/voting/BallotFactory__factory.ts @@ -78,7 +78,33 @@ const _abi = [ type: "uint256", }, ], - name: "ballotAddresses", + name: "activeBallotAddresses", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "archiveBallot", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "archivedBallotAddresses", outputs: [ { internalType: "address", @@ -114,7 +140,20 @@ const _abi = [ }, { inputs: [], - name: "getBallots", + name: "getActiveBallots", + outputs: [ + { + internalType: "address[]", + name: "", + type: "address[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getArchivedBallots", outputs: [ { internalType: "address[]", @@ -187,7 +226,7 @@ const _abi = [ ]; const _bytecode = - "0x608060405234801561001057600080fd5b50604051610c77380380610c7783398101604081905261002f9161018a565b61003833610122565b6001600160a01b038216610097576040805162461bcd60e51b8152602060048201526024810191909152600080516020610c378339815191526044820152600080516020610c5783398151915260648201526084015b60405180910390fd5b6001600160a01b0381166100f1576040805162461bcd60e51b8152602060048201526024810191909152600080516020610c378339815191526044820152600080516020610c57833981519152606482015260840161008e565b600180546001600160a01b039384166001600160a01b031991821617909155600380549290931691161790556101c4565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461018757600080fd5b50565b6000806040838503121561019d57600080fd5b82516101a881610172565b60208401519092506101b981610172565b809150509250929050565b610a64806101d36000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063d62d808911610066578063d62d8089146100f2578063eb87c6dc14610105578063ecade2f01461011a578063ef4e06ec1461012d578063f2fde38b1461014057600080fd5b8063715018a6146100985780638da5cb5b146100a2578063a7a98453146100cc578063b97a2319146100df575b600080fd5b6100a0610153565b005b6000546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b6100af6100da366004610684565b610192565b6003546100af906001600160a01b031681565b6100a0610100366004610754565b6101bc565b61010d6103d0565b6040516100c3919061085e565b6100a06101283660046108c0565b610432565b6001546100af906001600160a01b031681565b6100a061014e3660046108c0565b6104fc565b6000546001600160a01b031633146101865760405162461bcd60e51b815260040161017d906108e4565b60405180910390fd5b6101906000610597565b565b600281815481106101a257600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146101e65760405162461bcd60e51b815260040161017d906108e4565b6003546001600160a01b031660006101fd826105e7565b9050806001600160a01b0316631917d6c0836001600160a01b031663ef4e06ec6040518163ffffffff1660e01b815260040160206040518083038186803b15801561024757600080fd5b505afa15801561025b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027f9190610919565b846001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b1580156102b857600080fd5b505afa1580156102cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f09190610919565b308989896040518763ffffffff1660e01b815260040161031596959493929190610983565b600060405180830381600087803b15801561032f57600080fd5b505af1158015610343573d6000803e3d6000fd5b5050600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040519081527f165f4a0bebf649c196135ba0519a9a51da33d33a9e4d096b71050c2c97ec670f9250602001905060405180910390a15050505050565b6060600280548060200260200160405190810160405280929190818152602001828054801561042857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161040a575b5050505050905090565b6000546001600160a01b0316331461045c5760405162461bcd60e51b815260040161017d906108e4565b6001600160a01b0381166104da576040805162461bcd60e51b81526020600482015260248101919091527f42616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616460448201527f64726573732073686f756c64206e6f74206265207a65726f2061646472657373606482015260840161017d565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146105265760405162461bcd60e51b815260040161017d906108e4565b6001600160a01b03811661058b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161017d565b61059481610597565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b03811661067f5760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015260640161017d565b919050565b60006020828403121561069657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156106dc576106dc61069d565b604052919050565b600082601f8301126106f557600080fd5b813567ffffffffffffffff81111561070f5761070f61069d565b610722601f8201601f19166020016106b3565b81815284602083860101111561073757600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561076957600080fd5b833567ffffffffffffffff8082111561078157600080fd5b61078d878388016106e4565b94506020915081860135818111156107a457600080fd5b6107b0888289016106e4565b9450506040860135818111156107c557600080fd5b8601601f810188136107d657600080fd5b8035828111156107e8576107e861069d565b8060051b6107f78582016106b3565b918252828101850191858101908b84111561081157600080fd5b86850192505b8383101561084d5782358681111561082f5760008081fd5b61083d8d89838901016106e4565b8352509186019190860190610817565b809750505050505050509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561089f5783516001600160a01b03168352928401929184019160010161087a565b50909695505050505050565b6001600160a01b038116811461059457600080fd5b6000602082840312156108d257600080fd5b81356108dd816108ab565b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561092b57600080fd5b81516108dd816108ab565b6000815180845260005b8181101561095c57602081850181015186830182015201610940565b8181111561096e576000602083870101525b50601f01601f19169290920160200192915050565b600060018060a01b038089168352602081891681850152818816604085015260c060608501526109b660c0850188610936565b915083820360808501526109ca8287610936565b915083820360a08501528185518084528284019150828160051b85010183880160005b83811015610a1b57601f19878403018552610a09838351610936565b948601949250908501906001016109ed565b50909d9c5050505050505050505050505056fea2646970667358221220364eb110f79d6d0a9c6ed29e28d4af50d9a94728ae3b489aaabfbcf8e43b2e5864736f6c6343000809003342616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616464726573732073686f756c64206e6f74206265207a65726f2061646472657373"; + "0x608060405234801561001057600080fd5b5060405162000f0b38038062000f0b83398101604081905261003191610190565b61003a33610128565b6001600160a01b03821661009b576040805162461bcd60e51b815260206004820152602481019190915260008051602062000ecb833981519152604482015260008051602062000eeb83398151915260648201526084015b60405180910390fd5b6001600160a01b0381166100f7576040805162461bcd60e51b815260206004820152602481019190915260008051602062000ecb833981519152604482015260008051602062000eeb8339815191526064820152608401610092565b600180546001600160a01b039384166001600160a01b031991821617909155600480549290931691161790556101ca565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461018d57600080fd5b50565b600080604083850312156101a357600080fd5b82516101ae81610178565b60208401519092506101bf81610178565b809150509250929050565b610cf180620001da6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063b97a231911610071578063b97a231914610129578063d62d80891461013c578063de78c3341461014f578063ecade2f014610162578063ef4e06ec14610175578063f2fde38b1461018857600080fd5b806327cbb12f146100b95780635b9c68d3146100e95780635d5a9623146100fe578063715018a614610108578063795e2415146101105780638da5cb5b14610118575b600080fd5b6100cc6100c736600461089d565b61019b565b6040516001600160a01b0390911681526020015b60405180910390f35b6100f16101c5565b6040516100e091906108b6565b610106610227565b005b610106610388565b6100f16103c7565b6000546001600160a01b03166100cc565b6004546100cc906001600160a01b031681565b61010661014a3660046109ba565b610427565b6100cc61015d36600461089d565b61063b565b610106610170366004610ad9565b61064b565b6001546100cc906001600160a01b031681565b610106610196366004610ad9565b610715565b600281815481106101ab57600080fd5b6000918252602090912001546001600160a01b0316905081565b6060600380548060200260200160405190810160405280929190818152602001828054801561021d57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116101ff575b5050505050905090565b6000805b60025481101561038457336001600160a01b03166002828154811061025257610252610afd565b6000918252602090912001546001600160a01b03161415610372576001915060036002828154811061028657610286610afd565b6000918252602080832090910154835460018181018655948452919092200180546001600160a01b0319166001600160a01b039092169190911790556002805490916102d191610b29565b815481106102e1576102e1610afd565b600091825260209091200154600280546001600160a01b03909216918390811061030d5761030d610afd565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600280548061034c5761034c610b40565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061037c81610b56565b91505061022b565b5050565b6000546001600160a01b031633146103bb5760405162461bcd60e51b81526004016103b290610b71565b60405180910390fd5b6103c560006107b0565b565b6060600280548060200260200160405190810160405280929190818152602001828054801561021d576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116101ff575050505050905090565b6000546001600160a01b031633146104515760405162461bcd60e51b81526004016103b290610b71565b6004546001600160a01b0316600061046882610800565b9050806001600160a01b0316631917d6c0836001600160a01b031663ef4e06ec6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104b257600080fd5b505afa1580156104c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ea9190610ba6565b846001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b15801561052357600080fd5b505afa158015610537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055b9190610ba6565b308989896040518763ffffffff1660e01b815260040161058096959493929190610c10565b600060405180830381600087803b15801561059a57600080fd5b505af11580156105ae573d6000803e3d6000fd5b5050600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040519081527f165f4a0bebf649c196135ba0519a9a51da33d33a9e4d096b71050c2c97ec670f9250602001905060405180910390a15050505050565b600381815481106101ab57600080fd5b6000546001600160a01b031633146106755760405162461bcd60e51b81526004016103b290610b71565b6001600160a01b0381166106f3576040805162461bcd60e51b81526020600482015260248101919091527f42616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616460448201527f64726573732073686f756c64206e6f74206265207a65726f206164647265737360648201526084016103b2565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461073f5760405162461bcd60e51b81526004016103b290610b71565b6001600160a01b0381166107a45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b2565b6107ad816107b0565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b0381166108985760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b60448201526064016103b2565b919050565b6000602082840312156108af57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156108f75783516001600160a01b0316835292840192918401916001016108d2565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561094257610942610903565b604052919050565b600082601f83011261095b57600080fd5b813567ffffffffffffffff81111561097557610975610903565b610988601f8201601f1916602001610919565b81815284602083860101111561099d57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000606084860312156109cf57600080fd5b833567ffffffffffffffff808211156109e757600080fd5b6109f38783880161094a565b9450602091508186013581811115610a0a57600080fd5b610a168882890161094a565b945050604086013581811115610a2b57600080fd5b8601601f81018813610a3c57600080fd5b803582811115610a4e57610a4e610903565b8060051b610a5d858201610919565b918252828101850191858101908b841115610a7757600080fd5b86850192505b83831015610ab357823586811115610a955760008081fd5b610aa38d898389010161094a565b8352509186019190860190610a7d565b809750505050505050509250925092565b6001600160a01b03811681146107ad57600080fd5b600060208284031215610aeb57600080fd5b8135610af681610ac4565b9392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015610b3b57610b3b610b13565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415610b6a57610b6a610b13565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215610bb857600080fd5b8151610af681610ac4565b6000815180845260005b81811015610be957602081850181015186830182015201610bcd565b81811115610bfb576000602083870101525b50601f01601f19169290920160200192915050565b600060018060a01b038089168352602081891681850152818816604085015260c06060850152610c4360c0850188610bc3565b91508382036080850152610c578287610bc3565b915083820360a08501528185518084528284019150828160051b85010183880160005b83811015610ca857601f19878403018552610c96838351610bc3565b94860194925090850190600101610c7a565b50909d9c5050505050505050505050505056fea2646970667358221220118981da8fe7c23ab5343c8024d04cf99514f8f6c0831c4f8fc99c0f1cb9e8a264736f6c6343000809003342616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616464726573732073686f756c64206e6f74206265207a65726f2061646472657373"; type BallotFactoryConstructorParams = | [signer?: Signer] diff --git a/typings/factories/contracts/voting/Ballot__factory.ts b/typings/factories/contracts/voting/Ballot__factory.ts index 67a806a..4f0d402 100644 --- a/typings/factories/contracts/voting/Ballot__factory.ts +++ b/typings/factories/contracts/voting/Ballot__factory.ts @@ -261,7 +261,7 @@ const _abi = [ ]; const _bytecode = - "0x60a060405269054b40b1f852bda0000060805234801561001e57600080fd5b506100283361002d565b61007d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6080516114856100986000396000610a0401526114856000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639094c76311610097578063ec55688911610066578063ec55688914610203578063ef4e06ec14610216578063f2fde38b14610229578063f6fd7fde1461023c57600080fd5b80639094c763146101c057806398c81bbf146101d3578063bf63a577146101e8578063c45a0155146101f057600080fd5b806359037b89116100d357806359037b8914610155578063597e1fb514610176578063715018a6146101935780638da5cb5b1461019b57600080fd5b80630a59a98c146101055780631917d6c01461012357806343d726d6146101385780634717f97c14610140575b600080fd5b61010d61024f565b60405161011a9190610f78565b60405180910390f35b61013661013136600461105e565b6102dd565b005b610136610491565b610148610789565b60405161011a91906111a2565b6101686101633660046111e6565b6107e1565b60405190815260200161011a565b6005546101839060ff1681565b604051901515815260200161011a565b610136610802565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161011a565b6101366101ce3660046111ff565b610868565b6101db610b7f565b60405161011a9190611225565b61010d610c58565b6003546101a8906001600160a01b031681565b6002546101a8906001600160a01b031681565b6001546101a8906001600160a01b031681565b610136610237366004611287565b610c65565b61010d61024a3660046111e6565b610d2d565b6004805461025c906112a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610288906112a4565b80156102d55780601f106102aa576101008083540402835291602001916102d5565b820191906000526020600020905b8154815290600101906020018083116102b857829003601f168201915b505050505081565b600054600160a81b900460ff1661030157600054600160a01b900460ff1615610305565b303b155b61036d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b600054600160a81b900460ff16158015610397576000805461ffff60a01b191661010160a01b1790555b83516103aa906004906020870190610da8565b5082516103be906006906020860190610da8565b506005805460ff1916905581516103dc906007906020850190610e2c565b5060075467ffffffffffffffff8111156103f8576103f8610fa7565b604051908082528060200260200182016040528015610421578160200160208202803683370190505b50805161043691600891602090910190610e85565b50600180546001600160a01b03808a166001600160a01b0319928316179092556002805489841690831617905560038054928816929091169190911790558015610488576000805460ff60a81b191690555b50505050505050565b600360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104df57600080fd5b505afa1580156104f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051791906112df565b6001600160a01b0316336001600160a01b0316146105835760405162461bcd60e51b8152602060048201526024808201527f566f74696e673a205265737472696374656420746f20666163746f7279206f776044820152633732b91760e11b6064820152608401610364565b60055460ff16156105d65760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e00006044820152606401610364565b6005805460ff1916600117905560005b60095481101561078657600060098281548110610605576106056112fc565b6000918252602090912001546002546040516302fbd00360e21b81526001600160a01b039283169350911690630bef400c90610648908490600690600401611312565b60206040518083038186803b15801561066057600080fd5b505afa158015610674573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069891906113cb565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a082319060240160206040518083038186803b1580156106dd57600080fd5b505afa1580156106f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071591906113cb565b61071f91906113fa565b6001600160a01b0382166000908152600a602052604090205460088054909163ffffffff16908110610753576107536112fc565b90600052602060002001600082825461076c91906113fa565b9091555082915061077e905081611412565b9150506105e6565b50565b606060088054806020026020016040519081016040528092919081815260200182805480156107d757602002820191906000526020600020905b8154815260200190600101908083116107c3575b5050505050905090565b600881815481106107f157600080fd5b600091825260209091200154905081565b6000546001600160a01b0316331461085c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610364565b6108666000610d58565b565b60055460ff16156108bb5760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e000000000000006044820152606401610364565b60075463ffffffff82161061091c5760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2043686f69636520696e64657820697320746f6f20686967686044820152601760f91b6064820152608401610364565b60025460405163442f655160e01b81526001600160a01b039091169063442f65519061094f903390600690600401611312565b60206040518083038186803b15801561096757600080fd5b505afa15801561097b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099f919061142d565b156109ec5760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e0000000000006044820152606401610364565b6001546040516370a0823160e01b81523360048201527f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316906370a082319060240160206040518083038186803b158015610a4f57600080fd5b505afa158015610a63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8791906113cb565b1015610ad55760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e006044820152606401610364565b336000908152600a6020526040902054640100000000900460ff16610b5657336000818152600a60205260408120805464ff0000000019166401000000001790556009805460018101825591527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b03191690911790555b336000908152600a60205260409020805463ffffffff191663ffffffff92909216919091179055565b60606007805480602002602001604051908101604052809291908181526020016000905b82821015610c4f578382906000526020600020018054610bc2906112a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610bee906112a4565b8015610c3b5780601f10610c1057610100808354040283529160200191610c3b565b820191906000526020600020905b815481529060010190602001808311610c1e57829003601f168201915b505050505081526020019060010190610ba3565b50505050905090565b6006805461025c906112a4565b6000546001600160a01b03163314610cbf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610364565b6001600160a01b038116610d245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610364565b61078681610d58565b60078181548110610d3d57600080fd5b90600052602060002001600091509050805461025c906112a4565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054610db4906112a4565b90600052602060002090601f016020900481019282610dd65760008555610e1c565b82601f10610def57805160ff1916838001178555610e1c565b82800160010185558215610e1c579182015b82811115610e1c578251825591602001919060010190610e01565b50610e28929150610ebf565b5090565b828054828255906000526020600020908101928215610e79579160200282015b82811115610e795782518051610e69918491602090910190610da8565b5091602001919060010190610e4c565b50610e28929150610ed4565b828054828255906000526020600020908101928215610e1c5791602002820182811115610e1c578251825591602001919060010190610e01565b5b80821115610e285760008155600101610ec0565b80821115610e28576000610ee88282610ef1565b50600101610ed4565b508054610efd906112a4565b6000825580601f10610f0d575050565b601f0160209004906000526020600020908101906107869190610ebf565b6000815180845260005b81811015610f5157602081850181015186830182015201610f35565b81811115610f63576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610f8b6020830184610f2b565b9392505050565b6001600160a01b038116811461078657600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610fe657610fe6610fa7565b604052919050565b600082601f830112610fff57600080fd5b813567ffffffffffffffff81111561101957611019610fa7565b61102c601f8201601f1916602001610fbd565b81815284602083860101111561104157600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561107757600080fd5b6110818735610f92565b8635955060208088013561109481610f92565b955060408801356110a481610f92565b9450606088013567ffffffffffffffff808211156110c157600080fd5b6110cd8b838c01610fee565b955060808a01359150808211156110e357600080fd5b6110ef8b838c01610fee565b945060a08a013591508082111561110557600080fd5b818a0191508a601f83011261111957600080fd5b81358181111561112b5761112b610fa7565b8060051b61113a858201610fbd565b918252838101850191858101908e84111561115457600080fd5b86860192505b8383101561118e57848335111561117057600080fd5b61117f8f888535890101610fee565b8252918601919086019061115a565b809750505050505050509295509295509295565b6020808252825182820181905260009190848201906040850190845b818110156111da578351835292840192918401916001016111be565b50909695505050505050565b6000602082840312156111f857600080fd5b5035919050565b60006020828403121561121157600080fd5b813563ffffffff81168114610f8b57600080fd5b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561127a57603f19888603018452611268858351610f2b565b9450928501929085019060010161124c565b5092979650505050505050565b60006020828403121561129957600080fd5b8135610f8b81610f92565b600181811c908216806112b857607f821691505b602082108114156112d957634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156112f157600080fd5b8151610f8b81610f92565b634e487b7160e01b600052603260045260246000fd5b60018060a01b0383168152600060206040818401526000845481600182811c91508083168061134257607f831692505b85831081141561136057634e487b7160e01b85526022600452602485fd5b604088018390526060880181801561137f5760018114611390576113bb565b60ff198616825287820196506113bb565b60008b81526020902060005b868110156113b55781548482015290850190890161139c565b83019750505b50949a9950505050505050505050565b6000602082840312156113dd57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561140d5761140d6113e4565b500190565b6000600019821415611426576114266113e4565b5060010190565b60006020828403121561143f57600080fd5b81518015158114610f8b57600080fdfea264697066735822122039f7929615c53f0bc31594382d218f477450cfb4714978c4d49397b689bdf06064736f6c63430008090033"; + "0x60a060405269054b40b1f852bda0000060805234801561001e57600080fd5b506100283361002d565b61007d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6080516114f06100986000396000610a6c01526114f06000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639094c76311610097578063ec55688911610066578063ec55688914610203578063ef4e06ec14610216578063f2fde38b14610229578063f6fd7fde1461023c57600080fd5b80639094c763146101c057806398c81bbf146101d3578063bf63a577146101e8578063c45a0155146101f057600080fd5b806359037b89116100d357806359037b8914610155578063597e1fb514610176578063715018a6146101935780638da5cb5b1461019b57600080fd5b80630a59a98c146101055780631917d6c01461012357806343d726d6146101385780634717f97c14610140575b600080fd5b61010d61024f565b60405161011a9190610fe3565b60405180910390f35b6101366101313660046110c9565b6102dd565b005b610136610491565b6101486107f1565b60405161011a919061120d565b610168610163366004611251565b610849565b60405190815260200161011a565b6005546101839060ff1681565b604051901515815260200161011a565b61013661086a565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161011a565b6101366101ce36600461126a565b6108d0565b6101db610be7565b60405161011a9190611290565b61010d610cc0565b6003546101a8906001600160a01b031681565b6002546101a8906001600160a01b031681565b6001546101a8906001600160a01b031681565b6101366102373660046112f2565b610ccd565b61010d61024a366004611251565b610d98565b6004805461025c9061130f565b80601f01602080910402602001604051908101604052809291908181526020018280546102889061130f565b80156102d55780601f106102aa576101008083540402835291602001916102d5565b820191906000526020600020905b8154815290600101906020018083116102b857829003601f168201915b505050505081565b600054600160a81b900460ff1661030157600054600160a01b900460ff1615610305565b303b155b61036d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b600054600160a81b900460ff16158015610397576000805461ffff60a01b191661010160a01b1790555b83516103aa906004906020870190610e13565b5082516103be906006906020860190610e13565b506005805460ff1916905581516103dc906007906020850190610e97565b5060075467ffffffffffffffff8111156103f8576103f8611012565b604051908082528060200260200182016040528015610421578160200160208202803683370190505b50805161043691600891602090910190610ef0565b50600180546001600160a01b03808a166001600160a01b0319928316179092556002805489841690831617905560038054928816929091169190911790558015610488576000805460ff60a81b191690555b50505050505050565b600360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104df57600080fd5b505afa1580156104f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610517919061134a565b6001600160a01b0316336001600160a01b0316146105835760405162461bcd60e51b8152602060048201526024808201527f566f74696e673a205265737472696374656420746f20666163746f7279206f776044820152633732b91760e11b6064820152608401610364565b60055460ff16156105d65760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e00006044820152606401610364565b6005805460ff1916600117905560005b6009548110156107865760006009828154811061060557610605611367565b6000918252602090912001546002546040516302fbd00360e21b81526001600160a01b039283169350911690630bef400c9061064890849060069060040161137d565b60206040518083038186803b15801561066057600080fd5b505afa158015610674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106989190611436565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a082319060240160206040518083038186803b1580156106dd57600080fd5b505afa1580156106f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107159190611436565b61071f9190611465565b6001600160a01b0382166000908152600a602052604090205460088054909163ffffffff1690811061075357610753611367565b90600052602060002001600082825461076c9190611465565b9091555082915061077e90508161147d565b9150506105e6565b50600360009054906101000a90046001600160a01b03166001600160a01b0316635d5a96236040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107d757600080fd5b505af11580156107eb573d6000803e3d6000fd5b50505050565b6060600880548060200260200160405190810160405280929190818152602001828054801561083f57602002820191906000526020600020905b81548152602001906001019080831161082b575b5050505050905090565b6008818154811061085957600080fd5b600091825260209091200154905081565b6000546001600160a01b031633146108c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610364565b6108ce6000610dc3565b565b60055460ff16156109235760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e000000000000006044820152606401610364565b60075463ffffffff8216106109845760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2043686f69636520696e64657820697320746f6f20686967686044820152601760f91b6064820152608401610364565b60025460405163442f655160e01b81526001600160a01b039091169063442f6551906109b790339060069060040161137d565b60206040518083038186803b1580156109cf57600080fd5b505afa1580156109e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a079190611498565b15610a545760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e0000000000006044820152606401610364565b6001546040516370a0823160e01b81523360048201527f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316906370a082319060240160206040518083038186803b158015610ab757600080fd5b505afa158015610acb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aef9190611436565b1015610b3d5760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e006044820152606401610364565b336000908152600a6020526040902054640100000000900460ff16610bbe57336000818152600a60205260408120805464ff0000000019166401000000001790556009805460018101825591527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b03191690911790555b336000908152600a60205260409020805463ffffffff191663ffffffff92909216919091179055565b60606007805480602002602001604051908101604052809291908181526020016000905b82821015610cb7578382906000526020600020018054610c2a9061130f565b80601f0160208091040260200160405190810160405280929190818152602001828054610c569061130f565b8015610ca35780601f10610c7857610100808354040283529160200191610ca3565b820191906000526020600020905b815481529060010190602001808311610c8657829003601f168201915b505050505081526020019060010190610c0b565b50505050905090565b6006805461025c9061130f565b6000546001600160a01b03163314610d275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610364565b6001600160a01b038116610d8c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610364565b610d9581610dc3565b50565b60078181548110610da857600080fd5b90600052602060002001600091509050805461025c9061130f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054610e1f9061130f565b90600052602060002090601f016020900481019282610e415760008555610e87565b82601f10610e5a57805160ff1916838001178555610e87565b82800160010185558215610e87579182015b82811115610e87578251825591602001919060010190610e6c565b50610e93929150610f2a565b5090565b828054828255906000526020600020908101928215610ee4579160200282015b82811115610ee45782518051610ed4918491602090910190610e13565b5091602001919060010190610eb7565b50610e93929150610f3f565b828054828255906000526020600020908101928215610e875791602002820182811115610e87578251825591602001919060010190610e6c565b5b80821115610e935760008155600101610f2b565b80821115610e93576000610f538282610f5c565b50600101610f3f565b508054610f689061130f565b6000825580601f10610f78575050565b601f016020900490600052602060002090810190610d959190610f2a565b6000815180845260005b81811015610fbc57602081850181015186830182015201610fa0565b81811115610fce576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610ff66020830184610f96565b9392505050565b6001600160a01b0381168114610d9557600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561105157611051611012565b604052919050565b600082601f83011261106a57600080fd5b813567ffffffffffffffff81111561108457611084611012565b611097601f8201601f1916602001611028565b8181528460208386010111156110ac57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c087890312156110e257600080fd5b6110ec8735610ffd565b863595506020808801356110ff81610ffd565b9550604088013561110f81610ffd565b9450606088013567ffffffffffffffff8082111561112c57600080fd5b6111388b838c01611059565b955060808a013591508082111561114e57600080fd5b61115a8b838c01611059565b945060a08a013591508082111561117057600080fd5b818a0191508a601f83011261118457600080fd5b81358181111561119657611196611012565b8060051b6111a5858201611028565b918252838101850191858101908e8411156111bf57600080fd5b86860192505b838310156111f95784833511156111db57600080fd5b6111ea8f888535890101611059565b825291860191908601906111c5565b809750505050505050509295509295509295565b6020808252825182820181905260009190848201906040850190845b8181101561124557835183529284019291840191600101611229565b50909695505050505050565b60006020828403121561126357600080fd5b5035919050565b60006020828403121561127c57600080fd5b813563ffffffff81168114610ff657600080fd5b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156112e557603f198886030184526112d3858351610f96565b945092850192908501906001016112b7565b5092979650505050505050565b60006020828403121561130457600080fd5b8135610ff681610ffd565b600181811c9082168061132357607f821691505b6020821081141561134457634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561135c57600080fd5b8151610ff681610ffd565b634e487b7160e01b600052603260045260246000fd5b60018060a01b0383168152600060206040818401526000845481600182811c9150808316806113ad57607f831692505b8583108114156113cb57634e487b7160e01b85526022600452602485fd5b60408801839052606088018180156113ea57600181146113fb57611426565b60ff19861682528782019650611426565b60008b81526020902060005b8681101561142057815484820152908501908901611407565b83019750505b50949a9950505050505050505050565b60006020828403121561144857600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156114785761147861144f565b500190565b60006000198214156114915761149161144f565b5060010190565b6000602082840312156114aa57600080fd5b81518015158114610ff657600080fdfea2646970667358221220b09f4a479efac96e1e7070eeae8c952ac90b22a72363b2f8a878bbdd96de218a64736f6c63430008090033"; type BallotConstructorParams = | [signer?: Signer] diff --git a/typings/factories/contracts/voting/VotingDelegation__factory.ts b/typings/factories/contracts/voting/VotingDelegation__factory.ts index f92b4af..53bad18 100644 --- a/typings/factories/contracts/voting/VotingDelegation__factory.ts +++ b/typings/factories/contracts/voting/VotingDelegation__factory.ts @@ -215,7 +215,7 @@ const _abi = [ ]; const _bytecode = - "0x60a060405269054b40b1f852bda0000060805234801561001e57600080fd5b50604051610c9f380380610c9f83398101604081905261003d91610124565b610046336100d4565b6001600160a01b0381166100af5760405162461bcd60e51b815260206004820152602660248201527f566f74696e6744656c65676174696f6e3a204450532061646472657373206973604482015265103d32b9379760d11b606482015260840160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055610154565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561013657600080fd5b81516001600160a01b038116811461014d57600080fd5b9392505050565b608051610b3061016f60003960006103500152610b306000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638da5cb5b116100665780638da5cb5b14610156578063ceb0b9351461017b578063ef4e06ec1461018e578063f2fde38b146101a1578063fc196713146101b457600080fd5b80630bef400c146100a3578063442f6551146100c95780635e12967914610119578063694ec60e1461012e578063715018a61461014e575b600080fd5b6100b66100b136600461091b565b6101f2565b6040519081526020015b60405180910390f35b6101096100d736600461091b565b6001600160a01b0391821660009081526004602090815260408083208451948301949094208352929052205416151590565b60405190151581526020016100c0565b61012c61012736600461091b565b61032e565b005b61014161013c36600461091b565b610612565b6040516100c091906109dd565b61012c610768565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100c0565b600254610163906001600160a01b031681565b600154610163906001600160a01b031681565b61012c6101af366004610a2a565b6107ce565b6101636101c236600461091b565b6001600160a01b039182166000908152600460209081526040808320845194830194909420835292905220541690565b805160208201206000908190815b6001600160a01b038616600090815260036020908152604080832085845290915290206001015463ffffffff8216101561032457600180546001600160a01b0388811660009081526003602090815260408083208884529091529020909201805492909116916370a08231919063ffffffff851690811061028357610283610a4c565b60009182526020909120015460405160e083901b6001600160e01b03191681526001600160a01b03909116600482015260240160206040518083038186803b1580156102ce57600080fd5b505afa1580156102e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103069190610a62565b6103109084610a91565b92508061031c81610aa9565b915050610200565b5090949350505050565b6001546040516370a0823160e01b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000009216906370a082319060240160206040518083038186803b15801561039357600080fd5b505afa1580156103a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cb9190610a62565b1015806103df57506001600160a01b038216155b6104445760405162461bcd60e51b815260206004820152602b60248201527f566f74696e6744656c65676174696f6e3a2050726f787920686173206e6f742060448201526a32b737bab3b4102228299760a91b60648201526084015b60405180910390fd5b805160208083019190912033600090815260048352604080822083835290935291909120546001600160a01b03161561057b573360008181526004602090815260408083208584528252808320546001600160a01b03168352600382528083208584528252808320938352908390529020546001828101805490916104c891610acd565b815481106104d8576104d8610a4c565b6000918252602090912001546001830180546001600160a01b03909216918390811061050657610506610a4c565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508160010180548061054757610547610ae4565b60008281526020808220830160001990810180546001600160a01b0319169055909201909255338252929092525060408120555b336000908152600460209081526040808320848452909152902080546001600160a01b0319166001600160a01b0385169081179091551561060d576001600160a01b038316600090815260036020908152604080832084845282528083206001808201805433808852938652938620849055908301815584529190922090910180546001600160a01b03191690911790555b505050565b80516020808301919091206001600160a01b0384166000908152600383526040808220838352909352918220600101546060929067ffffffffffffffff81111561065e5761065e610905565b604051908082528060200260200182016040528015610687578160200160208202803683370190505b50905060005b6001600160a01b038616600090815260036020908152604080832086845290915290206001015463ffffffff8216101561075f576001600160a01b03861660009081526003602090815260408083208684529091529020600101805463ffffffff83169081106106ff576106ff610a4c565b9060005260206000200160009054906101000a90046001600160a01b0316828263ffffffff168151811061073557610735610a4c565b6001600160a01b03909216602092830291909101909101528061075781610aa9565b91505061068d565b50949350505050565b6000546001600160a01b031633146107c25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161043b565b6107cc6000610899565b565b6000546001600160a01b031633146108285760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161043b565b6001600160a01b03811661088d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161043b565b61089681610899565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461090057600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561092e57600080fd5b610937836108e9565b9150602083013567ffffffffffffffff8082111561095457600080fd5b818501915085601f83011261096857600080fd5b81358181111561097a5761097a610905565b604051601f8201601f19908116603f011681019083821181831017156109a2576109a2610905565b816040528281528860208487010111156109bb57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b81811015610a1e5783516001600160a01b0316835292840192918401916001016109f9565b50909695505050505050565b600060208284031215610a3c57600080fd5b610a45826108e9565b9392505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610a7457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610aa457610aa4610a7b565b500190565b600063ffffffff80831681811415610ac357610ac3610a7b565b6001019392505050565b600082821015610adf57610adf610a7b565b500390565b634e487b7160e01b600052603160045260246000fdfea26469706673582212200a362f094a337aa4b98a892276a12f922c6dfc17f6a49669577e8d3cf16a9a2c64736f6c63430008090033"; + "0x60a060405269054b40b1f852bda0000060805234801561001e57600080fd5b50604051610c9f380380610c9f83398101604081905261003d91610124565b610046336100d4565b6001600160a01b0381166100af5760405162461bcd60e51b815260206004820152602660248201527f566f74696e6744656c65676174696f6e3a204450532061646472657373206973604482015265103d32b9379760d11b606482015260840160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055610154565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561013657600080fd5b81516001600160a01b038116811461014d57600080fd5b9392505050565b608051610b3061016f60003960006103500152610b306000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638da5cb5b116100665780638da5cb5b14610156578063ceb0b9351461017b578063ef4e06ec1461018e578063f2fde38b146101a1578063fc196713146101b457600080fd5b80630bef400c146100a3578063442f6551146100c95780635e12967914610119578063694ec60e1461012e578063715018a61461014e575b600080fd5b6100b66100b136600461091b565b6101f2565b6040519081526020015b60405180910390f35b6101096100d736600461091b565b6001600160a01b0391821660009081526004602090815260408083208451948301949094208352929052205416151590565b60405190151581526020016100c0565b61012c61012736600461091b565b61032e565b005b61014161013c36600461091b565b610612565b6040516100c091906109dd565b61012c610768565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100c0565b600254610163906001600160a01b031681565b600154610163906001600160a01b031681565b61012c6101af366004610a2a565b6107ce565b6101636101c236600461091b565b6001600160a01b039182166000908152600460209081526040808320845194830194909420835292905220541690565b805160208201206000908190815b6001600160a01b038616600090815260036020908152604080832085845290915290206001015463ffffffff8216101561032457600180546001600160a01b0388811660009081526003602090815260408083208884529091529020909201805492909116916370a08231919063ffffffff851690811061028357610283610a4c565b60009182526020909120015460405160e083901b6001600160e01b03191681526001600160a01b03909116600482015260240160206040518083038186803b1580156102ce57600080fd5b505afa1580156102e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103069190610a62565b6103109084610a91565b92508061031c81610aa9565b915050610200565b5090949350505050565b6001546040516370a0823160e01b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000009216906370a082319060240160206040518083038186803b15801561039357600080fd5b505afa1580156103a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cb9190610a62565b1015806103df57506001600160a01b038216155b6104445760405162461bcd60e51b815260206004820152602b60248201527f566f74696e6744656c65676174696f6e3a2050726f787920686173206e6f742060448201526a32b737bab3b4102228299760a91b60648201526084015b60405180910390fd5b805160208083019190912033600090815260048352604080822083835290935291909120546001600160a01b03161561057b573360008181526004602090815260408083208584528252808320546001600160a01b03168352600382528083208584528252808320938352908390529020546001828101805490916104c891610acd565b815481106104d8576104d8610a4c565b6000918252602090912001546001830180546001600160a01b03909216918390811061050657610506610a4c565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508160010180548061054757610547610ae4565b60008281526020808220830160001990810180546001600160a01b0319169055909201909255338252929092525060408120555b336000908152600460209081526040808320848452909152902080546001600160a01b0319166001600160a01b0385169081179091551561060d576001600160a01b038316600090815260036020908152604080832084845282528083206001808201805433808852938652938620849055908301815584529190922090910180546001600160a01b03191690911790555b505050565b80516020808301919091206001600160a01b0384166000908152600383526040808220838352909352918220600101546060929067ffffffffffffffff81111561065e5761065e610905565b604051908082528060200260200182016040528015610687578160200160208202803683370190505b50905060005b6001600160a01b038616600090815260036020908152604080832086845290915290206001015463ffffffff8216101561075f576001600160a01b03861660009081526003602090815260408083208684529091529020600101805463ffffffff83169081106106ff576106ff610a4c565b9060005260206000200160009054906101000a90046001600160a01b0316828263ffffffff168151811061073557610735610a4c565b6001600160a01b03909216602092830291909101909101528061075781610aa9565b91505061068d565b50949350505050565b6000546001600160a01b031633146107c25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161043b565b6107cc6000610899565b565b6000546001600160a01b031633146108285760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161043b565b6001600160a01b03811661088d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161043b565b61089681610899565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461090057600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561092e57600080fd5b610937836108e9565b9150602083013567ffffffffffffffff8082111561095457600080fd5b818501915085601f83011261096857600080fd5b81358181111561097a5761097a610905565b604051601f8201601f19908116603f011681019083821181831017156109a2576109a2610905565b816040528281528860208487010111156109bb57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b81811015610a1e5783516001600160a01b0316835292840192918401916001016109f9565b50909695505050505050565b600060208284031215610a3c57600080fd5b610a45826108e9565b9392505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610a7457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610aa457610aa4610a7b565b500190565b600063ffffffff80831681811415610ac357610ac3610a7b565b6001019392505050565b600082821015610adf57610adf610a7b565b500390565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220d96df46fbc64b3443643463fa844c7743d4c565e4135833274187261a9c5711c64736f6c63430008090033"; type VotingDelegationConstructorParams = | [signer?: Signer] diff --git a/typings/hardhat.d.ts b/typings/hardhat.d.ts index 6fb339a..bfee1c3 100644 --- a/typings/hardhat.d.ts +++ b/typings/hardhat.d.ts @@ -48,10 +48,6 @@ declare module "hardhat/types/runtime" { name: "IERC165", signerOrOptions?: ethers.Signer | FactoryOptions ): Promise; - getContractFactory( - name: "Ballot", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; getContractFactory( name: "DeepSquare", signerOrOptions?: ethers.Signer | FactoryOptions @@ -60,10 +56,6 @@ declare module "hardhat/types/runtime" { name: "Eligibility", signerOrOptions?: ethers.Signer | FactoryOptions ): Promise; - getContractFactory( - name: "BallotFactory", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; getContractFactory( name: "IEligibility", signerOrOptions?: ethers.Signer | FactoryOptions @@ -92,10 +84,6 @@ declare module "hardhat/types/runtime" { name: "SpenderSecurity", signerOrOptions?: ethers.Signer | FactoryOptions ): Promise; - getContractFactory( - name: "ExposedBallot", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; getContractFactory( name: "BridgeToken", signerOrOptions?: ethers.Signer | FactoryOptions @@ -132,10 +120,6 @@ declare module "hardhat/types/runtime" { name: "VotingDelegation", signerOrOptions?: ethers.Signer | FactoryOptions ): Promise; - getContractFactory( - name: "VotingDelegation", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; getContractAt( name: "AggregatorV3Interface", @@ -182,11 +166,6 @@ declare module "hardhat/types/runtime" { address: string, signer?: ethers.Signer ): Promise; - getContractAt( - name: "Ballot", - address: string, - signer?: ethers.Signer - ): Promise; getContractAt( name: "DeepSquare", address: string, @@ -197,11 +176,6 @@ declare module "hardhat/types/runtime" { address: string, signer?: ethers.Signer ): Promise; - getContractAt( - name: "BallotFactory", - address: string, - signer?: ethers.Signer - ): Promise; getContractAt( name: "IEligibility", address: string, @@ -237,11 +211,6 @@ declare module "hardhat/types/runtime" { address: string, signer?: ethers.Signer ): Promise; - getContractAt( - name: "ExposedBallot", - address: string, - signer?: ethers.Signer - ): Promise; getContractAt( name: "BridgeToken", address: string, @@ -287,11 +256,6 @@ declare module "hardhat/types/runtime" { address: string, signer?: ethers.Signer ): Promise; - getContractAt( - name: "VotingDelegation", - address: string, - signer?: ethers.Signer - ): Promise; // default types getContractFactory( From 0714dba49fcac406562424188d14410e900c1d8b Mon Sep 17 00:00:00 2001 From: valentinpollart Date: Thu, 28 Apr 2022 11:04:07 +0200 Subject: [PATCH 17/25] fix: remove only in unit tests --- test/BallotFactory.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/BallotFactory.spec.ts b/test/BallotFactory.spec.ts index df00769..79add2f 100644 --- a/test/BallotFactory.spec.ts +++ b/test/BallotFactory.spec.ts @@ -43,7 +43,7 @@ describe('Ballot Factory', async () => { }); }); - describe.only('archiveBallot', () => { + describe('archiveBallot', () => { it('should archive an active ballot', async () => { await ballotFactory.setImplementationAddress(ballotImplementation.address); const [ballotAddress] = await ballotFactory From aa4d5bda4c630de8d163448f0450fc0430481309 Mon Sep 17 00:00:00 2001 From: valentinpollart Date: Thu, 28 Apr 2022 11:47:14 +0200 Subject: [PATCH 18/25] fix: add returns types --- contracts/voting/Ballot.sol | 17 ++++++++-- typings/contracts/voting/Ballot.ts | 31 +++++++++++++++++ .../voting/BallotFactory__factory.ts | 2 +- .../contracts/voting/Ballot__factory.ts | 34 ++++++++++++++++++- .../voting/VotingDelegation__factory.ts | 2 +- 5 files changed, 81 insertions(+), 5 deletions(-) diff --git a/contracts/voting/Ballot.sol b/contracts/voting/Ballot.sol index 2d67e16..a3449c7 100644 --- a/contracts/voting/Ballot.sol +++ b/contracts/voting/Ballot.sol @@ -130,6 +130,21 @@ contract Ballot is Ownable, Initializable { votes[msg.sender].choiceIndex = choiceIndex; } + /** + * @notice Returns if given voter has voted + * @param voter The voter + */ + function hasVoted(address voter) external view returns(bool) { + return votes[voter].hasVoted; + } + + /** + * @notice Returns the sender's vote + */ + function getVote() external view returns(uint32) { + return votes[msg.sender].choiceIndex; + } + /** * @notice Close the vote, preventing users to vote afterwards * @dev The caller MUST be the ballot factory owner @@ -146,6 +161,4 @@ contract Ballot is Ownable, Initializable { } factory.archiveBallot(); } - - } diff --git a/typings/contracts/voting/Ballot.ts b/typings/contracts/voting/Ballot.ts index c6743cc..51a72a5 100644 --- a/typings/contracts/voting/Ballot.ts +++ b/typings/contracts/voting/Ballot.ts @@ -35,6 +35,8 @@ export interface BallotInterface extends utils.Interface { "factory()": FunctionFragment; "getChoices()": FunctionFragment; "getResults()": FunctionFragment; + "getVote()": FunctionFragment; + "hasVoted(address)": FunctionFragment; "init(address,address,address,string,string,string[])": FunctionFragment; "owner()": FunctionFragment; "proxy()": FunctionFragment; @@ -55,6 +57,8 @@ export interface BallotInterface extends utils.Interface { | "factory" | "getChoices" | "getResults" + | "getVote" + | "hasVoted" | "init" | "owner" | "proxy" @@ -82,6 +86,8 @@ export interface BallotInterface extends utils.Interface { functionFragment: "getResults", values?: undefined ): string; + encodeFunctionData(functionFragment: "getVote", values?: undefined): string; + encodeFunctionData(functionFragment: "hasVoted", values: [string]): string; encodeFunctionData( functionFragment: "init", values: [string, string, string, string, string, string[]] @@ -111,6 +117,8 @@ export interface BallotInterface extends utils.Interface { decodeFunctionResult(functionFragment: "factory", data: BytesLike): Result; decodeFunctionResult(functionFragment: "getChoices", data: BytesLike): Result; decodeFunctionResult(functionFragment: "getResults", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVote", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "hasVoted", data: BytesLike): Result; decodeFunctionResult(functionFragment: "init", data: BytesLike): Result; decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; decodeFunctionResult(functionFragment: "proxy", data: BytesLike): Result; @@ -192,6 +200,10 @@ export interface Ballot extends BaseContract { getResults(overrides?: CallOverrides): Promise<[BigNumber[]]>; + getVote(overrides?: CallOverrides): Promise<[number]>; + + hasVoted(voter: string, overrides?: CallOverrides): Promise<[boolean]>; + init( _DPS: string, _proxy: string, @@ -246,6 +258,10 @@ export interface Ballot extends BaseContract { getResults(overrides?: CallOverrides): Promise; + getVote(overrides?: CallOverrides): Promise; + + hasVoted(voter: string, overrides?: CallOverrides): Promise; + init( _DPS: string, _proxy: string, @@ -298,6 +314,10 @@ export interface Ballot extends BaseContract { getResults(overrides?: CallOverrides): Promise; + getVote(overrides?: CallOverrides): Promise; + + hasVoted(voter: string, overrides?: CallOverrides): Promise; + init( _DPS: string, _proxy: string, @@ -359,6 +379,10 @@ export interface Ballot extends BaseContract { getResults(overrides?: CallOverrides): Promise; + getVote(overrides?: CallOverrides): Promise; + + hasVoted(voter: string, overrides?: CallOverrides): Promise; + init( _DPS: string, _proxy: string, @@ -417,6 +441,13 @@ export interface Ballot extends BaseContract { getResults(overrides?: CallOverrides): Promise; + getVote(overrides?: CallOverrides): Promise; + + hasVoted( + voter: string, + overrides?: CallOverrides + ): Promise; + init( _DPS: string, _proxy: string, diff --git a/typings/factories/contracts/voting/BallotFactory__factory.ts b/typings/factories/contracts/voting/BallotFactory__factory.ts index 31e0f7b..80f9934 100644 --- a/typings/factories/contracts/voting/BallotFactory__factory.ts +++ b/typings/factories/contracts/voting/BallotFactory__factory.ts @@ -226,7 +226,7 @@ const _abi = [ ]; const _bytecode = - "0x608060405234801561001057600080fd5b5060405162000f0b38038062000f0b83398101604081905261003191610190565b61003a33610128565b6001600160a01b03821661009b576040805162461bcd60e51b815260206004820152602481019190915260008051602062000ecb833981519152604482015260008051602062000eeb83398151915260648201526084015b60405180910390fd5b6001600160a01b0381166100f7576040805162461bcd60e51b815260206004820152602481019190915260008051602062000ecb833981519152604482015260008051602062000eeb8339815191526064820152608401610092565b600180546001600160a01b039384166001600160a01b031991821617909155600480549290931691161790556101ca565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461018d57600080fd5b50565b600080604083850312156101a357600080fd5b82516101ae81610178565b60208401519092506101bf81610178565b809150509250929050565b610cf180620001da6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063b97a231911610071578063b97a231914610129578063d62d80891461013c578063de78c3341461014f578063ecade2f014610162578063ef4e06ec14610175578063f2fde38b1461018857600080fd5b806327cbb12f146100b95780635b9c68d3146100e95780635d5a9623146100fe578063715018a614610108578063795e2415146101105780638da5cb5b14610118575b600080fd5b6100cc6100c736600461089d565b61019b565b6040516001600160a01b0390911681526020015b60405180910390f35b6100f16101c5565b6040516100e091906108b6565b610106610227565b005b610106610388565b6100f16103c7565b6000546001600160a01b03166100cc565b6004546100cc906001600160a01b031681565b61010661014a3660046109ba565b610427565b6100cc61015d36600461089d565b61063b565b610106610170366004610ad9565b61064b565b6001546100cc906001600160a01b031681565b610106610196366004610ad9565b610715565b600281815481106101ab57600080fd5b6000918252602090912001546001600160a01b0316905081565b6060600380548060200260200160405190810160405280929190818152602001828054801561021d57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116101ff575b5050505050905090565b6000805b60025481101561038457336001600160a01b03166002828154811061025257610252610afd565b6000918252602090912001546001600160a01b03161415610372576001915060036002828154811061028657610286610afd565b6000918252602080832090910154835460018181018655948452919092200180546001600160a01b0319166001600160a01b039092169190911790556002805490916102d191610b29565b815481106102e1576102e1610afd565b600091825260209091200154600280546001600160a01b03909216918390811061030d5761030d610afd565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600280548061034c5761034c610b40565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061037c81610b56565b91505061022b565b5050565b6000546001600160a01b031633146103bb5760405162461bcd60e51b81526004016103b290610b71565b60405180910390fd5b6103c560006107b0565b565b6060600280548060200260200160405190810160405280929190818152602001828054801561021d576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116101ff575050505050905090565b6000546001600160a01b031633146104515760405162461bcd60e51b81526004016103b290610b71565b6004546001600160a01b0316600061046882610800565b9050806001600160a01b0316631917d6c0836001600160a01b031663ef4e06ec6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104b257600080fd5b505afa1580156104c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ea9190610ba6565b846001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b15801561052357600080fd5b505afa158015610537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055b9190610ba6565b308989896040518763ffffffff1660e01b815260040161058096959493929190610c10565b600060405180830381600087803b15801561059a57600080fd5b505af11580156105ae573d6000803e3d6000fd5b5050600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040519081527f165f4a0bebf649c196135ba0519a9a51da33d33a9e4d096b71050c2c97ec670f9250602001905060405180910390a15050505050565b600381815481106101ab57600080fd5b6000546001600160a01b031633146106755760405162461bcd60e51b81526004016103b290610b71565b6001600160a01b0381166106f3576040805162461bcd60e51b81526020600482015260248101919091527f42616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616460448201527f64726573732073686f756c64206e6f74206265207a65726f206164647265737360648201526084016103b2565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461073f5760405162461bcd60e51b81526004016103b290610b71565b6001600160a01b0381166107a45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b2565b6107ad816107b0565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b0381166108985760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b60448201526064016103b2565b919050565b6000602082840312156108af57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156108f75783516001600160a01b0316835292840192918401916001016108d2565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561094257610942610903565b604052919050565b600082601f83011261095b57600080fd5b813567ffffffffffffffff81111561097557610975610903565b610988601f8201601f1916602001610919565b81815284602083860101111561099d57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000606084860312156109cf57600080fd5b833567ffffffffffffffff808211156109e757600080fd5b6109f38783880161094a565b9450602091508186013581811115610a0a57600080fd5b610a168882890161094a565b945050604086013581811115610a2b57600080fd5b8601601f81018813610a3c57600080fd5b803582811115610a4e57610a4e610903565b8060051b610a5d858201610919565b918252828101850191858101908b841115610a7757600080fd5b86850192505b83831015610ab357823586811115610a955760008081fd5b610aa38d898389010161094a565b8352509186019190860190610a7d565b809750505050505050509250925092565b6001600160a01b03811681146107ad57600080fd5b600060208284031215610aeb57600080fd5b8135610af681610ac4565b9392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015610b3b57610b3b610b13565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415610b6a57610b6a610b13565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215610bb857600080fd5b8151610af681610ac4565b6000815180845260005b81811015610be957602081850181015186830182015201610bcd565b81811115610bfb576000602083870101525b50601f01601f19169290920160200192915050565b600060018060a01b038089168352602081891681850152818816604085015260c06060850152610c4360c0850188610bc3565b91508382036080850152610c578287610bc3565b915083820360a08501528185518084528284019150828160051b85010183880160005b83811015610ca857601f19878403018552610c96838351610bc3565b94860194925090850190600101610c7a565b50909d9c5050505050505050505050505056fea2646970667358221220118981da8fe7c23ab5343c8024d04cf99514f8f6c0831c4f8fc99c0f1cb9e8a264736f6c6343000809003342616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616464726573732073686f756c64206e6f74206265207a65726f2061646472657373"; + "0x608060405234801561001057600080fd5b5060405162000f0b38038062000f0b83398101604081905261003191610190565b61003a33610128565b6001600160a01b03821661009b576040805162461bcd60e51b815260206004820152602481019190915260008051602062000ecb833981519152604482015260008051602062000eeb83398151915260648201526084015b60405180910390fd5b6001600160a01b0381166100f7576040805162461bcd60e51b815260206004820152602481019190915260008051602062000ecb833981519152604482015260008051602062000eeb8339815191526064820152608401610092565b600180546001600160a01b039384166001600160a01b031991821617909155600480549290931691161790556101ca565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461018d57600080fd5b50565b600080604083850312156101a357600080fd5b82516101ae81610178565b60208401519092506101bf81610178565b809150509250929050565b610cf180620001da6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063b97a231911610071578063b97a231914610129578063d62d80891461013c578063de78c3341461014f578063ecade2f014610162578063ef4e06ec14610175578063f2fde38b1461018857600080fd5b806327cbb12f146100b95780635b9c68d3146100e95780635d5a9623146100fe578063715018a614610108578063795e2415146101105780638da5cb5b14610118575b600080fd5b6100cc6100c736600461089d565b61019b565b6040516001600160a01b0390911681526020015b60405180910390f35b6100f16101c5565b6040516100e091906108b6565b610106610227565b005b610106610388565b6100f16103c7565b6000546001600160a01b03166100cc565b6004546100cc906001600160a01b031681565b61010661014a3660046109ba565b610427565b6100cc61015d36600461089d565b61063b565b610106610170366004610ad9565b61064b565b6001546100cc906001600160a01b031681565b610106610196366004610ad9565b610715565b600281815481106101ab57600080fd5b6000918252602090912001546001600160a01b0316905081565b6060600380548060200260200160405190810160405280929190818152602001828054801561021d57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116101ff575b5050505050905090565b6000805b60025481101561038457336001600160a01b03166002828154811061025257610252610afd565b6000918252602090912001546001600160a01b03161415610372576001915060036002828154811061028657610286610afd565b6000918252602080832090910154835460018181018655948452919092200180546001600160a01b0319166001600160a01b039092169190911790556002805490916102d191610b29565b815481106102e1576102e1610afd565b600091825260209091200154600280546001600160a01b03909216918390811061030d5761030d610afd565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600280548061034c5761034c610b40565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061037c81610b56565b91505061022b565b5050565b6000546001600160a01b031633146103bb5760405162461bcd60e51b81526004016103b290610b71565b60405180910390fd5b6103c560006107b0565b565b6060600280548060200260200160405190810160405280929190818152602001828054801561021d576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116101ff575050505050905090565b6000546001600160a01b031633146104515760405162461bcd60e51b81526004016103b290610b71565b6004546001600160a01b0316600061046882610800565b9050806001600160a01b0316631917d6c0836001600160a01b031663ef4e06ec6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104b257600080fd5b505afa1580156104c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ea9190610ba6565b846001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b15801561052357600080fd5b505afa158015610537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055b9190610ba6565b308989896040518763ffffffff1660e01b815260040161058096959493929190610c10565b600060405180830381600087803b15801561059a57600080fd5b505af11580156105ae573d6000803e3d6000fd5b5050600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040519081527f165f4a0bebf649c196135ba0519a9a51da33d33a9e4d096b71050c2c97ec670f9250602001905060405180910390a15050505050565b600381815481106101ab57600080fd5b6000546001600160a01b031633146106755760405162461bcd60e51b81526004016103b290610b71565b6001600160a01b0381166106f3576040805162461bcd60e51b81526020600482015260248101919091527f42616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616460448201527f64726573732073686f756c64206e6f74206265207a65726f206164647265737360648201526084016103b2565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461073f5760405162461bcd60e51b81526004016103b290610b71565b6001600160a01b0381166107a45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b2565b6107ad816107b0565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b0381166108985760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b60448201526064016103b2565b919050565b6000602082840312156108af57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156108f75783516001600160a01b0316835292840192918401916001016108d2565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561094257610942610903565b604052919050565b600082601f83011261095b57600080fd5b813567ffffffffffffffff81111561097557610975610903565b610988601f8201601f1916602001610919565b81815284602083860101111561099d57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000606084860312156109cf57600080fd5b833567ffffffffffffffff808211156109e757600080fd5b6109f38783880161094a565b9450602091508186013581811115610a0a57600080fd5b610a168882890161094a565b945050604086013581811115610a2b57600080fd5b8601601f81018813610a3c57600080fd5b803582811115610a4e57610a4e610903565b8060051b610a5d858201610919565b918252828101850191858101908b841115610a7757600080fd5b86850192505b83831015610ab357823586811115610a955760008081fd5b610aa38d898389010161094a565b8352509186019190860190610a7d565b809750505050505050509250925092565b6001600160a01b03811681146107ad57600080fd5b600060208284031215610aeb57600080fd5b8135610af681610ac4565b9392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015610b3b57610b3b610b13565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415610b6a57610b6a610b13565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215610bb857600080fd5b8151610af681610ac4565b6000815180845260005b81811015610be957602081850181015186830182015201610bcd565b81811115610bfb576000602083870101525b50601f01601f19169290920160200192915050565b600060018060a01b038089168352602081891681850152818816604085015260c06060850152610c4360c0850188610bc3565b91508382036080850152610c578287610bc3565b915083820360a08501528185518084528284019150828160051b85010183880160005b83811015610ca857601f19878403018552610c96838351610bc3565b94860194925090850190600101610c7a565b50909d9c5050505050505050505050505056fea264697066735822122063cc3d5b2f7cffeecde81dd79e3c578530e22d30a033ec774e48f12be1cddbf064736f6c6343000809003342616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616464726573732073686f756c64206e6f74206265207a65726f2061646472657373"; type BallotFactoryConstructorParams = | [signer?: Signer] diff --git a/typings/factories/contracts/voting/Ballot__factory.ts b/typings/factories/contracts/voting/Ballot__factory.ts index 4f0d402..2b18430 100644 --- a/typings/factories/contracts/voting/Ballot__factory.ts +++ b/typings/factories/contracts/voting/Ballot__factory.ts @@ -116,6 +116,38 @@ const _abi = [ stateMutability: "view", type: "function", }, + { + inputs: [], + name: "getVote", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "voter", + type: "address", + }, + ], + name: "hasVoted", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { @@ -261,7 +293,7 @@ const _abi = [ ]; const _bytecode = - "0x60a060405269054b40b1f852bda0000060805234801561001e57600080fd5b506100283361002d565b61007d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6080516114f06100986000396000610a6c01526114f06000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639094c76311610097578063ec55688911610066578063ec55688914610203578063ef4e06ec14610216578063f2fde38b14610229578063f6fd7fde1461023c57600080fd5b80639094c763146101c057806398c81bbf146101d3578063bf63a577146101e8578063c45a0155146101f057600080fd5b806359037b89116100d357806359037b8914610155578063597e1fb514610176578063715018a6146101935780638da5cb5b1461019b57600080fd5b80630a59a98c146101055780631917d6c01461012357806343d726d6146101385780634717f97c14610140575b600080fd5b61010d61024f565b60405161011a9190610fe3565b60405180910390f35b6101366101313660046110c9565b6102dd565b005b610136610491565b6101486107f1565b60405161011a919061120d565b610168610163366004611251565b610849565b60405190815260200161011a565b6005546101839060ff1681565b604051901515815260200161011a565b61013661086a565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161011a565b6101366101ce36600461126a565b6108d0565b6101db610be7565b60405161011a9190611290565b61010d610cc0565b6003546101a8906001600160a01b031681565b6002546101a8906001600160a01b031681565b6001546101a8906001600160a01b031681565b6101366102373660046112f2565b610ccd565b61010d61024a366004611251565b610d98565b6004805461025c9061130f565b80601f01602080910402602001604051908101604052809291908181526020018280546102889061130f565b80156102d55780601f106102aa576101008083540402835291602001916102d5565b820191906000526020600020905b8154815290600101906020018083116102b857829003601f168201915b505050505081565b600054600160a81b900460ff1661030157600054600160a01b900460ff1615610305565b303b155b61036d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b600054600160a81b900460ff16158015610397576000805461ffff60a01b191661010160a01b1790555b83516103aa906004906020870190610e13565b5082516103be906006906020860190610e13565b506005805460ff1916905581516103dc906007906020850190610e97565b5060075467ffffffffffffffff8111156103f8576103f8611012565b604051908082528060200260200182016040528015610421578160200160208202803683370190505b50805161043691600891602090910190610ef0565b50600180546001600160a01b03808a166001600160a01b0319928316179092556002805489841690831617905560038054928816929091169190911790558015610488576000805460ff60a81b191690555b50505050505050565b600360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104df57600080fd5b505afa1580156104f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610517919061134a565b6001600160a01b0316336001600160a01b0316146105835760405162461bcd60e51b8152602060048201526024808201527f566f74696e673a205265737472696374656420746f20666163746f7279206f776044820152633732b91760e11b6064820152608401610364565b60055460ff16156105d65760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e00006044820152606401610364565b6005805460ff1916600117905560005b6009548110156107865760006009828154811061060557610605611367565b6000918252602090912001546002546040516302fbd00360e21b81526001600160a01b039283169350911690630bef400c9061064890849060069060040161137d565b60206040518083038186803b15801561066057600080fd5b505afa158015610674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106989190611436565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a082319060240160206040518083038186803b1580156106dd57600080fd5b505afa1580156106f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107159190611436565b61071f9190611465565b6001600160a01b0382166000908152600a602052604090205460088054909163ffffffff1690811061075357610753611367565b90600052602060002001600082825461076c9190611465565b9091555082915061077e90508161147d565b9150506105e6565b50600360009054906101000a90046001600160a01b03166001600160a01b0316635d5a96236040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107d757600080fd5b505af11580156107eb573d6000803e3d6000fd5b50505050565b6060600880548060200260200160405190810160405280929190818152602001828054801561083f57602002820191906000526020600020905b81548152602001906001019080831161082b575b5050505050905090565b6008818154811061085957600080fd5b600091825260209091200154905081565b6000546001600160a01b031633146108c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610364565b6108ce6000610dc3565b565b60055460ff16156109235760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e000000000000006044820152606401610364565b60075463ffffffff8216106109845760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2043686f69636520696e64657820697320746f6f20686967686044820152601760f91b6064820152608401610364565b60025460405163442f655160e01b81526001600160a01b039091169063442f6551906109b790339060069060040161137d565b60206040518083038186803b1580156109cf57600080fd5b505afa1580156109e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a079190611498565b15610a545760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e0000000000006044820152606401610364565b6001546040516370a0823160e01b81523360048201527f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316906370a082319060240160206040518083038186803b158015610ab757600080fd5b505afa158015610acb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aef9190611436565b1015610b3d5760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e006044820152606401610364565b336000908152600a6020526040902054640100000000900460ff16610bbe57336000818152600a60205260408120805464ff0000000019166401000000001790556009805460018101825591527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b03191690911790555b336000908152600a60205260409020805463ffffffff191663ffffffff92909216919091179055565b60606007805480602002602001604051908101604052809291908181526020016000905b82821015610cb7578382906000526020600020018054610c2a9061130f565b80601f0160208091040260200160405190810160405280929190818152602001828054610c569061130f565b8015610ca35780601f10610c7857610100808354040283529160200191610ca3565b820191906000526020600020905b815481529060010190602001808311610c8657829003601f168201915b505050505081526020019060010190610c0b565b50505050905090565b6006805461025c9061130f565b6000546001600160a01b03163314610d275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610364565b6001600160a01b038116610d8c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610364565b610d9581610dc3565b50565b60078181548110610da857600080fd5b90600052602060002001600091509050805461025c9061130f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054610e1f9061130f565b90600052602060002090601f016020900481019282610e415760008555610e87565b82601f10610e5a57805160ff1916838001178555610e87565b82800160010185558215610e87579182015b82811115610e87578251825591602001919060010190610e6c565b50610e93929150610f2a565b5090565b828054828255906000526020600020908101928215610ee4579160200282015b82811115610ee45782518051610ed4918491602090910190610e13565b5091602001919060010190610eb7565b50610e93929150610f3f565b828054828255906000526020600020908101928215610e875791602002820182811115610e87578251825591602001919060010190610e6c565b5b80821115610e935760008155600101610f2b565b80821115610e93576000610f538282610f5c565b50600101610f3f565b508054610f689061130f565b6000825580601f10610f78575050565b601f016020900490600052602060002090810190610d959190610f2a565b6000815180845260005b81811015610fbc57602081850181015186830182015201610fa0565b81811115610fce576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610ff66020830184610f96565b9392505050565b6001600160a01b0381168114610d9557600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561105157611051611012565b604052919050565b600082601f83011261106a57600080fd5b813567ffffffffffffffff81111561108457611084611012565b611097601f8201601f1916602001611028565b8181528460208386010111156110ac57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c087890312156110e257600080fd5b6110ec8735610ffd565b863595506020808801356110ff81610ffd565b9550604088013561110f81610ffd565b9450606088013567ffffffffffffffff8082111561112c57600080fd5b6111388b838c01611059565b955060808a013591508082111561114e57600080fd5b61115a8b838c01611059565b945060a08a013591508082111561117057600080fd5b818a0191508a601f83011261118457600080fd5b81358181111561119657611196611012565b8060051b6111a5858201611028565b918252838101850191858101908e8411156111bf57600080fd5b86860192505b838310156111f95784833511156111db57600080fd5b6111ea8f888535890101611059565b825291860191908601906111c5565b809750505050505050509295509295509295565b6020808252825182820181905260009190848201906040850190845b8181101561124557835183529284019291840191600101611229565b50909695505050505050565b60006020828403121561126357600080fd5b5035919050565b60006020828403121561127c57600080fd5b813563ffffffff81168114610ff657600080fd5b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156112e557603f198886030184526112d3858351610f96565b945092850192908501906001016112b7565b5092979650505050505050565b60006020828403121561130457600080fd5b8135610ff681610ffd565b600181811c9082168061132357607f821691505b6020821081141561134457634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561135c57600080fd5b8151610ff681610ffd565b634e487b7160e01b600052603260045260246000fd5b60018060a01b0383168152600060206040818401526000845481600182811c9150808316806113ad57607f831692505b8583108114156113cb57634e487b7160e01b85526022600452602485fd5b60408801839052606088018180156113ea57600181146113fb57611426565b60ff19861682528782019650611426565b60008b81526020902060005b8681101561142057815484820152908501908901611407565b83019750505b50949a9950505050505050505050565b60006020828403121561144857600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156114785761147861144f565b500190565b60006000198214156114915761149161144f565b5060010190565b6000602082840312156114aa57600080fd5b81518015158114610ff657600080fdfea2646970667358221220b09f4a479efac96e1e7070eeae8c952ac90b22a72363b2f8a878bbdd96de218a64736f6c63430008090033"; + "0x60a060405269054b40b1f852bda0000060805234801561001e57600080fd5b506100283361002d565b61007d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6080516115616100986000396000610add01526115616000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80638da5cb5b116100a2578063c45a015511610071578063c45a015514610261578063ec55688914610274578063ef4e06ec14610287578063f2fde38b1461029a578063f6fd7fde146102ad57600080fd5b80638da5cb5b1461020c5780639094c7631461023157806398c81bbf14610244578063bf63a5771461025957600080fd5b806343d726d6116100e957806343d726d6146101b95780634717f97c146101c157806359037b89146101d6578063597e1fb5146101f7578063715018a61461020457600080fd5b80630242f3511461011b57806309eef43e1461014b5780630a59a98c1461018f5780631917d6c0146101a4575b600080fd5b336000908152600a602052604090205463ffffffff1660405163ffffffff90911681526020015b60405180910390f35b61017f61015936600461101c565b6001600160a01b03166000908152600a6020526040902054640100000000900460ff1690565b6040519015158152602001610142565b6101976102c0565b604051610142919061108d565b6101b76101b2366004611157565b61034e565b005b6101b7610502565b6101c9610862565b604051610142919061129b565b6101e96101e43660046112df565b6108ba565b604051908152602001610142565b60055461017f9060ff1681565b6101b76108db565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610142565b6101b761023f3660046112f8565b610941565b61024c610c58565b604051610142919061131e565b610197610d31565b600354610219906001600160a01b031681565b600254610219906001600160a01b031681565b600154610219906001600160a01b031681565b6101b76102a836600461101c565b610d3e565b6101976102bb3660046112df565b610e09565b600480546102cd90611380565b80601f01602080910402602001604051908101604052809291908181526020018280546102f990611380565b80156103465780601f1061031b57610100808354040283529160200191610346565b820191906000526020600020905b81548152906001019060200180831161032957829003601f168201915b505050505081565b600054600160a81b900460ff1661037257600054600160a01b900460ff1615610376565b303b155b6103de5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b600054600160a81b900460ff16158015610408576000805461ffff60a01b191661010160a01b1790555b835161041b906004906020870190610e84565b50825161042f906006906020860190610e84565b506005805460ff19169055815161044d906007906020850190610f08565b5060075467ffffffffffffffff811115610469576104696110a0565b604051908082528060200260200182016040528015610492578160200160208202803683370190505b5080516104a791600891602090910190610f61565b50600180546001600160a01b03808a166001600160a01b03199283161790925560028054898416908316179055600380549288169290911691909117905580156104f9576000805460ff60a81b191690555b50505050505050565b600360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561055057600080fd5b505afa158015610564573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058891906113bb565b6001600160a01b0316336001600160a01b0316146105f45760405162461bcd60e51b8152602060048201526024808201527f566f74696e673a205265737472696374656420746f20666163746f7279206f776044820152633732b91760e11b60648201526084016103d5565b60055460ff16156106475760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e000060448201526064016103d5565b6005805460ff1916600117905560005b6009548110156107f757600060098281548110610676576106766113d8565b6000918252602090912001546002546040516302fbd00360e21b81526001600160a01b039283169350911690630bef400c906106b99084906006906004016113ee565b60206040518083038186803b1580156106d157600080fd5b505afa1580156106e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070991906114a7565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a082319060240160206040518083038186803b15801561074e57600080fd5b505afa158015610762573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078691906114a7565b61079091906114d6565b6001600160a01b0382166000908152600a602052604090205460088054909163ffffffff169081106107c4576107c46113d8565b9060005260206000200160008282546107dd91906114d6565b909155508291506107ef9050816114ee565b915050610657565b50600360009054906101000a90046001600160a01b03166001600160a01b0316635d5a96236040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561084857600080fd5b505af115801561085c573d6000803e3d6000fd5b50505050565b606060088054806020026020016040519081016040528092919081815260200182805480156108b057602002820191906000526020600020905b81548152602001906001019080831161089c575b5050505050905090565b600881815481106108ca57600080fd5b600091825260209091200154905081565b6000546001600160a01b031633146109355760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103d5565b61093f6000610e34565b565b60055460ff16156109945760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e0000000000000060448201526064016103d5565b60075463ffffffff8216106109f55760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2043686f69636520696e64657820697320746f6f20686967686044820152601760f91b60648201526084016103d5565b60025460405163442f655160e01b81526001600160a01b039091169063442f655190610a289033906006906004016113ee565b60206040518083038186803b158015610a4057600080fd5b505afa158015610a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a789190611509565b15610ac55760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e00000000000060448201526064016103d5565b6001546040516370a0823160e01b81523360048201527f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316906370a082319060240160206040518083038186803b158015610b2857600080fd5b505afa158015610b3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6091906114a7565b1015610bae5760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e0060448201526064016103d5565b336000908152600a6020526040902054640100000000900460ff16610c2f57336000818152600a60205260408120805464ff0000000019166401000000001790556009805460018101825591527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b03191690911790555b336000908152600a60205260409020805463ffffffff191663ffffffff92909216919091179055565b60606007805480602002602001604051908101604052809291908181526020016000905b82821015610d28578382906000526020600020018054610c9b90611380565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc790611380565b8015610d145780601f10610ce957610100808354040283529160200191610d14565b820191906000526020600020905b815481529060010190602001808311610cf757829003601f168201915b505050505081526020019060010190610c7c565b50505050905090565b600680546102cd90611380565b6000546001600160a01b03163314610d985760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103d5565b6001600160a01b038116610dfd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103d5565b610e0681610e34565b50565b60078181548110610e1957600080fd5b9060005260206000200160009150905080546102cd90611380565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054610e9090611380565b90600052602060002090601f016020900481019282610eb25760008555610ef8565b82601f10610ecb57805160ff1916838001178555610ef8565b82800160010185558215610ef8579182015b82811115610ef8578251825591602001919060010190610edd565b50610f04929150610f9b565b5090565b828054828255906000526020600020908101928215610f55579160200282015b82811115610f555782518051610f45918491602090910190610e84565b5091602001919060010190610f28565b50610f04929150610fb0565b828054828255906000526020600020908101928215610ef85791602002820182811115610ef8578251825591602001919060010190610edd565b5b80821115610f045760008155600101610f9c565b80821115610f04576000610fc48282610fcd565b50600101610fb0565b508054610fd990611380565b6000825580601f10610fe9575050565b601f016020900490600052602060002090810190610e069190610f9b565b6001600160a01b0381168114610e0657600080fd5b60006020828403121561102e57600080fd5b813561103981611007565b9392505050565b6000815180845260005b818110156110665760208185018101518683018201520161104a565b81811115611078576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006110396020830184611040565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156110df576110df6110a0565b604052919050565b600082601f8301126110f857600080fd5b813567ffffffffffffffff811115611112576111126110a0565b611125601f8201601f19166020016110b6565b81815284602083860101111561113a57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561117057600080fd5b61117a8735611007565b8635955060208088013561118d81611007565b9550604088013561119d81611007565b9450606088013567ffffffffffffffff808211156111ba57600080fd5b6111c68b838c016110e7565b955060808a01359150808211156111dc57600080fd5b6111e88b838c016110e7565b945060a08a01359150808211156111fe57600080fd5b818a0191508a601f83011261121257600080fd5b813581811115611224576112246110a0565b8060051b6112338582016110b6565b918252838101850191858101908e84111561124d57600080fd5b86860192505b8383101561128757848335111561126957600080fd5b6112788f8885358901016110e7565b82529186019190860190611253565b809750505050505050509295509295509295565b6020808252825182820181905260009190848201906040850190845b818110156112d3578351835292840192918401916001016112b7565b50909695505050505050565b6000602082840312156112f157600080fd5b5035919050565b60006020828403121561130a57600080fd5b813563ffffffff8116811461103957600080fd5b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561137357603f19888603018452611361858351611040565b94509285019290850190600101611345565b5092979650505050505050565b600181811c9082168061139457607f821691505b602082108114156113b557634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156113cd57600080fd5b815161103981611007565b634e487b7160e01b600052603260045260246000fd5b60018060a01b0383168152600060206040818401526000845481600182811c91508083168061141e57607f831692505b85831081141561143c57634e487b7160e01b85526022600452602485fd5b604088018390526060880181801561145b576001811461146c57611497565b60ff19861682528782019650611497565b60008b81526020902060005b8681101561149157815484820152908501908901611478565b83019750505b50949a9950505050505050505050565b6000602082840312156114b957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156114e9576114e96114c0565b500190565b6000600019821415611502576115026114c0565b5060010190565b60006020828403121561151b57600080fd5b8151801515811461103957600080fdfea2646970667358221220aa6a4b80388c0725a452e9f8c972ecab45695a4620ffc4f0e371e8f0332c058064736f6c63430008090033"; type BallotConstructorParams = | [signer?: Signer] diff --git a/typings/factories/contracts/voting/VotingDelegation__factory.ts b/typings/factories/contracts/voting/VotingDelegation__factory.ts index 53bad18..9fa9987 100644 --- a/typings/factories/contracts/voting/VotingDelegation__factory.ts +++ b/typings/factories/contracts/voting/VotingDelegation__factory.ts @@ -215,7 +215,7 @@ const _abi = [ ]; const _bytecode = - "0x60a060405269054b40b1f852bda0000060805234801561001e57600080fd5b50604051610c9f380380610c9f83398101604081905261003d91610124565b610046336100d4565b6001600160a01b0381166100af5760405162461bcd60e51b815260206004820152602660248201527f566f74696e6744656c65676174696f6e3a204450532061646472657373206973604482015265103d32b9379760d11b606482015260840160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055610154565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561013657600080fd5b81516001600160a01b038116811461014d57600080fd5b9392505050565b608051610b3061016f60003960006103500152610b306000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638da5cb5b116100665780638da5cb5b14610156578063ceb0b9351461017b578063ef4e06ec1461018e578063f2fde38b146101a1578063fc196713146101b457600080fd5b80630bef400c146100a3578063442f6551146100c95780635e12967914610119578063694ec60e1461012e578063715018a61461014e575b600080fd5b6100b66100b136600461091b565b6101f2565b6040519081526020015b60405180910390f35b6101096100d736600461091b565b6001600160a01b0391821660009081526004602090815260408083208451948301949094208352929052205416151590565b60405190151581526020016100c0565b61012c61012736600461091b565b61032e565b005b61014161013c36600461091b565b610612565b6040516100c091906109dd565b61012c610768565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100c0565b600254610163906001600160a01b031681565b600154610163906001600160a01b031681565b61012c6101af366004610a2a565b6107ce565b6101636101c236600461091b565b6001600160a01b039182166000908152600460209081526040808320845194830194909420835292905220541690565b805160208201206000908190815b6001600160a01b038616600090815260036020908152604080832085845290915290206001015463ffffffff8216101561032457600180546001600160a01b0388811660009081526003602090815260408083208884529091529020909201805492909116916370a08231919063ffffffff851690811061028357610283610a4c565b60009182526020909120015460405160e083901b6001600160e01b03191681526001600160a01b03909116600482015260240160206040518083038186803b1580156102ce57600080fd5b505afa1580156102e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103069190610a62565b6103109084610a91565b92508061031c81610aa9565b915050610200565b5090949350505050565b6001546040516370a0823160e01b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000009216906370a082319060240160206040518083038186803b15801561039357600080fd5b505afa1580156103a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cb9190610a62565b1015806103df57506001600160a01b038216155b6104445760405162461bcd60e51b815260206004820152602b60248201527f566f74696e6744656c65676174696f6e3a2050726f787920686173206e6f742060448201526a32b737bab3b4102228299760a91b60648201526084015b60405180910390fd5b805160208083019190912033600090815260048352604080822083835290935291909120546001600160a01b03161561057b573360008181526004602090815260408083208584528252808320546001600160a01b03168352600382528083208584528252808320938352908390529020546001828101805490916104c891610acd565b815481106104d8576104d8610a4c565b6000918252602090912001546001830180546001600160a01b03909216918390811061050657610506610a4c565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508160010180548061054757610547610ae4565b60008281526020808220830160001990810180546001600160a01b0319169055909201909255338252929092525060408120555b336000908152600460209081526040808320848452909152902080546001600160a01b0319166001600160a01b0385169081179091551561060d576001600160a01b038316600090815260036020908152604080832084845282528083206001808201805433808852938652938620849055908301815584529190922090910180546001600160a01b03191690911790555b505050565b80516020808301919091206001600160a01b0384166000908152600383526040808220838352909352918220600101546060929067ffffffffffffffff81111561065e5761065e610905565b604051908082528060200260200182016040528015610687578160200160208202803683370190505b50905060005b6001600160a01b038616600090815260036020908152604080832086845290915290206001015463ffffffff8216101561075f576001600160a01b03861660009081526003602090815260408083208684529091529020600101805463ffffffff83169081106106ff576106ff610a4c565b9060005260206000200160009054906101000a90046001600160a01b0316828263ffffffff168151811061073557610735610a4c565b6001600160a01b03909216602092830291909101909101528061075781610aa9565b91505061068d565b50949350505050565b6000546001600160a01b031633146107c25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161043b565b6107cc6000610899565b565b6000546001600160a01b031633146108285760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161043b565b6001600160a01b03811661088d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161043b565b61089681610899565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461090057600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561092e57600080fd5b610937836108e9565b9150602083013567ffffffffffffffff8082111561095457600080fd5b818501915085601f83011261096857600080fd5b81358181111561097a5761097a610905565b604051601f8201601f19908116603f011681019083821181831017156109a2576109a2610905565b816040528281528860208487010111156109bb57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b81811015610a1e5783516001600160a01b0316835292840192918401916001016109f9565b50909695505050505050565b600060208284031215610a3c57600080fd5b610a45826108e9565b9392505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610a7457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610aa457610aa4610a7b565b500190565b600063ffffffff80831681811415610ac357610ac3610a7b565b6001019392505050565b600082821015610adf57610adf610a7b565b500390565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220d96df46fbc64b3443643463fa844c7743d4c565e4135833274187261a9c5711c64736f6c63430008090033"; + "0x60a060405269054b40b1f852bda0000060805234801561001e57600080fd5b50604051610c9f380380610c9f83398101604081905261003d91610124565b610046336100d4565b6001600160a01b0381166100af5760405162461bcd60e51b815260206004820152602660248201527f566f74696e6744656c65676174696f6e3a204450532061646472657373206973604482015265103d32b9379760d11b606482015260840160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055610154565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561013657600080fd5b81516001600160a01b038116811461014d57600080fd5b9392505050565b608051610b3061016f60003960006103500152610b306000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638da5cb5b116100665780638da5cb5b14610156578063ceb0b9351461017b578063ef4e06ec1461018e578063f2fde38b146101a1578063fc196713146101b457600080fd5b80630bef400c146100a3578063442f6551146100c95780635e12967914610119578063694ec60e1461012e578063715018a61461014e575b600080fd5b6100b66100b136600461091b565b6101f2565b6040519081526020015b60405180910390f35b6101096100d736600461091b565b6001600160a01b0391821660009081526004602090815260408083208451948301949094208352929052205416151590565b60405190151581526020016100c0565b61012c61012736600461091b565b61032e565b005b61014161013c36600461091b565b610612565b6040516100c091906109dd565b61012c610768565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100c0565b600254610163906001600160a01b031681565b600154610163906001600160a01b031681565b61012c6101af366004610a2a565b6107ce565b6101636101c236600461091b565b6001600160a01b039182166000908152600460209081526040808320845194830194909420835292905220541690565b805160208201206000908190815b6001600160a01b038616600090815260036020908152604080832085845290915290206001015463ffffffff8216101561032457600180546001600160a01b0388811660009081526003602090815260408083208884529091529020909201805492909116916370a08231919063ffffffff851690811061028357610283610a4c565b60009182526020909120015460405160e083901b6001600160e01b03191681526001600160a01b03909116600482015260240160206040518083038186803b1580156102ce57600080fd5b505afa1580156102e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103069190610a62565b6103109084610a91565b92508061031c81610aa9565b915050610200565b5090949350505050565b6001546040516370a0823160e01b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000009216906370a082319060240160206040518083038186803b15801561039357600080fd5b505afa1580156103a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cb9190610a62565b1015806103df57506001600160a01b038216155b6104445760405162461bcd60e51b815260206004820152602b60248201527f566f74696e6744656c65676174696f6e3a2050726f787920686173206e6f742060448201526a32b737bab3b4102228299760a91b60648201526084015b60405180910390fd5b805160208083019190912033600090815260048352604080822083835290935291909120546001600160a01b03161561057b573360008181526004602090815260408083208584528252808320546001600160a01b03168352600382528083208584528252808320938352908390529020546001828101805490916104c891610acd565b815481106104d8576104d8610a4c565b6000918252602090912001546001830180546001600160a01b03909216918390811061050657610506610a4c565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508160010180548061054757610547610ae4565b60008281526020808220830160001990810180546001600160a01b0319169055909201909255338252929092525060408120555b336000908152600460209081526040808320848452909152902080546001600160a01b0319166001600160a01b0385169081179091551561060d576001600160a01b038316600090815260036020908152604080832084845282528083206001808201805433808852938652938620849055908301815584529190922090910180546001600160a01b03191690911790555b505050565b80516020808301919091206001600160a01b0384166000908152600383526040808220838352909352918220600101546060929067ffffffffffffffff81111561065e5761065e610905565b604051908082528060200260200182016040528015610687578160200160208202803683370190505b50905060005b6001600160a01b038616600090815260036020908152604080832086845290915290206001015463ffffffff8216101561075f576001600160a01b03861660009081526003602090815260408083208684529091529020600101805463ffffffff83169081106106ff576106ff610a4c565b9060005260206000200160009054906101000a90046001600160a01b0316828263ffffffff168151811061073557610735610a4c565b6001600160a01b03909216602092830291909101909101528061075781610aa9565b91505061068d565b50949350505050565b6000546001600160a01b031633146107c25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161043b565b6107cc6000610899565b565b6000546001600160a01b031633146108285760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161043b565b6001600160a01b03811661088d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161043b565b61089681610899565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461090057600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561092e57600080fd5b610937836108e9565b9150602083013567ffffffffffffffff8082111561095457600080fd5b818501915085601f83011261096857600080fd5b81358181111561097a5761097a610905565b604051601f8201601f19908116603f011681019083821181831017156109a2576109a2610905565b816040528281528860208487010111156109bb57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b81811015610a1e5783516001600160a01b0316835292840192918401916001016109f9565b50909695505050505050565b600060208284031215610a3c57600080fd5b610a45826108e9565b9392505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610a7457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610aa457610aa4610a7b565b500190565b600063ffffffff80831681811415610ac357610ac3610a7b565b6001019392505050565b600082821015610adf57610adf610a7b565b500390565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220e27d5717f587cad942782de912eda54fbff59271574e4a97dac27b1ddf99ad9c64736f6c63430008090033"; type VotingDelegationConstructorParams = | [signer?: Signer] From d06071e5e6fb6774cab4547667c794986bfac572 Mon Sep 17 00:00:00 2001 From: valentinpollart Date: Thu, 28 Apr 2022 12:21:32 +0200 Subject: [PATCH 19/25] fix: remove reference to getBallot method in tests --- test/BallotFactory.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/BallotFactory.spec.ts b/test/BallotFactory.spec.ts index 79add2f..8d0b740 100644 --- a/test/BallotFactory.spec.ts +++ b/test/BallotFactory.spec.ts @@ -39,7 +39,7 @@ describe('Ballot Factory', async () => { const [ballotAddress] = await ballotFactory .createBallot('foo', 'qux', ['bar', 'baz']) .then(async (t) => (await t.wait()).events?.find((e) => e.event === 'BallotCreated')?.args ?? []); - expect(await ballotFactory.getBallots()).to.deep.equals([ballotAddress]); + expect(await ballotFactory.getActiveBallots()).to.deep.equals([ballotAddress]); }); }); From b523632d2a3afee3c3b42ea27265382567b625ee Mon Sep 17 00:00:00 2001 From: valentinpollart Date: Tue, 3 May 2022 18:06:50 +0200 Subject: [PATCH 20/25] fix: add external contracts in ballot constructor --- contracts/voting/Ballot.sol | 80 +++++---- contracts/voting/BallotFactory.sol | 7 +- contracts/voting/VotingDelegation.sol | 14 +- contracts/voting/testing/ExposedBallot.sol | 2 +- scripts/deploy-vote.ts | 29 ++-- scripts/test.ts | 66 ++++++++ test/Ballot.spec.ts | 2 +- test/testing/setupVoting.ts | 2 +- typings/contracts/voting/Ballot.ts | 155 +++++++++++------- typings/contracts/voting/BallotFactory.ts | 19 ++- typings/contracts/voting/VotingDelegation.ts | 48 ++---- .../voting/BallotFactory__factory.ts | 9 +- .../contracts/voting/Ballot__factory.ts | 106 ++++++++---- .../voting/VotingDelegation__factory.ts | 23 +-- 14 files changed, 362 insertions(+), 200 deletions(-) create mode 100644 scripts/test.ts diff --git a/contracts/voting/Ballot.sol b/contracts/voting/Ballot.sol index a3449c7..bcca875 100644 --- a/contracts/voting/Ballot.sol +++ b/contracts/voting/Ballot.sol @@ -25,14 +25,19 @@ contract Ballot is Ownable, Initializable { BallotFactory public factory; struct Vote { - uint32 choiceIndex; + bytes32 choice; bool hasVoted; } /** - * @notice The subject or question of the vote + * @notice The title or question of the vote */ - string public subject; + bytes32 public title; + + /** + * @notice The description of the vote + */ + bytes32 public description; /** * @notice Whether users can still vote or not @@ -42,17 +47,17 @@ contract Ballot is Ownable, Initializable { /** * @notice The topic of the vote, used to know if user has delegated or has delegation on this vote */ - string public topic; + bytes32 public topic; /** - * @notice The diffrent choices of the vote + * @notice The different choices of the vote */ - string[] public choices; + bytes32[] public choices; /** * @notice The results of this vote, which are available only once the vote has been closed */ - uint256[] public resultStorage; + mapping(bytes32 => uint256) public resultStorage; /** * @notice The minimum amount a user must have to be able to vote (25k DPS) @@ -69,22 +74,34 @@ contract Ballot is Ownable, Initializable { */ mapping(address => Vote) internal votes; + /** + * @dev It is necessary to set these values in the ballot implementation since the balot factory use them to initialize clones + */ + constructor(IERC20Metadata _DPS, VotingDelegation _proxy) { + DPS = _DPS; + proxy = _proxy; + } + /** * @notice Set up all state variable for clone contracts. * @dev Can only be called once, usually right after contract creation. * @param _DPS The contract defining the DPS token * @param _proxy The contract allowing users to delegates their vote on specific topics * @param _factory The factory that created this clone contract instance - * @param _subject The subject or question of the vote + * @param _title The subject or question of the vote + * @param _description The subject or question of the vote * @param _topic The topic of the vote * @param _choices The different choices for this vote */ - function init(IERC20Metadata _DPS, VotingDelegation _proxy, BallotFactory _factory, string memory _subject, string memory _topic, string[] memory _choices) public initializer { - subject = _subject; - topic = _topic; + function init(IERC20Metadata _DPS, VotingDelegation _proxy, BallotFactory _factory, string memory _title, string memory _description, string memory _topic, string[] memory _choices) public initializer { + title = keccak256(bytes(_title)); + description = keccak256(bytes(_description)); + topic = keccak256(bytes(_topic)); closed = false; - choices = _choices; - resultStorage = new uint256[](choices.length); + choices = new bytes32[](_choices.length); + for(uint i = 0; i < _choices.length; i++) { + choices[i] = keccak256(bytes(_choices[i])); + } DPS = _DPS; proxy = _proxy; factory = _factory; @@ -93,41 +110,45 @@ contract Ballot is Ownable, Initializable { /** * @notice Returns all choices of the vote */ - function getChoices() external view returns(string[] memory) { + function getChoices() external view returns(bytes32[] memory) { return choices; } - /** - * @notice Returns all results of the vote. - * @dev Available only once the vote has been closed. - */ - function getResults() external view returns (uint256[] memory) { - return resultStorage; + function isValidChoice(bytes32 choiceHash) public view returns (bool) { + for (uint i = 0; i < choices.length; i++) { + if (choices[i] == choiceHash) { + return true; + } + } + return false; } /** * @notice Send vote for given choice. * @dev Requirements: * - Vote MUST be open. - * - Choice MUST be available in the choices array. + * - Choice MUST be a valid choice (belongs to the choices array). * - Voter MUST NOT have delegated his vote. * - Voter MUST have at least 25k DPS. - * @param choiceIndex the index of the selected choice in the choices array + * @param choice The choice one want to vote for. */ - function vote(uint32 choiceIndex) external { + function vote(string memory choice) external { require(!closed, "Voting: Ballot is closed."); - require(choices.length > choiceIndex, "Voting: Choice index is too high."); require(!proxy.hasDelegated(msg.sender,topic), "Voting: Vote is delegated."); // Verify that voter has not granted proxy to somebody. require(DPS.balanceOf(msg.sender) >= votingLimit, "Voting: Not enough DPS to vote."); // 25k DPS limit + bytes32 choiceHash = keccak256(bytes(choice)); + + require(isValidChoice(choiceHash), "Voting: Choice is invalid."); + if(!votes[msg.sender].hasVoted) { votes[msg.sender].hasVoted = true; voters.push(msg.sender); } - votes[msg.sender].choiceIndex = choiceIndex; + votes[msg.sender].choice = choiceHash; } /** @@ -139,10 +160,10 @@ contract Ballot is Ownable, Initializable { } /** - * @notice Returns the sender's vote + * @notice Returns the voter's vote */ - function getVote() external view returns(uint32) { - return votes[msg.sender].choiceIndex; + function getVote(address voter) external view returns(bytes32) { + return votes[voter].choice; } /** @@ -157,8 +178,9 @@ contract Ballot is Ownable, Initializable { for(uint i = 0; i < voters.length; i++) { // if A has granted proxy to B address voter = voters[i]; - resultStorage[votes[voter].choiceIndex] += DPS.balanceOf(voter) + proxy.delegationAmount(voter, topic); + resultStorage[votes[voter].choice] += DPS.balanceOf(voter) + proxy.delegationAmount(voter, topic); } + factory.archiveBallot(); } } diff --git a/contracts/voting/BallotFactory.sol b/contracts/voting/BallotFactory.sol index cdf9295..2f4aaa1 100644 --- a/contracts/voting/BallotFactory.sol +++ b/contracts/voting/BallotFactory.sol @@ -45,14 +45,15 @@ contract BallotFactory is Ownable { /** * @notice Creates a new ballot contract clone - * @param subject The subject or question of the vote + * @param title The title or question of the vote + * @param description The description of the vote * @param topic The topic of the vote * @param choices The different choices for this vote */ - function createBallot(string memory subject, string memory topic, string[] memory choices) external onlyOwner { + function createBallot(string memory title, string memory description, string memory topic, string[] memory choices) external onlyOwner { Ballot implementation = Ballot(implementationAddress); address cloneAddress = Clones.clone(implementationAddress); - Ballot(cloneAddress).init(implementation.DPS(), implementation.proxy(), this, subject, topic, choices); + Ballot(cloneAddress).init(implementation.DPS(), implementation.proxy(), this, title, description, topic, choices); activeBallotAddresses.push(cloneAddress); emit BallotCreated(cloneAddress); } diff --git a/contracts/voting/VotingDelegation.sol b/contracts/voting/VotingDelegation.sol index cab23a0..49ee9e5 100644 --- a/contracts/voting/VotingDelegation.sol +++ b/contracts/voting/VotingDelegation.sol @@ -15,9 +15,6 @@ contract VotingDelegation is Ownable { // @dev Contract defining the DPS token IERC20Metadata public DPS; - // @dev The ballot factory - BallotFactory public ballotFactory; - struct Grants { mapping(address => uint256) indexes; address[] delegators; @@ -73,11 +70,10 @@ contract VotingDelegation is Ownable { * @param voter The address of the voter * @param topic The delegation topic */ - function delegationAmount(address voter, string memory topic) public view returns (uint256) { + function delegationAmount(address voter, bytes32 topic) public view returns (uint256) { uint256 total; - bytes32 topicHash = keccak256(bytes(topic)); - for(uint32 i = 0; i < delegates[voter][topicHash].delegators.length; i++) { - total += DPS.balanceOf(delegates[voter][topicHash].delegators[i]); + for(uint32 i = 0; i < delegates[voter][topic].delegators.length; i++) { + total += DPS.balanceOf(delegates[voter][topic].delegators[i]); } return total; } @@ -87,8 +83,8 @@ contract VotingDelegation is Ownable { * @param voter The address of the voter * @param topic The delegation topic */ - function hasDelegated(address voter, string memory topic) external view returns (bool) { - return proxyVoters[voter][keccak256(bytes(topic))] != address(0); + function hasDelegated(address voter, bytes32 topic) external view returns (bool) { + return proxyVoters[voter][topic] != address(0); } /** diff --git a/contracts/voting/testing/ExposedBallot.sol b/contracts/voting/testing/ExposedBallot.sol index e39bf94..41e8610 100644 --- a/contracts/voting/testing/ExposedBallot.sol +++ b/contracts/voting/testing/ExposedBallot.sol @@ -6,7 +6,7 @@ import "../Ballot.sol"; contract ExposedBallot is Ballot { - constructor() Ballot() {} + constructor(IERC20Metadata _DPS, VotingDelegation _proxy) Ballot(_DPS, _proxy) {} struct ResultSample { address voter; diff --git a/scripts/deploy-vote.ts b/scripts/deploy-vote.ts index 09308fc..0cdada8 100644 --- a/scripts/deploy-vote.ts +++ b/scripts/deploy-vote.ts @@ -1,9 +1,10 @@ import { ethers, network } from 'hardhat'; import { formatUnits, parseUnits } from '@ethersproject/units'; -import { Ballot__factory } from '../typings/factories/contracts/Ballot__factory'; +import waitTx from "../lib/waitTx"; import { DeepSquare__factory } from '../typings/factories/contracts/DeepSquare__factory'; -import { VotingDelegation__factory } from '../typings/factories/contracts/VotingDelegation__factory'; -import { BallotFactory__factory } from '../typings/factories/contracts/factories/BallotFactory__factory'; +import { BallotFactory__factory } from '../typings/factories/contracts/voting/BallotFactory__factory'; +import { Ballot__factory } from '../typings/factories/contracts/voting/Ballot__factory'; +import { VotingDelegation__factory } from '../typings/factories/contracts/voting/VotingDelegation__factory'; type NetworkName = 'hardhat' | 'mainnet' | 'fuji'; type ContractName = 'DeepSquare'; @@ -31,13 +32,16 @@ async function main() { const avaxBalance = await deployer.getBalance(); const votingDelegation = await new VotingDelegation__factory(deployer).deploy(DeepSquare.address); + await votingDelegation.deployed(); console.log('votingDelegation:', votingDelegation.address); const ballotImplementation = await new Ballot__factory(deployer).deploy(DeepSquare.address, votingDelegation.address); + await ballotImplementation.deployed(); console.log('ballotImplementation:', ballotImplementation.address); const ballotFactory = await new BallotFactory__factory(deployer).deploy( DeepSquare.address, ballotImplementation.address, ); + await ballotFactory.deployed(); console.log('ballotFactory:', ballotFactory.address); if (networkName === 'fuji') { @@ -49,16 +53,19 @@ async function main() { const cloneAddress: string = (await ballotCreationTransaction.wait()).events?.pop()?.args?.[0]; console.log('Voting clone deployed at:', cloneAddress); const clone = new Ballot__factory(deployer).attach(cloneAddress); + console.log('Attached to clone'); - await DeepSquare.connect(dpsHolder).transfer(accounts[0].address, parseUnits('50000', 18)); - await clone.connect(accounts[0]).vote(0); + await waitTx(DeepSquare.connect(dpsHolder).transfer(accounts[0].address, parseUnits('50000', 18))); + console.log('Transferred DPS to voter 0'); + await waitTx(clone.connect(accounts[0]).vote(0)); console.log('Voting with:' + accounts[0].address); - await DeepSquare.connect(dpsHolder).transfer(accounts[1].address, parseUnits('25000', 18)); - await clone.connect(accounts[1]).vote(1); + await waitTx(DeepSquare.connect(dpsHolder).transfer(accounts[1].address, parseUnits('25000', 18))); + console.log('Transferred DPS to voter 1'); + await waitTx(clone.connect(accounts[1]).vote(1)); console.log('Voting with:' + accounts[1].address); - await clone.close(); + await waitTx(clone.close()); console.log('Vote results: '); const choices = await clone.getChoices(); for (const [index, result] of (await clone.getResults()).entries()) { @@ -66,11 +73,11 @@ async function main() { } } - await votingDelegation.transferOwnership(gnosisAddress); + await waitTx(votingDelegation.transferOwnership(gnosisAddress)); console.log('Transferred voting delegation contract ownership to ' + gnosisAddress); - await ballotImplementation.renounceOwnership(); + await waitTx(ballotImplementation.renounceOwnership()); console.log('Renounced to ballot implementation ownership.'); - await ballotFactory.transferOwnership(gnosisAddress); + await waitTx(ballotFactory.transferOwnership(gnosisAddress)); console.log('Transferred ballot factory contract ownership to ' + gnosisAddress); console.log('Deployment cost : ' + formatUnits(avaxBalance.sub(await deployer.getBalance()), 18)); diff --git a/scripts/test.ts b/scripts/test.ts new file mode 100644 index 0000000..095907d --- /dev/null +++ b/scripts/test.ts @@ -0,0 +1,66 @@ +import { ethers, network } from 'hardhat'; +import { formatUnits, parseUnits } from '@ethersproject/units'; +import { DeepSquare__factory } from '../typings/factories/contracts/DeepSquare__factory'; +import { BallotFactory__factory } from '../typings/factories/contracts/voting/BallotFactory__factory'; +import { Ballot__factory } from '../typings/factories/contracts/voting/Ballot__factory'; +import { VotingDelegation__factory } from '../typings/factories/contracts/voting/VotingDelegation__factory'; +import waitTx from "../lib/waitTx"; +import {BigNumber} from "@ethersproject/bignumber"; + +type NetworkName = 'hardhat' | 'mainnet' | 'fuji'; +type ContractName = 'DeepSquare'; + +const addresses: Record> = { + DeepSquare: { + hardhat: '0xf192cae2e7cd4048bea307368015e3647c49338e', + mainnet: '0xf192cae2e7cd4048bea307368015e3647c49338e', + fuji: '0x270D1399744874C72f95873eB9606172D155669D', + }, +}; + +async function main() { + const networkName = network.name as NetworkName; + const [deployer, dpsHolder, ...accounts] = await ethers.getSigners(); + + const DeepSquareFactory = new DeepSquare__factory(deployer); + const DeepSquare = DeepSquareFactory.attach(addresses.DeepSquare[networkName]); + + const gnosisAddress = await DeepSquare.owner(); + + const proxy = new VotingDelegation__factory(deployer).attach('0x0C7a9a7eBd57Fc9e0afbeed697CF1eFa0C5B6F79'); + + console.log('deployer:', deployer.address); + console.log('gnosis:', gnosisAddress); + const ballotFactory = await new BallotFactory__factory(deployer).attach('0x6f872A3579C7Cf1439Ef25e53E9Cd00f2bB4B13F'); + console.log('ballotFactory:', ballotFactory.address); + const ballot = await new Ballot__factory(deployer).attach('0x1CFC93D985844673cd9298A6725Ac9B0EE57Cca5'); + // + // console.log('Vote is', (await ballot.closed()) ? 'closed' : 'open'); + // + // console.log( + // 'Voter has', + // (await proxy.hasDelegated(deployer.address, await ballot.topic())) + // ? 'delegated his vote' + // : 'not delegated his vote', + // ); + // + // console.log(await ballot.getChoices()); + // + // console.log('Voter has', (await DeepSquare.balanceOf(deployer.address)).div(1e9).div(1e9).toString(), 'DPS'); + // + // + // await waitTx(ballot.vote(BigNumber.from(0))); + + // await waitTx( + // ballotFactory + // .connect(dpsHolder) + // .createBallot('Is the test deployment working properly ?', 'testing', ['Yes', 'No']), + // ); + console.log(await ballot.getResults()); + // console.log(await ballot.getVote(deployer.address)); +} + +main().catch((e) => { + console.error(e); + process.exit(1); +}); diff --git a/test/Ballot.spec.ts b/test/Ballot.spec.ts index 4bc6818..bfa3ee4 100644 --- a/test/Ballot.spec.ts +++ b/test/Ballot.spec.ts @@ -24,7 +24,7 @@ describe('Ballot', () => { ({ owner, accounts, DPS, agentDPS } = await setup()); ({ votingDelegation, ballotFactory } = await setupVoting(owner, DPS)); - ballot = await new ExposedBallot__factory(owner).deploy(); + ballot = await new ExposedBallot__factory(owner).deploy(DPS.address, votingDelegation.address); }); describe('init', () => { diff --git a/test/testing/setupVoting.ts b/test/testing/setupVoting.ts index d23b8ed..8f42346 100644 --- a/test/testing/setupVoting.ts +++ b/test/testing/setupVoting.ts @@ -15,7 +15,7 @@ interface SetupVotingOutput { export default async function setupVoting(owner: SignerWithAddress, DPS: DeepSquare): Promise { const votingDelegation = await new VotingDelegation__factory(owner).deploy(DPS.address); - const ballotImplementation = await new Ballot__factory(owner).deploy(); + const ballotImplementation = await new Ballot__factory(owner).deploy(DPS.address, votingDelegation.address); const ballotFactory = await new BallotFactory__factory(owner).deploy(DPS.address, ballotImplementation.address); return { diff --git a/typings/contracts/voting/Ballot.ts b/typings/contracts/voting/Ballot.ts index 51a72a5..9c6ce7e 100644 --- a/typings/contracts/voting/Ballot.ts +++ b/typings/contracts/voting/Ballot.ts @@ -32,20 +32,21 @@ export interface BallotInterface extends utils.Interface { "choices(uint256)": FunctionFragment; "close()": FunctionFragment; "closed()": FunctionFragment; + "description()": FunctionFragment; "factory()": FunctionFragment; "getChoices()": FunctionFragment; - "getResults()": FunctionFragment; - "getVote()": FunctionFragment; + "getVote(address)": FunctionFragment; "hasVoted(address)": FunctionFragment; - "init(address,address,address,string,string,string[])": FunctionFragment; + "init(address,address,address,string,string,string,string[])": FunctionFragment; + "isValidChoice(bytes32)": FunctionFragment; "owner()": FunctionFragment; "proxy()": FunctionFragment; "renounceOwnership()": FunctionFragment; - "resultStorage(uint256)": FunctionFragment; - "subject()": FunctionFragment; + "resultStorage(bytes32)": FunctionFragment; + "title()": FunctionFragment; "topic()": FunctionFragment; "transferOwnership(address)": FunctionFragment; - "vote(uint32)": FunctionFragment; + "vote(string)": FunctionFragment; }; getFunction( @@ -54,17 +55,18 @@ export interface BallotInterface extends utils.Interface { | "choices" | "close" | "closed" + | "description" | "factory" | "getChoices" - | "getResults" | "getVote" | "hasVoted" | "init" + | "isValidChoice" | "owner" | "proxy" | "renounceOwnership" | "resultStorage" - | "subject" + | "title" | "topic" | "transferOwnership" | "vote" @@ -77,20 +79,24 @@ export interface BallotInterface extends utils.Interface { ): string; encodeFunctionData(functionFragment: "close", values?: undefined): string; encodeFunctionData(functionFragment: "closed", values?: undefined): string; - encodeFunctionData(functionFragment: "factory", values?: undefined): string; encodeFunctionData( - functionFragment: "getChoices", + functionFragment: "description", values?: undefined ): string; + encodeFunctionData(functionFragment: "factory", values?: undefined): string; encodeFunctionData( - functionFragment: "getResults", + functionFragment: "getChoices", values?: undefined ): string; - encodeFunctionData(functionFragment: "getVote", values?: undefined): string; + encodeFunctionData(functionFragment: "getVote", values: [string]): string; encodeFunctionData(functionFragment: "hasVoted", values: [string]): string; encodeFunctionData( functionFragment: "init", - values: [string, string, string, string, string, string[]] + values: [string, string, string, string, string, string, string[]] + ): string; + encodeFunctionData( + functionFragment: "isValidChoice", + values: [BytesLike] ): string; encodeFunctionData(functionFragment: "owner", values?: undefined): string; encodeFunctionData(functionFragment: "proxy", values?: undefined): string; @@ -100,26 +106,33 @@ export interface BallotInterface extends utils.Interface { ): string; encodeFunctionData( functionFragment: "resultStorage", - values: [BigNumberish] + values: [BytesLike] ): string; - encodeFunctionData(functionFragment: "subject", values?: undefined): string; + encodeFunctionData(functionFragment: "title", values?: undefined): string; encodeFunctionData(functionFragment: "topic", values?: undefined): string; encodeFunctionData( functionFragment: "transferOwnership", values: [string] ): string; - encodeFunctionData(functionFragment: "vote", values: [BigNumberish]): string; + encodeFunctionData(functionFragment: "vote", values: [string]): string; decodeFunctionResult(functionFragment: "DPS", data: BytesLike): Result; decodeFunctionResult(functionFragment: "choices", data: BytesLike): Result; decodeFunctionResult(functionFragment: "close", data: BytesLike): Result; decodeFunctionResult(functionFragment: "closed", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "description", + data: BytesLike + ): Result; decodeFunctionResult(functionFragment: "factory", data: BytesLike): Result; decodeFunctionResult(functionFragment: "getChoices", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getResults", data: BytesLike): Result; decodeFunctionResult(functionFragment: "getVote", data: BytesLike): Result; decodeFunctionResult(functionFragment: "hasVoted", data: BytesLike): Result; decodeFunctionResult(functionFragment: "init", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "isValidChoice", + data: BytesLike + ): Result; decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; decodeFunctionResult(functionFragment: "proxy", data: BytesLike): Result; decodeFunctionResult( @@ -130,7 +143,7 @@ export interface BallotInterface extends utils.Interface { functionFragment: "resultStorage", data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "subject", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "title", data: BytesLike): Result; decodeFunctionResult(functionFragment: "topic", data: BytesLike): Result; decodeFunctionResult( functionFragment: "transferOwnership", @@ -194,13 +207,13 @@ export interface Ballot extends BaseContract { closed(overrides?: CallOverrides): Promise<[boolean]>; + description(overrides?: CallOverrides): Promise<[string]>; + factory(overrides?: CallOverrides): Promise<[string]>; getChoices(overrides?: CallOverrides): Promise<[string[]]>; - getResults(overrides?: CallOverrides): Promise<[BigNumber[]]>; - - getVote(overrides?: CallOverrides): Promise<[number]>; + getVote(voter: string, overrides?: CallOverrides): Promise<[string]>; hasVoted(voter: string, overrides?: CallOverrides): Promise<[boolean]>; @@ -208,12 +221,18 @@ export interface Ballot extends BaseContract { _DPS: string, _proxy: string, _factory: string, - _subject: string, + _title: string, + _description: string, _topic: string, _choices: string[], overrides?: Overrides & { from?: string | Promise } ): Promise; + isValidChoice( + choiceHash: BytesLike, + overrides?: CallOverrides + ): Promise<[boolean]>; + owner(overrides?: CallOverrides): Promise<[string]>; proxy(overrides?: CallOverrides): Promise<[string]>; @@ -223,11 +242,11 @@ export interface Ballot extends BaseContract { ): Promise; resultStorage( - arg0: BigNumberish, + arg0: BytesLike, overrides?: CallOverrides ): Promise<[BigNumber]>; - subject(overrides?: CallOverrides): Promise<[string]>; + title(overrides?: CallOverrides): Promise<[string]>; topic(overrides?: CallOverrides): Promise<[string]>; @@ -237,7 +256,7 @@ export interface Ballot extends BaseContract { ): Promise; vote( - choiceIndex: BigNumberish, + choice: string, overrides?: Overrides & { from?: string | Promise } ): Promise; }; @@ -252,13 +271,13 @@ export interface Ballot extends BaseContract { closed(overrides?: CallOverrides): Promise; + description(overrides?: CallOverrides): Promise; + factory(overrides?: CallOverrides): Promise; getChoices(overrides?: CallOverrides): Promise; - getResults(overrides?: CallOverrides): Promise; - - getVote(overrides?: CallOverrides): Promise; + getVote(voter: string, overrides?: CallOverrides): Promise; hasVoted(voter: string, overrides?: CallOverrides): Promise; @@ -266,12 +285,18 @@ export interface Ballot extends BaseContract { _DPS: string, _proxy: string, _factory: string, - _subject: string, + _title: string, + _description: string, _topic: string, _choices: string[], overrides?: Overrides & { from?: string | Promise } ): Promise; + isValidChoice( + choiceHash: BytesLike, + overrides?: CallOverrides + ): Promise; + owner(overrides?: CallOverrides): Promise; proxy(overrides?: CallOverrides): Promise; @@ -280,12 +305,9 @@ export interface Ballot extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - resultStorage( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; + resultStorage(arg0: BytesLike, overrides?: CallOverrides): Promise; - subject(overrides?: CallOverrides): Promise; + title(overrides?: CallOverrides): Promise; topic(overrides?: CallOverrides): Promise; @@ -295,7 +317,7 @@ export interface Ballot extends BaseContract { ): Promise; vote( - choiceIndex: BigNumberish, + choice: string, overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -308,13 +330,13 @@ export interface Ballot extends BaseContract { closed(overrides?: CallOverrides): Promise; + description(overrides?: CallOverrides): Promise; + factory(overrides?: CallOverrides): Promise; getChoices(overrides?: CallOverrides): Promise; - getResults(overrides?: CallOverrides): Promise; - - getVote(overrides?: CallOverrides): Promise; + getVote(voter: string, overrides?: CallOverrides): Promise; hasVoted(voter: string, overrides?: CallOverrides): Promise; @@ -322,12 +344,18 @@ export interface Ballot extends BaseContract { _DPS: string, _proxy: string, _factory: string, - _subject: string, + _title: string, + _description: string, _topic: string, _choices: string[], overrides?: CallOverrides ): Promise; + isValidChoice( + choiceHash: BytesLike, + overrides?: CallOverrides + ): Promise; + owner(overrides?: CallOverrides): Promise; proxy(overrides?: CallOverrides): Promise; @@ -335,11 +363,11 @@ export interface Ballot extends BaseContract { renounceOwnership(overrides?: CallOverrides): Promise; resultStorage( - arg0: BigNumberish, + arg0: BytesLike, overrides?: CallOverrides ): Promise; - subject(overrides?: CallOverrides): Promise; + title(overrides?: CallOverrides): Promise; topic(overrides?: CallOverrides): Promise; @@ -348,7 +376,7 @@ export interface Ballot extends BaseContract { overrides?: CallOverrides ): Promise; - vote(choiceIndex: BigNumberish, overrides?: CallOverrides): Promise; + vote(choice: string, overrides?: CallOverrides): Promise; }; filters: { @@ -373,13 +401,13 @@ export interface Ballot extends BaseContract { closed(overrides?: CallOverrides): Promise; + description(overrides?: CallOverrides): Promise; + factory(overrides?: CallOverrides): Promise; getChoices(overrides?: CallOverrides): Promise; - getResults(overrides?: CallOverrides): Promise; - - getVote(overrides?: CallOverrides): Promise; + getVote(voter: string, overrides?: CallOverrides): Promise; hasVoted(voter: string, overrides?: CallOverrides): Promise; @@ -387,12 +415,18 @@ export interface Ballot extends BaseContract { _DPS: string, _proxy: string, _factory: string, - _subject: string, + _title: string, + _description: string, _topic: string, _choices: string[], overrides?: Overrides & { from?: string | Promise } ): Promise; + isValidChoice( + choiceHash: BytesLike, + overrides?: CallOverrides + ): Promise; + owner(overrides?: CallOverrides): Promise; proxy(overrides?: CallOverrides): Promise; @@ -402,11 +436,11 @@ export interface Ballot extends BaseContract { ): Promise; resultStorage( - arg0: BigNumberish, + arg0: BytesLike, overrides?: CallOverrides ): Promise; - subject(overrides?: CallOverrides): Promise; + title(overrides?: CallOverrides): Promise; topic(overrides?: CallOverrides): Promise; @@ -416,7 +450,7 @@ export interface Ballot extends BaseContract { ): Promise; vote( - choiceIndex: BigNumberish, + choice: string, overrides?: Overrides & { from?: string | Promise } ): Promise; }; @@ -435,13 +469,16 @@ export interface Ballot extends BaseContract { closed(overrides?: CallOverrides): Promise; + description(overrides?: CallOverrides): Promise; + factory(overrides?: CallOverrides): Promise; getChoices(overrides?: CallOverrides): Promise; - getResults(overrides?: CallOverrides): Promise; - - getVote(overrides?: CallOverrides): Promise; + getVote( + voter: string, + overrides?: CallOverrides + ): Promise; hasVoted( voter: string, @@ -452,12 +489,18 @@ export interface Ballot extends BaseContract { _DPS: string, _proxy: string, _factory: string, - _subject: string, + _title: string, + _description: string, _topic: string, _choices: string[], overrides?: Overrides & { from?: string | Promise } ): Promise; + isValidChoice( + choiceHash: BytesLike, + overrides?: CallOverrides + ): Promise; + owner(overrides?: CallOverrides): Promise; proxy(overrides?: CallOverrides): Promise; @@ -467,11 +510,11 @@ export interface Ballot extends BaseContract { ): Promise; resultStorage( - arg0: BigNumberish, + arg0: BytesLike, overrides?: CallOverrides ): Promise; - subject(overrides?: CallOverrides): Promise; + title(overrides?: CallOverrides): Promise; topic(overrides?: CallOverrides): Promise; @@ -481,7 +524,7 @@ export interface Ballot extends BaseContract { ): Promise; vote( - choiceIndex: BigNumberish, + choice: string, overrides?: Overrides & { from?: string | Promise } ): Promise; }; diff --git a/typings/contracts/voting/BallotFactory.ts b/typings/contracts/voting/BallotFactory.ts index a300dd7..1dfc56d 100644 --- a/typings/contracts/voting/BallotFactory.ts +++ b/typings/contracts/voting/BallotFactory.ts @@ -32,7 +32,7 @@ export interface BallotFactoryInterface extends utils.Interface { "activeBallotAddresses(uint256)": FunctionFragment; "archiveBallot()": FunctionFragment; "archivedBallotAddresses(uint256)": FunctionFragment; - "createBallot(string,string,string[])": FunctionFragment; + "createBallot(string,string,string,string[])": FunctionFragment; "getActiveBallots()": FunctionFragment; "getArchivedBallots()": FunctionFragment; "implementationAddress()": FunctionFragment; @@ -73,7 +73,7 @@ export interface BallotFactoryInterface extends utils.Interface { ): string; encodeFunctionData( functionFragment: "createBallot", - values: [string, string, string[]] + values: [string, string, string, string[]] ): string; encodeFunctionData( functionFragment: "getActiveBallots", @@ -216,7 +216,8 @@ export interface BallotFactory extends BaseContract { ): Promise<[string]>; createBallot( - subject: string, + title: string, + description: string, topic: string, choices: string[], overrides?: Overrides & { from?: string | Promise } @@ -262,7 +263,8 @@ export interface BallotFactory extends BaseContract { ): Promise; createBallot( - subject: string, + title: string, + description: string, topic: string, choices: string[], overrides?: Overrides & { from?: string | Promise } @@ -306,7 +308,8 @@ export interface BallotFactory extends BaseContract { ): Promise; createBallot( - subject: string, + title: string, + description: string, topic: string, choices: string[], overrides?: CallOverrides @@ -365,7 +368,8 @@ export interface BallotFactory extends BaseContract { ): Promise; createBallot( - subject: string, + title: string, + description: string, topic: string, choices: string[], overrides?: Overrides & { from?: string | Promise } @@ -412,7 +416,8 @@ export interface BallotFactory extends BaseContract { ): Promise; createBallot( - subject: string, + title: string, + description: string, topic: string, choices: string[], overrides?: Overrides & { from?: string | Promise } diff --git a/typings/contracts/voting/VotingDelegation.ts b/typings/contracts/voting/VotingDelegation.ts index 3ac6ee7..89fb021 100644 --- a/typings/contracts/voting/VotingDelegation.ts +++ b/typings/contracts/voting/VotingDelegation.ts @@ -28,11 +28,10 @@ import type { export interface VotingDelegationInterface extends utils.Interface { functions: { "DPS()": FunctionFragment; - "ballotFactory()": FunctionFragment; "delegate(address,string)": FunctionFragment; - "delegationAmount(address,string)": FunctionFragment; + "delegationAmount(address,bytes32)": FunctionFragment; "delegators(address,string)": FunctionFragment; - "hasDelegated(address,string)": FunctionFragment; + "hasDelegated(address,bytes32)": FunctionFragment; "owner()": FunctionFragment; "renounceOwnership()": FunctionFragment; "representative(address,string)": FunctionFragment; @@ -42,7 +41,6 @@ export interface VotingDelegationInterface extends utils.Interface { getFunction( nameOrSignatureOrTopic: | "DPS" - | "ballotFactory" | "delegate" | "delegationAmount" | "delegators" @@ -54,17 +52,13 @@ export interface VotingDelegationInterface extends utils.Interface { ): FunctionFragment; encodeFunctionData(functionFragment: "DPS", values?: undefined): string; - encodeFunctionData( - functionFragment: "ballotFactory", - values?: undefined - ): string; encodeFunctionData( functionFragment: "delegate", values: [string, string] ): string; encodeFunctionData( functionFragment: "delegationAmount", - values: [string, string] + values: [string, BytesLike] ): string; encodeFunctionData( functionFragment: "delegators", @@ -72,7 +66,7 @@ export interface VotingDelegationInterface extends utils.Interface { ): string; encodeFunctionData( functionFragment: "hasDelegated", - values: [string, string] + values: [string, BytesLike] ): string; encodeFunctionData(functionFragment: "owner", values?: undefined): string; encodeFunctionData( @@ -89,10 +83,6 @@ export interface VotingDelegationInterface extends utils.Interface { ): string; decodeFunctionResult(functionFragment: "DPS", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "ballotFactory", - data: BytesLike - ): Result; decodeFunctionResult(functionFragment: "delegate", data: BytesLike): Result; decodeFunctionResult( functionFragment: "delegationAmount", @@ -165,8 +155,6 @@ export interface VotingDelegation extends BaseContract { functions: { DPS(overrides?: CallOverrides): Promise<[string]>; - ballotFactory(overrides?: CallOverrides): Promise<[string]>; - delegate( to: string, topic: string, @@ -175,7 +163,7 @@ export interface VotingDelegation extends BaseContract { delegationAmount( voter: string, - topic: string, + topic: BytesLike, overrides?: CallOverrides ): Promise<[BigNumber]>; @@ -187,7 +175,7 @@ export interface VotingDelegation extends BaseContract { hasDelegated( voter: string, - topic: string, + topic: BytesLike, overrides?: CallOverrides ): Promise<[boolean]>; @@ -211,8 +199,6 @@ export interface VotingDelegation extends BaseContract { DPS(overrides?: CallOverrides): Promise; - ballotFactory(overrides?: CallOverrides): Promise; - delegate( to: string, topic: string, @@ -221,7 +207,7 @@ export interface VotingDelegation extends BaseContract { delegationAmount( voter: string, - topic: string, + topic: BytesLike, overrides?: CallOverrides ): Promise; @@ -233,7 +219,7 @@ export interface VotingDelegation extends BaseContract { hasDelegated( voter: string, - topic: string, + topic: BytesLike, overrides?: CallOverrides ): Promise; @@ -257,8 +243,6 @@ export interface VotingDelegation extends BaseContract { callStatic: { DPS(overrides?: CallOverrides): Promise; - ballotFactory(overrides?: CallOverrides): Promise; - delegate( to: string, topic: string, @@ -267,7 +251,7 @@ export interface VotingDelegation extends BaseContract { delegationAmount( voter: string, - topic: string, + topic: BytesLike, overrides?: CallOverrides ): Promise; @@ -279,7 +263,7 @@ export interface VotingDelegation extends BaseContract { hasDelegated( voter: string, - topic: string, + topic: BytesLike, overrides?: CallOverrides ): Promise; @@ -313,8 +297,6 @@ export interface VotingDelegation extends BaseContract { estimateGas: { DPS(overrides?: CallOverrides): Promise; - ballotFactory(overrides?: CallOverrides): Promise; - delegate( to: string, topic: string, @@ -323,7 +305,7 @@ export interface VotingDelegation extends BaseContract { delegationAmount( voter: string, - topic: string, + topic: BytesLike, overrides?: CallOverrides ): Promise; @@ -335,7 +317,7 @@ export interface VotingDelegation extends BaseContract { hasDelegated( voter: string, - topic: string, + topic: BytesLike, overrides?: CallOverrides ): Promise; @@ -360,8 +342,6 @@ export interface VotingDelegation extends BaseContract { populateTransaction: { DPS(overrides?: CallOverrides): Promise; - ballotFactory(overrides?: CallOverrides): Promise; - delegate( to: string, topic: string, @@ -370,7 +350,7 @@ export interface VotingDelegation extends BaseContract { delegationAmount( voter: string, - topic: string, + topic: BytesLike, overrides?: CallOverrides ): Promise; @@ -382,7 +362,7 @@ export interface VotingDelegation extends BaseContract { hasDelegated( voter: string, - topic: string, + topic: BytesLike, overrides?: CallOverrides ): Promise; diff --git a/typings/factories/contracts/voting/BallotFactory__factory.ts b/typings/factories/contracts/voting/BallotFactory__factory.ts index 80f9934..7d41473 100644 --- a/typings/factories/contracts/voting/BallotFactory__factory.ts +++ b/typings/factories/contracts/voting/BallotFactory__factory.ts @@ -119,7 +119,12 @@ const _abi = [ inputs: [ { internalType: "string", - name: "subject", + name: "title", + type: "string", + }, + { + internalType: "string", + name: "description", type: "string", }, { @@ -226,7 +231,7 @@ const _abi = [ ]; const _bytecode = - "0x608060405234801561001057600080fd5b5060405162000f0b38038062000f0b83398101604081905261003191610190565b61003a33610128565b6001600160a01b03821661009b576040805162461bcd60e51b815260206004820152602481019190915260008051602062000ecb833981519152604482015260008051602062000eeb83398151915260648201526084015b60405180910390fd5b6001600160a01b0381166100f7576040805162461bcd60e51b815260206004820152602481019190915260008051602062000ecb833981519152604482015260008051602062000eeb8339815191526064820152608401610092565b600180546001600160a01b039384166001600160a01b031991821617909155600480549290931691161790556101ca565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461018d57600080fd5b50565b600080604083850312156101a357600080fd5b82516101ae81610178565b60208401519092506101bf81610178565b809150509250929050565b610cf180620001da6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063b97a231911610071578063b97a231914610129578063d62d80891461013c578063de78c3341461014f578063ecade2f014610162578063ef4e06ec14610175578063f2fde38b1461018857600080fd5b806327cbb12f146100b95780635b9c68d3146100e95780635d5a9623146100fe578063715018a614610108578063795e2415146101105780638da5cb5b14610118575b600080fd5b6100cc6100c736600461089d565b61019b565b6040516001600160a01b0390911681526020015b60405180910390f35b6100f16101c5565b6040516100e091906108b6565b610106610227565b005b610106610388565b6100f16103c7565b6000546001600160a01b03166100cc565b6004546100cc906001600160a01b031681565b61010661014a3660046109ba565b610427565b6100cc61015d36600461089d565b61063b565b610106610170366004610ad9565b61064b565b6001546100cc906001600160a01b031681565b610106610196366004610ad9565b610715565b600281815481106101ab57600080fd5b6000918252602090912001546001600160a01b0316905081565b6060600380548060200260200160405190810160405280929190818152602001828054801561021d57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116101ff575b5050505050905090565b6000805b60025481101561038457336001600160a01b03166002828154811061025257610252610afd565b6000918252602090912001546001600160a01b03161415610372576001915060036002828154811061028657610286610afd565b6000918252602080832090910154835460018181018655948452919092200180546001600160a01b0319166001600160a01b039092169190911790556002805490916102d191610b29565b815481106102e1576102e1610afd565b600091825260209091200154600280546001600160a01b03909216918390811061030d5761030d610afd565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600280548061034c5761034c610b40565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061037c81610b56565b91505061022b565b5050565b6000546001600160a01b031633146103bb5760405162461bcd60e51b81526004016103b290610b71565b60405180910390fd5b6103c560006107b0565b565b6060600280548060200260200160405190810160405280929190818152602001828054801561021d576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116101ff575050505050905090565b6000546001600160a01b031633146104515760405162461bcd60e51b81526004016103b290610b71565b6004546001600160a01b0316600061046882610800565b9050806001600160a01b0316631917d6c0836001600160a01b031663ef4e06ec6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104b257600080fd5b505afa1580156104c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ea9190610ba6565b846001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b15801561052357600080fd5b505afa158015610537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055b9190610ba6565b308989896040518763ffffffff1660e01b815260040161058096959493929190610c10565b600060405180830381600087803b15801561059a57600080fd5b505af11580156105ae573d6000803e3d6000fd5b5050600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040519081527f165f4a0bebf649c196135ba0519a9a51da33d33a9e4d096b71050c2c97ec670f9250602001905060405180910390a15050505050565b600381815481106101ab57600080fd5b6000546001600160a01b031633146106755760405162461bcd60e51b81526004016103b290610b71565b6001600160a01b0381166106f3576040805162461bcd60e51b81526020600482015260248101919091527f42616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616460448201527f64726573732073686f756c64206e6f74206265207a65726f206164647265737360648201526084016103b2565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461073f5760405162461bcd60e51b81526004016103b290610b71565b6001600160a01b0381166107a45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b2565b6107ad816107b0565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b0381166108985760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b60448201526064016103b2565b919050565b6000602082840312156108af57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156108f75783516001600160a01b0316835292840192918401916001016108d2565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561094257610942610903565b604052919050565b600082601f83011261095b57600080fd5b813567ffffffffffffffff81111561097557610975610903565b610988601f8201601f1916602001610919565b81815284602083860101111561099d57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000606084860312156109cf57600080fd5b833567ffffffffffffffff808211156109e757600080fd5b6109f38783880161094a565b9450602091508186013581811115610a0a57600080fd5b610a168882890161094a565b945050604086013581811115610a2b57600080fd5b8601601f81018813610a3c57600080fd5b803582811115610a4e57610a4e610903565b8060051b610a5d858201610919565b918252828101850191858101908b841115610a7757600080fd5b86850192505b83831015610ab357823586811115610a955760008081fd5b610aa38d898389010161094a565b8352509186019190860190610a7d565b809750505050505050509250925092565b6001600160a01b03811681146107ad57600080fd5b600060208284031215610aeb57600080fd5b8135610af681610ac4565b9392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015610b3b57610b3b610b13565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415610b6a57610b6a610b13565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215610bb857600080fd5b8151610af681610ac4565b6000815180845260005b81811015610be957602081850181015186830182015201610bcd565b81811115610bfb576000602083870101525b50601f01601f19169290920160200192915050565b600060018060a01b038089168352602081891681850152818816604085015260c06060850152610c4360c0850188610bc3565b91508382036080850152610c578287610bc3565b915083820360a08501528185518084528284019150828160051b85010183880160005b83811015610ca857601f19878403018552610c96838351610bc3565b94860194925090850190600101610c7a565b50909d9c5050505050505050505050505056fea264697066735822122063cc3d5b2f7cffeecde81dd79e3c578530e22d30a033ec774e48f12be1cddbf064736f6c6343000809003342616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616464726573732073686f756c64206e6f74206265207a65726f2061646472657373"; + "0x60806040523480156200001157600080fd5b5060405162000f5438038062000f5483398101604081905262000034916200019a565b6200003f3362000131565b6001600160a01b038216620000a1576040805162461bcd60e51b815260206004820152602481019190915260008051602062000f14833981519152604482015260008051602062000f3483398151915260648201526084015b60405180910390fd5b6001600160a01b038116620000ff576040805162461bcd60e51b815260206004820152602481019190915260008051602062000f14833981519152604482015260008051602062000f34833981519152606482015260840162000098565b600180546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055620001d9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200019757600080fd5b50565b60008060408385031215620001ae57600080fd5b8251620001bb8162000181565b6020840151909250620001ce8162000181565b809150509250929050565b610d2b80620001e96000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80638da5cb5b116100715780638da5cb5b1461012b578063b97a23191461013c578063de78c3341461014f578063ecade2f014610162578063ef4e06ec14610175578063f2fde38b1461018857600080fd5b806327cbb12f146100b95780634f3471fa146100e95780635b9c68d3146100fe5780635d5a962314610113578063715018a61461011b578063795e241514610123575b600080fd5b6100cc6100c73660046108a0565b61019b565b6040516001600160a01b0390911681526020015b60405180910390f35b6100fc6100f7366004610970565b6101c5565b005b6101066103e5565b6040516100e09190610a9c565b6100fc610447565b6100fc6105a8565b6101066105de565b6000546001600160a01b03166100cc565b6004546100cc906001600160a01b031681565b6100cc61015d3660046108a0565b61063e565b6100fc610170366004610afe565b61064e565b6001546100cc906001600160a01b031681565b6100fc610196366004610afe565b610718565b600281815481106101ab57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146101f85760405162461bcd60e51b81526004016101ef90610b22565b60405180910390fd5b6004546001600160a01b0316600061020f826107b3565b9050806001600160a01b031663f3831ec4836001600160a01b031663ef4e06ec6040518163ffffffff1660e01b815260040160206040518083038186803b15801561025957600080fd5b505afa15801561026d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102919190610b57565b846001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b1580156102ca57600080fd5b505afa1580156102de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103029190610b57565b308a8a8a8a6040518863ffffffff1660e01b81526004016103299796959493929190610bc1565b600060405180830381600087803b15801561034357600080fd5b505af1158015610357573d6000803e3d6000fd5b5050600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040519081527f165f4a0bebf649c196135ba0519a9a51da33d33a9e4d096b71050c2c97ec670f9250602001905060405180910390a1505050505050565b6060600380548060200260200160405190810160405280929190818152602001828054801561043d57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161041f575b5050505050905090565b6000805b6002548110156105a457336001600160a01b03166002828154811061047257610472610c81565b6000918252602090912001546001600160a01b0316141561059257600191506003600282815481106104a6576104a6610c81565b6000918252602080832090910154835460018181018655948452919092200180546001600160a01b0319166001600160a01b039092169190911790556002805490916104f191610cad565b8154811061050157610501610c81565b600091825260209091200154600280546001600160a01b03909216918390811061052d5761052d610c81565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600280548061056c5761056c610cc4565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061059c81610cda565b91505061044b565b5050565b6000546001600160a01b031633146105d25760405162461bcd60e51b81526004016101ef90610b22565b6105dc6000610850565b565b6060600280548060200260200160405190810160405280929190818152602001828054801561043d576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161041f575050505050905090565b600381815481106101ab57600080fd5b6000546001600160a01b031633146106785760405162461bcd60e51b81526004016101ef90610b22565b6001600160a01b0381166106f6576040805162461bcd60e51b81526020600482015260248101919091527f42616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616460448201527f64726573732073686f756c64206e6f74206265207a65726f206164647265737360648201526084016101ef565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146107425760405162461bcd60e51b81526004016101ef90610b22565b6001600160a01b0381166107a75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101ef565b6107b081610850565b50565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b03811661084b5760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b60448201526064016101ef565b919050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108b257600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156108f8576108f86108b9565b604052919050565b600082601f83011261091157600080fd5b813567ffffffffffffffff81111561092b5761092b6108b9565b61093e601f8201601f19166020016108cf565b81815284602083860101111561095357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561098657600080fd5b843567ffffffffffffffff8082111561099e57600080fd5b6109aa88838901610900565b95506020915081870135818111156109c157600080fd5b6109cd89828a01610900565b9550506040870135818111156109e257600080fd5b6109ee89828a01610900565b945050606087013581811115610a0357600080fd5b8701601f81018913610a1457600080fd5b803582811115610a2657610a266108b9565b8060051b610a358582016108cf565b918252828101850191858101908c841115610a4f57600080fd5b86850192505b83831015610a8b57823586811115610a6d5760008081fd5b610a7b8e8983890101610900565b8352509186019190860190610a55565b999c989b5096995050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610add5783516001600160a01b031683529284019291840191600101610ab8565b50909695505050505050565b6001600160a01b03811681146107b057600080fd5b600060208284031215610b1057600080fd5b8135610b1b81610ae9565b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215610b6957600080fd5b8151610b1b81610ae9565b6000815180845260005b81811015610b9a57602081850181015186830182015201610b7e565b81811115610bac576000602083870101525b50601f01601f19169290920160200192915050565b600060018060a01b03808a1683526020818a1681850152818916604085015260e06060850152610bf460e0850189610b74565b91508382036080850152610c088288610b74565b915083820360a0850152610c1c8287610b74565b915083820360c08501528185518084528284019150828160051b85010183880160005b83811015610c6d57601f19878403018552610c5b838351610b74565b94860194925090850190600101610c3f565b50909e9d5050505050505050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015610cbf57610cbf610c97565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415610cee57610cee610c97565b506001019056fea2646970667358221220c9c5766e47dfe5e0a2a33a33d2e659ff990bacc35e8f16b456556049aa5185f764736f6c6343000809003342616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616464726573732073686f756c64206e6f74206265207a65726f2061646472657373"; type BallotFactoryConstructorParams = | [signer?: Signer] diff --git a/typings/factories/contracts/voting/Ballot__factory.ts b/typings/factories/contracts/voting/Ballot__factory.ts index 2b18430..f3bc887 100644 --- a/typings/factories/contracts/voting/Ballot__factory.ts +++ b/typings/factories/contracts/voting/Ballot__factory.ts @@ -6,6 +6,22 @@ import type { Provider, TransactionRequest } from "@ethersproject/providers"; import type { Ballot, BallotInterface } from "../../../contracts/voting/Ballot"; const _abi = [ + { + inputs: [ + { + internalType: "contract IERC20Metadata", + name: "_DPS", + type: "address", + }, + { + internalType: "contract VotingDelegation", + name: "_proxy", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, { anonymous: false, inputs: [ @@ -49,9 +65,9 @@ const _abi = [ name: "choices", outputs: [ { - internalType: "string", + internalType: "bytes32", name: "", - type: "string", + type: "bytes32", }, ], stateMutability: "view", @@ -79,12 +95,12 @@ const _abi = [ }, { inputs: [], - name: "factory", + name: "description", outputs: [ { - internalType: "contract BallotFactory", + internalType: "bytes32", name: "", - type: "address", + type: "bytes32", }, ], stateMutability: "view", @@ -92,12 +108,12 @@ const _abi = [ }, { inputs: [], - name: "getChoices", + name: "factory", outputs: [ { - internalType: "string[]", + internalType: "contract BallotFactory", name: "", - type: "string[]", + type: "address", }, ], stateMutability: "view", @@ -105,25 +121,31 @@ const _abi = [ }, { inputs: [], - name: "getResults", + name: "getChoices", outputs: [ { - internalType: "uint256[]", + internalType: "bytes32[]", name: "", - type: "uint256[]", + type: "bytes32[]", }, ], stateMutability: "view", type: "function", }, { - inputs: [], + inputs: [ + { + internalType: "address", + name: "voter", + type: "address", + }, + ], name: "getVote", outputs: [ { - internalType: "uint32", + internalType: "bytes32", name: "", - type: "uint32", + type: "bytes32", }, ], stateMutability: "view", @@ -167,7 +189,12 @@ const _abi = [ }, { internalType: "string", - name: "_subject", + name: "_title", + type: "string", + }, + { + internalType: "string", + name: "_description", type: "string", }, { @@ -186,6 +213,25 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, + { + inputs: [ + { + internalType: "bytes32", + name: "choiceHash", + type: "bytes32", + }, + ], + name: "isValidChoice", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [], name: "owner", @@ -222,9 +268,9 @@ const _abi = [ { inputs: [ { - internalType: "uint256", + internalType: "bytes32", name: "", - type: "uint256", + type: "bytes32", }, ], name: "resultStorage", @@ -240,12 +286,12 @@ const _abi = [ }, { inputs: [], - name: "subject", + name: "title", outputs: [ { - internalType: "string", + internalType: "bytes32", name: "", - type: "string", + type: "bytes32", }, ], stateMutability: "view", @@ -256,9 +302,9 @@ const _abi = [ name: "topic", outputs: [ { - internalType: "string", + internalType: "bytes32", name: "", - type: "string", + type: "bytes32", }, ], stateMutability: "view", @@ -280,9 +326,9 @@ const _abi = [ { inputs: [ { - internalType: "uint32", - name: "choiceIndex", - type: "uint32", + internalType: "string", + name: "choice", + type: "string", }, ], name: "vote", @@ -293,7 +339,7 @@ const _abi = [ ]; const _bytecode = - "0x60a060405269054b40b1f852bda0000060805234801561001e57600080fd5b506100283361002d565b61007d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6080516115616100986000396000610add01526115616000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80638da5cb5b116100a2578063c45a015511610071578063c45a015514610261578063ec55688914610274578063ef4e06ec14610287578063f2fde38b1461029a578063f6fd7fde146102ad57600080fd5b80638da5cb5b1461020c5780639094c7631461023157806398c81bbf14610244578063bf63a5771461025957600080fd5b806343d726d6116100e957806343d726d6146101b95780634717f97c146101c157806359037b89146101d6578063597e1fb5146101f7578063715018a61461020457600080fd5b80630242f3511461011b57806309eef43e1461014b5780630a59a98c1461018f5780631917d6c0146101a4575b600080fd5b336000908152600a602052604090205463ffffffff1660405163ffffffff90911681526020015b60405180910390f35b61017f61015936600461101c565b6001600160a01b03166000908152600a6020526040902054640100000000900460ff1690565b6040519015158152602001610142565b6101976102c0565b604051610142919061108d565b6101b76101b2366004611157565b61034e565b005b6101b7610502565b6101c9610862565b604051610142919061129b565b6101e96101e43660046112df565b6108ba565b604051908152602001610142565b60055461017f9060ff1681565b6101b76108db565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610142565b6101b761023f3660046112f8565b610941565b61024c610c58565b604051610142919061131e565b610197610d31565b600354610219906001600160a01b031681565b600254610219906001600160a01b031681565b600154610219906001600160a01b031681565b6101b76102a836600461101c565b610d3e565b6101976102bb3660046112df565b610e09565b600480546102cd90611380565b80601f01602080910402602001604051908101604052809291908181526020018280546102f990611380565b80156103465780601f1061031b57610100808354040283529160200191610346565b820191906000526020600020905b81548152906001019060200180831161032957829003601f168201915b505050505081565b600054600160a81b900460ff1661037257600054600160a01b900460ff1615610376565b303b155b6103de5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b600054600160a81b900460ff16158015610408576000805461ffff60a01b191661010160a01b1790555b835161041b906004906020870190610e84565b50825161042f906006906020860190610e84565b506005805460ff19169055815161044d906007906020850190610f08565b5060075467ffffffffffffffff811115610469576104696110a0565b604051908082528060200260200182016040528015610492578160200160208202803683370190505b5080516104a791600891602090910190610f61565b50600180546001600160a01b03808a166001600160a01b03199283161790925560028054898416908316179055600380549288169290911691909117905580156104f9576000805460ff60a81b191690555b50505050505050565b600360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561055057600080fd5b505afa158015610564573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058891906113bb565b6001600160a01b0316336001600160a01b0316146105f45760405162461bcd60e51b8152602060048201526024808201527f566f74696e673a205265737472696374656420746f20666163746f7279206f776044820152633732b91760e11b60648201526084016103d5565b60055460ff16156106475760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e000060448201526064016103d5565b6005805460ff1916600117905560005b6009548110156107f757600060098281548110610676576106766113d8565b6000918252602090912001546002546040516302fbd00360e21b81526001600160a01b039283169350911690630bef400c906106b99084906006906004016113ee565b60206040518083038186803b1580156106d157600080fd5b505afa1580156106e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070991906114a7565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a082319060240160206040518083038186803b15801561074e57600080fd5b505afa158015610762573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078691906114a7565b61079091906114d6565b6001600160a01b0382166000908152600a602052604090205460088054909163ffffffff169081106107c4576107c46113d8565b9060005260206000200160008282546107dd91906114d6565b909155508291506107ef9050816114ee565b915050610657565b50600360009054906101000a90046001600160a01b03166001600160a01b0316635d5a96236040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561084857600080fd5b505af115801561085c573d6000803e3d6000fd5b50505050565b606060088054806020026020016040519081016040528092919081815260200182805480156108b057602002820191906000526020600020905b81548152602001906001019080831161089c575b5050505050905090565b600881815481106108ca57600080fd5b600091825260209091200154905081565b6000546001600160a01b031633146109355760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103d5565b61093f6000610e34565b565b60055460ff16156109945760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e0000000000000060448201526064016103d5565b60075463ffffffff8216106109f55760405162461bcd60e51b815260206004820152602160248201527f566f74696e673a2043686f69636520696e64657820697320746f6f20686967686044820152601760f91b60648201526084016103d5565b60025460405163442f655160e01b81526001600160a01b039091169063442f655190610a289033906006906004016113ee565b60206040518083038186803b158015610a4057600080fd5b505afa158015610a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a789190611509565b15610ac55760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e00000000000060448201526064016103d5565b6001546040516370a0823160e01b81523360048201527f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316906370a082319060240160206040518083038186803b158015610b2857600080fd5b505afa158015610b3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6091906114a7565b1015610bae5760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e0060448201526064016103d5565b336000908152600a6020526040902054640100000000900460ff16610c2f57336000818152600a60205260408120805464ff0000000019166401000000001790556009805460018101825591527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b03191690911790555b336000908152600a60205260409020805463ffffffff191663ffffffff92909216919091179055565b60606007805480602002602001604051908101604052809291908181526020016000905b82821015610d28578382906000526020600020018054610c9b90611380565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc790611380565b8015610d145780601f10610ce957610100808354040283529160200191610d14565b820191906000526020600020905b815481529060010190602001808311610cf757829003601f168201915b505050505081526020019060010190610c7c565b50505050905090565b600680546102cd90611380565b6000546001600160a01b03163314610d985760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103d5565b6001600160a01b038116610dfd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103d5565b610e0681610e34565b50565b60078181548110610e1957600080fd5b9060005260206000200160009150905080546102cd90611380565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054610e9090611380565b90600052602060002090601f016020900481019282610eb25760008555610ef8565b82601f10610ecb57805160ff1916838001178555610ef8565b82800160010185558215610ef8579182015b82811115610ef8578251825591602001919060010190610edd565b50610f04929150610f9b565b5090565b828054828255906000526020600020908101928215610f55579160200282015b82811115610f555782518051610f45918491602090910190610e84565b5091602001919060010190610f28565b50610f04929150610fb0565b828054828255906000526020600020908101928215610ef85791602002820182811115610ef8578251825591602001919060010190610edd565b5b80821115610f045760008155600101610f9c565b80821115610f04576000610fc48282610fcd565b50600101610fb0565b508054610fd990611380565b6000825580601f10610fe9575050565b601f016020900490600052602060002090810190610e069190610f9b565b6001600160a01b0381168114610e0657600080fd5b60006020828403121561102e57600080fd5b813561103981611007565b9392505050565b6000815180845260005b818110156110665760208185018101518683018201520161104a565b81811115611078576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006110396020830184611040565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156110df576110df6110a0565b604052919050565b600082601f8301126110f857600080fd5b813567ffffffffffffffff811115611112576111126110a0565b611125601f8201601f19166020016110b6565b81815284602083860101111561113a57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561117057600080fd5b61117a8735611007565b8635955060208088013561118d81611007565b9550604088013561119d81611007565b9450606088013567ffffffffffffffff808211156111ba57600080fd5b6111c68b838c016110e7565b955060808a01359150808211156111dc57600080fd5b6111e88b838c016110e7565b945060a08a01359150808211156111fe57600080fd5b818a0191508a601f83011261121257600080fd5b813581811115611224576112246110a0565b8060051b6112338582016110b6565b918252838101850191858101908e84111561124d57600080fd5b86860192505b8383101561128757848335111561126957600080fd5b6112788f8885358901016110e7565b82529186019190860190611253565b809750505050505050509295509295509295565b6020808252825182820181905260009190848201906040850190845b818110156112d3578351835292840192918401916001016112b7565b50909695505050505050565b6000602082840312156112f157600080fd5b5035919050565b60006020828403121561130a57600080fd5b813563ffffffff8116811461103957600080fd5b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561137357603f19888603018452611361858351611040565b94509285019290850190600101611345565b5092979650505050505050565b600181811c9082168061139457607f821691505b602082108114156113b557634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156113cd57600080fd5b815161103981611007565b634e487b7160e01b600052603260045260246000fd5b60018060a01b0383168152600060206040818401526000845481600182811c91508083168061141e57607f831692505b85831081141561143c57634e487b7160e01b85526022600452602485fd5b604088018390526060880181801561145b576001811461146c57611497565b60ff19861682528782019650611497565b60008b81526020902060005b8681101561149157815484820152908501908901611478565b83019750505b50949a9950505050505050505050565b6000602082840312156114b957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156114e9576114e96114c0565b500190565b6000600019821415611502576115026114c0565b5060010190565b60006020828403121561151b57600080fd5b8151801515811461103957600080fdfea2646970667358221220aa6a4b80388c0725a452e9f8c972ecab45695a4620ffc4f0e371e8f0332c058064736f6c63430008090033"; + "0x60a060405269054b40b1f852bda0000060805234801561001e57600080fd5b506040516112f13803806112f183398101604081905261003d916100df565b61004633610077565b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055610119565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146100dc57600080fd5b50565b600080604083850312156100f257600080fd5b82516100fd816100c7565b602084015190925061010e816100c7565b809150509250929050565b6080516111bd6101346000396000610b5001526111bd6000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806398c81bbf116100ad578063ef4e06ec11610071578063ef4e06ec1461026e578063f2fde38b14610281578063f3831ec414610294578063f6fd7fde146102a7578063fc36e15b146102ba57600080fd5b806398c81bbf14610217578063bf63a5771461022c578063c1c9e9f014610235578063c45a015514610248578063ec5568891461025b57600080fd5b8063715018a6116100f4578063715018a6146101985780637284e416146101a05780638d337b81146101a95780638da5cb5b146101d257806395385edd146101f757600080fd5b806309eef43e1461012657806343d726d61461016a5780634a79d50c14610174578063597e1fb51461018b575b600080fd5b610155610134366004610dcd565b6001600160a01b03166000908152600b602052604090206001015460ff1690565b60405190151581526020015b60405180910390f35b6101726102cd565b005b61017d60045481565b604051908152602001610161565b6006546101559060ff1681565b61017261061f565b61017d60055481565b61017d6101b7366004610dcd565b6001600160a01b03166000908152600b602052604090205490565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610161565b61017d610205366004610df1565b60096020526000908152604090205481565b61021f610685565b6040516101619190610e0a565b61017d60075481565b610155610243366004610df1565b6106dd565b6003546101df906001600160a01b031681565b6002546101df906001600160a01b031681565b6001546101df906001600160a01b031681565b61017261028f366004610dcd565b610734565b6101726102a2366004610fb4565b6107ff565b61017d6102b5366004610df1565b6109f1565b6101726102c8366004611093565b610a12565b600360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561031b57600080fd5b505afa15801561032f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035391906110d0565b6001600160a01b0316336001600160a01b0316146103c45760405162461bcd60e51b8152602060048201526024808201527f566f74696e673a205265737472696374656420746f20666163746f7279206f776044820152633732b91760e11b60648201526084015b60405180910390fd5b60065460ff16156104175760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e000060448201526064016103bb565b6006805460ff1916600117905560005b600a548110156105b4576000600a8281548110610446576104466110ed565b600091825260209091200154600254600754604051636829dce960e11b81526001600160a01b0393841660048201819052602482019290925290935091169063d053b9d29060440160206040518083038186803b1580156104a657600080fd5b505afa1580156104ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104de9190611103565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a082319060240160206040518083038186803b15801561052357600080fd5b505afa158015610537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055b9190611103565b6105659190611132565b6001600160a01b0382166000908152600b6020908152604080832054835260099091528120805490919061059a908490611132565b909155508291506105ac90508161114a565b915050610427565b50600360009054906101000a90046001600160a01b03166001600160a01b0316635d5a96236040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561060557600080fd5b505af1158015610619573d6000803e3d6000fd5b50505050565b6000546001600160a01b031633146106795760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103bb565b6106836000610d08565b565b606060088054806020026020016040519081016040528092919081815260200182805480156106d357602002820191906000526020600020905b8154815260200190600101908083116106bf575b5050505050905090565b6000805b60085481101561072b5782600882815481106106ff576106ff6110ed565b906000526020600020015414156107195750600192915050565b806107238161114a565b9150506106e1565b50600092915050565b6000546001600160a01b0316331461078e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103bb565b6001600160a01b0381166107f35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103bb565b6107fc81610d08565b50565b600054600160a81b900460ff1661082357600054600160a01b900460ff1615610827565b303b155b61088a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016103bb565b600054600160a81b900460ff161580156108b4576000805461ffff60a01b191661010160a01b1790555b84516020808701919091206004558451858201206005558351908401206007556006805460ff19169055815167ffffffffffffffff8111156108f8576108f8610e5e565b604051908082528060200260200182016040528015610921578160200160208202803683370190505b50805161093691600891602090910190610d58565b5060005b825181101561099557828181518110610955576109556110ed565b60200260200101518051906020012060088281548110610977576109776110ed565b6000918252602090912001558061098d8161114a565b91505061093a565b50600180546001600160a01b03808b166001600160a01b031992831617909255600280548a8416908316179055600380549289169290911691909117905580156109e7576000805460ff60a81b191690555b5050505050505050565b60088181548110610a0157600080fd5b600091825260209091200154905081565b60065460ff1615610a655760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e0000000000000060448201526064016103bb565b600254600754604051637c88aaa760e01b815233600482015260248101919091526001600160a01b0390911690637c88aaa79060440160206040518083038186803b158015610ab357600080fd5b505afa158015610ac7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aeb9190611165565b15610b385760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e00000000000060448201526064016103bb565b6001546040516370a0823160e01b81523360048201527f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316906370a082319060240160206040518083038186803b158015610b9b57600080fd5b505afa158015610baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd39190611103565b1015610c215760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e0060448201526064016103bb565b80516020820120610c31816106dd565b610c7d5760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a2043686f69636520697320696e76616c69642e00000000000060448201526064016103bb565b336000908152600b602052604090206001015460ff16610cf557336000818152600b602052604081206001908101805460ff191682179055600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b03191690911790555b336000908152600b602052604090205550565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054828255906000526020600020908101928215610d93579160200282015b82811115610d93578251825591602001919060010190610d78565b50610d9f929150610da3565b5090565b5b80821115610d9f5760008155600101610da4565b6001600160a01b03811681146107fc57600080fd5b600060208284031215610ddf57600080fd5b8135610dea81610db8565b9392505050565b600060208284031215610e0357600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b81811015610e4257835183529284019291840191600101610e26565b50909695505050505050565b8035610e5981610db8565b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610e9d57610e9d610e5e565b604052919050565b600082601f830112610eb657600080fd5b813567ffffffffffffffff811115610ed057610ed0610e5e565b610ee3601f8201601f1916602001610e74565b818152846020838601011115610ef857600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112610f2657600080fd5b8135602067ffffffffffffffff80831115610f4357610f43610e5e565b8260051b610f52838201610e74565b9384528581018301938381019088861115610f6c57600080fd5b84880192505b85831015610fa857823584811115610f8a5760008081fd5b610f988a87838c0101610ea5565b8352509184019190840190610f72565b98975050505050505050565b600080600080600080600060e0888a031215610fcf57600080fd5b610fd888610e4e565b9650610fe660208901610e4e565b9550610ff460408901610e4e565b9450606088013567ffffffffffffffff8082111561101157600080fd5b61101d8b838c01610ea5565b955060808a013591508082111561103357600080fd5b61103f8b838c01610ea5565b945060a08a013591508082111561105557600080fd5b6110618b838c01610ea5565b935060c08a013591508082111561107757600080fd5b506110848a828b01610f15565b91505092959891949750929550565b6000602082840312156110a557600080fd5b813567ffffffffffffffff8111156110bc57600080fd5b6110c884828501610ea5565b949350505050565b6000602082840312156110e257600080fd5b8151610dea81610db8565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561111557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156111455761114561111c565b500190565b600060001982141561115e5761115e61111c565b5060010190565b60006020828403121561117757600080fd5b81518015158114610dea57600080fdfea2646970667358221220ed6d9fddd93e455fb5874156c066e3d31d7ecd643c7fd394de9d1515534c978564736f6c63430008090033"; type BallotConstructorParams = | [signer?: Signer] @@ -313,14 +359,18 @@ export class Ballot__factory extends ContractFactory { } override deploy( + _DPS: string, + _proxy: string, overrides?: Overrides & { from?: string | Promise } ): Promise { - return super.deploy(overrides || {}) as Promise; + return super.deploy(_DPS, _proxy, overrides || {}) as Promise; } override getDeployTransaction( + _DPS: string, + _proxy: string, overrides?: Overrides & { from?: string | Promise } ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); + return super.getDeployTransaction(_DPS, _proxy, overrides || {}); } override attach(address: string): Ballot { return super.attach(address) as Ballot; diff --git a/typings/factories/contracts/voting/VotingDelegation__factory.ts b/typings/factories/contracts/voting/VotingDelegation__factory.ts index 9fa9987..0bbfff1 100644 --- a/typings/factories/contracts/voting/VotingDelegation__factory.ts +++ b/typings/factories/contracts/voting/VotingDelegation__factory.ts @@ -52,19 +52,6 @@ const _abi = [ stateMutability: "view", type: "function", }, - { - inputs: [], - name: "ballotFactory", - outputs: [ - { - internalType: "contract BallotFactory", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, { inputs: [ { @@ -91,9 +78,9 @@ const _abi = [ type: "address", }, { - internalType: "string", + internalType: "bytes32", name: "topic", - type: "string", + type: "bytes32", }, ], name: "delegationAmount", @@ -139,9 +126,9 @@ const _abi = [ type: "address", }, { - internalType: "string", + internalType: "bytes32", name: "topic", - type: "string", + type: "bytes32", }, ], name: "hasDelegated", @@ -215,7 +202,7 @@ const _abi = [ ]; const _bytecode = - "0x60a060405269054b40b1f852bda0000060805234801561001e57600080fd5b50604051610c9f380380610c9f83398101604081905261003d91610124565b610046336100d4565b6001600160a01b0381166100af5760405162461bcd60e51b815260206004820152602660248201527f566f74696e6744656c65676174696f6e3a204450532061646472657373206973604482015265103d32b9379760d11b606482015260840160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055610154565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561013657600080fd5b81516001600160a01b038116811461014d57600080fd5b9392505050565b608051610b3061016f60003960006103500152610b306000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638da5cb5b116100665780638da5cb5b14610156578063ceb0b9351461017b578063ef4e06ec1461018e578063f2fde38b146101a1578063fc196713146101b457600080fd5b80630bef400c146100a3578063442f6551146100c95780635e12967914610119578063694ec60e1461012e578063715018a61461014e575b600080fd5b6100b66100b136600461091b565b6101f2565b6040519081526020015b60405180910390f35b6101096100d736600461091b565b6001600160a01b0391821660009081526004602090815260408083208451948301949094208352929052205416151590565b60405190151581526020016100c0565b61012c61012736600461091b565b61032e565b005b61014161013c36600461091b565b610612565b6040516100c091906109dd565b61012c610768565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100c0565b600254610163906001600160a01b031681565b600154610163906001600160a01b031681565b61012c6101af366004610a2a565b6107ce565b6101636101c236600461091b565b6001600160a01b039182166000908152600460209081526040808320845194830194909420835292905220541690565b805160208201206000908190815b6001600160a01b038616600090815260036020908152604080832085845290915290206001015463ffffffff8216101561032457600180546001600160a01b0388811660009081526003602090815260408083208884529091529020909201805492909116916370a08231919063ffffffff851690811061028357610283610a4c565b60009182526020909120015460405160e083901b6001600160e01b03191681526001600160a01b03909116600482015260240160206040518083038186803b1580156102ce57600080fd5b505afa1580156102e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103069190610a62565b6103109084610a91565b92508061031c81610aa9565b915050610200565b5090949350505050565b6001546040516370a0823160e01b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000009216906370a082319060240160206040518083038186803b15801561039357600080fd5b505afa1580156103a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cb9190610a62565b1015806103df57506001600160a01b038216155b6104445760405162461bcd60e51b815260206004820152602b60248201527f566f74696e6744656c65676174696f6e3a2050726f787920686173206e6f742060448201526a32b737bab3b4102228299760a91b60648201526084015b60405180910390fd5b805160208083019190912033600090815260048352604080822083835290935291909120546001600160a01b03161561057b573360008181526004602090815260408083208584528252808320546001600160a01b03168352600382528083208584528252808320938352908390529020546001828101805490916104c891610acd565b815481106104d8576104d8610a4c565b6000918252602090912001546001830180546001600160a01b03909216918390811061050657610506610a4c565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508160010180548061054757610547610ae4565b60008281526020808220830160001990810180546001600160a01b0319169055909201909255338252929092525060408120555b336000908152600460209081526040808320848452909152902080546001600160a01b0319166001600160a01b0385169081179091551561060d576001600160a01b038316600090815260036020908152604080832084845282528083206001808201805433808852938652938620849055908301815584529190922090910180546001600160a01b03191690911790555b505050565b80516020808301919091206001600160a01b0384166000908152600383526040808220838352909352918220600101546060929067ffffffffffffffff81111561065e5761065e610905565b604051908082528060200260200182016040528015610687578160200160208202803683370190505b50905060005b6001600160a01b038616600090815260036020908152604080832086845290915290206001015463ffffffff8216101561075f576001600160a01b03861660009081526003602090815260408083208684529091529020600101805463ffffffff83169081106106ff576106ff610a4c565b9060005260206000200160009054906101000a90046001600160a01b0316828263ffffffff168151811061073557610735610a4c565b6001600160a01b03909216602092830291909101909101528061075781610aa9565b91505061068d565b50949350505050565b6000546001600160a01b031633146107c25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161043b565b6107cc6000610899565b565b6000546001600160a01b031633146108285760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161043b565b6001600160a01b03811661088d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161043b565b61089681610899565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461090057600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561092e57600080fd5b610937836108e9565b9150602083013567ffffffffffffffff8082111561095457600080fd5b818501915085601f83011261096857600080fd5b81358181111561097a5761097a610905565b604051601f8201601f19908116603f011681019083821181831017156109a2576109a2610905565b816040528281528860208487010111156109bb57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b81811015610a1e5783516001600160a01b0316835292840192918401916001016109f9565b50909695505050505050565b600060208284031215610a3c57600080fd5b610a45826108e9565b9392505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610a7457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610aa457610aa4610a7b565b500190565b600063ffffffff80831681811415610ac357610ac3610a7b565b6001019392505050565b600082821015610adf57610adf610a7b565b500390565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220e27d5717f587cad942782de912eda54fbff59271574e4a97dac27b1ddf99ad9c64736f6c63430008090033"; + "0x60a060405269054b40b1f852bda0000060805234801561001e57600080fd5b50604051610c9d380380610c9d83398101604081905261003d91610124565b610046336100d4565b6001600160a01b0381166100af5760405162461bcd60e51b815260206004820152602660248201527f566f74696e6744656c65676174696f6e3a204450532061646472657373206973604482015265103d32b9379760d11b606482015260840160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055610154565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561013657600080fd5b81516001600160a01b038116811461014d57600080fd5b9392505050565b608051610b2e61016f60003960006101f20152610b2e6000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b14610126578063d053b9d21461014b578063ef4e06ec1461016c578063f2fde38b1461017f578063fc1967131461019257600080fd5b80635e12967914610098578063694ec60e146100ad578063715018a6146100d65780637c88aaa7146100de575b600080fd5b6100ab6100a63660046108ef565b6101d0565b005b6100c06100bb3660046108ef565b6104b4565b6040516100cd91906109b1565b60405180910390f35b6100ab61060a565b6101166100ec3660046109fe565b6001600160a01b039182166000908152600360209081526040808320938352929052205416151590565b60405190151581526020016100cd565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100cd565b61015e6101593660046109fe565b610670565b6040519081526020016100cd565b600154610133906001600160a01b031681565b6100ab61018d366004610a28565b6107a2565b6101336101a03660046108ef565b6001600160a01b039182166000908152600360209081526040808320845194830194909420835292905220541690565b6001546040516370a0823160e01b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000009216906370a082319060240160206040518083038186803b15801561023557600080fd5b505afa158015610249573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026d9190610a4a565b10158061028157506001600160a01b038216155b6102e65760405162461bcd60e51b815260206004820152602b60248201527f566f74696e6744656c65676174696f6e3a2050726f787920686173206e6f742060448201526a32b737bab3b4102228299760a91b60648201526084015b60405180910390fd5b805160208083019190912033600090815260038352604080822083835290935291909120546001600160a01b03161561041d573360008181526003602090815260408083208584528252808320546001600160a01b031683526002825280832085845282528083209383529083905290205460018281018054909161036a91610a79565b8154811061037a5761037a610a90565b6000918252602090912001546001830180546001600160a01b0390921691839081106103a8576103a8610a90565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001018054806103e9576103e9610aa6565b60008281526020808220830160001990810180546001600160a01b0319169055909201909255338252929092525060408120555b336000908152600360209081526040808320848452909152902080546001600160a01b0319166001600160a01b038516908117909155156104af576001600160a01b038316600090815260026020908152604080832084845282528083206001808201805433808852938652938620849055908301815584529190922090910180546001600160a01b03191690911790555b505050565b80516020808301919091206001600160a01b0384166000908152600283526040808220838352909352918220600101546060929067ffffffffffffffff811115610500576105006108d9565b604051908082528060200260200182016040528015610529578160200160208202803683370190505b50905060005b6001600160a01b038616600090815260026020908152604080832086845290915290206001015463ffffffff82161015610601576001600160a01b03861660009081526002602090815260408083208684529091529020600101805463ffffffff83169081106105a1576105a1610a90565b9060005260206000200160009054906101000a90046001600160a01b0316828263ffffffff16815181106105d7576105d7610a90565b6001600160a01b0390921660209283029190910190910152806105f981610abc565b91505061052f565b50949350505050565b6000546001600160a01b031633146106645760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102dd565b61066e600061086d565b565b60008060005b6001600160a01b038516600090815260026020908152604080832087845290915290206001015463ffffffff8216101561079a57600180546001600160a01b0387811660009081526002602090815260408083208a84529091529020909201805492909116916370a08231919063ffffffff85169081106106f9576106f9610a90565b60009182526020909120015460405160e083901b6001600160e01b03191681526001600160a01b03909116600482015260240160206040518083038186803b15801561074457600080fd5b505afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190610a4a565b6107869083610ae0565b91508061079281610abc565b915050610676565b509392505050565b6000546001600160a01b031633146107fc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102dd565b6001600160a01b0381166108615760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102dd565b61086a8161086d565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b03811681146108d457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561090257600080fd5b61090b836108bd565b9150602083013567ffffffffffffffff8082111561092857600080fd5b818501915085601f83011261093c57600080fd5b81358181111561094e5761094e6108d9565b604051601f8201601f19908116603f01168101908382118183101715610976576109766108d9565b8160405282815288602084870101111561098f57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b818110156109f25783516001600160a01b0316835292840192918401916001016109cd565b50909695505050505050565b60008060408385031215610a1157600080fd5b610a1a836108bd565b946020939093013593505050565b600060208284031215610a3a57600080fd5b610a43826108bd565b9392505050565b600060208284031215610a5c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082821015610a8b57610a8b610a63565b500390565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600063ffffffff80831681811415610ad657610ad6610a63565b6001019392505050565b60008219821115610af357610af3610a63565b50019056fea2646970667358221220b21453c0fb79ade01370c9d2a5eaeb478aad6922f3d7b0a510d63957b536dfaa64736f6c63430008090033"; type VotingDelegationConstructorParams = | [signer?: Signer] From a28789f7723f5250666ff30da15b8d9161a5368d Mon Sep 17 00:00:00 2001 From: valentinpollart Date: Wed, 4 May 2022 17:03:55 +0200 Subject: [PATCH 21/25] feat: update deployment scripts --- contracts/voting/Ballot.sol | 2 +- contracts/voting/BallotFactory.sol | 4 +- hardhat.config.ts | 2 +- scripts/deploy-vote.ts | 10 ++--- scripts/test.ts | 37 ++++++++++------ test/Ballot.spec.ts | 43 +++++++++++-------- typings/contracts/voting/Ballot.ts | 20 +++++++++ typings/contracts/voting/BallotFactory.ts | 27 ++++++++++-- .../voting/BallotFactory__factory.ts | 26 ++++++++++- .../contracts/voting/Ballot__factory.ts | 15 ++++++- .../voting/VotingDelegation__factory.ts | 2 +- 11 files changed, 139 insertions(+), 49 deletions(-) diff --git a/contracts/voting/Ballot.sol b/contracts/voting/Ballot.sol index bcca875..1ad1f53 100644 --- a/contracts/voting/Ballot.sol +++ b/contracts/voting/Ballot.sol @@ -62,7 +62,7 @@ contract Ballot is Ownable, Initializable { /** * @notice The minimum amount a user must have to be able to vote (25k DPS) */ - uint256 immutable votingLimit = 25e3 * 1e18; + uint256 public immutable votingLimit = 25e3 * 1e18; /** * @notice The list of all voters diff --git a/contracts/voting/BallotFactory.sol b/contracts/voting/BallotFactory.sol index 2f4aaa1..a394eba 100644 --- a/contracts/voting/BallotFactory.sol +++ b/contracts/voting/BallotFactory.sol @@ -30,7 +30,7 @@ contract BallotFactory is Ownable { * @dev Event fired each time a ballot contract clone is created * @param ballotAddress The address of the created clone contract */ - event BallotCreated(address ballotAddress); + event BallotCreated(address ballotAddress, string title, string description, string topic, string[] choices); /** * @param _DPS The DPS contract address @@ -55,7 +55,7 @@ contract BallotFactory is Ownable { address cloneAddress = Clones.clone(implementationAddress); Ballot(cloneAddress).init(implementation.DPS(), implementation.proxy(), this, title, description, topic, choices); activeBallotAddresses.push(cloneAddress); - emit BallotCreated(cloneAddress); + emit BallotCreated(cloneAddress, title, description, topic, choices); } /** diff --git a/hardhat.config.ts b/hardhat.config.ts index 11bfc66..a6eca31 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -32,7 +32,7 @@ const config: HardhatUserConfig = { fuji: { url: 'https://api.avax-test.network/ext/bc/C/rpc', chainId: 43113, - accounts: process.env.FUJI_PRIVATE_KEY ? [process.env.FUJI_PRIVATE_KEY] : [], + accounts: process.env.FUJI_PRIVATE_KEY ? [process.env.FUJI_PRIVATE_KEY, '5fedc670267dca2a3891f57b225c3198c5086b3e68b348702b10cae0e37f55c3', 'e15d2ed7dd7e562744fe1b73ff2bfbc29dd5053246133ce45786aaf43a7819a6', 'e6d28a64e9238b974642fec3b55d3d8ff21798ffb4f4018aa35524eeb2e8529c'] : [], }, mainnet: { url: 'https://api.avax.network/ext/bc/C/rpc', diff --git a/scripts/deploy-vote.ts b/scripts/deploy-vote.ts index 0cdada8..9ab961a 100644 --- a/scripts/deploy-vote.ts +++ b/scripts/deploy-vote.ts @@ -47,6 +47,7 @@ async function main() { if (networkName === 'fuji') { const ballotCreationTransaction = await ballotFactory.createBallot( 'Is this deployment functional ?', + 'Can you see the description ? Are all parameters set up correctly ?', 'Deployment', ['Yes', 'No'], ); @@ -57,20 +58,15 @@ async function main() { await waitTx(DeepSquare.connect(dpsHolder).transfer(accounts[0].address, parseUnits('50000', 18))); console.log('Transferred DPS to voter 0'); - await waitTx(clone.connect(accounts[0]).vote(0)); + await waitTx(clone.connect(accounts[0]).vote('Yes')); console.log('Voting with:' + accounts[0].address); await waitTx(DeepSquare.connect(dpsHolder).transfer(accounts[1].address, parseUnits('25000', 18))); console.log('Transferred DPS to voter 1'); - await waitTx(clone.connect(accounts[1]).vote(1)); + await waitTx(clone.connect(accounts[1]).vote('No')); console.log('Voting with:' + accounts[1].address); await waitTx(clone.close()); - console.log('Vote results: '); - const choices = await clone.getChoices(); - for (const [index, result] of (await clone.getResults()).entries()) { - console.log(`${choices[index]}: ${result.toString()}`); - } } await waitTx(votingDelegation.transferOwnership(gnosisAddress)); diff --git a/scripts/test.ts b/scripts/test.ts index 095907d..6c95dd9 100644 --- a/scripts/test.ts +++ b/scripts/test.ts @@ -1,11 +1,10 @@ +import { id } from 'ethers/lib/utils'; import { ethers, network } from 'hardhat'; -import { formatUnits, parseUnits } from '@ethersproject/units'; +import waitTx from '../lib/waitTx'; import { DeepSquare__factory } from '../typings/factories/contracts/DeepSquare__factory'; import { BallotFactory__factory } from '../typings/factories/contracts/voting/BallotFactory__factory'; import { Ballot__factory } from '../typings/factories/contracts/voting/Ballot__factory'; import { VotingDelegation__factory } from '../typings/factories/contracts/voting/VotingDelegation__factory'; -import waitTx from "../lib/waitTx"; -import {BigNumber} from "@ethersproject/bignumber"; type NetworkName = 'hardhat' | 'mainnet' | 'fuji'; type ContractName = 'DeepSquare'; @@ -27,13 +26,13 @@ async function main() { const gnosisAddress = await DeepSquare.owner(); - const proxy = new VotingDelegation__factory(deployer).attach('0x0C7a9a7eBd57Fc9e0afbeed697CF1eFa0C5B6F79'); + const proxy = new VotingDelegation__factory(deployer).attach('0x8a0DE2Bd6eCA72DfA85422cC113CE9D538aB582A'); console.log('deployer:', deployer.address); console.log('gnosis:', gnosisAddress); - const ballotFactory = await new BallotFactory__factory(deployer).attach('0x6f872A3579C7Cf1439Ef25e53E9Cd00f2bB4B13F'); + const ballotFactory = await new BallotFactory__factory(deployer).attach('0x5B8dE5367E9b94bF3577F8675dfa50a1101c4DcA'); console.log('ballotFactory:', ballotFactory.address); - const ballot = await new Ballot__factory(deployer).attach('0x1CFC93D985844673cd9298A6725Ac9B0EE57Cca5'); + const ballot = await new Ballot__factory(deployer).attach('0xE55De8f141b006930B3A092cf00258BC4F9E1e8A'); // // console.log('Vote is', (await ballot.closed()) ? 'closed' : 'open'); // @@ -51,12 +50,26 @@ async function main() { // // await waitTx(ballot.vote(BigNumber.from(0))); - // await waitTx( - // ballotFactory - // .connect(dpsHolder) - // .createBallot('Is the test deployment working properly ?', 'testing', ['Yes', 'No']), - // ); - console.log(await ballot.getResults()); + await waitTx( + ballotFactory + .connect(dpsHolder) + .createBallot( + 'Is the test deployment working properly ?', + 'Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?', + 'testing', + [ + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', + 'Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.', + 'Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', + ], + ), + ); + // await waitTx(ballot.connect(dpsHolder).close()); + console.log(await ballotFactory.getActiveBallots()); + console.log(await DeepSquare.balanceOf('0x7aeac7429b348c8979a19DeA94D0cCfd888589c2')); + console.log(await ballot.resultStorage(id('Yes'))); + console.log(await ballot.resultStorage(id('No'))); + // console.log(await ballot.getVote(deployer.address)); } diff --git a/test/Ballot.spec.ts b/test/Ballot.spec.ts index bfa3ee4..dd07f7d 100644 --- a/test/Ballot.spec.ts +++ b/test/Ballot.spec.ts @@ -11,7 +11,7 @@ import { ERC20Agent } from './testing/ERC20Agent'; import setup from './testing/setup'; import setupVoting from './testing/setupVoting'; -describe('Ballot', () => { +describe.only('Ballot', () => { let owner: SignerWithAddress; let accounts: SignerWithAddress[]; let DPS: DeepSquare; @@ -29,49 +29,54 @@ describe('Ballot', () => { describe('init', () => { it('should initialize ballot state variables', async () => { - await ballot.init(DPS.address, votingDelegation.address, ballotFactory.address, 'foo', 'bar', ['baz', 'qux']); - expect(await ballot.subject()).to.equals('foo'); + await ballot.init(DPS.address, votingDelegation.address, ballotFactory.address, 'foo', 'bar', 'bar', [ + 'baz', + 'qux', + ]); + expect(await ballot.title()).to.equals('foo'); expect(await ballot.topic()).to.equals('bar'); expect(await ballot.getChoices()).to.deep.equals(['baz', 'qux']); - expect(await ballot.getResults()).to.deep.equals([BigNumber.from(0), BigNumber.from(0)]); + // expect(await ballot.getResults()).to.deep.equals([BigNumber.from(0), BigNumber.from(0)]); }); }); describe('vote', () => { beforeEach(async () => { - await ballot.init(DPS.address, votingDelegation.address, ballotFactory.address, 'foo', 'qux', ['bar', 'baz']); + await ballot.init(DPS.address, votingDelegation.address, ballotFactory.address, 'foo', 'bar', 'qux', [ + 'bar', + 'baz', + ]); }); it('should throw if ballot is closed', async () => { await ballot.close(); - await expect(ballot.connect(accounts[0]).vote(BigNumber.from(0))).to.revertedWith('Voting: Ballot is closed.'); + await expect(ballot.connect(accounts[0]).vote('bar')).to.revertedWith('Voting: Ballot is closed.'); }); it('should throw if proposal does not exist', async () => { - await expect(ballot.connect(accounts[0]).vote(BigNumber.from(2))).to.revertedWith( - 'Voting: Choice index is too high.', - ); + await expect(ballot.connect(accounts[0]).vote('baz')).to.revertedWith('Voting: Choice index is too high.'); }); it('should throw if voter has granted proxy on the topic', async () => { await agentDPS.transfer(accounts[1], 25000, 18); await votingDelegation.connect(accounts[0]).delegate(accounts[1].address, 'qux'); - await expect(ballot.connect(accounts[0]).vote(BigNumber.from(0))).to.revertedWith('Voting: Vote is delegated.'); + await expect(ballot.connect(accounts[0]).vote('bar')).to.revertedWith('Voting: Vote is delegated.'); }); it('should throw if voter has less than 25k DPS', async () => { - await expect(ballot.connect(accounts[0]).vote(BigNumber.from(0))).to.revertedWith( - 'Voting: Not enough DPS to vote.', - ); + await expect(ballot.connect(accounts[0]).vote('bar')).to.revertedWith('Voting: Not enough DPS to vote.'); }); it('should vote', async () => { await agentDPS.transfer(accounts[0], 25000, 18); - await ballot.connect(accounts[0]).vote(BigNumber.from(0)); + await ballot.connect(accounts[0]).vote('bar'); expect(await ballot._results()).to.deep.equals([[accounts[0].address, [0, true]]]); - await ballot.connect(accounts[0]).vote(BigNumber.from(1)); + await ballot.connect(accounts[0]).vote('baz'); expect(await ballot._results()).to.deep.equals([[accounts[0].address, [1, true]]]); }); }); describe('closeBallot', async () => { beforeEach(async () => { - await ballot.init(DPS.address, votingDelegation.address, ballotFactory.address, 'foo', 'qux', ['bar', 'baz']); + await ballot.init(DPS.address, votingDelegation.address, ballotFactory.address, 'foo', 'bar', 'qux', [ + 'bar', + 'baz', + ]); }); it('should throw if is not the factory owner', async () => { await expect(ballot.connect(accounts[0]).close()).to.revertedWith('Voting: Restricted to factory owner.'); @@ -85,10 +90,10 @@ describe('Ballot', () => { await agentDPS.transfer(accounts[1], 25000, 18); await agentDPS.transfer(accounts[2], 25000, 18); await votingDelegation.connect(accounts[2]).delegate(accounts[1].address, 'qux'); - await ballot.connect(accounts[0]).vote(BigNumber.from(0)); - await ballot.connect(accounts[1]).vote(BigNumber.from(1)); + await ballot.connect(accounts[0]).vote('bar'); + await ballot.connect(accounts[1]).vote('baz'); await ballot.close(); - expect(await ballot.getResults()).to.deep.equals([parseUnits('25000', 18), parseUnits('50000', 18)]); + // expect(await ballot.getResults()).to.deep.equals([parseUnits('25000', 18), parseUnits('50000', 18)]); }); }); }); diff --git a/typings/contracts/voting/Ballot.ts b/typings/contracts/voting/Ballot.ts index 9c6ce7e..46c97a2 100644 --- a/typings/contracts/voting/Ballot.ts +++ b/typings/contracts/voting/Ballot.ts @@ -47,6 +47,7 @@ export interface BallotInterface extends utils.Interface { "topic()": FunctionFragment; "transferOwnership(address)": FunctionFragment; "vote(string)": FunctionFragment; + "votingLimit()": FunctionFragment; }; getFunction( @@ -70,6 +71,7 @@ export interface BallotInterface extends utils.Interface { | "topic" | "transferOwnership" | "vote" + | "votingLimit" ): FunctionFragment; encodeFunctionData(functionFragment: "DPS", values?: undefined): string; @@ -115,6 +117,10 @@ export interface BallotInterface extends utils.Interface { values: [string] ): string; encodeFunctionData(functionFragment: "vote", values: [string]): string; + encodeFunctionData( + functionFragment: "votingLimit", + values?: undefined + ): string; decodeFunctionResult(functionFragment: "DPS", data: BytesLike): Result; decodeFunctionResult(functionFragment: "choices", data: BytesLike): Result; @@ -150,6 +156,10 @@ export interface BallotInterface extends utils.Interface { data: BytesLike ): Result; decodeFunctionResult(functionFragment: "vote", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "votingLimit", + data: BytesLike + ): Result; events: { "OwnershipTransferred(address,address)": EventFragment; @@ -259,6 +269,8 @@ export interface Ballot extends BaseContract { choice: string, overrides?: Overrides & { from?: string | Promise } ): Promise; + + votingLimit(overrides?: CallOverrides): Promise<[BigNumber]>; }; DPS(overrides?: CallOverrides): Promise; @@ -321,6 +333,8 @@ export interface Ballot extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; + votingLimit(overrides?: CallOverrides): Promise; + callStatic: { DPS(overrides?: CallOverrides): Promise; @@ -377,6 +391,8 @@ export interface Ballot extends BaseContract { ): Promise; vote(choice: string, overrides?: CallOverrides): Promise; + + votingLimit(overrides?: CallOverrides): Promise; }; filters: { @@ -453,6 +469,8 @@ export interface Ballot extends BaseContract { choice: string, overrides?: Overrides & { from?: string | Promise } ): Promise; + + votingLimit(overrides?: CallOverrides): Promise; }; populateTransaction: { @@ -527,5 +545,7 @@ export interface Ballot extends BaseContract { choice: string, overrides?: Overrides & { from?: string | Promise } ): Promise; + + votingLimit(overrides?: CallOverrides): Promise; }; } diff --git a/typings/contracts/voting/BallotFactory.ts b/typings/contracts/voting/BallotFactory.ts index 1dfc56d..3e2d2f2 100644 --- a/typings/contracts/voting/BallotFactory.ts +++ b/typings/contracts/voting/BallotFactory.ts @@ -145,7 +145,7 @@ export interface BallotFactoryInterface extends utils.Interface { ): Result; events: { - "BallotCreated(address)": EventFragment; + "BallotCreated(address,string,string,string,string[])": EventFragment; "OwnershipTransferred(address,address)": EventFragment; }; @@ -155,8 +155,15 @@ export interface BallotFactoryInterface extends utils.Interface { export interface BallotCreatedEventObject { ballotAddress: string; + title: string; + description: string; + topic: string; + choices: string[]; } -export type BallotCreatedEvent = TypedEvent<[string], BallotCreatedEventObject>; +export type BallotCreatedEvent = TypedEvent< + [string, string, string, string, string[]], + BallotCreatedEventObject +>; export type BallotCreatedEventFilter = TypedEventFilter; @@ -337,8 +344,20 @@ export interface BallotFactory extends BaseContract { }; filters: { - "BallotCreated(address)"(ballotAddress?: null): BallotCreatedEventFilter; - BallotCreated(ballotAddress?: null): BallotCreatedEventFilter; + "BallotCreated(address,string,string,string,string[])"( + ballotAddress?: null, + title?: null, + description?: null, + topic?: null, + choices?: null + ): BallotCreatedEventFilter; + BallotCreated( + ballotAddress?: null, + title?: null, + description?: null, + topic?: null, + choices?: null + ): BallotCreatedEventFilter; "OwnershipTransferred(address,address)"( previousOwner?: string | null, diff --git a/typings/factories/contracts/voting/BallotFactory__factory.ts b/typings/factories/contracts/voting/BallotFactory__factory.ts index 7d41473..033e7fe 100644 --- a/typings/factories/contracts/voting/BallotFactory__factory.ts +++ b/typings/factories/contracts/voting/BallotFactory__factory.ts @@ -34,6 +34,30 @@ const _abi = [ name: "ballotAddress", type: "address", }, + { + indexed: false, + internalType: "string", + name: "title", + type: "string", + }, + { + indexed: false, + internalType: "string", + name: "description", + type: "string", + }, + { + indexed: false, + internalType: "string", + name: "topic", + type: "string", + }, + { + indexed: false, + internalType: "string[]", + name: "choices", + type: "string[]", + }, ], name: "BallotCreated", type: "event", @@ -231,7 +255,7 @@ const _abi = [ ]; const _bytecode = - "0x60806040523480156200001157600080fd5b5060405162000f5438038062000f5483398101604081905262000034916200019a565b6200003f3362000131565b6001600160a01b038216620000a1576040805162461bcd60e51b815260206004820152602481019190915260008051602062000f14833981519152604482015260008051602062000f3483398151915260648201526084015b60405180910390fd5b6001600160a01b038116620000ff576040805162461bcd60e51b815260206004820152602481019190915260008051602062000f14833981519152604482015260008051602062000f34833981519152606482015260840162000098565b600180546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055620001d9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200019757600080fd5b50565b60008060408385031215620001ae57600080fd5b8251620001bb8162000181565b6020840151909250620001ce8162000181565b809150509250929050565b610d2b80620001e96000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80638da5cb5b116100715780638da5cb5b1461012b578063b97a23191461013c578063de78c3341461014f578063ecade2f014610162578063ef4e06ec14610175578063f2fde38b1461018857600080fd5b806327cbb12f146100b95780634f3471fa146100e95780635b9c68d3146100fe5780635d5a962314610113578063715018a61461011b578063795e241514610123575b600080fd5b6100cc6100c73660046108a0565b61019b565b6040516001600160a01b0390911681526020015b60405180910390f35b6100fc6100f7366004610970565b6101c5565b005b6101066103e5565b6040516100e09190610a9c565b6100fc610447565b6100fc6105a8565b6101066105de565b6000546001600160a01b03166100cc565b6004546100cc906001600160a01b031681565b6100cc61015d3660046108a0565b61063e565b6100fc610170366004610afe565b61064e565b6001546100cc906001600160a01b031681565b6100fc610196366004610afe565b610718565b600281815481106101ab57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146101f85760405162461bcd60e51b81526004016101ef90610b22565b60405180910390fd5b6004546001600160a01b0316600061020f826107b3565b9050806001600160a01b031663f3831ec4836001600160a01b031663ef4e06ec6040518163ffffffff1660e01b815260040160206040518083038186803b15801561025957600080fd5b505afa15801561026d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102919190610b57565b846001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b1580156102ca57600080fd5b505afa1580156102de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103029190610b57565b308a8a8a8a6040518863ffffffff1660e01b81526004016103299796959493929190610bc1565b600060405180830381600087803b15801561034357600080fd5b505af1158015610357573d6000803e3d6000fd5b5050600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040519081527f165f4a0bebf649c196135ba0519a9a51da33d33a9e4d096b71050c2c97ec670f9250602001905060405180910390a1505050505050565b6060600380548060200260200160405190810160405280929190818152602001828054801561043d57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161041f575b5050505050905090565b6000805b6002548110156105a457336001600160a01b03166002828154811061047257610472610c81565b6000918252602090912001546001600160a01b0316141561059257600191506003600282815481106104a6576104a6610c81565b6000918252602080832090910154835460018181018655948452919092200180546001600160a01b0319166001600160a01b039092169190911790556002805490916104f191610cad565b8154811061050157610501610c81565b600091825260209091200154600280546001600160a01b03909216918390811061052d5761052d610c81565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600280548061056c5761056c610cc4565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061059c81610cda565b91505061044b565b5050565b6000546001600160a01b031633146105d25760405162461bcd60e51b81526004016101ef90610b22565b6105dc6000610850565b565b6060600280548060200260200160405190810160405280929190818152602001828054801561043d576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161041f575050505050905090565b600381815481106101ab57600080fd5b6000546001600160a01b031633146106785760405162461bcd60e51b81526004016101ef90610b22565b6001600160a01b0381166106f6576040805162461bcd60e51b81526020600482015260248101919091527f42616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616460448201527f64726573732073686f756c64206e6f74206265207a65726f206164647265737360648201526084016101ef565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146107425760405162461bcd60e51b81526004016101ef90610b22565b6001600160a01b0381166107a75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101ef565b6107b081610850565b50565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b03811661084b5760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b60448201526064016101ef565b919050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108b257600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156108f8576108f86108b9565b604052919050565b600082601f83011261091157600080fd5b813567ffffffffffffffff81111561092b5761092b6108b9565b61093e601f8201601f19166020016108cf565b81815284602083860101111561095357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561098657600080fd5b843567ffffffffffffffff8082111561099e57600080fd5b6109aa88838901610900565b95506020915081870135818111156109c157600080fd5b6109cd89828a01610900565b9550506040870135818111156109e257600080fd5b6109ee89828a01610900565b945050606087013581811115610a0357600080fd5b8701601f81018913610a1457600080fd5b803582811115610a2657610a266108b9565b8060051b610a358582016108cf565b918252828101850191858101908c841115610a4f57600080fd5b86850192505b83831015610a8b57823586811115610a6d5760008081fd5b610a7b8e8983890101610900565b8352509186019190860190610a55565b999c989b5096995050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610add5783516001600160a01b031683529284019291840191600101610ab8565b50909695505050505050565b6001600160a01b03811681146107b057600080fd5b600060208284031215610b1057600080fd5b8135610b1b81610ae9565b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215610b6957600080fd5b8151610b1b81610ae9565b6000815180845260005b81811015610b9a57602081850181015186830182015201610b7e565b81811115610bac576000602083870101525b50601f01601f19169290920160200192915050565b600060018060a01b03808a1683526020818a1681850152818916604085015260e06060850152610bf460e0850189610b74565b91508382036080850152610c088288610b74565b915083820360a0850152610c1c8287610b74565b915083820360c08501528185518084528284019150828160051b85010183880160005b83811015610c6d57601f19878403018552610c5b838351610b74565b94860194925090850190600101610c3f565b50909e9d5050505050505050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015610cbf57610cbf610c97565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415610cee57610cee610c97565b506001019056fea2646970667358221220c9c5766e47dfe5e0a2a33a33d2e659ff990bacc35e8f16b456556049aa5185f764736f6c6343000809003342616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616464726573732073686f756c64206e6f74206265207a65726f2061646472657373"; + "0x60806040523480156200001157600080fd5b5060405162000fd838038062000fd883398101604081905262000034916200019a565b6200003f3362000131565b6001600160a01b038216620000a1576040805162461bcd60e51b815260206004820152602481019190915260008051602062000f98833981519152604482015260008051602062000fb883398151915260648201526084015b60405180910390fd5b6001600160a01b038116620000ff576040805162461bcd60e51b815260206004820152602481019190915260008051602062000f98833981519152604482015260008051602062000fb8833981519152606482015260840162000098565b600180546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055620001d9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200019757600080fd5b50565b60008060408385031215620001ae57600080fd5b8251620001bb8162000181565b6020840151909250620001ce8162000181565b809150509250929050565b610daf80620001e96000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80638da5cb5b116100715780638da5cb5b1461012b578063b97a23191461013c578063de78c3341461014f578063ecade2f014610162578063ef4e06ec14610175578063f2fde38b1461018857600080fd5b806327cbb12f146100b95780634f3471fa146100e95780635b9c68d3146100fe5780635d5a962314610113578063715018a61461011b578063795e241514610123575b600080fd5b6100cc6100c73660046108a9565b61019b565b6040516001600160a01b0390911681526020015b60405180910390f35b6100fc6100f7366004610979565b6101c5565b005b6101066103ee565b6040516100e09190610aa5565b6100fc610450565b6100fc6105b1565b6101066105e7565b6000546001600160a01b03166100cc565b6004546100cc906001600160a01b031681565b6100cc61015d3660046108a9565b610647565b6100fc610170366004610b07565b610657565b6001546100cc906001600160a01b031681565b6100fc610196366004610b07565b610721565b600281815481106101ab57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146101f85760405162461bcd60e51b81526004016101ef90610b2b565b60405180910390fd5b6004546001600160a01b0316600061020f826107bc565b9050806001600160a01b031663f3831ec4836001600160a01b031663ef4e06ec6040518163ffffffff1660e01b815260040160206040518083038186803b15801561025957600080fd5b505afa15801561026d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102919190610b60565b846001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b1580156102ca57600080fd5b505afa1580156102de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103029190610b60565b308a8a8a8a6040518863ffffffff1660e01b81526004016103299796959493929190610c1f565b600060405180830381600087803b15801561034357600080fd5b505af1158015610357573d6000803e3d6000fd5b5050600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b03851617905550506040517f588b6132ab38324e3e97c32f638bebc70c09d4a1de3a0b8669e8971b3b99dd78906103de9083908990899089908990610c9b565b60405180910390a1505050505050565b6060600380548060200260200160405190810160405280929190818152602001828054801561044657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610428575b5050505050905090565b6000805b6002548110156105ad57336001600160a01b03166002828154811061047b5761047b610d05565b6000918252602090912001546001600160a01b0316141561059b57600191506003600282815481106104af576104af610d05565b6000918252602080832090910154835460018181018655948452919092200180546001600160a01b0319166001600160a01b039092169190911790556002805490916104fa91610d31565b8154811061050a5761050a610d05565b600091825260209091200154600280546001600160a01b03909216918390811061053657610536610d05565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600280548061057557610575610d48565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806105a581610d5e565b915050610454565b5050565b6000546001600160a01b031633146105db5760405162461bcd60e51b81526004016101ef90610b2b565b6105e56000610859565b565b60606002805480602002602001604051908101604052809291908181526020018280548015610446576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610428575050505050905090565b600381815481106101ab57600080fd5b6000546001600160a01b031633146106815760405162461bcd60e51b81526004016101ef90610b2b565b6001600160a01b0381166106ff576040805162461bcd60e51b81526020600482015260248101919091527f42616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616460448201527f64726573732073686f756c64206e6f74206265207a65726f206164647265737360648201526084016101ef565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461074b5760405162461bcd60e51b81526004016101ef90610b2b565b6001600160a01b0381166107b05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101ef565b6107b981610859565b50565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b0381166108545760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b60448201526064016101ef565b919050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108bb57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610901576109016108c2565b604052919050565b600082601f83011261091a57600080fd5b813567ffffffffffffffff811115610934576109346108c2565b610947601f8201601f19166020016108d8565b81815284602083860101111561095c57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561098f57600080fd5b843567ffffffffffffffff808211156109a757600080fd5b6109b388838901610909565b95506020915081870135818111156109ca57600080fd5b6109d689828a01610909565b9550506040870135818111156109eb57600080fd5b6109f789828a01610909565b945050606087013581811115610a0c57600080fd5b8701601f81018913610a1d57600080fd5b803582811115610a2f57610a2f6108c2565b8060051b610a3e8582016108d8565b918252828101850191858101908c841115610a5857600080fd5b86850192505b83831015610a9457823586811115610a765760008081fd5b610a848e8983890101610909565b8352509186019190860190610a5e565b999c989b5096995050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610ae65783516001600160a01b031683529284019291840191600101610ac1565b50909695505050505050565b6001600160a01b03811681146107b957600080fd5b600060208284031215610b1957600080fd5b8135610b2481610af2565b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215610b7257600080fd5b8151610b2481610af2565b6000815180845260005b81811015610ba357602081850181015186830182015201610b87565b81811115610bb5576000602083870101525b50601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b85811015610c12578284038952610c00848351610b7d565b98850198935090840190600101610be8565b5091979650505050505050565b6001600160a01b03888116825287811660208301528616604082015260e060608201819052600090610c5390830187610b7d565b8281036080840152610c658187610b7d565b905082810360a0840152610c798186610b7d565b905082810360c0840152610c8d8185610bca565b9a9950505050505050505050565b6001600160a01b038616815260a060208201819052600090610cbf90830187610b7d565b8281036040840152610cd18187610b7d565b90508281036060840152610ce58186610b7d565b90508281036080840152610cf98185610bca565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015610d4357610d43610d1b565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415610d7257610d72610d1b565b506001019056fea2646970667358221220b7e87631fd70ad067ae58d482e341a67dcd9a5042d1d02cedc1b5944de3fb14964736f6c6343000809003342616c6c6f74466163746f72793a20496d706c656d656e746174696f6e20616464726573732073686f756c64206e6f74206265207a65726f2061646472657373"; type BallotFactoryConstructorParams = | [signer?: Signer] diff --git a/typings/factories/contracts/voting/Ballot__factory.ts b/typings/factories/contracts/voting/Ballot__factory.ts index f3bc887..c9fe785 100644 --- a/typings/factories/contracts/voting/Ballot__factory.ts +++ b/typings/factories/contracts/voting/Ballot__factory.ts @@ -336,10 +336,23 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, + { + inputs: [], + name: "votingLimit", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, ]; const _bytecode = - "0x60a060405269054b40b1f852bda0000060805234801561001e57600080fd5b506040516112f13803806112f183398101604081905261003d916100df565b61004633610077565b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055610119565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146100dc57600080fd5b50565b600080604083850312156100f257600080fd5b82516100fd816100c7565b602084015190925061010e816100c7565b809150509250929050565b6080516111bd6101346000396000610b5001526111bd6000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806398c81bbf116100ad578063ef4e06ec11610071578063ef4e06ec1461026e578063f2fde38b14610281578063f3831ec414610294578063f6fd7fde146102a7578063fc36e15b146102ba57600080fd5b806398c81bbf14610217578063bf63a5771461022c578063c1c9e9f014610235578063c45a015514610248578063ec5568891461025b57600080fd5b8063715018a6116100f4578063715018a6146101985780637284e416146101a05780638d337b81146101a95780638da5cb5b146101d257806395385edd146101f757600080fd5b806309eef43e1461012657806343d726d61461016a5780634a79d50c14610174578063597e1fb51461018b575b600080fd5b610155610134366004610dcd565b6001600160a01b03166000908152600b602052604090206001015460ff1690565b60405190151581526020015b60405180910390f35b6101726102cd565b005b61017d60045481565b604051908152602001610161565b6006546101559060ff1681565b61017261061f565b61017d60055481565b61017d6101b7366004610dcd565b6001600160a01b03166000908152600b602052604090205490565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610161565b61017d610205366004610df1565b60096020526000908152604090205481565b61021f610685565b6040516101619190610e0a565b61017d60075481565b610155610243366004610df1565b6106dd565b6003546101df906001600160a01b031681565b6002546101df906001600160a01b031681565b6001546101df906001600160a01b031681565b61017261028f366004610dcd565b610734565b6101726102a2366004610fb4565b6107ff565b61017d6102b5366004610df1565b6109f1565b6101726102c8366004611093565b610a12565b600360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561031b57600080fd5b505afa15801561032f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035391906110d0565b6001600160a01b0316336001600160a01b0316146103c45760405162461bcd60e51b8152602060048201526024808201527f566f74696e673a205265737472696374656420746f20666163746f7279206f776044820152633732b91760e11b60648201526084015b60405180910390fd5b60065460ff16156104175760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e000060448201526064016103bb565b6006805460ff1916600117905560005b600a548110156105b4576000600a8281548110610446576104466110ed565b600091825260209091200154600254600754604051636829dce960e11b81526001600160a01b0393841660048201819052602482019290925290935091169063d053b9d29060440160206040518083038186803b1580156104a657600080fd5b505afa1580156104ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104de9190611103565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a082319060240160206040518083038186803b15801561052357600080fd5b505afa158015610537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055b9190611103565b6105659190611132565b6001600160a01b0382166000908152600b6020908152604080832054835260099091528120805490919061059a908490611132565b909155508291506105ac90508161114a565b915050610427565b50600360009054906101000a90046001600160a01b03166001600160a01b0316635d5a96236040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561060557600080fd5b505af1158015610619573d6000803e3d6000fd5b50505050565b6000546001600160a01b031633146106795760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103bb565b6106836000610d08565b565b606060088054806020026020016040519081016040528092919081815260200182805480156106d357602002820191906000526020600020905b8154815260200190600101908083116106bf575b5050505050905090565b6000805b60085481101561072b5782600882815481106106ff576106ff6110ed565b906000526020600020015414156107195750600192915050565b806107238161114a565b9150506106e1565b50600092915050565b6000546001600160a01b0316331461078e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103bb565b6001600160a01b0381166107f35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103bb565b6107fc81610d08565b50565b600054600160a81b900460ff1661082357600054600160a01b900460ff1615610827565b303b155b61088a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016103bb565b600054600160a81b900460ff161580156108b4576000805461ffff60a01b191661010160a01b1790555b84516020808701919091206004558451858201206005558351908401206007556006805460ff19169055815167ffffffffffffffff8111156108f8576108f8610e5e565b604051908082528060200260200182016040528015610921578160200160208202803683370190505b50805161093691600891602090910190610d58565b5060005b825181101561099557828181518110610955576109556110ed565b60200260200101518051906020012060088281548110610977576109776110ed565b6000918252602090912001558061098d8161114a565b91505061093a565b50600180546001600160a01b03808b166001600160a01b031992831617909255600280548a8416908316179055600380549289169290911691909117905580156109e7576000805460ff60a81b191690555b5050505050505050565b60088181548110610a0157600080fd5b600091825260209091200154905081565b60065460ff1615610a655760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e0000000000000060448201526064016103bb565b600254600754604051637c88aaa760e01b815233600482015260248101919091526001600160a01b0390911690637c88aaa79060440160206040518083038186803b158015610ab357600080fd5b505afa158015610ac7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aeb9190611165565b15610b385760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e00000000000060448201526064016103bb565b6001546040516370a0823160e01b81523360048201527f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316906370a082319060240160206040518083038186803b158015610b9b57600080fd5b505afa158015610baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd39190611103565b1015610c215760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e0060448201526064016103bb565b80516020820120610c31816106dd565b610c7d5760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a2043686f69636520697320696e76616c69642e00000000000060448201526064016103bb565b336000908152600b602052604090206001015460ff16610cf557336000818152600b602052604081206001908101805460ff191682179055600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b03191690911790555b336000908152600b602052604090205550565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054828255906000526020600020908101928215610d93579160200282015b82811115610d93578251825591602001919060010190610d78565b50610d9f929150610da3565b5090565b5b80821115610d9f5760008155600101610da4565b6001600160a01b03811681146107fc57600080fd5b600060208284031215610ddf57600080fd5b8135610dea81610db8565b9392505050565b600060208284031215610e0357600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b81811015610e4257835183529284019291840191600101610e26565b50909695505050505050565b8035610e5981610db8565b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610e9d57610e9d610e5e565b604052919050565b600082601f830112610eb657600080fd5b813567ffffffffffffffff811115610ed057610ed0610e5e565b610ee3601f8201601f1916602001610e74565b818152846020838601011115610ef857600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112610f2657600080fd5b8135602067ffffffffffffffff80831115610f4357610f43610e5e565b8260051b610f52838201610e74565b9384528581018301938381019088861115610f6c57600080fd5b84880192505b85831015610fa857823584811115610f8a5760008081fd5b610f988a87838c0101610ea5565b8352509184019190840190610f72565b98975050505050505050565b600080600080600080600060e0888a031215610fcf57600080fd5b610fd888610e4e565b9650610fe660208901610e4e565b9550610ff460408901610e4e565b9450606088013567ffffffffffffffff8082111561101157600080fd5b61101d8b838c01610ea5565b955060808a013591508082111561103357600080fd5b61103f8b838c01610ea5565b945060a08a013591508082111561105557600080fd5b6110618b838c01610ea5565b935060c08a013591508082111561107757600080fd5b506110848a828b01610f15565b91505092959891949750929550565b6000602082840312156110a557600080fd5b813567ffffffffffffffff8111156110bc57600080fd5b6110c884828501610ea5565b949350505050565b6000602082840312156110e257600080fd5b8151610dea81610db8565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561111557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156111455761114561111c565b500190565b600060001982141561115e5761115e61111c565b5060010190565b60006020828403121561117757600080fd5b81518015158114610dea57600080fdfea2646970667358221220ed6d9fddd93e455fb5874156c066e3d31d7ecd643c7fd394de9d1515534c978564736f6c63430008090033"; + "0x60a060405269054b40b1f852bda0000060805234801561001e57600080fd5b5060405161132a38038061132a83398101604081905261003d916100df565b61004633610077565b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055610119565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146100dc57600080fd5b50565b600080604083850312156100f257600080fd5b82516100fd816100c7565b602084015190925061010e816100c7565b809150509250929050565b6080516111ef61013b600039600081816102070152610b8201526111ef6000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c806398c81bbf116100ad578063ef4e06ec11610071578063ef4e06ec146102a0578063f2fde38b146102b3578063f3831ec4146102c6578063f6fd7fde146102d9578063fc36e15b146102ec57600080fd5b806398c81bbf14610249578063bf63a5771461025e578063c1c9e9f014610267578063c45a01551461027a578063ec5568891461028d57600080fd5b80637284e416116100f45780637284e416146101ab5780638d337b81146101b45780638da5cb5b146101dd57806390a64bdd1461020257806395385edd1461022957600080fd5b806309eef43e1461013157806343d726d6146101755780634a79d50c1461017f578063597e1fb514610196578063715018a6146101a3575b600080fd5b61016061013f366004610dff565b6001600160a01b03166000908152600b602052604090206001015460ff1690565b60405190151581526020015b60405180910390f35b61017d6102ff565b005b61018860045481565b60405190815260200161016c565b6006546101609060ff1681565b61017d610651565b61018860055481565b6101886101c2366004610dff565b6001600160a01b03166000908152600b602052604090205490565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161016c565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b610188610237366004610e23565b60096020526000908152604090205481565b6102516106b7565b60405161016c9190610e3c565b61018860075481565b610160610275366004610e23565b61070f565b6003546101ea906001600160a01b031681565b6002546101ea906001600160a01b031681565b6001546101ea906001600160a01b031681565b61017d6102c1366004610dff565b610766565b61017d6102d4366004610fe6565b610831565b6101886102e7366004610e23565b610a23565b61017d6102fa3660046110c5565b610a44565b600360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561034d57600080fd5b505afa158015610361573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103859190611102565b6001600160a01b0316336001600160a01b0316146103f65760405162461bcd60e51b8152602060048201526024808201527f566f74696e673a205265737472696374656420746f20666163746f7279206f776044820152633732b91760e11b60648201526084015b60405180910390fd5b60065460ff16156104495760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e000060448201526064016103ed565b6006805460ff1916600117905560005b600a548110156105e6576000600a82815481106104785761047861111f565b600091825260209091200154600254600754604051636829dce960e11b81526001600160a01b0393841660048201819052602482019290925290935091169063d053b9d29060440160206040518083038186803b1580156104d857600080fd5b505afa1580156104ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105109190611135565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a082319060240160206040518083038186803b15801561055557600080fd5b505afa158015610569573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058d9190611135565b6105979190611164565b6001600160a01b0382166000908152600b602090815260408083205483526009909152812080549091906105cc908490611164565b909155508291506105de90508161117c565b915050610459565b50600360009054906101000a90046001600160a01b03166001600160a01b0316635d5a96236040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561063757600080fd5b505af115801561064b573d6000803e3d6000fd5b50505050565b6000546001600160a01b031633146106ab5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103ed565b6106b56000610d3a565b565b6060600880548060200260200160405190810160405280929190818152602001828054801561070557602002820191906000526020600020905b8154815260200190600101908083116106f1575b5050505050905090565b6000805b60085481101561075d5782600882815481106107315761073161111f565b9060005260206000200154141561074b5750600192915050565b806107558161117c565b915050610713565b50600092915050565b6000546001600160a01b031633146107c05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103ed565b6001600160a01b0381166108255760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103ed565b61082e81610d3a565b50565b600054600160a81b900460ff1661085557600054600160a01b900460ff1615610859565b303b155b6108bc5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016103ed565b600054600160a81b900460ff161580156108e6576000805461ffff60a01b191661010160a01b1790555b84516020808701919091206004558451858201206005558351908401206007556006805460ff19169055815167ffffffffffffffff81111561092a5761092a610e90565b604051908082528060200260200182016040528015610953578160200160208202803683370190505b50805161096891600891602090910190610d8a565b5060005b82518110156109c7578281815181106109875761098761111f565b602002602001015180519060200120600882815481106109a9576109a961111f565b600091825260209091200155806109bf8161117c565b91505061096c565b50600180546001600160a01b03808b166001600160a01b031992831617909255600280548a841690831617905560038054928916929091169190911790558015610a19576000805460ff60a81b191690555b5050505050505050565b60088181548110610a3357600080fd5b600091825260209091200154905081565b60065460ff1615610a975760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e0000000000000060448201526064016103ed565b600254600754604051637c88aaa760e01b815233600482015260248101919091526001600160a01b0390911690637c88aaa79060440160206040518083038186803b158015610ae557600080fd5b505afa158015610af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1d9190611197565b15610b6a5760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e00000000000060448201526064016103ed565b6001546040516370a0823160e01b81523360048201527f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316906370a082319060240160206040518083038186803b158015610bcd57600080fd5b505afa158015610be1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c059190611135565b1015610c535760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e0060448201526064016103ed565b80516020820120610c638161070f565b610caf5760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a2043686f69636520697320696e76616c69642e00000000000060448201526064016103ed565b336000908152600b602052604090206001015460ff16610d2757336000818152600b602052604081206001908101805460ff191682179055600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b03191690911790555b336000908152600b602052604090205550565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054828255906000526020600020908101928215610dc5579160200282015b82811115610dc5578251825591602001919060010190610daa565b50610dd1929150610dd5565b5090565b5b80821115610dd15760008155600101610dd6565b6001600160a01b038116811461082e57600080fd5b600060208284031215610e1157600080fd5b8135610e1c81610dea565b9392505050565b600060208284031215610e3557600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b81811015610e7457835183529284019291840191600101610e58565b50909695505050505050565b8035610e8b81610dea565b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610ecf57610ecf610e90565b604052919050565b600082601f830112610ee857600080fd5b813567ffffffffffffffff811115610f0257610f02610e90565b610f15601f8201601f1916602001610ea6565b818152846020838601011115610f2a57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112610f5857600080fd5b8135602067ffffffffffffffff80831115610f7557610f75610e90565b8260051b610f84838201610ea6565b9384528581018301938381019088861115610f9e57600080fd5b84880192505b85831015610fda57823584811115610fbc5760008081fd5b610fca8a87838c0101610ed7565b8352509184019190840190610fa4565b98975050505050505050565b600080600080600080600060e0888a03121561100157600080fd5b61100a88610e80565b965061101860208901610e80565b955061102660408901610e80565b9450606088013567ffffffffffffffff8082111561104357600080fd5b61104f8b838c01610ed7565b955060808a013591508082111561106557600080fd5b6110718b838c01610ed7565b945060a08a013591508082111561108757600080fd5b6110938b838c01610ed7565b935060c08a01359150808211156110a957600080fd5b506110b68a828b01610f47565b91505092959891949750929550565b6000602082840312156110d757600080fd5b813567ffffffffffffffff8111156110ee57600080fd5b6110fa84828501610ed7565b949350505050565b60006020828403121561111457600080fd5b8151610e1c81610dea565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561114757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156111775761117761114e565b500190565b60006000198214156111905761119061114e565b5060010190565b6000602082840312156111a957600080fd5b81518015158114610e1c57600080fdfea26469706673582212202a0ddbb5189be572bdb8f4499a73edcac65bce909fb726e71c73ab22b68f4ba764736f6c63430008090033"; type BallotConstructorParams = | [signer?: Signer] diff --git a/typings/factories/contracts/voting/VotingDelegation__factory.ts b/typings/factories/contracts/voting/VotingDelegation__factory.ts index 0bbfff1..06ce753 100644 --- a/typings/factories/contracts/voting/VotingDelegation__factory.ts +++ b/typings/factories/contracts/voting/VotingDelegation__factory.ts @@ -202,7 +202,7 @@ const _abi = [ ]; const _bytecode = - "0x60a060405269054b40b1f852bda0000060805234801561001e57600080fd5b50604051610c9d380380610c9d83398101604081905261003d91610124565b610046336100d4565b6001600160a01b0381166100af5760405162461bcd60e51b815260206004820152602660248201527f566f74696e6744656c65676174696f6e3a204450532061646472657373206973604482015265103d32b9379760d11b606482015260840160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055610154565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561013657600080fd5b81516001600160a01b038116811461014d57600080fd5b9392505050565b608051610b2e61016f60003960006101f20152610b2e6000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b14610126578063d053b9d21461014b578063ef4e06ec1461016c578063f2fde38b1461017f578063fc1967131461019257600080fd5b80635e12967914610098578063694ec60e146100ad578063715018a6146100d65780637c88aaa7146100de575b600080fd5b6100ab6100a63660046108ef565b6101d0565b005b6100c06100bb3660046108ef565b6104b4565b6040516100cd91906109b1565b60405180910390f35b6100ab61060a565b6101166100ec3660046109fe565b6001600160a01b039182166000908152600360209081526040808320938352929052205416151590565b60405190151581526020016100cd565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100cd565b61015e6101593660046109fe565b610670565b6040519081526020016100cd565b600154610133906001600160a01b031681565b6100ab61018d366004610a28565b6107a2565b6101336101a03660046108ef565b6001600160a01b039182166000908152600360209081526040808320845194830194909420835292905220541690565b6001546040516370a0823160e01b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000009216906370a082319060240160206040518083038186803b15801561023557600080fd5b505afa158015610249573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026d9190610a4a565b10158061028157506001600160a01b038216155b6102e65760405162461bcd60e51b815260206004820152602b60248201527f566f74696e6744656c65676174696f6e3a2050726f787920686173206e6f742060448201526a32b737bab3b4102228299760a91b60648201526084015b60405180910390fd5b805160208083019190912033600090815260038352604080822083835290935291909120546001600160a01b03161561041d573360008181526003602090815260408083208584528252808320546001600160a01b031683526002825280832085845282528083209383529083905290205460018281018054909161036a91610a79565b8154811061037a5761037a610a90565b6000918252602090912001546001830180546001600160a01b0390921691839081106103a8576103a8610a90565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001018054806103e9576103e9610aa6565b60008281526020808220830160001990810180546001600160a01b0319169055909201909255338252929092525060408120555b336000908152600360209081526040808320848452909152902080546001600160a01b0319166001600160a01b038516908117909155156104af576001600160a01b038316600090815260026020908152604080832084845282528083206001808201805433808852938652938620849055908301815584529190922090910180546001600160a01b03191690911790555b505050565b80516020808301919091206001600160a01b0384166000908152600283526040808220838352909352918220600101546060929067ffffffffffffffff811115610500576105006108d9565b604051908082528060200260200182016040528015610529578160200160208202803683370190505b50905060005b6001600160a01b038616600090815260026020908152604080832086845290915290206001015463ffffffff82161015610601576001600160a01b03861660009081526002602090815260408083208684529091529020600101805463ffffffff83169081106105a1576105a1610a90565b9060005260206000200160009054906101000a90046001600160a01b0316828263ffffffff16815181106105d7576105d7610a90565b6001600160a01b0390921660209283029190910190910152806105f981610abc565b91505061052f565b50949350505050565b6000546001600160a01b031633146106645760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102dd565b61066e600061086d565b565b60008060005b6001600160a01b038516600090815260026020908152604080832087845290915290206001015463ffffffff8216101561079a57600180546001600160a01b0387811660009081526002602090815260408083208a84529091529020909201805492909116916370a08231919063ffffffff85169081106106f9576106f9610a90565b60009182526020909120015460405160e083901b6001600160e01b03191681526001600160a01b03909116600482015260240160206040518083038186803b15801561074457600080fd5b505afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190610a4a565b6107869083610ae0565b91508061079281610abc565b915050610676565b509392505050565b6000546001600160a01b031633146107fc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102dd565b6001600160a01b0381166108615760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102dd565b61086a8161086d565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b03811681146108d457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561090257600080fd5b61090b836108bd565b9150602083013567ffffffffffffffff8082111561092857600080fd5b818501915085601f83011261093c57600080fd5b81358181111561094e5761094e6108d9565b604051601f8201601f19908116603f01168101908382118183101715610976576109766108d9565b8160405282815288602084870101111561098f57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b818110156109f25783516001600160a01b0316835292840192918401916001016109cd565b50909695505050505050565b60008060408385031215610a1157600080fd5b610a1a836108bd565b946020939093013593505050565b600060208284031215610a3a57600080fd5b610a43826108bd565b9392505050565b600060208284031215610a5c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082821015610a8b57610a8b610a63565b500390565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600063ffffffff80831681811415610ad657610ad6610a63565b6001019392505050565b60008219821115610af357610af3610a63565b50019056fea2646970667358221220b21453c0fb79ade01370c9d2a5eaeb478aad6922f3d7b0a510d63957b536dfaa64736f6c63430008090033"; + "0x60a060405269054b40b1f852bda0000060805234801561001e57600080fd5b50604051610c9d380380610c9d83398101604081905261003d91610124565b610046336100d4565b6001600160a01b0381166100af5760405162461bcd60e51b815260206004820152602660248201527f566f74696e6744656c65676174696f6e3a204450532061646472657373206973604482015265103d32b9379760d11b606482015260840160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055610154565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561013657600080fd5b81516001600160a01b038116811461014d57600080fd5b9392505050565b608051610b2e61016f60003960006101f20152610b2e6000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b14610126578063d053b9d21461014b578063ef4e06ec1461016c578063f2fde38b1461017f578063fc1967131461019257600080fd5b80635e12967914610098578063694ec60e146100ad578063715018a6146100d65780637c88aaa7146100de575b600080fd5b6100ab6100a63660046108ef565b6101d0565b005b6100c06100bb3660046108ef565b6104b4565b6040516100cd91906109b1565b60405180910390f35b6100ab61060a565b6101166100ec3660046109fe565b6001600160a01b039182166000908152600360209081526040808320938352929052205416151590565b60405190151581526020016100cd565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100cd565b61015e6101593660046109fe565b610670565b6040519081526020016100cd565b600154610133906001600160a01b031681565b6100ab61018d366004610a28565b6107a2565b6101336101a03660046108ef565b6001600160a01b039182166000908152600360209081526040808320845194830194909420835292905220541690565b6001546040516370a0823160e01b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000009216906370a082319060240160206040518083038186803b15801561023557600080fd5b505afa158015610249573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026d9190610a4a565b10158061028157506001600160a01b038216155b6102e65760405162461bcd60e51b815260206004820152602b60248201527f566f74696e6744656c65676174696f6e3a2050726f787920686173206e6f742060448201526a32b737bab3b4102228299760a91b60648201526084015b60405180910390fd5b805160208083019190912033600090815260038352604080822083835290935291909120546001600160a01b03161561041d573360008181526003602090815260408083208584528252808320546001600160a01b031683526002825280832085845282528083209383529083905290205460018281018054909161036a91610a79565b8154811061037a5761037a610a90565b6000918252602090912001546001830180546001600160a01b0390921691839081106103a8576103a8610a90565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001018054806103e9576103e9610aa6565b60008281526020808220830160001990810180546001600160a01b0319169055909201909255338252929092525060408120555b336000908152600360209081526040808320848452909152902080546001600160a01b0319166001600160a01b038516908117909155156104af576001600160a01b038316600090815260026020908152604080832084845282528083206001808201805433808852938652938620849055908301815584529190922090910180546001600160a01b03191690911790555b505050565b80516020808301919091206001600160a01b0384166000908152600283526040808220838352909352918220600101546060929067ffffffffffffffff811115610500576105006108d9565b604051908082528060200260200182016040528015610529578160200160208202803683370190505b50905060005b6001600160a01b038616600090815260026020908152604080832086845290915290206001015463ffffffff82161015610601576001600160a01b03861660009081526002602090815260408083208684529091529020600101805463ffffffff83169081106105a1576105a1610a90565b9060005260206000200160009054906101000a90046001600160a01b0316828263ffffffff16815181106105d7576105d7610a90565b6001600160a01b0390921660209283029190910190910152806105f981610abc565b91505061052f565b50949350505050565b6000546001600160a01b031633146106645760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102dd565b61066e600061086d565b565b60008060005b6001600160a01b038516600090815260026020908152604080832087845290915290206001015463ffffffff8216101561079a57600180546001600160a01b0387811660009081526002602090815260408083208a84529091529020909201805492909116916370a08231919063ffffffff85169081106106f9576106f9610a90565b60009182526020909120015460405160e083901b6001600160e01b03191681526001600160a01b03909116600482015260240160206040518083038186803b15801561074457600080fd5b505afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190610a4a565b6107869083610ae0565b91508061079281610abc565b915050610676565b509392505050565b6000546001600160a01b031633146107fc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102dd565b6001600160a01b0381166108615760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102dd565b61086a8161086d565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b03811681146108d457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561090257600080fd5b61090b836108bd565b9150602083013567ffffffffffffffff8082111561092857600080fd5b818501915085601f83011261093c57600080fd5b81358181111561094e5761094e6108d9565b604051601f8201601f19908116603f01168101908382118183101715610976576109766108d9565b8160405282815288602084870101111561098f57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b818110156109f25783516001600160a01b0316835292840192918401916001016109cd565b50909695505050505050565b60008060408385031215610a1157600080fd5b610a1a836108bd565b946020939093013593505050565b600060208284031215610a3a57600080fd5b610a43826108bd565b9392505050565b600060208284031215610a5c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082821015610a8b57610a8b610a63565b500390565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600063ffffffff80831681811415610ad657610ad6610a63565b6001019392505050565b60008219821115610af357610af3610a63565b50019056fea2646970667358221220eac3a7eba46774d11d24c9db9f1dd07e716b2a3771a7a8bb0d421f294729c12c64736f6c63430008090033"; type VotingDelegationConstructorParams = | [signer?: Signer] From 8f47d1250d637f3cfe9c4c0504a5eb7eaaf3d46b Mon Sep 17 00:00:00 2001 From: valentinpollart Date: Wed, 4 May 2022 17:36:37 +0200 Subject: [PATCH 22/25] fix: add missing typings --- .../contracts/voting/testing/ExposedBallot.ts | 589 ++++++++++++++++++ .../voting/testing/ExposedBallot__factory.ts | 450 +++++++++++++ 2 files changed, 1039 insertions(+) create mode 100644 typings/contracts/voting/testing/ExposedBallot.ts create mode 100644 typings/factories/contracts/voting/testing/ExposedBallot__factory.ts diff --git a/typings/contracts/voting/testing/ExposedBallot.ts b/typings/contracts/voting/testing/ExposedBallot.ts new file mode 100644 index 0000000..4db073f --- /dev/null +++ b/typings/contracts/voting/testing/ExposedBallot.ts @@ -0,0 +1,589 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, +} from "../../../common"; + +export declare namespace Ballot { + export type VoteStruct = { choice: BytesLike; hasVoted: boolean }; + + export type VoteStructOutput = [string, boolean] & { + choice: string; + hasVoted: boolean; + }; +} + +export declare namespace ExposedBallot { + export type ResultSampleStruct = { voter: string; vote: Ballot.VoteStruct }; + + export type ResultSampleStructOutput = [string, Ballot.VoteStructOutput] & { + voter: string; + vote: Ballot.VoteStructOutput; + }; +} + +export interface ExposedBallotInterface extends utils.Interface { + functions: { + "DPS()": FunctionFragment; + "_results()": FunctionFragment; + "choices(uint256)": FunctionFragment; + "close()": FunctionFragment; + "closed()": FunctionFragment; + "description()": FunctionFragment; + "factory()": FunctionFragment; + "getChoices()": FunctionFragment; + "getVote(address)": FunctionFragment; + "hasVoted(address)": FunctionFragment; + "init(address,address,address,string,string,string,string[])": FunctionFragment; + "isValidChoice(bytes32)": FunctionFragment; + "owner()": FunctionFragment; + "proxy()": FunctionFragment; + "renounceOwnership()": FunctionFragment; + "resultStorage(bytes32)": FunctionFragment; + "title()": FunctionFragment; + "topic()": FunctionFragment; + "transferOwnership(address)": FunctionFragment; + "vote(string)": FunctionFragment; + "votingLimit()": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "DPS" + | "_results" + | "choices" + | "close" + | "closed" + | "description" + | "factory" + | "getChoices" + | "getVote" + | "hasVoted" + | "init" + | "isValidChoice" + | "owner" + | "proxy" + | "renounceOwnership" + | "resultStorage" + | "title" + | "topic" + | "transferOwnership" + | "vote" + | "votingLimit" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "DPS", values?: undefined): string; + encodeFunctionData(functionFragment: "_results", values?: undefined): string; + encodeFunctionData( + functionFragment: "choices", + values: [BigNumberish] + ): string; + encodeFunctionData(functionFragment: "close", values?: undefined): string; + encodeFunctionData(functionFragment: "closed", values?: undefined): string; + encodeFunctionData( + functionFragment: "description", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "factory", values?: undefined): string; + encodeFunctionData( + functionFragment: "getChoices", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "getVote", values: [string]): string; + encodeFunctionData(functionFragment: "hasVoted", values: [string]): string; + encodeFunctionData( + functionFragment: "init", + values: [string, string, string, string, string, string, string[]] + ): string; + encodeFunctionData( + functionFragment: "isValidChoice", + values: [BytesLike] + ): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData(functionFragment: "proxy", values?: undefined): string; + encodeFunctionData( + functionFragment: "renounceOwnership", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "resultStorage", + values: [BytesLike] + ): string; + encodeFunctionData(functionFragment: "title", values?: undefined): string; + encodeFunctionData(functionFragment: "topic", values?: undefined): string; + encodeFunctionData( + functionFragment: "transferOwnership", + values: [string] + ): string; + encodeFunctionData(functionFragment: "vote", values: [string]): string; + encodeFunctionData( + functionFragment: "votingLimit", + values?: undefined + ): string; + + decodeFunctionResult(functionFragment: "DPS", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "_results", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "choices", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "close", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "closed", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "description", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "factory", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getChoices", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVote", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "hasVoted", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "init", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "isValidChoice", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "proxy", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "renounceOwnership", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "resultStorage", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "title", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "topic", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "transferOwnership", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "vote", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "votingLimit", + data: BytesLike + ): Result; + + events: { + "OwnershipTransferred(address,address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; +} + +export interface OwnershipTransferredEventObject { + previousOwner: string; + newOwner: string; +} +export type OwnershipTransferredEvent = TypedEvent< + [string, string], + OwnershipTransferredEventObject +>; + +export type OwnershipTransferredEventFilter = + TypedEventFilter; + +export interface ExposedBallot extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: ExposedBallotInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + DPS(overrides?: CallOverrides): Promise<[string]>; + + _results( + overrides?: CallOverrides + ): Promise<[ExposedBallot.ResultSampleStructOutput[]]>; + + choices(arg0: BigNumberish, overrides?: CallOverrides): Promise<[string]>; + + close( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + closed(overrides?: CallOverrides): Promise<[boolean]>; + + description(overrides?: CallOverrides): Promise<[string]>; + + factory(overrides?: CallOverrides): Promise<[string]>; + + getChoices(overrides?: CallOverrides): Promise<[string[]]>; + + getVote(voter: string, overrides?: CallOverrides): Promise<[string]>; + + hasVoted(voter: string, overrides?: CallOverrides): Promise<[boolean]>; + + init( + _DPS: string, + _proxy: string, + _factory: string, + _title: string, + _description: string, + _topic: string, + _choices: string[], + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + isValidChoice( + choiceHash: BytesLike, + overrides?: CallOverrides + ): Promise<[boolean]>; + + owner(overrides?: CallOverrides): Promise<[string]>; + + proxy(overrides?: CallOverrides): Promise<[string]>; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + resultStorage( + arg0: BytesLike, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + title(overrides?: CallOverrides): Promise<[string]>; + + topic(overrides?: CallOverrides): Promise<[string]>; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + vote( + choice: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + votingLimit(overrides?: CallOverrides): Promise<[BigNumber]>; + }; + + DPS(overrides?: CallOverrides): Promise; + + _results( + overrides?: CallOverrides + ): Promise; + + choices(arg0: BigNumberish, overrides?: CallOverrides): Promise; + + close( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + closed(overrides?: CallOverrides): Promise; + + description(overrides?: CallOverrides): Promise; + + factory(overrides?: CallOverrides): Promise; + + getChoices(overrides?: CallOverrides): Promise; + + getVote(voter: string, overrides?: CallOverrides): Promise; + + hasVoted(voter: string, overrides?: CallOverrides): Promise; + + init( + _DPS: string, + _proxy: string, + _factory: string, + _title: string, + _description: string, + _topic: string, + _choices: string[], + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + isValidChoice( + choiceHash: BytesLike, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxy(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + resultStorage(arg0: BytesLike, overrides?: CallOverrides): Promise; + + title(overrides?: CallOverrides): Promise; + + topic(overrides?: CallOverrides): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + vote( + choice: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + votingLimit(overrides?: CallOverrides): Promise; + + callStatic: { + DPS(overrides?: CallOverrides): Promise; + + _results( + overrides?: CallOverrides + ): Promise; + + choices(arg0: BigNumberish, overrides?: CallOverrides): Promise; + + close(overrides?: CallOverrides): Promise; + + closed(overrides?: CallOverrides): Promise; + + description(overrides?: CallOverrides): Promise; + + factory(overrides?: CallOverrides): Promise; + + getChoices(overrides?: CallOverrides): Promise; + + getVote(voter: string, overrides?: CallOverrides): Promise; + + hasVoted(voter: string, overrides?: CallOverrides): Promise; + + init( + _DPS: string, + _proxy: string, + _factory: string, + _title: string, + _description: string, + _topic: string, + _choices: string[], + overrides?: CallOverrides + ): Promise; + + isValidChoice( + choiceHash: BytesLike, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxy(overrides?: CallOverrides): Promise; + + renounceOwnership(overrides?: CallOverrides): Promise; + + resultStorage( + arg0: BytesLike, + overrides?: CallOverrides + ): Promise; + + title(overrides?: CallOverrides): Promise; + + topic(overrides?: CallOverrides): Promise; + + transferOwnership( + newOwner: string, + overrides?: CallOverrides + ): Promise; + + vote(choice: string, overrides?: CallOverrides): Promise; + + votingLimit(overrides?: CallOverrides): Promise; + }; + + filters: { + "OwnershipTransferred(address,address)"( + previousOwner?: string | null, + newOwner?: string | null + ): OwnershipTransferredEventFilter; + OwnershipTransferred( + previousOwner?: string | null, + newOwner?: string | null + ): OwnershipTransferredEventFilter; + }; + + estimateGas: { + DPS(overrides?: CallOverrides): Promise; + + _results(overrides?: CallOverrides): Promise; + + choices(arg0: BigNumberish, overrides?: CallOverrides): Promise; + + close( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + closed(overrides?: CallOverrides): Promise; + + description(overrides?: CallOverrides): Promise; + + factory(overrides?: CallOverrides): Promise; + + getChoices(overrides?: CallOverrides): Promise; + + getVote(voter: string, overrides?: CallOverrides): Promise; + + hasVoted(voter: string, overrides?: CallOverrides): Promise; + + init( + _DPS: string, + _proxy: string, + _factory: string, + _title: string, + _description: string, + _topic: string, + _choices: string[], + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + isValidChoice( + choiceHash: BytesLike, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxy(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + resultStorage( + arg0: BytesLike, + overrides?: CallOverrides + ): Promise; + + title(overrides?: CallOverrides): Promise; + + topic(overrides?: CallOverrides): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + vote( + choice: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + votingLimit(overrides?: CallOverrides): Promise; + }; + + populateTransaction: { + DPS(overrides?: CallOverrides): Promise; + + _results(overrides?: CallOverrides): Promise; + + choices( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise; + + close( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + closed(overrides?: CallOverrides): Promise; + + description(overrides?: CallOverrides): Promise; + + factory(overrides?: CallOverrides): Promise; + + getChoices(overrides?: CallOverrides): Promise; + + getVote( + voter: string, + overrides?: CallOverrides + ): Promise; + + hasVoted( + voter: string, + overrides?: CallOverrides + ): Promise; + + init( + _DPS: string, + _proxy: string, + _factory: string, + _title: string, + _description: string, + _topic: string, + _choices: string[], + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + isValidChoice( + choiceHash: BytesLike, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxy(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + resultStorage( + arg0: BytesLike, + overrides?: CallOverrides + ): Promise; + + title(overrides?: CallOverrides): Promise; + + topic(overrides?: CallOverrides): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + vote( + choice: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + votingLimit(overrides?: CallOverrides): Promise; + }; +} diff --git a/typings/factories/contracts/voting/testing/ExposedBallot__factory.ts b/typings/factories/contracts/voting/testing/ExposedBallot__factory.ts new file mode 100644 index 0000000..04e1e48 --- /dev/null +++ b/typings/factories/contracts/voting/testing/ExposedBallot__factory.ts @@ -0,0 +1,450 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { + ExposedBallot, + ExposedBallotInterface, +} from "../../../../contracts/voting/testing/ExposedBallot"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IERC20Metadata", + name: "_DPS", + type: "address", + }, + { + internalType: "contract VotingDelegation", + name: "_proxy", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + inputs: [], + name: "DPS", + outputs: [ + { + internalType: "contract IERC20Metadata", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "_results", + outputs: [ + { + components: [ + { + internalType: "address", + name: "voter", + type: "address", + }, + { + components: [ + { + internalType: "bytes32", + name: "choice", + type: "bytes32", + }, + { + internalType: "bool", + name: "hasVoted", + type: "bool", + }, + ], + internalType: "struct Ballot.Vote", + name: "vote", + type: "tuple", + }, + ], + internalType: "struct ExposedBallot.ResultSample[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "choices", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "close", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "closed", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "description", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "factory", + outputs: [ + { + internalType: "contract BallotFactory", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getChoices", + outputs: [ + { + internalType: "bytes32[]", + name: "", + type: "bytes32[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "voter", + type: "address", + }, + ], + name: "getVote", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "voter", + type: "address", + }, + ], + name: "hasVoted", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IERC20Metadata", + name: "_DPS", + type: "address", + }, + { + internalType: "contract VotingDelegation", + name: "_proxy", + type: "address", + }, + { + internalType: "contract BallotFactory", + name: "_factory", + type: "address", + }, + { + internalType: "string", + name: "_title", + type: "string", + }, + { + internalType: "string", + name: "_description", + type: "string", + }, + { + internalType: "string", + name: "_topic", + type: "string", + }, + { + internalType: "string[]", + name: "_choices", + type: "string[]", + }, + ], + name: "init", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "choiceHash", + type: "bytes32", + }, + ], + name: "isValidChoice", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "proxy", + outputs: [ + { + internalType: "contract VotingDelegation", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + name: "resultStorage", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "title", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "topic", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "string", + name: "choice", + type: "string", + }, + ], + name: "vote", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "votingLimit", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, +]; + +const _bytecode = + "0x60a060405269054b40b1f852bda000006080523480156200001f57600080fd5b506040516200152b3803806200152b8339810160408190526200004291620000ed565b81816200004f3362000084565b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055506200012c9050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000ea57600080fd5b50565b600080604083850312156200010157600080fd5b82516200010e81620000d4565b60208401519092506200012181620000d4565b809150509250929050565b6080516113dc6200014f600039600081816102270152610d0a01526113dc6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806395385edd116100b8578063ec5568891161007c578063ec556889146102ad578063ef4e06ec146102c0578063f2fde38b146102d3578063f3831ec4146102e6578063f6fd7fde146102f9578063fc36e15b1461030c57600080fd5b806395385edd1461024957806398c81bbf14610269578063bf63a5771461027e578063c1c9e9f014610287578063c45a01551461029a57600080fd5b8063715018a6116100ff578063715018a6146101c35780637284e416146101cb5780638d337b81146101d45780638da5cb5b146101fd57806390a64bdd1461022257600080fd5b806309eef43e1461013c57806327454ea81461018057806343d726d6146101955780634a79d50c1461019f578063597e1fb5146101b6575b600080fd5b61016b61014a366004610f87565b6001600160a01b03166000908152600b602052604090206001015460ff1690565b60405190151581526020015b60405180910390f35b61018861031f565b6040516101779190610fab565b61019d610487565b005b6101a860045481565b604051908152602001610177565b60065461016b9060ff1681565b61019d6107d9565b6101a860055481565b6101a86101e2366004610f87565b6001600160a01b03166000908152600b602052604090205490565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610177565b6101a87f000000000000000000000000000000000000000000000000000000000000000081565b6101a8610257366004611010565b60096020526000908152604090205481565b61027161083f565b6040516101779190611029565b6101a860075481565b61016b610295366004611010565b610897565b60035461020a906001600160a01b031681565b60025461020a906001600160a01b031681565b60015461020a906001600160a01b031681565b61019d6102e1366004610f87565b6108ee565b61019d6102f43660046111d3565b6109b9565b6101a8610307366004611010565b610bab565b61019d61031a3660046112b2565b610bcc565b600a5460609060009067ffffffffffffffff8111156103405761034061107d565b60405190808252806020026020018201604052801561039957816020015b6040805180820182526000808252825180840190935280835260208084019190915281019190915281526020019060019003908161035e5790505b50905060005b600a54811015610481576040518060400160405280600a83815481106103c7576103c76112ef565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03168152602001600b6000600a858154811061040a5761040a6112ef565b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151808301909252805482526001015460ff1615159181019190915290528251839083908110610463576104636112ef565b602002602001018190525080806104799061131b565b91505061039f565b50919050565b600360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104d557600080fd5b505afa1580156104e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050d9190611336565b6001600160a01b0316336001600160a01b03161461057e5760405162461bcd60e51b8152602060048201526024808201527f566f74696e673a205265737472696374656420746f20666163746f7279206f776044820152633732b91760e11b60648201526084015b60405180910390fd5b60065460ff16156105d15760405162461bcd60e51b815260206004820152601e60248201527f566f74696e673a2042616c6c6f7420616c726561647920636c6f7365642e00006044820152606401610575565b6006805460ff1916600117905560005b600a5481101561076e576000600a8281548110610600576106006112ef565b600091825260209091200154600254600754604051636829dce960e11b81526001600160a01b0393841660048201819052602482019290925290935091169063d053b9d29060440160206040518083038186803b15801561066057600080fd5b505afa158015610674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106989190611353565b6001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a082319060240160206040518083038186803b1580156106dd57600080fd5b505afa1580156106f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107159190611353565b61071f919061136c565b6001600160a01b0382166000908152600b6020908152604080832054835260099091528120805490919061075490849061136c565b9091555082915061076690508161131b565b9150506105e1565b50600360009054906101000a90046001600160a01b03166001600160a01b0316635d5a96236040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107bf57600080fd5b505af11580156107d3573d6000803e3d6000fd5b50505050565b6000546001600160a01b031633146108335760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610575565b61083d6000610ec2565b565b6060600880548060200260200160405190810160405280929190818152602001828054801561088d57602002820191906000526020600020905b815481526020019060010190808311610879575b5050505050905090565b6000805b6008548110156108e55782600882815481106108b9576108b96112ef565b906000526020600020015414156108d35750600192915050565b806108dd8161131b565b91505061089b565b50600092915050565b6000546001600160a01b031633146109485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610575565b6001600160a01b0381166109ad5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610575565b6109b681610ec2565b50565b600054600160a81b900460ff166109dd57600054600160a01b900460ff16156109e1565b303b155b610a445760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610575565b600054600160a81b900460ff16158015610a6e576000805461ffff60a01b191661010160a01b1790555b84516020808701919091206004558451858201206005558351908401206007556006805460ff19169055815167ffffffffffffffff811115610ab257610ab261107d565b604051908082528060200260200182016040528015610adb578160200160208202803683370190505b508051610af091600891602090910190610f12565b5060005b8251811015610b4f57828181518110610b0f57610b0f6112ef565b60200260200101518051906020012060088281548110610b3157610b316112ef565b60009182526020909120015580610b478161131b565b915050610af4565b50600180546001600160a01b03808b166001600160a01b031992831617909255600280548a841690831617905560038054928916929091169190911790558015610ba1576000805460ff60a81b191690555b5050505050505050565b60088181548110610bbb57600080fd5b600091825260209091200154905081565b60065460ff1615610c1f5760405162461bcd60e51b815260206004820152601960248201527f566f74696e673a2042616c6c6f7420697320636c6f7365642e000000000000006044820152606401610575565b600254600754604051637c88aaa760e01b815233600482015260248101919091526001600160a01b0390911690637c88aaa79060440160206040518083038186803b158015610c6d57600080fd5b505afa158015610c81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca59190611384565b15610cf25760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a20566f74652069732064656c6567617465642e0000000000006044820152606401610575565b6001546040516370a0823160e01b81523360048201527f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316906370a082319060240160206040518083038186803b158015610d5557600080fd5b505afa158015610d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8d9190611353565b1015610ddb5760405162461bcd60e51b815260206004820152601f60248201527f566f74696e673a204e6f7420656e6f7567682044505320746f20766f74652e006044820152606401610575565b80516020820120610deb81610897565b610e375760405162461bcd60e51b815260206004820152601a60248201527f566f74696e673a2043686f69636520697320696e76616c69642e0000000000006044820152606401610575565b336000908152600b602052604090206001015460ff16610eaf57336000818152600b602052604081206001908101805460ff191682179055600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b03191690911790555b336000908152600b602052604090205550565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054828255906000526020600020908101928215610f4d579160200282015b82811115610f4d578251825591602001919060010190610f32565b50610f59929150610f5d565b5090565b5b80821115610f595760008155600101610f5e565b6001600160a01b03811681146109b657600080fd5b600060208284031215610f9957600080fd5b8135610fa481610f72565b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101561100357815180516001600160a01b0316855286015180518786015286015115158585015260609093019290850190600101610fc8565b5091979650505050505050565b60006020828403121561102257600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561106157835183529284019291840191600101611045565b50909695505050505050565b803561107881610f72565b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156110bc576110bc61107d565b604052919050565b600082601f8301126110d557600080fd5b813567ffffffffffffffff8111156110ef576110ef61107d565b611102601f8201601f1916602001611093565b81815284602083860101111561111757600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261114557600080fd5b8135602067ffffffffffffffff808311156111625761116261107d565b8260051b611171838201611093565b938452858101830193838101908886111561118b57600080fd5b84880192505b858310156111c7578235848111156111a95760008081fd5b6111b78a87838c01016110c4565b8352509184019190840190611191565b98975050505050505050565b600080600080600080600060e0888a0312156111ee57600080fd5b6111f78861106d565b96506112056020890161106d565b95506112136040890161106d565b9450606088013567ffffffffffffffff8082111561123057600080fd5b61123c8b838c016110c4565b955060808a013591508082111561125257600080fd5b61125e8b838c016110c4565b945060a08a013591508082111561127457600080fd5b6112808b838c016110c4565b935060c08a013591508082111561129657600080fd5b506112a38a828b01611134565b91505092959891949750929550565b6000602082840312156112c457600080fd5b813567ffffffffffffffff8111156112db57600080fd5b6112e7848285016110c4565b949350505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561132f5761132f611305565b5060010190565b60006020828403121561134857600080fd5b8151610fa481610f72565b60006020828403121561136557600080fd5b5051919050565b6000821982111561137f5761137f611305565b500190565b60006020828403121561139657600080fd5b81518015158114610fa457600080fdfea2646970667358221220baf6f0ba9ffd601c5fe3be19cd84b0fec2e73f9a1666eaec9f16376a640cc20864736f6c63430008090033"; + +type ExposedBallotConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: ExposedBallotConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class ExposedBallot__factory extends ContractFactory { + constructor(...args: ExposedBallotConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _DPS: string, + _proxy: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise { + return super.deploy( + _DPS, + _proxy, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + _DPS: string, + _proxy: string, + overrides?: Overrides & { from?: string | Promise } + ): TransactionRequest { + return super.getDeployTransaction(_DPS, _proxy, overrides || {}); + } + override attach(address: string): ExposedBallot { + return super.attach(address) as ExposedBallot; + } + override connect(signer: Signer): ExposedBallot__factory { + return super.connect(signer) as ExposedBallot__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): ExposedBallotInterface { + return new utils.Interface(_abi) as ExposedBallotInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): ExposedBallot { + return new Contract(address, _abi, signerOrProvider) as ExposedBallot; + } +} From 91250bf11c917dc0c3371410f9607b602eb3e073 Mon Sep 17 00:00:00 2001 From: valentinpollart Date: Wed, 4 May 2022 18:11:44 +0200 Subject: [PATCH 23/25] fix: run eslint --- scripts/deploy-vote.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/deploy-vote.ts b/scripts/deploy-vote.ts index 9ab961a..a9d6c76 100644 --- a/scripts/deploy-vote.ts +++ b/scripts/deploy-vote.ts @@ -1,6 +1,6 @@ import { ethers, network } from 'hardhat'; import { formatUnits, parseUnits } from '@ethersproject/units'; -import waitTx from "../lib/waitTx"; +import waitTx from '../lib/waitTx'; import { DeepSquare__factory } from '../typings/factories/contracts/DeepSquare__factory'; import { BallotFactory__factory } from '../typings/factories/contracts/voting/BallotFactory__factory'; import { Ballot__factory } from '../typings/factories/contracts/voting/Ballot__factory'; From 55044a56fd7021b2cd560b323f70bf0a8a6e5ae3 Mon Sep 17 00:00:00 2001 From: valentinpollart Date: Thu, 5 May 2022 10:31:16 +0200 Subject: [PATCH 24/25] fix: repair voting tests --- scripts/test.ts | 29 +++++++++++++++-------------- test/Ballot.spec.ts | 35 +++++++++++++++++++++++------------ test/BallotFactory.spec.ts | 4 ++-- test/VotingDelegation.spec.ts | 13 ++++++++----- 4 files changed, 48 insertions(+), 33 deletions(-) diff --git a/scripts/test.ts b/scripts/test.ts index 6c95dd9..085c901 100644 --- a/scripts/test.ts +++ b/scripts/test.ts @@ -50,25 +50,26 @@ async function main() { // // await waitTx(ballot.vote(BigNumber.from(0))); - await waitTx( - ballotFactory - .connect(dpsHolder) - .createBallot( - 'Is the test deployment working properly ?', - 'Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?', - 'testing', - [ - 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', - 'Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.', - 'Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', - ], - ), - ); + // await waitTx( + // ballotFactory + // .connect(dpsHolder) + // .createBallot( + // 'Is the test deployment working properly ?', + // 'Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?', + // 'testing', + // [ + // 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', + // 'Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.', + // 'Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', + // ], + // ), + // ); // await waitTx(ballot.connect(dpsHolder).close()); console.log(await ballotFactory.getActiveBallots()); console.log(await DeepSquare.balanceOf('0x7aeac7429b348c8979a19DeA94D0cCfd888589c2')); console.log(await ballot.resultStorage(id('Yes'))); console.log(await ballot.resultStorage(id('No'))); + console.log(await proxy.representative('0x2FA6894875bb444e2e3f5911a557094FFCFc6638', 'Deployment')); // console.log(await ballot.getVote(deployer.address)); } diff --git a/test/Ballot.spec.ts b/test/Ballot.spec.ts index dd07f7d..d4982c0 100644 --- a/test/Ballot.spec.ts +++ b/test/Ballot.spec.ts @@ -1,6 +1,5 @@ import { expect } from 'chai'; -import { BigNumber } from '@ethersproject/bignumber'; -import { parseUnits } from '@ethersproject/units'; +import { id } from '@ethersproject/hash'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { DeepSquare } from '../typings/contracts/DeepSquare'; import { BallotFactory } from '../typings/contracts/voting/BallotFactory'; @@ -11,7 +10,7 @@ import { ERC20Agent } from './testing/ERC20Agent'; import setup from './testing/setup'; import setupVoting from './testing/setupVoting'; -describe.only('Ballot', () => { +describe('Ballot', () => { let owner: SignerWithAddress; let accounts: SignerWithAddress[]; let DPS: DeepSquare; @@ -33,10 +32,21 @@ describe.only('Ballot', () => { 'baz', 'qux', ]); - expect(await ballot.title()).to.equals('foo'); - expect(await ballot.topic()).to.equals('bar'); - expect(await ballot.getChoices()).to.deep.equals(['baz', 'qux']); - // expect(await ballot.getResults()).to.deep.equals([BigNumber.from(0), BigNumber.from(0)]); + expect(await ballot.title()).to.equals(id('foo')); + expect(await ballot.description()).to.equals(id('bar')); + expect(await ballot.topic()).to.equals(id('bar')); + expect(await ballot.getChoices()).to.deep.equals([id('baz'), id('qux')]); + }); + }); + + describe('isValidChoice', () => { + it('should return if given choice is a valid vote choice', async () => { + await ballot.init(DPS.address, votingDelegation.address, ballotFactory.address, 'foo', 'bar', 'bar', [ + 'baz', + 'qux', + ]); + expect(await ballot.isValidChoice(id('baz'))).to.equals(true); + expect(await ballot.isValidChoice(id('baq'))).to.equals(false); }); }); @@ -51,9 +61,6 @@ describe.only('Ballot', () => { await ballot.close(); await expect(ballot.connect(accounts[0]).vote('bar')).to.revertedWith('Voting: Ballot is closed.'); }); - it('should throw if proposal does not exist', async () => { - await expect(ballot.connect(accounts[0]).vote('baz')).to.revertedWith('Voting: Choice index is too high.'); - }); it('should throw if voter has granted proxy on the topic', async () => { await agentDPS.transfer(accounts[1], 25000, 18); await votingDelegation.connect(accounts[0]).delegate(accounts[1].address, 'qux'); @@ -62,12 +69,16 @@ describe.only('Ballot', () => { it('should throw if voter has less than 25k DPS', async () => { await expect(ballot.connect(accounts[0]).vote('bar')).to.revertedWith('Voting: Not enough DPS to vote.'); }); + it('should throw if proposal does not exist', async () => { + await agentDPS.transfer(accounts[0], 25000, 18); + await expect(ballot.connect(accounts[0]).vote('baq')).to.revertedWith('Voting: Choice is invalid.'); + }); it('should vote', async () => { await agentDPS.transfer(accounts[0], 25000, 18); await ballot.connect(accounts[0]).vote('bar'); - expect(await ballot._results()).to.deep.equals([[accounts[0].address, [0, true]]]); + expect(await ballot._results()).to.deep.equals([[accounts[0].address, [id('bar'), true]]]); await ballot.connect(accounts[0]).vote('baz'); - expect(await ballot._results()).to.deep.equals([[accounts[0].address, [1, true]]]); + expect(await ballot._results()).to.deep.equals([[accounts[0].address, [id('baz'), true]]]); }); }); diff --git a/test/BallotFactory.spec.ts b/test/BallotFactory.spec.ts index 8d0b740..ec0372b 100644 --- a/test/BallotFactory.spec.ts +++ b/test/BallotFactory.spec.ts @@ -37,7 +37,7 @@ describe('Ballot Factory', async () => { it('should create a new ballot', async () => { await ballotFactory.setImplementationAddress(ballotImplementation.address); const [ballotAddress] = await ballotFactory - .createBallot('foo', 'qux', ['bar', 'baz']) + .createBallot('foo', 'quux', 'qux', ['bar', 'baz']) .then(async (t) => (await t.wait()).events?.find((e) => e.event === 'BallotCreated')?.args ?? []); expect(await ballotFactory.getActiveBallots()).to.deep.equals([ballotAddress]); }); @@ -47,7 +47,7 @@ describe('Ballot Factory', async () => { it('should archive an active ballot', async () => { await ballotFactory.setImplementationAddress(ballotImplementation.address); const [ballotAddress] = await ballotFactory - .createBallot('foo', 'qux', ['bar', 'baz']) + .createBallot('foo', 'quux', 'qux', ['bar', 'baz']) .then(async (t) => (await t.wait()).events?.find((e) => e.event === 'BallotCreated')?.args ?? []); await new Ballot__factory(owner).attach(ballotAddress).close(); expect(await ballotFactory.getActiveBallots()).to.deep.equals([]); diff --git a/test/VotingDelegation.spec.ts b/test/VotingDelegation.spec.ts index 436749b..37bccab 100644 --- a/test/VotingDelegation.spec.ts +++ b/test/VotingDelegation.spec.ts @@ -1,4 +1,5 @@ import { expect } from 'chai'; +import { id } from '@ethersproject/hash'; import { parseUnits } from '@ethersproject/units'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { ZERO_ADDRESS } from '../lib/constants'; @@ -59,12 +60,14 @@ describe('Voting delegation', async () => { }); }); - describe('proxyAmount', () => { - it('should returns total proxy vote power', async () => { + describe('delegationAmount', () => { + it('should returns total delegation vote power', async () => { await agentDPS.transfer(accounts[0], 55555, 18); await agentDPS.transfer(accounts[1], 25000, 18); await votingDelegation.connect(accounts[0]).delegate(accounts[1].address, 'foo'); - expect(await votingDelegation.delegationAmount(accounts[1].address, 'foo')).to.equals(parseUnits('55555', 18)); + expect(await votingDelegation.delegationAmount(accounts[1].address, id('foo'))).to.equals( + parseUnits('55555', 18), + ); }); }); @@ -73,8 +76,8 @@ describe('Voting delegation', async () => { await agentDPS.transfer(accounts[0], 25000, 18); await agentDPS.transfer(accounts[1], 25000, 18); await votingDelegation.connect(accounts[0]).delegate(accounts[1].address, 'foo'); - expect(await votingDelegation.hasDelegated(accounts[0].address, 'foo')).to.equals(true); - expect(await votingDelegation.hasDelegated(accounts[1].address, 'foo')).to.equals(false); + expect(await votingDelegation.hasDelegated(accounts[0].address, id('foo'))).to.equals(true); + expect(await votingDelegation.hasDelegated(accounts[1].address, id('foo'))).to.equals(false); }); }); }); From c3064cace45e2f6b79bd116da0c9071c897cf5c3 Mon Sep 17 00:00:00 2001 From: valentinpollart Date: Tue, 10 May 2022 13:52:28 +0200 Subject: [PATCH 25/25] feat: add access control is ballot factory --- contracts/voting/Ballot.sol | 4 +-- contracts/voting/BallotFactory.sol | 39 +++++++++++++++--------------- scripts/test.ts | 14 ++++++----- 3 files changed, 29 insertions(+), 28 deletions(-) diff --git a/contracts/voting/Ballot.sol b/contracts/voting/Ballot.sol index 1ad1f53..d6ff261 100644 --- a/contracts/voting/Ballot.sol +++ b/contracts/voting/Ballot.sol @@ -93,7 +93,7 @@ contract Ballot is Ownable, Initializable { * @param _topic The topic of the vote * @param _choices The different choices for this vote */ - function init(IERC20Metadata _DPS, VotingDelegation _proxy, BallotFactory _factory, string memory _title, string memory _description, string memory _topic, string[] memory _choices) public initializer { + function init(IERC20Metadata _DPS, VotingDelegation _proxy, string memory _title, string memory _description, string memory _topic, string[] memory _choices) public initializer { title = keccak256(bytes(_title)); description = keccak256(bytes(_description)); topic = keccak256(bytes(_topic)); @@ -104,7 +104,7 @@ contract Ballot is Ownable, Initializable { } DPS = _DPS; proxy = _proxy; - factory = _factory; + factory = BallotFactory(msg.sender); } /** diff --git a/contracts/voting/BallotFactory.sol b/contracts/voting/BallotFactory.sol index a394eba..a4adcfd 100644 --- a/contracts/voting/BallotFactory.sol +++ b/contracts/voting/BallotFactory.sol @@ -5,6 +5,7 @@ pragma solidity ^0.8.0; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "@openzeppelin/contracts/proxy/Clones.sol"; +import "@openzeppelin/contracts/access/AccessControl.sol"; import "./Ballot.sol"; import "./VotingDelegation.sol"; @@ -13,25 +14,32 @@ import "./VotingDelegation.sol"; * @author Mathieu Bour, Valentin Pollart, Clarisse Tarrou and Charly Mancel for the DeepSquare Association. * @dev Implementation of ballot factory, accordingly to EIP 1167 nomenclature for minimal proxy implementation */ -contract BallotFactory is Ownable { +contract BallotFactory is Ownable, AccessControl { // @dev Contract defining the DPS token IERC20Metadata public DPS; - // @dev The list of all active ballot contract clones - address[] public activeBallotAddresses; - - // @dev The list of all archived ballot contract clones - address[] public archivedBallotAddresses; - // @dev The address of the ballot implementation used as ballot contract proxy address public implementationAddress; + // @dev The closable role, granted to ballot clones created by this factory. + bytes32 public constant CLOSABLE = keccak256("CLOSABLE"); + /** * @dev Event fired each time a ballot contract clone is created * @param ballotAddress The address of the created clone contract + * @param title The title of the ballot + * @param description The URL of the file containing the full description of the ballot + * @param topic The topic of the ballot + * @param choices The choices of the ballot */ event BallotCreated(address ballotAddress, string title, string description, string topic, string[] choices); + /** + * @dev Event fired each time a ballot clone is closed + * @param ballotAddress The address of the closed clone ballot + */ + event BallotClosed(address ballotAddress); + /** * @param _DPS The DPS contract address * @param _implementationAddress The ballot contract proxy address @@ -53,8 +61,8 @@ contract BallotFactory is Ownable { function createBallot(string memory title, string memory description, string memory topic, string[] memory choices) external onlyOwner { Ballot implementation = Ballot(implementationAddress); address cloneAddress = Clones.clone(implementationAddress); - Ballot(cloneAddress).init(implementation.DPS(), implementation.proxy(), this, title, description, topic, choices); - activeBallotAddresses.push(cloneAddress); + Ballot(cloneAddress).init(implementation.DPS(), implementation.proxy(), title, description, topic, choices); + _grantRole(CLOSABLE, cloneAddress); emit BallotCreated(cloneAddress, title, description, topic, choices); } @@ -62,17 +70,8 @@ contract BallotFactory is Ownable { * @notice Archive a ballot and remove it from the active ballot list * @dev It can be perform only by the ballot itself by calling this method within its close method. */ - function archiveBallot() external { - bool isBallotContract = false; - for(uint i = 0; i < activeBallotAddresses.length; i++) { - if (activeBallotAddresses[i] == msg.sender) { - isBallotContract = true; - archivedBallotAddresses.push(activeBallotAddresses[i]); - activeBallotAddresses[i] = activeBallotAddresses[activeBallotAddresses.length - 1]; - activeBallotAddresses.pop(); - return; - } - } + function archiveBallot() external onlyRole(CLOSABLE) { + emit BallotClosed(msg.sender); } /** diff --git a/scripts/test.ts b/scripts/test.ts index 085c901..d533939 100644 --- a/scripts/test.ts +++ b/scripts/test.ts @@ -32,7 +32,7 @@ async function main() { console.log('gnosis:', gnosisAddress); const ballotFactory = await new BallotFactory__factory(deployer).attach('0x5B8dE5367E9b94bF3577F8675dfa50a1101c4DcA'); console.log('ballotFactory:', ballotFactory.address); - const ballot = await new Ballot__factory(deployer).attach('0xE55De8f141b006930B3A092cf00258BC4F9E1e8A'); + const ballot = await new Ballot__factory(deployer).attach('0x8a2F0e2b584d0e652cb6C75eb58a827EaE6341fb'); // // console.log('Vote is', (await ballot.closed()) ? 'closed' : 'open'); // @@ -65,11 +65,13 @@ async function main() { // ), // ); // await waitTx(ballot.connect(dpsHolder).close()); - console.log(await ballotFactory.getActiveBallots()); - console.log(await DeepSquare.balanceOf('0x7aeac7429b348c8979a19DeA94D0cCfd888589c2')); - console.log(await ballot.resultStorage(id('Yes'))); - console.log(await ballot.resultStorage(id('No'))); - console.log(await proxy.representative('0x2FA6894875bb444e2e3f5911a557094FFCFc6638', 'Deployment')); + // console.log(await ballotFactory.getActiveBallots()); + // console.log(await DeepSquare.balanceOf('0x7aeac7429b348c8979a19DeA94D0cCfd888589c2')); + // console.log(await ballot.resultStorage(id('Yes'))); + // console.log(await ballot.resultStorage(id('No'))); + // console.log(await proxy.representative('0x2FA6894875bb444e2e3f5911a557094FFCFc6638', 'Deployment')); + console.log(await ballot.hasVoted('0x2FA6894875bb444e2e3f5911a557094FFCFc6638')); + console.log(await ballot.getVote('0x2FA6894875bb444e2e3f5911a557094FFCFc6638')); // console.log(await ballot.getVote(deployer.address)); }