Skip to content

Commit

Permalink
update manager
Browse files Browse the repository at this point in the history
  • Loading branch information
scottrepreneur committed Feb 23, 2019
1 parent 70a6883 commit b88a7ee
Show file tree
Hide file tree
Showing 15 changed files with 616 additions and 1,941 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@

Run locally with `docker-compose up` inside the main repo. Check out [.env.sample](https://github.com/scottrepreneur/pool-together/blob/master/.env.sample) for necessary environment variables.

TODO: fix installing web3 on build seems to be failing --> current workaround is to manually install [email protected]
TODO: (docker) fix installing web3 on build seems to be failing --> current workaround is to manually install [email protected]

2 changes: 1 addition & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ services:
image: pool_together:dev
build:
context: .
container_name: power_dai
container_name: pool_together
command: ["yarn", "start"]
volumes:
- .:/app
Expand Down
5 changes: 5 additions & 0 deletions src/App.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ const asyncEntries = asyncComponent(() => {
return import('./containers/Entries/Entries');
});

const asyncManage = asyncComponent(() => {
return import('./containers/Manage/Manage');
});

class App extends Component {
goTo(route) {
this.props.history.replace(`/${route}`)
Expand All @@ -29,6 +33,7 @@ class App extends Component {
<Switch>
<Route path="/enter" component={asyncEnter} />
<Route path="/entries" component={asyncEntries} />
<Route path="/manage" component={asyncManage} />
<Route path="/" component={asyncLottery} />
</Switch>
</Layout>
Expand Down
3 changes: 2 additions & 1 deletion src/components/UI/Button/Button.module.css
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
.Button {
background-color: transparent;
border: none;
color: white;
color: black;
outline: none;
cursor: pointer;
font: inherit;
Expand Down Expand Up @@ -34,6 +34,7 @@

.LottoEntry {
font-size: 25px;
color: white;
background-color: #51B9F9;
border-radius: 10px;
width: 300px;
Expand Down
31 changes: 29 additions & 2 deletions src/containers/Entries/Entries.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,37 @@ class Entries extends Component {
}

render () {
let entries = <p>"No Entries yet"</p>
if (this.props.entries) {
console.log(this.props.entries)
//console.log(this.props.entries.length)
}
if (this.props.entries != []) {
let rows = this.props.entries.map(entry => {
return (
<tr key={entry.saver}>
<td>{entry.saver}</td>
<td>15</td>
</tr>)
})
entries = (
<table>
<thead>
<tr>
<td>Saver</td>
<td>Deposit</td>
</tr>
</thead>
<tbody>
{rows}
</tbody>
</table>)
}
return (
<div className={classes.Entries}>
<h2>Pool Entries</h2>
{this.props.entries}
{entries}

</div>
)
}
Expand All @@ -34,4 +61,4 @@ const mapDispatchToProps = dispatch => {
}
}

export default connect(mapStateToProps,mapDispatchToProps)(Entries);
export default connect(mapStateToProps, mapDispatchToProps)(Entries);
52 changes: 50 additions & 2 deletions src/containers/Manage/Manage.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,65 @@
import React, { Component } from 'react';
import { connect } from 'react-redux';

import Button from '../../components/UI/Button/Button';
import classes from './Manage.module.css';
import * as actions from '../../store/actions/index';

class Manage extends Component {
componentWillMount() {
this.props.onFetchPoolState(window.web3);
this.props.onFetchManager(window.web3);
this.props.onFetchCurrentPool(window.web3);
this.props.onFetchCurrentApr(window.web3);
this.props.onFetchEntrants(window.web3);
}

render () {
let poolState = "Open for Savings!";
if (this.props.poolState === 1) {
poolState = "Compounding Winnings!"
}
if (this.props.poolState === 2) {
poolState = "Ready to withdrawal savings"
}
return (
<div className={classes.Manage}>

<h2>Manage Savings</h2>
<p>This pool's contract: {' '}
<a href={'http://rinkeby.etherscan.io/address/' + process.env.REACT_APP_LOTTERY_CONTRACT_ADDRESS}>
{process.env.REACT_APP_LOTTERY_CONTRACT_ADDRESS}
</a>
</p>
<p>This pool is managed by: {this.props.manager}</p>
<p>Pool State: {poolState}</p>

<Button>Earn Interest</Button>
<Button>Pick Winner</Button>
<Button>Reset Pool</Button>

</div>
);
}
}

export default Manage;
const mapStateToProps = state => {
return {
poolState: state.lottery.poolState,
currentPool: state.lottery.currentPool,
currentApr: state.lottery.currentApr,
entrants: state.lottery.entrants,
manager: state.manage.manager
}
}

const mapDispatchToProps = dispatch => {
return {
onFetchPoolState: (web3) => dispatch(actions.fetchPoolState(web3)),
onFetchCurrentPool: (web3) => dispatch(actions.fetchCurrentPool(web3)),
onFetchCurrentApr: () => dispatch(actions.fetchCurrentApr()),
onFetchEntrants: (web3) => dispatch(actions.fetchEntrants(web3)),
onFetchManager: (web3) => dispatch(actions.fetchManager(web3))
}
}

export default connect(mapStateToProps, mapDispatchToProps)(Manage);
11 changes: 10 additions & 1 deletion src/containers/Manage/Manage.module.css
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
.Manage {

text-align: center;
color: black;
height: 575px;
width: 100%;
background-color: #fff;
border-radius: 8px;
}

.Manage h2 {
padding-top: 50px;
}
10 changes: 5 additions & 5 deletions src/store/actions/actionTypes.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ export const FETCH_CURRENT_POOL_SUCCESS = "FETCH_CURRENT_POOL_SUCCESS";
export const FETCH_CURRENT_POOL_FAILED = "FETCH_CURRENT_POOL_FAILED";

// FETCH THE CURRENT USER'S DEPOSIT IN THE POOL
export const FETCH_DEPOSIT_SUCCESS = "FETCH_ENTRIES_SUCCESS";
export const FETCH_DEPOSIT_FAILED = "FETCH_ENTRIES_FAILED";
export const FETCH_DEPOSIT_SUCCESS = "FETCH_DEPOSIT_SUCCESS";
export const FETCH_DEPOSIT_FAILED = "FETCH_DEPOSIT_FAILED";

// FETCH THE CURRENT APR FOR THE POOL SAVING
export const FETCH_CURRENT_APR_SUCCESS = "FETCH_CURRENT_APR_SUCCESS";
Expand Down Expand Up @@ -78,9 +78,9 @@ export const WITHDRAW_DAI_FAILED = "WITHDRAW_DAI_FAILED";
// MANAGE LOTTERY
//

// SET POOL STATE
export const SET_POOL_STATE_SUCCESS = "SET_POOL_STATE_SUCCESS";
export const SET_POOL_STATE_FAILED = "SET_POOL_STATE_FAILED";
// FETCH CONTRACT MANAGER
export const FETCH_MANAGER_SUCCESS = "FETCH_MANAGER_SUCCESS";
export const FETCH_MANAGER_FAILED = "FETCH_MANAGER_FAILED";

// PICK WINNER
export const PICK_WINNER_SUCCESS = "PICK_WINNER_SUCCESS";
Expand Down
3 changes: 2 additions & 1 deletion src/store/actions/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,6 @@ export {
withdrawDai,
} from './lottery';
export {
setPoolState,
fetchManager,
pickWinner
} from './manage';
5 changes: 5 additions & 0 deletions src/store/actions/layout.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ export const fetchAddress = (web3) => {
web3.eth.getAccounts()
.then((accounts) => {
let address = accounts[0];
console.log(accounts);
dispatch(fetchAddressSuccess(address));
})
.catch((err) => {
Expand All @@ -34,6 +35,10 @@ export const fetchAddressFailed = (error) => {
}
}

// USER HAS WEB3 BUT IS NOT LOGGED IN (TRIGGER METAMASK)



// GET USER ETHER BALANCE

export const fetchEthBalance = (web3, address) => {
Expand Down
54 changes: 32 additions & 22 deletions src/store/actions/lottery.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ const BigNumber = require('bignumber.js');
let baseTen = new BigNumber(10)

const lotteryAddress = process.env.REACT_APP_LOTTERY_CONTRACT_ADDRESS
const lotteryAbi = [{"constant":false,"inputs":[],"name":"splash","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"myDeposit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"poolSize","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pickWinner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"stateOfPool","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"entryData","outputs":[{"name":"Entries","type":"uint256"},{"name":"Size","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"poolReturn","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amtDai","type":"uint256"}],"name":"splashDai","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_stateVar","type":"uint256"}],"name":"setState","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"creationTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawDai","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"entrants","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"daisend","type":"uint256"}],"name":"earnInterest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"daiAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"saver","type":"address"},{"indexed":false,"name":"deposit","type":"uint256"},{"indexed":false,"name":"total","type":"uint256"}],"name":"splashDown","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"saver","type":"address"},{"indexed":false,"name":"savings","type":"uint256"}],"name":"takeHome","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"state","type":"uint8"}],"name":"Saving","type":"event"}]
const lotteryAbi = [{"constant":false,"inputs":[],"name":"splash","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"myDeposit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"entryDaiMinimum","outputs":[{"name":"Minimum","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"entryEthMinimum","outputs":[{"name":"Minimum","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"saver","type":"address"}],"name":"saverDeposit","outputs":[{"name":"Savings","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"poolSize","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pickWinner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"stateOfPool","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"entryData","outputs":[{"name":"Entries","type":"uint256"},{"name":"Size","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"poolReturn","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amtDai","type":"uint256"}],"name":"splashDai","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_stateVar","type":"uint256"}],"name":"setState","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"creationTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawDai","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"entrants","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"daisend","type":"uint256"}],"name":"earnInterest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"daiAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"saver","type":"address"},{"indexed":false,"name":"deposit","type":"uint256"},{"indexed":false,"name":"total","type":"uint256"}],"name":"splashDown","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"saver","type":"address"},{"indexed":false,"name":"savings","type":"uint256"}],"name":"takeHome","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"state","type":"uint8"}],"name":"Saving","type":"event"}]

const daiAddress = process.env.REACT_APP_DAI_CONTRACT_ADDRESS
const daiAbi = [{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]
Expand Down Expand Up @@ -247,18 +247,23 @@ export const enterDaiPoolFailed = (error) => {
};
}

// FETCH DEPOSIT
// FETCH CURRENT USER'S DEPOSIT

export const fetchDeposit = (web3) => {
return dispatch => {
const lottery = new web3.eth.Contract(lotteryAbi, lotteryAddress);
lottery.methods.myDeposit().call()
.then((deposit) => {
// console.log(deposit)
let myDeposit = web3.utils.fromWei(deposit, 'finney');
dispatch(fetchDepositSuccess(myDeposit));
}).catch((error) => {
dispatch(fetchDepositFailed(error));
web3.eth.getAccounts().then((accounts) => {
lottery.methods.myDeposit().call({
from: accounts[0]
})
.then((deposit) => {
//console.log(deposit)
// I'm getting something different for this 18dd -> 8768 (uint -> wei(?))
let myDeposit = web3.utils.fromWei(deposit, 'ether');
dispatch(fetchDepositSuccess(myDeposit));
}).catch((error) => {
dispatch(fetchDepositFailed(error));
});
});
}
}
Expand All @@ -281,7 +286,7 @@ export const fetchDepositFailed = (error) => {

export const fetchCurrentApr = () => {
return dispatch => {

// check the dai address??
const graph_query = `{
market(id: "${process.env.REACT_APP_DAI_CONTRACT_ADDRESS}") {
id
Expand Down Expand Up @@ -421,20 +426,25 @@ export const fetchEntries = (web3) => {
return dispatch => {
let entries = [];
const lottery = new web3.eth.Contract(lotteryAbi, lotteryAddress);
lottery.methods.entryData().call().then((entrants) => {
for (var i=0; i<entrants[0] - 1; i++) {
lottery.methods.entrants(i).call().then((entrant) => {
//lottery.methods.saverDeposit(entrant).then((deposit) => {
entries.push({'saver': entrant});

//})
})
}
dispatch(fetchEntriesSuccess(entries));
web3.eth.getAccounts().then(accounts => {
lottery.methods.entryData().call({from: accounts[0]}).then((entrants) => {
for (var i=0; i<Number(entrants[0]); i++) {
//console.log(i);
lottery.methods.entrants(i).call().then((entrant) => {
//lottery.methods.saverDeposit(entrant).call().then((deposit) => {
entries.push({'saver': entrant});

//})
});
}
//console.log(entries)
//console.log(entries.length);
dispatch(fetchEntriesSuccess(entries));
}).catch((error) => {
dispatch(fetchEntriesFailed(error));
});

});
})

}
}

Expand Down
Loading

0 comments on commit b88a7ee

Please sign in to comment.