diff --git a/contracts/modules/Checkpoint/WeightedVoteCheckpointFactory.sol b/contracts/modules/Checkpoint/WeightedVoteCheckpointFactory.sol new file mode 100644 index 000000000..c86d61e6b --- /dev/null +++ b/contracts/modules/Checkpoint/WeightedVoteCheckpointFactory.sol @@ -0,0 +1,98 @@ +pragma solidity ^0.4.24; + +import "./WeightedVoteCheckpoint.sol"; +import "../ModuleFactory.sol"; + +/** + * @title Factory for deploying WeightedVoteCheckpoint module + */ +contract WeightedVoteCheckpointFactory is ModuleFactory { + + /** + * @notice Constructor + * @param _polyAddress Address of the polytoken + * @param _setupCost Setup cost of the module + * @param _usageCost Usage cost of the module + * @param _subscriptionCost Subscription cost of the module + */ + constructor (address _polyAddress, uint256 _setupCost, uint256 _usageCost, uint256 _subscriptionCost) public + ModuleFactory(_polyAddress, _setupCost, _usageCost, _subscriptionCost) + { + version = "1.0.0"; + name = "WeightedVoteCheckpoint"; + title = "Weighted Vote Checkpoint"; + description = "Weighted votes based on token amount"; + compatibleSTVersionRange["lowerBound"] = VersionUtils.pack(uint8(0), uint8(0), uint8(0)); + compatibleSTVersionRange["upperBound"] = VersionUtils.pack(uint8(0), uint8(0), uint8(0)); + + } + + /** + * @notice used to launch the Module with the help of factory + * @return address Contract address of the Module + */ + function deploy(bytes /* _data */) external returns(address) { + if (setupCost > 0) + require(polyToken.transferFrom(msg.sender, owner, setupCost), "Failed transferFrom because of sufficent Allowance is not provided"); + return address(new WeightedVoteCheckpoint(msg.sender, address(polyToken))); + } + + /** + * @notice Type of the Module factory + */ + function getTypes() external view returns(uint8[]) { + uint8[] memory res = new uint8[](1); + res[0] = 4; + return res; + } + + /** + * @notice Get the name of the Module + */ + function getName() public view returns(bytes32) { + return name; + } + + /** + * @notice Get the description of the Module + */ + function getDescription() external view returns(string) { + return description; + } + + /** + * @notice Get the title of the Module + */ + function getTitle() external view returns(string) { + return title; + } + + /** + * @notice Get the version of the Module + */ + function getVersion() external view returns(string) { + return version; + } + + /** + * @notice Get the setup cost of the module + */ + function getSetupCost() external view returns (uint256) { + return setupCost; + } + + /** + * @notice Get the Instructions that helped to used the module + */ + function getInstructions() external view returns(string) { + return "Create a vote which allows token holders to vote on an issue with a weight proportional to their balances at the point the vote is created."; + } + + /** + * @notice Get the tags related to the module factory + */ + function getTags() external view returns(bytes32[]) { + bytes32[] memory availableTags = new bytes32[](0); + return availableTags; + } +} \ No newline at end of file