+ {/*
*/}
+ {/*
*/}
+ {/*
*/}
+ {/*
*/}
+ {/*
*/}
+ {/*
*/}
+ {/*
*/}
+ {/*
*/}
+ {/*
*/}
+ {/*
*/}
+ {/*
*/}
+ {/*
*/}
+ {/*
*/}
+ {/*
*/}
@@ -63,29 +94,155 @@ class DeployPage extends Component {
);
}// render()
+ // createSusu(e) {
+ // e.preventDefault();
+ // this.state.susuParentContract.deployed().then((instance)=>{
+ // const options = { from: this.state.web3.eth.accounts[0], gas: 2000000 };
+ // return instance.createSusu(this.state.key, 2, 'name_'+this.state.key, this.state.web3.toWei(1.0, "ether"), options);
+ // }).then((result)=>{console.log('createSusu result:',result);});
+ // }
+ //
+ // setSusu(e) {
+ // e.preventDefault();
+ // this.state.susuParentContract.deployed().then((instance)=>{
+ // return instance.getSusu.call(this.state.key);
+ // }).then((susuContractAddress)=>{
+ // console.log('susuContractAddress:',susuContractAddress);
+ // const susuContract = this.state.web3.eth.contract(SusuContract.abi).at(susuContractAddress);
+ // this.setState({susuContract: susuContract});
+ // });
+ // }
+ //
+ // upgradeSusu(e) {
+ // e.preventDefault();
+ // this.state.susuParentContract.deployed().then((instance)=>{
+ // const options = { from: this.state.web3.eth.accounts[0], gas: 2000000 };
+ // return instance.upgradeSusu(this.state.key, options);
+ // }).then((result)=>{console.log('upgradeSusu result:',result);});
+ // }
+ //
+ // version(e) {
+ // e.preventDefault();
+ // this.state.susuContract.version((err, version)=>{
+ // console.log('err:',err, ' version:', version);
+ // });
+ // }
+ //
+ // groupName(e) {
+ // e.preventDefault();
+ // this.state.susuContract.groupName((err, groupName)=>{
+ // console.log('err:',err, ' groupName:', groupName);
+ // });
+ // }
+ //
+ // getManyMembers(e) {
+ // e.preventDefault();
+ // this.state.susuContract.getManyMembers((err, getManyMembersBig)=>{
+ // let bigNumber = new BigNumber(getManyMembersBig);
+ // const getManyMembers = bigNumber.toNumber();
+ // console.log('err:',err, ' getManyMembers:', getManyMembers);
+ // });
+ // }
+ //
+ // contribute(e) {
+ // e.preventDefault();
+ //
+ // this.state.web3.eth.sendTransaction(
+ // {
+ // from: this.state.web3.eth.accounts[0],
+ // to: this.state.susuContract.address,
+ // value:this.state.contribAmtWei,
+ // gas:2000000
+ // },
+ // (err)=>{
+ // if(typeof err === 'undefined' || !err) {
+ // console.log('contribute done');
+ // } else {
+ // console.error(err);
+ // }
+ // });
+ // }
+ //
+ // contribAmtWei(e) {
+ // e.preventDefault();
+ // this.state.susuContract.contribAmtWei((err, contribAmtWeiBig)=>{
+ // let bigNumber = new BigNumber(contribAmtWeiBig);
+ // const contribAmtWei = bigNumber.toNumber();
+ // console.log('err:',err, ' contribAmtWei:', contribAmtWei);
+ // this.setState({contribAmtWei: contribAmtWei});
+ // });
+ // }
+ //
+ // getContributionForMember(e) {
+ // e.preventDefault();
+ // this.state.susuContract.getContributionForMember(this.state.web3.eth.accounts[0], (err, getContributionForMemberBig)=>{
+ // let bigNumber = new BigNumber(getContributionForMemberBig);
+ // const getContributionForMember = this.state.web3.fromWei(bigNumber, 'ether').toNumber();
+ // console.log('err:',err, ' getContributionForMember:', getContributionForMember);
+ // });
+ // }
+ //
+ // getMemberAtIndex0(e) {
+ // e.preventDefault();
+ // this.state.susuContract.getMemberAtIndex(0, (err, memberAddress)=>{
+ // console.log('err:',err, ' memberAddress0:', memberAddress);
+ // });
+ // }
+ //
+ // getMemberAtIndex1(e) {
+ // e.preventDefault();
+ // this.state.susuContract.getMemberAtIndex(1, (err, memberAddress)=>{
+ // console.log('err:',err, ' memberAddress1:', memberAddress);
+ // });
+ // }
+ //
+ // owner(e) {
+ // e.preventDefault();
+ // const options = {from: this.state.web3.eth.accounts[0]};
+ // this.state.susuContract.owner(options, (err, owner)=>{
+ // console.log('err:',err, ' owner:', owner, ' =?me', (owner===this.state.web3.eth.accounts[0]));
+ // });
+ // }
+ //
+ // amIOwner(e) {
+ // e.preventDefault();
+ // const options = {from: this.state.web3.eth.accounts[0]};
+ // this.state.susuContract.amIOwner(options, (err, amIOwner)=>{
+ // console.log('err:',err, ' amIOwner:', amIOwner);
+ // });
+ // }
+ //
+ // joinGroup(e) {
+ // e.preventDefault();
+ // const options = {from: this.state.web3.eth.accounts[0], gas: 2000000};
+ // this.state.susuContract.joinGroup(options, (err, resp)=>{console.log('err:',err, ' resp:', resp);});
+ // }
+
clickCreate(e) {
e.preventDefault();
this.setState({isLoading:true});
- const susuContract = contract(SusuContract);
- const { unlinked_binary, abi } = susuContract;
- const newContract = this.state.web3.eth.contract(abi)
- const options = { from: this.state.web3.eth.accounts[0], data: unlinked_binary, gas: 2000000 }
+ const options = { from: this.state.web3.eth.accounts[0], gas: 2000000 };
const groupSize = document.getElementById('group_size').value;
const groupName = document.getElementById('group_name').value;
const contribAmtEth = document.getElementById('contrib_amt').value;
const contribAmtWei = this.state.web3.toWei(contribAmtEth, 'ether');
- newContract.new(groupSize, groupName, contribAmtWei, options, this.newContractCallback())
- }
- newContractCallback() {
- return (err, newContract) => {
- const { address } = newContract;
- if(typeof address !== 'undefined' ) {
- window.location.href = '/'+address;
- }
- }
+ this.state.susuParentContract.deployed().then((instance)=>{
+ return instance.createSusu(groupName, groupSize, groupName, contribAmtWei, options);
+ }).then(()=>{
+ window.location.href = '/'+groupName;
+ });
}
+
+ // newContractCallback() {
+ // return (err, newContract) => {
+ // const { address } = newContract;
+ // if(typeof address !== 'undefined' ) {
+ //
+ // }
+ // }
+ // }
}
DeployPage.defaultProps = {
diff --git a/src/components/GroupInfo.js b/src/components/GroupInfo.js
index 21cce29..140fb61 100644
--- a/src/components/GroupInfo.js
+++ b/src/components/GroupInfo.js
@@ -16,6 +16,18 @@ class GroupInfo extends Component {
| Contribution Amt (eth): |
{this.props.contribAmt} |
+
+ | Contract Address: |
+ {this.props.contractAddress} |
+
+
+ | Contract Version: |
+ {this.props.contractVersion} |
+
+
+ | Contract Balance: |
+ {this.props.contractBalance} |
+
);
@@ -26,6 +38,9 @@ class GroupInfo extends Component {
GroupInfo.defaultProps = {
groupName: 'groupName not set',
contribAmt: -1,
+ contractAddress: 'contractAddress not set',
+ contractVersion: 'contractVersion not set',
+ contractBalance: 0,
};
export default GroupInfo
diff --git a/src/components/GroupPage.js b/src/components/GroupPage.js
index 6fef4a9..781a889 100644
--- a/src/components/GroupPage.js
+++ b/src/components/GroupPage.js
@@ -1,6 +1,6 @@
import React, { Component } from 'react'
-import SusuContract from '../../build/contracts/Susu.json'
+// import SusuOrigContract from '../../build/contracts/SusuOrig.json'
import getWeb3 from '../utils/getWeb3'
import {BigNumber} from 'bignumber.js';
@@ -12,6 +12,8 @@ import PartnerRow from "./PartnerRow";
import GroupInfo from "./GroupInfo";
import ActionButtons from "./ActionButtons";
import PartnerRowEmpty from "./PartnerRowEmpty";
+import SusuParentContract from "../../build/contracts/SusuParent";
+import SusuContract from "../../build/contracts/Susu";
class GroupPage extends Component {
@@ -21,17 +23,20 @@ class GroupPage extends Component {
this.state = {
web3: null,
susuContract: null,
+ susuParentContract: null,
myAddress: '',
contribAmt: 0,
- groupName: '---',
payoutFrequency: 'monthly',
manyMembers: 0,
groupSize: 0,
ownerAddress: '',
partnerObjects: [],
- contractAddress: props.match.params.contractAddress,
+ groupName: props.match.params.groupName,
myContrib:0.0,
memberAddrToPayNext:0,
+ susuContractAddress: '',
+ susuContractVersion: '',
+ susuContractBalance: 0,
}
}
@@ -51,14 +56,28 @@ class GroupPage extends Component {
}
instantiateContract() {
- const susuContract = this.state.web3.eth.contract(SusuContract.abi).at(this.state.contractAddress);
- this.setState({susuContract:susuContract});
+ const contract = require("truffle-contract");
+ const susuParentContract = contract(SusuParentContract);
+ const provider = new this.state.web3.providers.HttpProvider("http://127.0.0.1:7545");
+ susuParentContract.setProvider(provider);
+ this.setState({susuParentContract: susuParentContract});
+ this.state.susuParentContract.deployed().then((instance)=>{
+ return instance.getSusu.call(this.state.groupName);
+ }).then((susuContractAddress)=>{
+ const susuContract = this.state.web3.eth.contract(SusuContract.abi).at(susuContractAddress);
+ this.setState({susuContract: susuContract});
+ this.setState({susuContractAddress: susuContractAddress});
+ this.initState();
+ });
+ }
+
+ initState() {
let _this = this;
this.state.web3.eth.getAccounts(function(error, accounts) {
const myAddress = accounts[0];
_this.setState({myAddress: myAddress});
- susuContract.getContributionForMember(myAddress, (err, contribAmtWei)=>{
+ _this.state.susuContract.getContributionForMember(myAddress, (err, contribAmtWei)=>{
let bigNumber = new BigNumber(contribAmtWei);
const contribAmt = _this.state.web3.fromWei(bigNumber, 'ether').toNumber();
_this.setState({myContrib:contribAmt});
@@ -72,35 +91,43 @@ class GroupPage extends Component {
this.setState({ partnerObjects: partnerObjects });
}
- susuContract.groupName((err, groupName)=>{
+ this.state.web3.eth.getBalance(this.state.susuContractAddress, (err, balanceBig)=>{
+ let bigNumber = new BigNumber(balanceBig);
+ const susuContractBalance = _this.state.web3.fromWei(bigNumber, 'ether').toNumber();
+ this.setState({susuContractBalance:susuContractBalance});
+ });
+
+ this.state.susuContract.groupName((err, groupName)=>{
this.setState({groupName:groupName});
});
- susuContract.memberIdxToPayNext((err, memberIdxToPayNextBig)=>{
+ this.state.susuContract.version((err, susuContractVersion)=>{
+ this.setState({susuContractVersion:susuContractVersion});
+ });
+
+ this.state.susuContract.memberIdxToPayNext((err, memberIdxToPayNextBig)=>{
let bigNumber = new BigNumber(memberIdxToPayNextBig);
const memberIdxToPayNext = bigNumber.toNumber();
- console.log('memberIdxToPayNext:',memberIdxToPayNext);
- susuContract.getMemberAtIndex(memberIdxToPayNext, (err, memberAddrToPayNext)=>{
- console.log('memberAddrToPayNext:',memberAddrToPayNext);
+ this.state.susuContract.getMemberAtIndex(memberIdxToPayNext, (err, memberAddrToPayNext)=>{
this.setState({memberAddrToPayNext:memberAddrToPayNext});
});
});
- susuContract.contribAmtWei((err, contribAmtWei)=>{
+ this.state.susuContract.contribAmtWei((err, contribAmtWei)=>{
let bigNumber = new BigNumber(contribAmtWei);
const contribAmt = this.state.web3.fromWei(bigNumber, 'ether').toNumber();
this.setState({contribAmt:contribAmt});
});
- susuContract.owner((err, ownerAddress)=>{
+ this.state.susuContract.owner((err, ownerAddress)=>{
this.setState({ownerAddress:ownerAddress});
- susuContract.getManyMembers((err, manyMembersBig)=>{
+ this.state.susuContract.getManyMembers((err, manyMembersBig)=>{
let bigNumber = new BigNumber(manyMembersBig);
const manyMembers = bigNumber.toNumber();
this.setState({manyMembers:manyMembers});
- susuContract.groupSize((err, groupSizeBig)=>{
+ this.state.susuContract.groupSize((err, groupSizeBig)=>{
let bigNumber = new BigNumber(groupSizeBig);
const groupSize = bigNumber.toNumber();
this.setState({groupSize:groupSize});
@@ -123,12 +150,21 @@ class GroupPage extends Component {
let isGroupTerminated = false;
let isMember = this.isMember();
let isMemberToPayNext = this.state.memberAddrToPayNext===this.state.myAddress;
+ let contractAddress = this.state.susuContractAddress;
+ let contractVersion = this.state.susuContractVersion;
+ let contractBalance = this.state.susuContractBalance;
return (
-
+
{this.createPartnerRows()}
@@ -143,12 +179,14 @@ class GroupPage extends Component {
isGroupTerminated={isGroupTerminated}
isMember={isMember}
susuContract={this.state.susuContract}
+ susuParentContract={this.state.susuParentContract}
myAddress={this.state.myAddress}
web3={this.state.web3}
contribAmt={this.state.contribAmt}
myContrib={this.state.myContrib}
isReadyToPayout={this.isReadyToPayout()}
isMemberToPayNext={isMemberToPayNext}
+ groupName={this.state.groupName}
/>
diff --git a/test/TestSusu.js b/test/TestSusu.js
index 2db17b1..cb2fd7d 100644
--- a/test/TestSusu.js
+++ b/test/TestSusu.js
@@ -1,4 +1,4 @@
-const Susu = artifacts.require('./Susu.sol')
+const Susu = artifacts.require('./SusuOrig.sol')
contract('Susu', function ([owner, donor]) {
let susu