diff --git a/src/App.js b/src/App.js
index 1230cadf..0a55b8b4 100644
--- a/src/App.js
+++ b/src/App.js
@@ -14,8 +14,10 @@ import Account from './components/account';
import Footer from './components/footer';
import Home from './components/home';
import Stake from './components/stake';
-import RewardsPools from './components/rewardPools'
+import RewardsPools from './components/rewardPools';
import Header from './components/header';
+import Propose from './components/propose';
+import Claim from './components/claim';
import {
CONNECTION_CONNECTED,
@@ -109,10 +111,19 @@ class App extends Component {
+
+
+
+
+
+
+
+
+
-
+
diff --git a/src/assets/YFI-logo.png b/src/assets/YFI-logo.png
new file mode 100644
index 00000000..b3aa856d
Binary files /dev/null and b/src/assets/YFI-logo.png differ
diff --git a/src/components/claim/claim.jsx b/src/components/claim/claim.jsx
new file mode 100644
index 00000000..da5cff12
--- /dev/null
+++ b/src/components/claim/claim.jsx
@@ -0,0 +1,405 @@
+import React, { Component } from "react";
+import { withRouter } from "react-router-dom";
+import { withStyles } from '@material-ui/core/styles';
+import {
+ Typography,
+ Button,
+ Card,
+ TextField,
+ InputAdornment
+} from '@material-ui/core';
+import { withNamespaces } from 'react-i18next';
+
+import Loader from '../loader'
+import Snackbar from '../snackbar'
+import UnlockModal from '../unlock/unlockModal.jsx'
+
+import Store from "../../stores";
+import { colors } from '../../theme'
+
+import {
+ ERROR,
+ CONFIGURE_RETURNED,
+ GET_CLAIMABLE_ASSET,
+ GET_CLAIMABLE_ASSET_RETURNED,
+ GET_CLAIMABLE,
+ GET_CLAIMABLE_RETURNED,
+ CLAIM,
+ CLAIM_RETURNED
+} from '../../constants'
+
+const styles = theme => ({
+ root: {
+ flex: 1,
+ display: 'flex',
+ flexDirection: 'column',
+ maxWidth: '900px',
+ width: '100%',
+ justifyContent: 'flex-start',
+ alignItems: 'center',
+ marginTop: '40px'
+ },
+ intro: {
+ width: '100%',
+ position: 'relative',
+ display: 'flex',
+ justifyContent: 'space-between',
+ alignItems: 'center',
+ maxWidth: '400px'
+ },
+ introCenter: {
+ minWidth: '100%',
+ textAlign: 'center',
+ padding: '48px 0px'
+ },
+ investedContainer: {
+ display: 'flex',
+ flex: 1,
+ flexDirection: 'column',
+ alignItems: 'center',
+ justifyContent: 'center',
+ padding: '12px',
+ minWidth: '100%',
+ [theme.breakpoints.up('md')]: {
+ minWidth: '800px',
+ }
+ },
+ connectContainer: {
+ padding: '12px',
+ display: 'flex',
+ justifyContent: 'center',
+ width: '100%',
+ maxWidth: '450px',
+ [theme.breakpoints.up('md')]: {
+ width: '450',
+ }
+ },
+ actionButton: {
+ '&:hover': {
+ backgroundColor: "#2F80ED",
+ },
+ padding: '12px',
+ backgroundColor: "#2F80ED",
+ borderRadius: '1rem',
+ border: '1px solid #E1E1E1',
+ fontWeight: 500,
+ [theme.breakpoints.up('md')]: {
+ padding: '15px',
+ }
+ },
+ buttonText: {
+ fontWeight: '700',
+ color: 'white',
+ },
+ disaclaimer: {
+ padding: '12px',
+ border: '1px solid rgb(174, 174, 174)',
+ borderRadius: '0.75rem',
+ marginBottom: '24px',
+ },
+ addressContainer: {
+ display: 'flex',
+ justifyContent: 'space-between',
+ overflow: 'hidden',
+ flex: 1,
+ whiteSpace: 'nowrap',
+ fontSize: '0.83rem',
+ textOverflow:'ellipsis',
+ cursor: 'pointer',
+ padding: '28px 30px',
+ borderRadius: '50px',
+ border: '1px solid '+colors.borderBlue,
+ alignItems: 'center',
+ maxWidth: '500px',
+ [theme.breakpoints.up('md')]: {
+ width: '100%'
+ }
+ },
+ walletAddress: {
+ padding: '0px 12px'
+ },
+ walletTitle: {
+ flex: 1,
+ color: colors.darkGray
+ },
+ claimContainer: {
+ display: 'flex',
+ flexWrap: 'wrap',
+ padding: '28px 30px',
+ borderRadius: '50px',
+ border: '1px solid '+colors.borderBlue,
+ margin: '20px',
+ background: colors.white,
+ },
+ valContainer: {
+ display: 'flex',
+ flexDirection: 'column',
+ width: '100%'
+ },
+ actionInput: {
+ padding: '0px 0px 12px 0px',
+ fontSize: '0.5rem'
+ },
+ inputAdornment: {
+ fontWeight: '600',
+ fontSize: '1.5rem'
+ },
+ assetIcon: {
+ display: 'inline-block',
+ verticalAlign: 'middle',
+ borderRadius: '25px',
+ background: '#dedede',
+ height: '30px',
+ width: '30px',
+ textAlign: 'center',
+ marginRight: '16px'
+ },
+ balances: {
+ width: '100%',
+ textAlign: 'right',
+ paddingRight: '20px',
+ cursor: 'pointer'
+ },
+ stakeTitle: {
+ width: '100%',
+ color: colors.darkGray,
+ marginBottom: '20px'
+ },
+ stakeButtons: {
+ width: '100%',
+ display: 'flex',
+ justifyContent: 'space-between',
+ align: 'center',
+ marginTop: '20px'
+ },
+ stakeButton: {
+ minWidth: '300px'
+ },
+ priceContainer: {
+ display: 'flex',
+ justifyContent: 'flex-start',
+ width: '100%',
+ alignItems: 'center'
+ },
+ priceConversion: {
+ paddingRight: '20px'
+ }
+})
+
+const emitter = Store.emitter
+const dispatcher = Store.dispatcher
+const store = Store.store
+
+class Claim extends Component {
+
+ constructor(props) {
+ super()
+
+ const account = store.getStore('account')
+ const asset = store.getStore('claimableAsset')
+
+ this.state = {
+ loading: false,
+ account: account,
+ asset: asset
+ }
+
+ dispatcher.dispatch({ type: GET_CLAIMABLE_ASSET, content: {} })
+ }
+
+ componentWillMount() {
+ emitter.on(ERROR, this.errorReturned);
+ emitter.on(CONFIGURE_RETURNED, this.configureReturned)
+ emitter.on(GET_CLAIMABLE_ASSET_RETURNED, this.assetReturned)
+ emitter.on(CLAIM_RETURNED, this.showHash)
+ emitter.on(GET_CLAIMABLE_RETURNED, this.claimableReturned)
+ }
+
+ componentWillUnmount() {
+ emitter.removeListener(ERROR, this.errorReturned);
+ emitter.removeListener(CONFIGURE_RETURNED, this.configureReturned)
+ emitter.removeListener(GET_CLAIMABLE_ASSET_RETURNED, this.assetReturned)
+ emitter.removeListener(CLAIM_RETURNED, this.showHash)
+ emitter.removeListener(GET_CLAIMABLE_RETURNED, this.claimableReturned)
+ };
+
+ showHash = (txHash) => {
+ this.setState({ snackbarMessage: null, snackbarType: null, loading: false })
+ const that = this
+ setTimeout(() => {
+ const snackbarObj = { snackbarMessage: txHash, snackbarType: 'Hash' }
+ that.setState(snackbarObj)
+ })
+ };
+
+ errorReturned = (error) => {
+ const snackbarObj = { snackbarMessage: null, snackbarType: null }
+ this.setState(snackbarObj)
+ this.setState({ loading: false })
+ const that = this
+ setTimeout(() => {
+ const snackbarObj = { snackbarMessage: error.toString(), snackbarType: 'Error' }
+ that.setState(snackbarObj)
+ })
+ };
+
+ assetReturned = () => {
+ const asset = store.getStore('claimableAsset')
+ this.setState({ asset: asset, loading: false })
+ }
+
+ claimableReturned = () => {
+ const asset = store.getStore('claimableAsset')
+ this.setState({ asset: asset, loading: false })
+ }
+
+ configureReturned = () => {
+ this.setState({ loading: false })
+ }
+
+ render() {
+ const { classes } = this.props;
+ const {
+ value,
+ account,
+ loading,
+ modalOpen,
+ snackbarMessage,
+ title,
+ titleError,
+ description,
+ descriptionError,
+ asset
+ } = this.state
+
+ var address = null;
+ if (account.address) {
+ address = account.address.substring(0,6)+'...'+account.address.substring(account.address.length-4,account.address.length)
+ }
+
+ return (
+
+
This project is in beta. Use at your own risk.
+
+
+ Wallet
+ { address }
+
+
+
+
+
Claim your rewards
+ {this.renderAssetInput(asset, 'claim')}
+
+
+ Rewards available:
+ { asset.claimableBalance } { asset.rewardSymbol }
+
+
+
+
+ { snackbarMessage && this.renderSnackbar() }
+ { loading &&
}
+ { modalOpen && this.renderModal() }
+
+ )
+ }
+
+ renderAssetInput = (asset, type) => {
+ const {
+ classes
+ } = this.props
+
+ const {
+ loading,
+ amount,
+ amountError
+ } = this.state
+
+ return (
+
+
+ { this.setAmount("amount", (asset ? asset.balance : 0)) } } className={ classes.value } noWrap>{ 'Balance: '+ ( asset && asset.balance ? (Math.floor(asset.balance*10000)/10000).toFixed(4) : '0.0000') } { asset ? asset.symbol : '' }
+
+
+
{ asset.symbol },
+ startAdornment:
+
+

+
+ ,
+ }}
+ />
+
+
+ )
+ }
+
+ setAmount = (id, balance) => {
+ const bal = (Math.floor((balance === '' ? '0' : balance)*10000)/10000).toFixed(4)
+ let val = []
+ val[id] = bal
+ this.setState(val)
+ }
+
+ onChange = (event) => {
+ let val = []
+ val[event.target.id] = event.target.value
+ this.setState(val)
+ }
+
+ onClaim = () => {
+ const { amount } = this.state
+
+ this.setState({ loading: true })
+ dispatcher.dispatch({ type: CLAIM, content: { amount } })
+ }
+
+ renderModal = () => {
+ return (
+
+ )
+ }
+
+ renderSnackbar = () => {
+ var {
+ snackbarType,
+ snackbarMessage
+ } = this.state
+ return
+ };
+
+ overlayClicked = () => {
+ this.setState({ modalOpen: true })
+ }
+
+ closeModal = () => {
+ this.setState({ modalOpen: false })
+ }
+
+}
+
+export default withRouter(withStyles(styles)(Claim));
diff --git a/src/components/claim/package.json b/src/components/claim/package.json
new file mode 100644
index 00000000..336dfb00
--- /dev/null
+++ b/src/components/claim/package.json
@@ -0,0 +1,3 @@
+{
+ "main": "claim.jsx"
+}
diff --git a/src/components/home/home.jsx b/src/components/home/home.jsx
index c42e1cc4..346d8b30 100644
--- a/src/components/home/home.jsx
+++ b/src/components/home/home.jsx
@@ -10,6 +10,7 @@ import { colors } from '../../theme'
import AttachMoneyIcon from '@material-ui/icons/AttachMoney';
import HowToVoteIcon from '@material-ui/icons/HowToVote';
import WbIncandescentIcon from '@material-ui/icons/WbIncandescent';
+import DetailsIcon from '@material-ui/icons/Details';
const styles = theme => ({
root: {
@@ -183,22 +184,24 @@ class Home extends Component {
render() {
const { classes, t, location } = this.props;
- console.log(location)
-
return (
{ this.nav(location.pathname+'staking') } }>
-
+
Stake
{ this.nav(location.pathname+'propose') } }>
Propose
-
{ this.nav(location.pathname+'vote') } }>
+ { return; this.nav(location.pathname+'vote') } }>
Vote
+ { this.nav(location.pathname+'claim') }}>
+
+ claim
+
)
};
diff --git a/src/components/propose/package.json b/src/components/propose/package.json
new file mode 100644
index 00000000..e089fd6d
--- /dev/null
+++ b/src/components/propose/package.json
@@ -0,0 +1,3 @@
+{
+ "main": "propose.jsx"
+}
diff --git a/src/components/propose/propose.jsx b/src/components/propose/propose.jsx
new file mode 100644
index 00000000..9f4e3941
--- /dev/null
+++ b/src/components/propose/propose.jsx
@@ -0,0 +1,297 @@
+import React, { Component } from "react";
+import { withRouter } from "react-router-dom";
+import { withStyles } from '@material-ui/core/styles';
+import {
+ Typography,
+ Button,
+ Card,
+ TextField
+} from '@material-ui/core';
+import { withNamespaces } from 'react-i18next';
+
+import Loader from '../loader'
+import Snackbar from '../snackbar'
+import UnlockModal from '../unlock/unlockModal.jsx'
+
+import Store from "../../stores";
+import { colors } from '../../theme'
+
+import {
+ ERROR,
+ CONFIGURE_RETURNED,
+ PROPOSE,
+ PROPOSE_RETURNED,
+} from '../../constants'
+
+const styles = theme => ({
+ root: {
+ flex: 1,
+ display: 'flex',
+ flexDirection: 'column',
+ maxWidth: '900px',
+ width: '100%',
+ justifyContent: 'flex-start',
+ alignItems: 'center',
+ marginTop: '40px'
+ },
+ intro: {
+ width: '100%',
+ position: 'relative',
+ display: 'flex',
+ justifyContent: 'space-between',
+ alignItems: 'center',
+ maxWidth: '400px'
+ },
+ introCenter: {
+ minWidth: '100%',
+ textAlign: 'center',
+ padding: '48px 0px'
+ },
+ investedContainer: {
+ display: 'flex',
+ flex: 1,
+ flexDirection: 'column',
+ alignItems: 'center',
+ justifyContent: 'center',
+ padding: '12px',
+ minWidth: '100%',
+ [theme.breakpoints.up('md')]: {
+ minWidth: '800px',
+ }
+ },
+ connectContainer: {
+ padding: '12px',
+ display: 'flex',
+ justifyContent: 'center',
+ width: '100%',
+ maxWidth: '450px',
+ [theme.breakpoints.up('md')]: {
+ width: '450',
+ }
+ },
+ actionButton: {
+ '&:hover': {
+ backgroundColor: "#2F80ED",
+ },
+ padding: '12px',
+ backgroundColor: "#2F80ED",
+ borderRadius: '1rem',
+ border: '1px solid #E1E1E1',
+ fontWeight: 500,
+ [theme.breakpoints.up('md')]: {
+ padding: '15px',
+ }
+ },
+ buttonText: {
+ fontWeight: '700',
+ color: 'white',
+ },
+ disaclaimer: {
+ padding: '12px',
+ border: '1px solid rgb(174, 174, 174)',
+ borderRadius: '0.75rem',
+ marginBottom: '24px',
+ },
+ addressContainer: {
+ display: 'flex',
+ justifyContent: 'space-between',
+ overflow: 'hidden',
+ flex: 1,
+ whiteSpace: 'nowrap',
+ fontSize: '0.83rem',
+ textOverflow:'ellipsis',
+ cursor: 'pointer',
+ padding: '28px 30px',
+ borderRadius: '50px',
+ border: '1px solid '+colors.borderBlue,
+ alignItems: 'center',
+ maxWidth: '500px',
+ [theme.breakpoints.up('md')]: {
+ width: '100%'
+ }
+ },
+ walletAddress: {
+ padding: '0px 12px'
+ },
+ walletTitle: {
+ flex: 1,
+ color: colors.darkGray
+ },
+ proposalContainer: {
+ display: 'flex',
+ flexWrap: 'wrap',
+ padding: '28px 30px',
+ borderRadius: '50px',
+ border: '1px solid '+colors.borderBlue,
+ margin: '20px',
+ background: colors.white,
+ },
+ field: {
+ minWidth: '100%',
+ paddingBottom: '20px'
+ },
+ fieldTitle: {
+ paddingLeft: '20px'
+ },
+ titleInput: {
+ borderRadius: '25px'
+ }
+})
+
+const emitter = Store.emitter
+const dispatcher = Store.dispatcher
+const store = Store.store
+
+class Propose extends Component {
+
+ constructor(props) {
+ super()
+
+ const account = store.getStore('account')
+
+ this.state = {
+ loading: false,
+ account: account
+ }
+ }
+
+ componentWillMount() {
+ emitter.on(CONFIGURE_RETURNED, this.configureReturned)
+ emitter.on(PROPOSE_RETURNED, this.showHash)
+ }
+
+ componentWillUnmount() {
+ emitter.removeListener(CONFIGURE_RETURNED, this.configureReturned)
+ emitter.removeListener(PROPOSE_RETURNED, this.showHash)
+ };
+
+ showHash = (txHash) => {
+ this.setState({ snackbarMessage: null, snackbarType: null, loading: false })
+ const that = this
+ setTimeout(() => {
+ const snackbarObj = { snackbarMessage: txHash, snackbarType: 'Hash' }
+ that.setState(snackbarObj)
+ })
+ };
+
+ configureReturned = () => {
+ this.setState({ loading: false })
+ }
+
+ render() {
+ const { classes } = this.props;
+ const {
+ value,
+ account,
+ loading,
+ modalOpen,
+ snackbarMessage,
+ title,
+ titleError,
+ description,
+ descriptionError
+ } = this.state
+
+ var address = null;
+ if (account.address) {
+ address = account.address.substring(0,6)+'...'+account.address.substring(account.address.length-4,account.address.length)
+ }
+
+ return (
+
+
This project is in beta. Use at your own risk.
+
+
+ Wallet
+ { address }
+
+
+
+
+
+
+
+
+ { snackbarMessage && this.renderSnackbar() }
+ { loading &&
}
+ { modalOpen && this.renderModal() }
+
+ )
+ }
+
+ onChange = (event) => {
+ let val = []
+ val[event.target.id] = event.target.value
+ this.setState(val)
+ }
+
+ onPropose = () => {
+ this.setState({ loading: true })
+ dispatcher.dispatch({ type: PROPOSE, content: { } })
+ }
+
+ renderModal = () => {
+ return (
+
+ )
+ }
+
+ renderSnackbar = () => {
+ var {
+ snackbarType,
+ snackbarMessage
+ } = this.state
+ return
+ };
+
+ overlayClicked = () => {
+ this.setState({ modalOpen: true })
+ }
+
+ closeModal = () => {
+ this.setState({ modalOpen: false })
+ }
+
+}
+
+export default withRouter(withStyles(styles)(Propose));
diff --git a/src/config/example.config.js b/src/config/example.config.js
index 943b2b37..8b0a00a2 100644
--- a/src/config/example.config.js
+++ b/src/config/example.config.js
@@ -7,15 +7,16 @@ const config = {
balancerRewardsAddress: '0x033E52f513F9B98e129381c6708F9faA2DEE5db5',
balancerRewardsABI: [{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"constant":true,"inputs":[],"name":"DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bpt","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"getReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"name":"notifyRewardAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"periodFinish","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_rewardDistribution","type":"address"}],"name":"setRewardDistribution","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"yfi","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}],
+ yfiAddress: '0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e',
+ yfiABI: [{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":false,"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"removeMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"setGovernance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}],
- erc20ABI: [{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"showMeTheMoney","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"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"},{"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"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"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":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}],
-
- IEarnABI: [{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"ETH_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ZAP_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"calcPoolValueInETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getPricePerFullShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"inCaseETHGetsStuck","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"_TokenAddress","type":"address"}],"name":"inCaseTokenGetsStuck","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"invest","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"investSelf","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"redeem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_ETH_ADDRESS","type":"address"}],"name":"set_new_ETH_ADDRESS","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_ZAP_ADDRESS","type":"address"}],"name":"set_new_ZAP_ADDRESS","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}],
+ claimAddress: '0xcc9EFea3ac5Df6AD6A656235Ef955fBfEF65B862',
+ claimABI: [{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"constant":true,"inputs":[],"name":"adai","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"claim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_claimer","type":"address"}],"name":"claimable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"seize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"yfi","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}],
- IEarnERC20ABI: [{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"aave","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"aaveToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"approveToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"apr","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceAave","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceCompound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceCompoundInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceDydx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceFulcrum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceFulcrumInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"calcPoolValueInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"compound","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dydx","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fulcrum","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAave","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAaveCore","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPricePerFullShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"inCaseETHGetsStuck","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"_TokenAddress","type":"address"}],"name":"inCaseTokenGetsStuck","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"invest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"investSelf","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"provider","outputs":[{"internalType":"enum yDAI.Lender","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"rebalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"recommend","outputs":[{"internalType":"enum yDAI.Lender","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"redeem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_AAVE","type":"address"}],"name":"set_new_AAVE","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_APR","type":"address"}],"name":"set_new_APR","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_ATOKEN","type":"address"}],"name":"set_new_ATOKEN","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_COMPOUND","type":"address"}],"name":"set_new_COMPOUND","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_new_DTOKEN","type":"uint256"}],"name":"set_new_DTOKEN","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_DYDX","type":"address"}],"name":"set_new_DYDX","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_FULCRUM","type":"address"}],"name":"set_new_FULCRUM","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyAave","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyCompound","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyDydx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyFulcrum","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}],
-
- IEarnErc20ABIv2: [{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"aave","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"aaveToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"apr","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"compound","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dydx","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fulcrum","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"provider","outputs":[{"internalType":"enumyDAI.Lender","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"recommend","outputs":[{"internalType":"enumyDAI.Lender","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyDydx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAave","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAaveCore","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"approveToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"balanceDydx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceCompound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceCompoundInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceFulcrumInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceFulcrum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceAave","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"rebalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyAave","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyFulcrum","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyCompound","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"invest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"calcPoolValueInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPricePerFullShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"redeem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}],
+ governanceAddress: '',
+ governanceABI: '',
+ erc20ABI: [{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"showMeTheMoney","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"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"},{"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"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"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":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}],
};
export default config;
diff --git a/src/constants/constants.jsx b/src/constants/constants.jsx
index a04316a3..59c328c8 100644
--- a/src/constants/constants.jsx
+++ b/src/constants/constants.jsx
@@ -20,3 +20,15 @@ export const WITHDRAW_RETURNED = 'WITHDRAW_RETURNED'
export const GET_BALANCES = 'GET_BALANCES'
export const GET_BALANCES_RETURNED = 'GET_BALANCES_RETURNED'
+
+export const PROPOSE = 'PROPOSE'
+export const PROPOSE_RETURNED = 'PROPOSE_RETURNED'
+
+export const GET_CLAIMABLE_ASSET = 'GET_CLAIMABLE_ASSET'
+export const GET_CLAIMABLE_ASSET_RETURNED = 'GET_CLAIMABLE_ASSET_RETURNED'
+
+export const CLAIM = 'CLAIM'
+export const CLAIM_RETURNED = 'CLAIM_RETURNED'
+
+export const GET_CLAIMABLE = 'GET_CLAIMABLE'
+export const GET_CLAIMABLE_RETURNED = 'GET_CLAIMABLE_RETURNED'
diff --git a/src/stores/store.jsx b/src/stores/store.jsx
index 1cf40139..b3621ae7 100644
--- a/src/stores/store.jsx
+++ b/src/stores/store.jsx
@@ -14,7 +14,15 @@ import {
GET_REWARDS,
GET_REWARDS_RETURNED,
EXIT,
- EXIT_RETURNED
+ EXIT_RETURNED,
+ PROPOSE,
+ PROPOSE_RETURNED,
+ GET_CLAIMABLE_ASSET,
+ GET_CLAIMABLE_ASSET_RETURNED,
+ CLAIM,
+ CLAIM_RETURNED,
+ GET_CLAIMABLE,
+ GET_CLAIMABLE_RETURNED
} from '../constants';
import Web3 from 'web3';
@@ -76,6 +84,19 @@ class Store {
code: 'zh'
}
],
+ claimableAsset: {
+ id: 'yfi',
+ name: 'yearn.finance',
+ address: config.yfiAddress,
+ abi: config.yfiABI,
+ symbol: 'YFI',
+ balance: 0,
+ decimals: 18,
+ rewardAddress: '0xfc1e690f61efd961294b3e1ce3313fbd8aa4f85d',
+ rewardSymbol: 'aDAI',
+ rewardDecimals: 18,
+ claimableBalance: 0
+ },
rewardPools: [
{
id: 'yearn',
@@ -194,6 +215,18 @@ class Store {
case EXIT:
this.exit(payload);
break;
+ case PROPOSE:
+ this.propose(payload)
+ break;
+ case GET_CLAIMABLE_ASSET:
+ this.getClaimableAsset(payload)
+ break;
+ case CLAIM:
+ this.claim(payload)
+ break;
+ case GET_CLAIMABLE:
+ this.getClaimable(payload)
+ break;
default: {
}
}
@@ -606,6 +639,185 @@ class Store {
}
})
}
+
+ propose = (payload) => {
+ const account = store.getStore('account')
+
+ this._callPropose(account, (err, res) => {
+ if(err) {
+ return emitter.emit(ERROR, err);
+ }
+
+ return emitter.emit(PROPOSE_RETURNED, res)
+ })
+ }
+
+ _callPropose = (account, callback) => {
+ const web3 = new Web3(store.getStore('web3context').library.provider);
+
+ const governanceContract = new web3.eth.Contract(config.governanceABI, config.governanceAddress)
+
+ governanceContract.methods.propose().send({ from: account.address, gasPrice: web3.utils.toWei(store.getStore('universalGasPrice'), 'gwei') })
+ .on('transactionHash', function(hash){
+ console.log(hash)
+ callback(null, hash)
+ })
+ .on('confirmation', function(confirmationNumber, receipt){
+ console.log(confirmationNumber, receipt);
+ if(confirmationNumber == 2) {
+ dispatcher.dispatch({ type: GET_BALANCES, content: {} })
+ }
+ })
+ .on('receipt', function(receipt){
+ console.log(receipt);
+ })
+ .on('error', function(error) {
+ if (!error.toString().includes("-32601")) {
+ if(error.message) {
+ return callback(error.message)
+ }
+ callback(error)
+ }
+ })
+ .catch((error) => {
+ if (!error.toString().includes("-32601")) {
+ if(error.message) {
+ return callback(error.message)
+ }
+ callback(error)
+ }
+ })
+ }
+
+ getClaimableAsset = (payload) => {
+ const account = store.getStore('account')
+ const asset = store.getStore('claimableAsset')
+
+ const web3 = new Web3(store.getStore('web3context').library.provider);
+
+ async.parallel([
+ (callbackInnerInner) => { this._getClaimableBalance(web3, asset, account, callbackInnerInner) },
+ (callbackInnerInner) => { this._getClaimable(web3, asset, account, callbackInnerInner) },
+ ], (err, data) => {
+ if(err) {
+ return emitter.emit(ERROR, err);
+ }
+
+ asset.balance = data[0]
+ asset.claimableBalance = data[1]
+
+ store.setStore({claimableAsset: asset})
+ emitter.emit(GET_CLAIMABLE_ASSET_RETURNED)
+ })
+ }
+
+ _getClaimableBalance = async (web3, asset, account, callback) => {
+ let erc20Contract = new web3.eth.Contract(asset.abi, asset.address)
+
+ try {
+ var balance = await erc20Contract.methods.balanceOf(account.address).call({ from: account.address });
+ balance = parseFloat(balance)/10**asset.decimals
+ callback(null, parseFloat(balance))
+ } catch(ex) {
+ return callback(ex)
+ }
+ }
+
+ _getClaimable = async (web3, asset, account, callback) => {
+ let claimContract = new web3.eth.Contract(config.claimABI, config.claimAddress)
+
+ try {
+ var balance = await claimContract.methods.claimable(account.address).call({ from: account.address });
+ balance = parseFloat(balance)/10**asset.decimals
+ callback(null, parseFloat(balance))
+ } catch(ex) {
+ return callback(ex)
+ }
+ }
+
+ claim = (payload) => {
+ const account = store.getStore('account')
+ const asset = store.getStore('claimableAsset')
+ const { amount } = payload.content
+
+ this._checkApproval(asset, account, amount, config.claimAddress, (err) => {
+ if(err) {
+ return emitter.emit(ERROR, err);
+ }
+
+ this._callClaim(asset, account, amount, (err, res) => {
+ if(err) {
+ return emitter.emit(ERROR, err);
+ }
+
+ return emitter.emit(CLAIM_RETURNED, res)
+ })
+ })
+ }
+
+ _callClaim = (asset, account, amount, callback) => {
+ const web3 = new Web3(store.getStore('web3context').library.provider);
+
+ const claimContract = new web3.eth.Contract(config.claimABI, config.claimAddress)
+
+ var amountToSend = web3.utils.toWei(amount, "ether")
+ if (asset.decimals != 18) {
+ amountToSend = (amount*10**asset.decimals).toFixed(0);
+ }
+
+ claimContract.methods.claim(amountToSend).send({ from: account.address, gasPrice: web3.utils.toWei(store.getStore('universalGasPrice'), 'gwei') })
+ .on('transactionHash', function(hash){
+ console.log(hash)
+ callback(null, hash)
+ })
+ .on('confirmation', function(confirmationNumber, receipt){
+ console.log(confirmationNumber, receipt);
+ if(confirmationNumber == 2) {
+ dispatcher.dispatch({ type: GET_CLAIMABLE_ASSET, content: {} })
+ }
+ })
+ .on('receipt', function(receipt){
+ console.log(receipt);
+ })
+ .on('error', function(error) {
+ if (!error.toString().includes("-32601")) {
+ if(error.message) {
+ return callback(error.message)
+ }
+ callback(error)
+ }
+ })
+ .catch((error) => {
+ if (!error.toString().includes("-32601")) {
+ if(error.message) {
+ return callback(error.message)
+ }
+ callback(error)
+ }
+ })
+ }
+
+ getClaimable = (payload) => {
+ const account = store.getStore('account')
+ const asset = store.getStore('claimableAsset')
+
+ const web3 = new Web3(store.getStore('web3context').library.provider);
+
+ async.parallel([
+ (callbackInnerInner) => { this._getClaimableBalance(web3, asset, account, callbackInnerInner) },
+ (callbackInnerInner) => { this._getClaimable(web3, asset, account, callbackInnerInner) },
+ ], (err, data) => {
+ if(err) {
+ return emitter.emit(ERROR, err);
+ }
+
+ asset.balance = data[0]
+ asset.claimableBalance = data[1]
+
+ store.setStore({claimableAsset: asset})
+ emitter.emit(GET_CLAIMABLE_RETURNED)
+ })
+ }
}
var store = new Store();
diff --git a/src/theme/theme.jsx b/src/theme/theme.jsx
index 6af0841e..89d03469 100644
--- a/src/theme/theme.jsx
+++ b/src/theme/theme.jsx
@@ -166,11 +166,10 @@ const iswapTheme = {
},
color: colors.text,
padding: '14px',
- borderRadius: '50px'
},
root: {
// border: "none !important",
- borderRadius: '50px'
+ borderRadius: '25px'
},
notchedOutline: {
// border: "none !important"