-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFundV1PunkFactory.sol
More file actions
70 lines (57 loc) · 1.96 KB
/
Copy pathFundV1PunkFactory.sol
File metadata and controls
70 lines (57 loc) · 1.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import {FundV1PunkCampaign} from "./FundV1PunkCampaign.sol";
contract FundV1PunkFactory {
uint256 public constant MAX_CAMPAIGN_DURATION = 365 days;
address[] public campaigns;
event CampaignCreated(
address indexed campaign,
address indexed creator,
uint256 purchaseBudgetWei,
uint64 fundingDeadline,
uint64 executionDeadline,
address cryptopunksMarket,
address directedPunksMarket,
address donationRecipient
);
function createCampaign(
uint256 purchaseBudgetWei,
uint64 fundingDeadline,
uint64 executionDeadline
) external returns (address campaign) {
require(executionDeadline <= block.timestamp + MAX_CAMPAIGN_DURATION, "duration > max");
FundV1PunkCampaign c = new FundV1PunkCampaign(
purchaseBudgetWei,
fundingDeadline,
executionDeadline,
msg.sender
);
campaign = address(c);
campaigns.push(campaign);
emit CampaignCreated(
campaign,
msg.sender,
purchaseBudgetWei,
fundingDeadline,
executionDeadline,
c.cryptopunksMarket(),
c.directedPunksMarket(),
c.PROTOCOL_GUILD()
);
}
function allCampaigns() external view returns (address[] memory) {
return campaigns;
}
function campaignsRange(uint256 start, uint256 count) external view returns (address[] memory result) {
if (start >= campaigns.length) return new address[](0);
uint256 remaining = campaigns.length - start;
uint256 size = count > remaining ? remaining : count;
result = new address[](size);
for (uint256 i = 0; i < size; i++) {
result[i] = campaigns[start + i];
}
}
function campaignsCount() external view returns (uint256) {
return campaigns.length;
}
}