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 ( + + + + + + + + + + + + + + + + {table} +
HeightBlock HashAgeTxnUnclesCoinbaseGasUsedGasLimitAvg.GasPriceReward
+ ); + } +} +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 {
- {/**/} + } /> + +
+ + +
} + /> +