diff --git a/blockExplorerApi/handler.go b/blockExplorerApi/handler.go
index a030a6b07a..b84d5d3537 100644
--- a/blockExplorerApi/handler.go
+++ b/blockExplorerApi/handler.go
@@ -74,13 +74,34 @@ func GetAllTransactionsFromBlock(w http.ResponseWriter, r *http.Request) {
return
}
-
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
w.WriteHeader(http.StatusOK)
fmt.Fprintln(w, txsFromBlock)
}
+func GetAllBlocksMinedByAddress(w http.ResponseWriter, r *http.Request) {
+ vars := mux.Vars(r)
+ coinbase := vars["coinbase"]
+ connStr := "user=postgres dbname=shyftdb sslmode=disable"
+ blockExplorerDb, err := sql.Open("postgres", connStr)
+ if err != nil {
+ return
+ }
+
+ blocksMined := shyftdb.GetAllBlocksMinedByAddress(blockExplorerDb, coinbase)
+
+ if err != nil {
+ http.Error(w, err.Error(), 500)
+ return
+ }
+
+ w.Header().Set("Content-Type", "application/json; charset=UTF-8")
+ w.WriteHeader(http.StatusOK)
+
+ fmt.Fprintln(w, blocksMined)
+}
+
// GetAccount gets balance
func GetAccount(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
diff --git a/blockExplorerApi/routes.go b/blockExplorerApi/routes.go
index a08e207f6e..4ce0dc80c8 100644
--- a/blockExplorerApi/routes.go
+++ b/blockExplorerApi/routes.go
@@ -69,6 +69,12 @@ var routes = Routes{
Pattern: "/api/get_all_transactions_from_block/{blockNumber}",
HandlerFunc: GetAllTransactionsFromBlock,
},
+ Route{
+ Name: "GetAllBlocksMinedByAddress",
+ Method: "GET",
+ Pattern: "/api/get_blocks_mined/{coinbase}",
+ HandlerFunc: GetAllBlocksMinedByAddress,
+ },
Route{
"GetInternalTransactions",
"GET",
diff --git a/shyftBlockExplorerUI/src/components/nav/blockHeaders/blockCoinbaseHeader.js b/shyftBlockExplorerUI/src/components/nav/blockHeaders/blockCoinbaseHeader.js
new file mode 100644
index 0000000000..a368883b9c
--- /dev/null
+++ b/shyftBlockExplorerUI/src/components/nav/blockHeaders/blockCoinbaseHeader.js
@@ -0,0 +1,12 @@
+import React from 'react';
+import classes from '../nav.css';
+
+const blocksCoinbaseHeader = (props) => {
+ return (
+
+ Coinbase: {props.data.Coinbase}
+
+ )
+};
+
+export default blocksCoinbaseHeader;
\ No newline at end of file
diff --git a/shyftBlockExplorerUI/src/components/table/accounts/detailAccountsRow.js b/shyftBlockExplorerUI/src/components/table/accounts/detailAccountsRow.js
index cec0b9e8de..45f8c3bf21 100644
--- a/shyftBlockExplorerUI/src/components/table/accounts/detailAccountsRow.js
+++ b/shyftBlockExplorerUI/src/components/table/accounts/detailAccountsRow.js
@@ -10,6 +10,11 @@ class AccountTransactionTable extends Component {
return
}else {
table = this.props.data.map((data, i) => {
+ console.log(this.props.data)
+ // const total = this.props.data
+ // .map(num => num.Balance / 10000000000000000000)
+ // .reduce((acc, cur) => acc + cur ,0);
+ const conversion = data.Cost / 10000000000000000000;
return
diff --git a/shyftBlockExplorerUI/src/components/table/blocks/blockRows.js b/shyftBlockExplorerUI/src/components/table/blocks/blockRows.js
index daf5798345..378e48ecfb 100644
--- a/shyftBlockExplorerUI/src/components/table/blocks/blockRows.js
+++ b/shyftBlockExplorerUI/src/components/table/blocks/blockRows.js
@@ -37,6 +37,7 @@ class BlocksTable extends Component {
TxCount={data.TxCount}
Reward={conversion}
detailBlockHandler={this.props.detailBlockHandler}
+ getBlocksMined={this.props.getBlocksMined}
/>
});
diff --git a/shyftBlockExplorerUI/src/components/table/blocks/blockTable.js b/shyftBlockExplorerUI/src/components/table/blocks/blockTable.js
index 52ccdebd28..0f0a025832 100644
--- a/shyftBlockExplorerUI/src/components/table/blocks/blockTable.js
+++ b/shyftBlockExplorerUI/src/components/table/blocks/blockTable.js
@@ -13,7 +13,7 @@ const BlockTable = (props) => {
{props.Age} |
{props.TxCount} |
{props.UncleCount} |
- {props.Coinbase} |
+ props.getBlocksMined(props.Coinbase)}>{props.Coinbase} |
{props.GasUsed} |
{props.GasLimit} |
TBD |
diff --git a/shyftBlockExplorerUI/src/components/table/blocks/blocksMined.js b/shyftBlockExplorerUI/src/components/table/blocks/blocksMined.js
new file mode 100644
index 0000000000..782da7fe42
--- /dev/null
+++ b/shyftBlockExplorerUI/src/components/table/blocks/blocksMined.js
@@ -0,0 +1,55 @@
+import React, { Component } from 'react';
+import MinedBlockTable from './blocksMinedTable';
+import Loading from '../../UI materials/loading'
+import classes from './table.css';
+
+class BlocksMinedTable extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ data: []
+ };
+ }
+
+ render() {
+ const table = this.props.data.map((data, i) => {
+ const conversion = data.Rewards / 10000000000000000000;
+ return
+ });
+
+ let combinedClasses = ['responsive-table', classes.table];
+ return (
+
+
+
+ | Height |
+ Block Hash |
+ Age |
+ Txn |
+ Uncles |
+ Coinbase |
+ GasUsed |
+ GasLimit |
+ Avg.GasPrice |
+ Reward |
+
+
+ {table}
+
+ );
+ }
+}
+export default BlocksMinedTable;
diff --git a/shyftBlockExplorerUI/src/components/table/blocks/blocksMinedTable.js b/shyftBlockExplorerUI/src/components/table/blocks/blocksMinedTable.js
new file mode 100644
index 0000000000..16101a9ed2
--- /dev/null
+++ b/shyftBlockExplorerUI/src/components/table/blocks/blocksMinedTable.js
@@ -0,0 +1,26 @@
+import React from 'react';
+import classes from './table.css';
+import { Link } from 'react-router-dom'
+
+const MinedBlockTable = (props) => {
+ return (
+
+
+ | props.detailBlockHandler(props.Number)}>
+ {props.Number}
+ |
+ {props.Hash} |
+ {props.Age} |
+ {props.TxCount} |
+ {props.UncleCount} |
+ props.getBlocksMined(props.Coinbase)}>{props.Coinbase} |
+ {props.GasUsed} |
+ {props.GasLimit} |
+ TBD |
+ {props.Reward} |
+
+
+ )
+}
+
+export default MinedBlockTable;
diff --git a/shyftBlockExplorerUI/src/containers/App.js b/shyftBlockExplorerUI/src/containers/App.js
index a4fb1a571f..d73dd3c393 100644
--- a/shyftBlockExplorerUI/src/containers/App.js
+++ b/shyftBlockExplorerUI/src/containers/App.js
@@ -18,7 +18,8 @@ import BlocksRow from '../components/table/blocks/blockRows';
import DetailBlockTable from '../components/table/blocks/blocksDetailsRow';
import BlockDetailHeader from "../components/nav/blockHeaders/blockDetailHeader";
import BlockHeader from "../components/nav/blockHeaders/blockHeader";
-
+import BlocksMinedTable from "../components/table/blocks/blocksMined";
+import BlockCoinbaseHeader from "../components/nav/blockHeaders/blockCoinbaseHeader";
///**ACCOUNTS**///
import AccountsRow from '../components/table/accounts/accountRows';
import DetailAccountsTable from "../components/table/accounts/detailAccountsRow";
@@ -33,6 +34,7 @@ class App extends Component {
blockDetailData: [],
transactionDetailData: [],
accountDetailData: [],
+ blocksMined: [],
blockTransactions: [],
reqAccount: ''
};
@@ -78,6 +80,18 @@ class App extends Component {
}
};
+ getBlocksMined = async(coinbase) => {
+ console.log("THIS RAN")
+ try {
+ const response = await axios.get(`http://localhost:8080/api/get_blocks_mined/${coinbase}`)
+ console.log(response.data);
+ await this.setState({ blocksMined: response.data })
+ }
+ catch(error) {
+ console.log(error)
+ }
+ };
+
render() {
return (
@@ -102,6 +116,7 @@ class App extends Component {
}
@@ -135,8 +150,8 @@ class App extends Component {
- {/*
*/}
+
}
/>
+
+
+
+
+
}
+ />
+