222 lines
6.1 KiB
TypeScript
222 lines
6.1 KiB
TypeScript
import { Contributor, Milestone, MILESTONE_STATE } from 'modules/proposals/reducers';
|
|
import { PROPOSAL_CATEGORY } from 'api/constants';
|
|
import {
|
|
fundCrowdFund,
|
|
requestMilestonePayout,
|
|
payMilestonePayout,
|
|
voteMilestonePayout,
|
|
} from 'modules/web3/actions';
|
|
import Web3 from 'web3';
|
|
import BN from 'bn.js';
|
|
|
|
const oneEth = new BN('1000000000000000000');
|
|
|
|
export function getGovernanceMilestonesProps({
|
|
isContributor = true,
|
|
}: {
|
|
isContributor?: boolean;
|
|
}) {
|
|
return {
|
|
accounts: [
|
|
isContributor
|
|
? '0xAAA91bde2303f2f43325b2108d26f1eaba1e32b'
|
|
: '0x0c7C6178AD0618Bf289eFd5E1Ff9Ada25fC3bDE7',
|
|
],
|
|
isMilestoneActionPending: false,
|
|
milestoneActionError: '',
|
|
requestMilestonePayout,
|
|
payMilestonePayout,
|
|
voteMilestonePayout,
|
|
};
|
|
}
|
|
|
|
export function getProposalWithCrowdFund({
|
|
amount = 10,
|
|
funded = 5,
|
|
created = Date.now(),
|
|
deadline = Date.now() + 1000 * 60 * 60 * 10,
|
|
milestoneOverrides = [],
|
|
contributorOverrides = [],
|
|
}: {
|
|
amount?: number;
|
|
funded?: number;
|
|
created?: number;
|
|
deadline?: number;
|
|
milestoneOverrides?: Array<Partial<Milestone>>;
|
|
contributorOverrides?: Array<Partial<Contributor>>;
|
|
}) {
|
|
const amountBn = oneEth.mul(new BN(amount));
|
|
const fundedBn = oneEth.mul(new BN(funded));
|
|
|
|
const contributors = [
|
|
{
|
|
address: '0xAAA91bde2303f2f43325b2108d26f1eaba1e32b',
|
|
contributionAmount: new BN(0),
|
|
refundVote: false,
|
|
refunded: false,
|
|
proportionalContribution: '',
|
|
milestoneNoVotes: [false],
|
|
},
|
|
{
|
|
address: '0xBBB491bde2303f2f43325b2108d26f1eaba1e32b',
|
|
contributionAmount: new BN(0),
|
|
refundVote: false,
|
|
refunded: false,
|
|
proportionalContribution: '',
|
|
milestoneNoVotes: [false],
|
|
},
|
|
{
|
|
address: '0xCCC491bde2303f2f43325b2108d26f1eaba1e32b',
|
|
contributionAmount: new BN(0),
|
|
refundVote: false,
|
|
refunded: false,
|
|
proportionalContribution: '',
|
|
milestoneNoVotes: [false],
|
|
},
|
|
{
|
|
address: '0xDDD491bde2303f2f43325b2108d26f1eaba1e32b',
|
|
contributionAmount: new BN(0),
|
|
refundVote: false,
|
|
refunded: false,
|
|
proportionalContribution: '',
|
|
milestoneNoVotes: [false],
|
|
},
|
|
];
|
|
|
|
const eachContributorAmount = fundedBn.div(new BN(contributors.length));
|
|
contributors.forEach(c => (c.contributionAmount = eachContributorAmount));
|
|
contributorOverrides.forEach((co, idx) => {
|
|
Object.assign(contributors[idx], co);
|
|
});
|
|
|
|
const milestones = [
|
|
{
|
|
title: 'Milestone A',
|
|
body: `Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
|
|
tempor incididunt ut labore et dolore magna aliqua.`,
|
|
content: '',
|
|
dateCreated: '2018-09-23T19:06:15.844399+00:00',
|
|
dateEstimated: '2018-10-01T00:00:00+00:00',
|
|
immediatePayout: true,
|
|
index: 0,
|
|
state: MILESTONE_STATE.WAITING,
|
|
amount: amountBn,
|
|
amountAgainstPayout: new BN(0),
|
|
percentAgainstPayout: 0,
|
|
payoutRequestVoteDeadline: 0,
|
|
isPaid: false,
|
|
isImmediatePayout: true,
|
|
payoutPercent: '33',
|
|
stage: 'NOT_REQUESTED',
|
|
},
|
|
{
|
|
title: 'Milestone B',
|
|
body: `Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
|
|
nisi ut aliquip ex ea commodo consequat.`,
|
|
content: '',
|
|
dateCreated: '2018-09-23T19:06:15.844399+00:00',
|
|
dateEstimated: '2018-11-01T00:00:00+00:00',
|
|
immediatePayout: false,
|
|
index: 1,
|
|
state: MILESTONE_STATE.WAITING,
|
|
amount: amountBn,
|
|
amountAgainstPayout: new BN(0),
|
|
percentAgainstPayout: 0,
|
|
payoutRequestVoteDeadline: Date.now(),
|
|
isPaid: false,
|
|
isImmediatePayout: false,
|
|
payoutPercent: '33',
|
|
stage: 'NOT_REQUESTED',
|
|
},
|
|
{
|
|
title: 'Milestone C',
|
|
body: `Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
|
|
nisi ut aliquip ex ea commodo consequat.`,
|
|
content: '',
|
|
dateCreated: '2018-09-23T19:06:15.844399+00:00',
|
|
dateEstimated: '2018-12-01T00:00:00+00:00',
|
|
immediatePayout: false,
|
|
index: 2,
|
|
state: MILESTONE_STATE.WAITING,
|
|
amount: amountBn,
|
|
amountAgainstPayout: new BN(0),
|
|
percentAgainstPayout: 0,
|
|
payoutRequestVoteDeadline: Date.now(),
|
|
isPaid: false,
|
|
isImmediatePayout: false,
|
|
payoutPercent: '33',
|
|
stage: 'NOT_REQUESTED',
|
|
},
|
|
];
|
|
|
|
const eachMilestoneAmount = fundedBn.div(new BN(milestones.length));
|
|
milestones.forEach(ms => (ms.amount = eachMilestoneAmount));
|
|
milestoneOverrides.forEach((mso, idx) => {
|
|
Object.assign(milestones[idx], mso);
|
|
});
|
|
|
|
const proposal = {
|
|
proposalId: '0x033fDc6C01DC2385118C7bAAB88093e22B8F0710',
|
|
dateCreated: created / 1000,
|
|
title: 'Crowdfund Title',
|
|
body: 'body',
|
|
stage: 'FUNDING_REQUIRED',
|
|
category: PROPOSAL_CATEGORY.COMMUNITY,
|
|
team: [
|
|
{
|
|
accountAddress: '0x0c7C6178AD0618Bf289eFd5E1Ff9Ada25fC3bDE7',
|
|
title: '',
|
|
userid: 1,
|
|
username: '',
|
|
avatar: { '120x120': '' },
|
|
},
|
|
{
|
|
accountAddress: '0x0c7C6178AD0618Bf289eFd5E1Ff9Ada25fC3bDE7',
|
|
title: '',
|
|
userid: 2,
|
|
username: '',
|
|
avatar: { '120x120': '' },
|
|
},
|
|
{
|
|
accountAddress: '0x4bbeEB066eD09B7AEd07bF39EEe0460DFa261520',
|
|
title: '',
|
|
userid: 3,
|
|
username: '',
|
|
avatar: { '120x120': '' },
|
|
},
|
|
],
|
|
milestones,
|
|
crowdFund: {
|
|
beneficiary: '0x0c7C6178AD0618Bf289eFd5E1Ff9Ada25fC3bDE7',
|
|
trustees: [
|
|
'0x0c7C6178AD0618Bf289eFd5E1Ff9Ada25fC3bDE7',
|
|
'0x4bbeEB066eD09B7AEd07bF39EEe0460DFa261520',
|
|
],
|
|
contributors,
|
|
milestones,
|
|
deadline,
|
|
milestoneVotingPeriod: 3600000,
|
|
isFrozen: false,
|
|
isRaiseGoalReached: amount <= funded,
|
|
immediateFirstMilestonePayout: true,
|
|
balance: new BN(0),
|
|
funded: fundedBn,
|
|
percentFunded: (funded / amount) * 100,
|
|
target: amountBn,
|
|
amountVotingForRefund: new BN(0),
|
|
percentVotingForRefund: 0,
|
|
},
|
|
crowdFundContract: {},
|
|
};
|
|
|
|
const props = {
|
|
sendLoading: false,
|
|
fundCrowdFund,
|
|
web3: new Web3(),
|
|
proposal,
|
|
...proposal, // yeah...
|
|
};
|
|
|
|
return props;
|
|
}
|