fix merge conflict

This commit is contained in:
greg 2018-05-17 17:39:18 -04:00 committed by priom
commit cd38014fde
11 changed files with 206 additions and 197 deletions

View file

@ -16,7 +16,6 @@ import (
func GetTransaction(w http.ResponseWriter, r *http.Request) { func GetTransaction(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r) vars := mux.Vars(r)
txHash := vars["txHash"] txHash := vars["txHash"]
fmt.Println(txHash)
connStr := "user=postgres dbname=shyftdb sslmode=disable" connStr := "user=postgres dbname=shyftdb sslmode=disable"
blockExplorerDb, err := sql.Open("postgres", connStr) blockExplorerDb, err := sql.Open("postgres", connStr)
if err != nil { if err != nil {
@ -24,7 +23,6 @@ func GetTransaction(w http.ResponseWriter, r *http.Request) {
} }
getTxResponse := shyftdb.GetTransaction(blockExplorerDb, txHash) getTxResponse := shyftdb.GetTransaction(blockExplorerDb, txHash)
fmt.Println(getTxResponse)
if err != nil { if err != nil {
http.Error(w, err.Error(), 500) http.Error(w, err.Error(), 500)

View file

@ -24,7 +24,7 @@ class BlocksTable extends Component {
render() { render() {
const table = this.state.data.map((data, i) => { const table = this.state.data.map((data, i) => {
return <BlockTable return <BlockTable
key={data.Hash[i]} key={`${data.TxHash}${i}`}
Hash={data.Hash} Hash={data.Hash}
Number={data.Number} Number={data.Number}
Coinbase={data.Coinbase} Coinbase={data.Coinbase}

View file

@ -5,7 +5,7 @@ import { Link } from 'react-router-dom'
const BlockTable = (props) => { const BlockTable = (props) => {
return ( return (
<tbody key={props.key}> <tbody>
<tr> <tr>
<td><Link to="/blocks/detail" onClick={() => props.detailBlockHandler(props.Number)}> <td><Link to="/blocks/detail" onClick={() => props.detailBlockHandler(props.Number)}>
{props.Number} {props.Number}

View file

@ -8,6 +8,7 @@ class DetailBlockTable extends Component {
let combinedClasses = ['responsive-table', classes.table]; let combinedClasses = ['responsive-table', classes.table];
return ( return (
<table className={combinedClasses.join(' ')}> <table className={combinedClasses.join(' ')}>
<tbody>
<tr> <tr>
<th scope="col">Height:</th> <th scope="col">Height:</th>
<td>{data.Number}</td> <td>{data.Number}</td>
@ -68,6 +69,7 @@ class DetailBlockTable extends Component {
<th scope="col">Reward:</th> <th scope="col">Reward:</th>
<td>TBD</td> <td>TBD</td>
</tr> </tr>
</tbody>
</table> </table>
); );
} }

View file

@ -13,6 +13,11 @@ th {
padding-right: 10px; padding-right: 10px;
} }
td {
padding-left: 5px;
font-size: .5rem;
}
.addressTag { .addressTag {
display: inline-block; display: inline-block;
vertical-align: bottom; vertical-align: bottom;

View file

@ -8,66 +8,60 @@ class DetailTransactionTable extends Component {
let combinedClasses = ['responsive-table', classes.table]; let combinedClasses = ['responsive-table', classes.table];
return ( return (
<table className={combinedClasses.join(' ')}> <table className={combinedClasses.join(' ')}>
<tbody>
<tr> <tr>
<th scope="col">TxHash:</th> <th scope="col">TxHash:</th>
<td>{data.TxHash}</td> <td>{data.TxHash}</td>
</tr> </tr>
<tr> <tr>
<th scope="col">Age:</th> <th scope="col">TxReceipt Status:</th>
<td>{data.Status}</td>
</tr>
<tr>
<th scope="col">Block Height:</th>
<td>{data.BlockNumber}</td>
</tr>
<tr>
<th scope="col">TimeStamp:</th>
<td>{data.Age}</td> <td>{data.Age}</td>
</tr> </tr>
<tr> <tr>
<th scope="col">Txn:</th> <th scope="col">From:</th>
<td>{data.TxCount} transactions</td> <td>{data.From}</td>
</tr> </tr>
<tr> <tr>
<th scope="col">Block Hash:</th> <th scope="col">To:</th>
<td>{data.Hash}</td> <td>{ `${data.IsContract}` ? `${data.To} (Contract)` : `${data.To}` }</td>
</tr> </tr>
<tr> <tr>
<th scope="col">Parent Hash:</th> <th scope="col">Value:</th>
<td>{data.ParentHash}</td> <td>{data.Amount}</td>
</tr> </tr>
<tr> <tr>
<th scope="col">Uncle Hash:</th> <th scope="col">Gas Limit:</th>
<td>{data.UncleHash}</td>
</tr>
<tr>
<th scope="col">Uncle Count:</th>
<td>{data.UncleCount}</td>
</tr>
<tr>
<th scope="col">Coinbase:</th>
<td>{data.Coinbase}</td>
</tr>
<tr>
<th scope="col">Difficulty:</th>
<td>{data.Difficulty}</td>
</tr>
<tr>
<th scope="col">GasUsed:</th>
<td>{data.GasUsed}</td>
</tr>
<tr>
<th scope="col">Size:</th>
<td>{data.Size}ytes</td>
</tr>
<tr>
<th scope="col">GasUsed:</th>
<td>{data.GasUsed}</td>
</tr>
<tr>
<th scope="col">GasLimit:</th>
<td>{data.GasLimit}</td> <td>{data.GasLimit}</td>
</tr> </tr>
<tr>
<th scope="col">Gas Used By Txn:</th>
<td>{data.Gas}</td>
</tr>
<tr>
<th scope="col">Gas Price:</th>
<td>{data.GasPrice}</td>
</tr>
<tr>
<th scope="col">Actual Tx Cost/Fee:</th>
<td>{data.Cost}</td>
</tr>
<tr> <tr>
<th scope="col">Nonce:</th> <th scope="col">Nonce:</th>
<td>{data.Nonce}</td> <td>{data.Nonce}</td>
</tr> </tr>
<tr> <tr>
<th scope="col">Reward:</th> <th scope="col">Input Data:</th>
<td>TBD</td> <td>{data.Data}</td>
</tr> </tr>
</tbody>
</table> </table>
); );
} }

View file

@ -26,25 +26,28 @@ class TransactionTable extends Component {
const table = this.state.data.map((data, i) => { const table = this.state.data.map((data, i) => {
return <TransactionsTable return <TransactionsTable
key={data.TxHash[i]} key={`${data.TxHash}${i}`}
age={data.Age}
txHash={data.TxHash} txHash={data.TxHash}
blockNumber={data.BlockNumber} blockNumber={data.BlockNumber}
to={data.To} to={data.To}
from={data.From} from={data.From}
value={data.Amount} value={data.Amount}
cost={data.Cost} cost={data.Cost}
detailTransactionHandler={this.props.detailTransactionHandler}
/> />
}) })
let combinedClasses = ['responsive-table', classes.table]; let combinedClasses = ['responsive-table', classes.table];
return ( return (
<table className={combinedClasses.join(' ')}> <table key={this.state.data.TxHash} className={combinedClasses.join(' ')}>
<thead className={classes.tHead}> <thead className={classes.tHead}>
<tr> <tr>
<th scope="col">TxHash</th> <th scope="col">TxHash</th>
<th scope="col">Block</th> <th scope="col">Block</th>
<th scope="col">Age</th> <th scope="col">Age</th>
<th scope="col">From</th> <th scope="col">From</th>
<th scope="col"></th>
<th scope="col">To</th> <th scope="col">To</th>
<th scope="col">Value</th> <th scope="col">Value</th>
<th scope="col">TxFee</th> <th scope="col">TxFee</th>

View file

@ -12,10 +12,10 @@ const TransactionTable = (props) => {
{props.txHash}</Link> {props.txHash}</Link>
</td> </td>
<td>{props.blockNumber}</td> <td>{props.blockNumber}</td>
<td>30 secs ago</td> <td>{props.age}</td>
<td className={classes.fromTag}>{props.from}</td> <td className={classes.fromTag}>{props.from}</td>
<img className={classes.arrow} src={arrow}/> <td><img className={classes.arrow} src={arrow}/></td>
<td>{props.to}</td> <td className={classes.toTag}>{props.to}</td>
<td>{props.value}</td> <td>{props.value}</td>
<td>{props.cost}</td> <td>{props.cost}</td>
</tr> </tr>

View file

@ -23,9 +23,12 @@ CREATE TABLE IF NOT EXISTS txs (
amount numeric, amount numeric,
gasprice numeric, gasprice numeric,
gas numeric, gas numeric,
gasLimit numeric,
txFee numeric, txFee numeric,
nonce numeric, nonce numeric,
txStatus text,
isContract bool, isContract bool,
age timestamp,
data bytea data bytea
); );

View file

@ -79,8 +79,12 @@ type ShyftTxEntryPretty struct {
Amount uint64 Amount uint64
GasPrice uint64 GasPrice uint64
Gas uint64 Gas uint64
GasLimit uint64
Cost uint64 Cost uint64
Nonce uint64 Nonce uint64
Status string
IsContract bool
Age time.Time
Data []byte Data []byte
} }
@ -118,33 +122,6 @@ func WriteBlock(sqldb *sql.DB, block *types.Block, receipts []*types.Receipt) er
blockSize := block.Size().String() blockSize := block.Size().String()
blockNonce := block.Nonce() blockNonce := block.Nonce()
// Convert the receipts into their storage form and serialize them
storageReceipts := make([]*types.ReceiptForStorage, len(receipts))
for i, receipt := range receipts {
storageReceipts[i] = (*types.ReceiptForStorage)(receipt)
var txHashFromReciept = (*types.ReceiptForStorage)(receipt).TxHash
var statusFromReciept = (*types.ReceiptForStorage)(receipt).Status
var contractAddressFromReciept = (*types.ReceiptForStorage)(receipt).ContractAddress
if statusFromReciept == 1 {
fmt.Println("THIS IS statusFromReciept", "SUCCESS", statusFromReciept)
}
if statusFromReciept == 0 {
fmt.Println("THIS IS statusFromReciept", "FAIL", statusFromReciept)
}
if block.Transactions()[0].To() == nil {
updateSQLStatement := `UPDATE txs SET to_addr = ($2) WHERE txHash = ($1)`
_, error := sqldb.Exec(updateSQLStatement, txHashFromReciept.String(), contractAddressFromReciept.String())
if error != nil {
panic(error)
}
}
fmt.Println("THIS IS txHashFromReciept", txHashFromReciept.String())
fmt.Println("THIS IS contractAddressFromReciept", contractAddressFromReciept.String())
}
i, err := strconv.ParseInt(block.Time().String(), 10, 64) i, err := strconv.ParseInt(block.Time().String(), 10, 64)
if err != nil { if err != nil {
panic(err) panic(err)
@ -160,7 +137,7 @@ func WriteBlock(sqldb *sql.DB, block *types.Block, receipts []*types.Receipt) er
if block.Transactions().Len() > 0 { if block.Transactions().Len() > 0 {
for _, tx := range block.Transactions() { for _, tx := range block.Transactions() {
//WriteMinerRewards(sqldb, block) //WriteMinerRewards(sqldb, block)
WriteTransactions(sqldb, tx, block.Header().Hash(), block.Header().Number.String()) WriteTransactions(sqldb, tx, block.Header().Hash(), block.Header().Number.String(), receipts, age, gasLimit)
if block.Transactions()[0].To() != nil { if block.Transactions()[0].To() != nil {
WriteFromBalance(sqldb, tx) WriteFromBalance(sqldb, tx)
} }
@ -174,7 +151,7 @@ func WriteBlock(sqldb *sql.DB, block *types.Block, receipts []*types.Receipt) er
} }
//WriteTransactions writes to sqldb //WriteTransactions writes to sqldb
func WriteTransactions(sqldb *sql.DB, tx *types.Transaction, blockHash common.Hash, blockNumber string) error { func WriteTransactions(sqldb *sql.DB, tx *types.Transaction, blockHash common.Hash, blockNumber string, receipts []*types.Receipt, age time.Time, gasLimit uint64) error {
txData := ShyftTxEntry{ txData := ShyftTxEntry{
TxHash: tx.Hash(), TxHash: tx.Hash(),
From: tx.From(), From: tx.From(),
@ -187,7 +164,6 @@ func WriteTransactions(sqldb *sql.DB, tx *types.Transaction, blockHash common.Ha
Nonce: tx.Nonce(), Nonce: tx.Nonce(),
Data: tx.Data(), Data: tx.Data(),
} }
txHash := txData.TxHash.Hex() txHash := txData.TxHash.Hex()
from := txData.From.Hex() from := txData.From.Hex()
blockHasher := txData.BlockHash blockHasher := txData.BlockHash
@ -199,11 +175,25 @@ func WriteTransactions(sqldb *sql.DB, tx *types.Transaction, blockHash common.Ha
data := txData.Data data := txData.Data
to := txData.To to := txData.To
var isContract bool var isContract bool
var statusFromReciept string
if (to == nil){ if (to == nil){
var contractAddressFromReciept string
for _, receipt := range receipts {
statusReciept := (*types.ReceiptForStorage)(receipt).Status
contractAddressFromReciept = (*types.ReceiptForStorage)(receipt).ContractAddress.String()
if statusReciept == 1 {
statusFromReciept = "SUCCESS"
}
if statusReciept == 0 {
statusFromReciept = "FAIL"
}
}
var retNonce string var retNonce string
isContract = true isContract = true
sqlStatement := `INSERT INTO txs(txhash, from_addr, blockhash, blockNumber, amount, gasprice, gas, txfee, nonce, isContract, data) VALUES(($1), ($2), ($3), ($4), ($5), ($6), ($7), ($8), ($9), ($10), ($11)) RETURNING nonce` sqlStatement := `INSERT INTO txs(txhash, from_addr, to_addr, blockhash, blockNumber, amount, gasprice, gas, gasLimit,txfee, nonce, isContract, txStatus, age, data) VALUES(($1), ($2), ($3), ($4), ($5), ($6), ($7), ($8), ($9), ($10), ($11), ($12), ($13), ($14), ($15)) RETURNING nonce`
qerr := sqldb.QueryRow(sqlStatement, txHash, from, blockHasher, blockNumber, amount, gasPrice, gas, txFee, nonce, isContract, data).Scan(&retNonce) qerr := sqldb.QueryRow(sqlStatement, txHash, from, contractAddressFromReciept, blockHasher, blockNumber, amount, gasPrice, gas, gasLimit, txFee, nonce, isContract, statusFromReciept, age,data).Scan(&retNonce)
if qerr != nil { if qerr != nil {
panic(qerr) panic(qerr)
@ -211,8 +201,18 @@ func WriteTransactions(sqldb *sql.DB, tx *types.Transaction, blockHash common.Ha
} else { } else {
var retNonce string var retNonce string
isContract = false isContract = false
sqlStatement := `INSERT INTO txs(txhash, from_addr, to_addr, blockhash, blockNumber, amount, gasprice, gas, txfee, nonce, isContract, data) VALUES(($1), ($2), ($3), ($4), ($5), ($6), ($7), ($8), ($9), ($10), ($11), ($12)) RETURNING nonce` for _, receipt := range receipts {
qerr := sqldb.QueryRow(sqlStatement, txHash, from, to.Hex(), blockHasher, blockNumber, amount, gasPrice, gas, txFee, nonce, isContract, data).Scan(&retNonce) statusReciept := (*types.ReceiptForStorage)(receipt).Status
if statusReciept == 1 {
statusFromReciept = "SUCCESS"
}
if statusReciept == 0 {
statusFromReciept = "FAIL"
}
}
sqlStatement := `INSERT INTO txs(txhash, from_addr, to_addr, blockhash, blockNumber, amount, gasprice, gas, gasLimit, txfee, nonce, isContract, txStatus, age, data) VALUES(($1), ($2), ($3), ($4), ($5), ($6), ($7), ($8), ($9), ($10), ($11), ($12), ($13), ($14), ($15)) RETURNING nonce`
qerr := sqldb.QueryRow(sqlStatement, txHash, from, to.Hex(), blockHasher, blockNumber, amount, gasPrice, gas, gasLimit, txFee, nonce, isContract, statusFromReciept, age,data).Scan(&retNonce)
if qerr != nil { if qerr != nil {
panic(qerr) panic(qerr)
@ -244,13 +244,6 @@ func WriteContractBalance(sqldb *sql.DB, tx *types.Transaction) error {
err := sqldb.QueryRow(sqlExistsStatement, fromAddr).Scan(&response) err := sqldb.QueryRow(sqlExistsStatement, fromAddr).Scan(&response)
switch { switch {
case err == sql.ErrNoRows: case err == sql.ErrNoRows:
fmt.Println("NO ROWS RAN")
//i, err := strconv.Atoi(accountNonceSen)
//if err != nil {
// fmt.Println(err)
//}
//fmt.Println("accountnonce", i)
//fmt.Println(reflect.TypeOf(i))
sqlStatement := `INSERT INTO accounts(addr, balance, txCountAccount) VALUES(($1), ($2), ($3)) RETURNING addr` sqlStatement := `INSERT INTO accounts(addr, balance, txCountAccount) VALUES(($1), ($2), ($3)) RETURNING addr`
insertErr := sqldb.QueryRow(sqlStatement, fromAddr, amount, accountNonceSen).Scan(&fromAddr) insertErr := sqldb.QueryRow(sqlStatement, fromAddr, amount, accountNonceSen).Scan(&fromAddr)
if insertErr != nil { if insertErr != nil {
@ -308,8 +301,6 @@ func WriteContractBalanceHelper(sqldb *sql.DB, tx *types.Transaction) (SendAndRe
//WriteFromBalance writes senders balance to accounts db //WriteFromBalance writes senders balance to accounts db
func WriteFromBalance(sqldb *sql.DB, tx *types.Transaction) error { func WriteFromBalance(sqldb *sql.DB, tx *types.Transaction) error {
//IF to address is nil (which means its contract creation)
//Need to create a condition (flag) check and then change how the nonce increment works
sendAndReceiveData, balanceRec, balanceSen, accountNonceRec, accountNonceSen := WriteBalanceHelper(sqldb, tx) sendAndReceiveData, balanceRec, balanceSen, accountNonceRec, accountNonceSen := WriteBalanceHelper(sqldb, tx)
toAddr := sendAndReceiveData.To toAddr := sendAndReceiveData.To
fromAddr := sendAndReceiveData.From fromAddr := sendAndReceiveData.From
@ -322,13 +313,10 @@ func WriteFromBalance(sqldb *sql.DB, tx *types.Transaction) error {
err := sqldb.QueryRow(sqlExistsStatement, toAddr).Scan(&response) err := sqldb.QueryRow(sqlExistsStatement, toAddr).Scan(&response)
switch { switch {
case err == sql.ErrNoRows: case err == sql.ErrNoRows:
fmt.Println("NO ROWS RAN")
i, err := strconv.Atoi(accountNonceRec) i, err := strconv.Atoi(accountNonceRec)
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
//fmt.Println("accountnonce", i)
//fmt.Println(reflect.TypeOf(i))
sqlStatement := `INSERT INTO accounts(addr, balance, txCountAccount) VALUES(($1), ($2), ($3)) RETURNING addr` sqlStatement := `INSERT INTO accounts(addr, balance, txCountAccount) VALUES(($1), ($2), ($3)) RETURNING addr`
insertErr := sqldb.QueryRow(sqlStatement, toAddr, amount, i).Scan(&toAddr) insertErr := sqldb.QueryRow(sqlStatement, toAddr, amount, i).Scan(&toAddr)
if insertErr != nil { if insertErr != nil {
@ -620,19 +608,7 @@ func GetAllTransactions(sqldb *sql.DB) string {
var arr txRes var arr txRes
var txx string var txx string
rows, err := sqldb.Query(` rows, err := sqldb.Query(`
SELECT SELECT * FROM txs`)
txhash,
to_addr,
from_addr,
blockhash,
blocknumber,
amount,
gasprice,
gas,
txfee,
nonce,
data
FROM txs`)
if err != nil { if err != nil {
fmt.Println("err") fmt.Println("err")
} }
@ -646,8 +622,12 @@ func GetAllTransactions(sqldb *sql.DB) string {
var amount uint64 var amount uint64
var gasprice uint64 var gasprice uint64
var gas uint64 var gas uint64
var gasLimit uint64
var txfee uint64 var txfee uint64
var nonce uint64 var nonce uint64
var status string
var isContract bool
var age time.Time
var data []byte var data []byte
err = rows.Scan( err = rows.Scan(
&txhash, &txhash,
@ -658,8 +638,12 @@ func GetAllTransactions(sqldb *sql.DB) string {
&amount, &amount,
&gasprice, &gasprice,
&gas, &gas,
&gasLimit,
&txfee, &txfee,
&nonce, &nonce,
&status,
&isContract,
&age,
&data, &data,
) )
@ -672,8 +656,12 @@ func GetAllTransactions(sqldb *sql.DB) string {
Amount: amount, Amount: amount,
GasPrice: gasprice, GasPrice: gasprice,
Gas: gas, Gas: gas,
GasLimit: gasLimit,
Cost: txfee, Cost: txfee,
Nonce: nonce, Nonce: nonce,
Status: status,
IsContract: isContract,
Age: age,
Data: data, Data: data,
}) })
@ -696,20 +684,30 @@ func GetTransaction(sqldb *sql.DB, txHash string) string {
var amount uint64 var amount uint64
var gasprice uint64 var gasprice uint64
var gas uint64 var gas uint64
var gasLimit uint64
var txfee uint64 var txfee uint64
var nonce uint64 var nonce uint64
var status string
var isContract bool
var age time.Time
var data []byte var data []byte
row.Scan( row.Scan(
&txhash, &txhash,
&to_addr, &to_addr,
&from_addr, &from_addr,
&blockhash, &blockhash,
&blocknumber,
&amount, &amount,
&gasprice, &gasprice,
&gas, &gas,
&gasLimit,
&txfee, &txfee,
&nonce, &nonce,
&status,
&isContract,
&age,
&data) &data)
tx := ShyftTxEntryPretty{ tx := ShyftTxEntryPretty{
TxHash: txhash, TxHash: txhash,
To: to_addr, To: to_addr,
@ -719,8 +717,12 @@ func GetTransaction(sqldb *sql.DB, txHash string) string {
Amount: amount, Amount: amount,
GasPrice: gasprice, GasPrice: gasprice,
Gas: gas, Gas: gas,
GasLimit: gasLimit,
Cost: txfee, Cost: txfee,
Nonce: nonce, Nonce: nonce,
Status: status,
IsContract: isContract,
Age: age,
Data: data, Data: data,
} }
json, _ := json.Marshal(tx) json, _ := json.Marshal(tx)

View file

@ -79,8 +79,12 @@ type ShyftTxEntryPretty struct {
Amount uint64 Amount uint64
GasPrice uint64 GasPrice uint64
Gas uint64 Gas uint64
GasLimit uint64
Cost uint64 Cost uint64
Nonce uint64 Nonce uint64
Status string
IsContract bool
Age time.Time
Data []byte Data []byte
} }
@ -118,33 +122,6 @@ func WriteBlock(sqldb *sql.DB, block *types.Block, receipts []*types.Receipt) er
blockSize := block.Size().String() blockSize := block.Size().String()
blockNonce := block.Nonce() blockNonce := block.Nonce()
// Convert the receipts into their storage form and serialize them
storageReceipts := make([]*types.ReceiptForStorage, len(receipts))
for i, receipt := range receipts {
storageReceipts[i] = (*types.ReceiptForStorage)(receipt)
var txHashFromReciept = (*types.ReceiptForStorage)(receipt).TxHash
var statusFromReciept = (*types.ReceiptForStorage)(receipt).Status
var contractAddressFromReciept = (*types.ReceiptForStorage)(receipt).ContractAddress
if statusFromReciept == 1 {
fmt.Println("THIS IS statusFromReciept", "SUCCESS", statusFromReciept)
}
if statusFromReciept == 0 {
fmt.Println("THIS IS statusFromReciept", "FAIL", statusFromReciept)
}
if block.Transactions()[0].To() == nil {
updateSQLStatement := `UPDATE txs SET to_addr = ($2) WHERE txHash = ($1)`
_, error := sqldb.Exec(updateSQLStatement, txHashFromReciept.String(), contractAddressFromReciept.String())
if error != nil {
panic(error)
}
}
fmt.Println("THIS IS txHashFromReciept", txHashFromReciept.String())
fmt.Println("THIS IS contractAddressFromReciept", contractAddressFromReciept.String())
}
i, err := strconv.ParseInt(block.Time().String(), 10, 64) i, err := strconv.ParseInt(block.Time().String(), 10, 64)
if err != nil { if err != nil {
panic(err) panic(err)
@ -160,7 +137,7 @@ func WriteBlock(sqldb *sql.DB, block *types.Block, receipts []*types.Receipt) er
if block.Transactions().Len() > 0 { if block.Transactions().Len() > 0 {
for _, tx := range block.Transactions() { for _, tx := range block.Transactions() {
//WriteMinerRewards(sqldb, block) //WriteMinerRewards(sqldb, block)
WriteTransactions(sqldb, tx, block.Header().Hash(), block.Header().Number.String()) WriteTransactions(sqldb, tx, block.Header().Hash(), block.Header().Number.String(), receipts, age, gasLimit)
if block.Transactions()[0].To() != nil { if block.Transactions()[0].To() != nil {
WriteFromBalance(sqldb, tx) WriteFromBalance(sqldb, tx)
} }
@ -174,7 +151,7 @@ func WriteBlock(sqldb *sql.DB, block *types.Block, receipts []*types.Receipt) er
} }
//WriteTransactions writes to sqldb //WriteTransactions writes to sqldb
func WriteTransactions(sqldb *sql.DB, tx *types.Transaction, blockHash common.Hash, blockNumber string) error { func WriteTransactions(sqldb *sql.DB, tx *types.Transaction, blockHash common.Hash, blockNumber string, receipts []*types.Receipt, age time.Time, gasLimit uint64) error {
txData := ShyftTxEntry{ txData := ShyftTxEntry{
TxHash: tx.Hash(), TxHash: tx.Hash(),
From: tx.From(), From: tx.From(),
@ -187,7 +164,6 @@ func WriteTransactions(sqldb *sql.DB, tx *types.Transaction, blockHash common.Ha
Nonce: tx.Nonce(), Nonce: tx.Nonce(),
Data: tx.Data(), Data: tx.Data(),
} }
txHash := txData.TxHash.Hex() txHash := txData.TxHash.Hex()
from := txData.From.Hex() from := txData.From.Hex()
blockHasher := txData.BlockHash blockHasher := txData.BlockHash
@ -199,11 +175,25 @@ func WriteTransactions(sqldb *sql.DB, tx *types.Transaction, blockHash common.Ha
data := txData.Data data := txData.Data
to := txData.To to := txData.To
var isContract bool var isContract bool
var statusFromReciept string
if (to == nil){ if (to == nil){
var contractAddressFromReciept string
for _, receipt := range receipts {
statusReciept := (*types.ReceiptForStorage)(receipt).Status
contractAddressFromReciept = (*types.ReceiptForStorage)(receipt).ContractAddress.String()
if statusReciept == 1 {
statusFromReciept = "SUCCESS"
}
if statusReciept == 0 {
statusFromReciept = "FAIL"
}
}
var retNonce string var retNonce string
isContract = true isContract = true
sqlStatement := `INSERT INTO txs(txhash, from_addr, blockhash, blockNumber, amount, gasprice, gas, txfee, nonce, isContract, data) VALUES(($1), ($2), ($3), ($4), ($5), ($6), ($7), ($8), ($9), ($10), ($11)) RETURNING nonce` sqlStatement := `INSERT INTO txs(txhash, from_addr, to_addr, blockhash, blockNumber, amount, gasprice, gas, gasLimit,txfee, nonce, isContract, txStatus, age, data) VALUES(($1), ($2), ($3), ($4), ($5), ($6), ($7), ($8), ($9), ($10), ($11), ($12), ($13), ($14), ($15)) RETURNING nonce`
qerr := sqldb.QueryRow(sqlStatement, txHash, from, blockHasher, blockNumber, amount, gasPrice, gas, txFee, nonce, isContract, data).Scan(&retNonce) qerr := sqldb.QueryRow(sqlStatement, txHash, from, contractAddressFromReciept, blockHasher, blockNumber, amount, gasPrice, gas, gasLimit, txFee, nonce, isContract, statusFromReciept, age,data).Scan(&retNonce)
if qerr != nil { if qerr != nil {
panic(qerr) panic(qerr)
@ -211,8 +201,18 @@ func WriteTransactions(sqldb *sql.DB, tx *types.Transaction, blockHash common.Ha
} else { } else {
var retNonce string var retNonce string
isContract = false isContract = false
sqlStatement := `INSERT INTO txs(txhash, from_addr, to_addr, blockhash, blockNumber, amount, gasprice, gas, txfee, nonce, isContract, data) VALUES(($1), ($2), ($3), ($4), ($5), ($6), ($7), ($8), ($9), ($10), ($11), ($12)) RETURNING nonce` for _, receipt := range receipts {
qerr := sqldb.QueryRow(sqlStatement, txHash, from, to.Hex(), blockHasher, blockNumber, amount, gasPrice, gas, txFee, nonce, isContract, data).Scan(&retNonce) statusReciept := (*types.ReceiptForStorage)(receipt).Status
if statusReciept == 1 {
statusFromReciept = "SUCCESS"
}
if statusReciept == 0 {
statusFromReciept = "FAIL"
}
}
sqlStatement := `INSERT INTO txs(txhash, from_addr, to_addr, blockhash, blockNumber, amount, gasprice, gas, gasLimit, txfee, nonce, isContract, txStatus, age, data) VALUES(($1), ($2), ($3), ($4), ($5), ($6), ($7), ($8), ($9), ($10), ($11), ($12), ($13), ($14), ($15)) RETURNING nonce`
qerr := sqldb.QueryRow(sqlStatement, txHash, from, to.Hex(), blockHasher, blockNumber, amount, gasPrice, gas, gasLimit, txFee, nonce, isContract, statusFromReciept, age,data).Scan(&retNonce)
if qerr != nil { if qerr != nil {
panic(qerr) panic(qerr)
@ -244,13 +244,6 @@ func WriteContractBalance(sqldb *sql.DB, tx *types.Transaction) error {
err := sqldb.QueryRow(sqlExistsStatement, fromAddr).Scan(&response) err := sqldb.QueryRow(sqlExistsStatement, fromAddr).Scan(&response)
switch { switch {
case err == sql.ErrNoRows: case err == sql.ErrNoRows:
fmt.Println("NO ROWS RAN")
//i, err := strconv.Atoi(accountNonceSen)
//if err != nil {
// fmt.Println(err)
//}
//fmt.Println("accountnonce", i)
//fmt.Println(reflect.TypeOf(i))
sqlStatement := `INSERT INTO accounts(addr, balance, txCountAccount) VALUES(($1), ($2), ($3)) RETURNING addr` sqlStatement := `INSERT INTO accounts(addr, balance, txCountAccount) VALUES(($1), ($2), ($3)) RETURNING addr`
insertErr := sqldb.QueryRow(sqlStatement, fromAddr, amount, accountNonceSen).Scan(&fromAddr) insertErr := sqldb.QueryRow(sqlStatement, fromAddr, amount, accountNonceSen).Scan(&fromAddr)
if insertErr != nil { if insertErr != nil {
@ -308,8 +301,6 @@ func WriteContractBalanceHelper(sqldb *sql.DB, tx *types.Transaction) (SendAndRe
//WriteFromBalance writes senders balance to accounts db //WriteFromBalance writes senders balance to accounts db
func WriteFromBalance(sqldb *sql.DB, tx *types.Transaction) error { func WriteFromBalance(sqldb *sql.DB, tx *types.Transaction) error {
//IF to address is nil (which means its contract creation)
//Need to create a condition (flag) check and then change how the nonce increment works
sendAndReceiveData, balanceRec, balanceSen, accountNonceRec, accountNonceSen := WriteBalanceHelper(sqldb, tx) sendAndReceiveData, balanceRec, balanceSen, accountNonceRec, accountNonceSen := WriteBalanceHelper(sqldb, tx)
toAddr := sendAndReceiveData.To toAddr := sendAndReceiveData.To
fromAddr := sendAndReceiveData.From fromAddr := sendAndReceiveData.From
@ -322,13 +313,10 @@ func WriteFromBalance(sqldb *sql.DB, tx *types.Transaction) error {
err := sqldb.QueryRow(sqlExistsStatement, toAddr).Scan(&response) err := sqldb.QueryRow(sqlExistsStatement, toAddr).Scan(&response)
switch { switch {
case err == sql.ErrNoRows: case err == sql.ErrNoRows:
fmt.Println("NO ROWS RAN")
i, err := strconv.Atoi(accountNonceRec) i, err := strconv.Atoi(accountNonceRec)
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
//fmt.Println("accountnonce", i)
//fmt.Println(reflect.TypeOf(i))
sqlStatement := `INSERT INTO accounts(addr, balance, txCountAccount) VALUES(($1), ($2), ($3)) RETURNING addr` sqlStatement := `INSERT INTO accounts(addr, balance, txCountAccount) VALUES(($1), ($2), ($3)) RETURNING addr`
insertErr := sqldb.QueryRow(sqlStatement, toAddr, amount, i).Scan(&toAddr) insertErr := sqldb.QueryRow(sqlStatement, toAddr, amount, i).Scan(&toAddr)
if insertErr != nil { if insertErr != nil {
@ -620,19 +608,7 @@ func GetAllTransactions(sqldb *sql.DB) string {
var arr txRes var arr txRes
var txx string var txx string
rows, err := sqldb.Query(` rows, err := sqldb.Query(`
SELECT SELECT * FROM txs`)
txhash,
to_addr,
from_addr,
blockhash,
blocknumber,
amount,
gasprice,
gas,
txfee,
nonce,
data
FROM txs`)
if err != nil { if err != nil {
fmt.Println("err") fmt.Println("err")
} }
@ -646,8 +622,12 @@ func GetAllTransactions(sqldb *sql.DB) string {
var amount uint64 var amount uint64
var gasprice uint64 var gasprice uint64
var gas uint64 var gas uint64
var gasLimit uint64
var txfee uint64 var txfee uint64
var nonce uint64 var nonce uint64
var status string
var isContract bool
var age time.Time
var data []byte var data []byte
err = rows.Scan( err = rows.Scan(
&txhash, &txhash,
@ -658,8 +638,12 @@ func GetAllTransactions(sqldb *sql.DB) string {
&amount, &amount,
&gasprice, &gasprice,
&gas, &gas,
&gasLimit,
&txfee, &txfee,
&nonce, &nonce,
&status,
&isContract,
&age,
&data, &data,
) )
@ -672,8 +656,12 @@ func GetAllTransactions(sqldb *sql.DB) string {
Amount: amount, Amount: amount,
GasPrice: gasprice, GasPrice: gasprice,
Gas: gas, Gas: gas,
GasLimit: gasLimit,
Cost: txfee, Cost: txfee,
Nonce: nonce, Nonce: nonce,
Status: status,
IsContract: isContract,
Age: age,
Data: data, Data: data,
}) })
@ -696,20 +684,30 @@ func GetTransaction(sqldb *sql.DB, txHash string) string {
var amount uint64 var amount uint64
var gasprice uint64 var gasprice uint64
var gas uint64 var gas uint64
var gasLimit uint64
var txfee uint64 var txfee uint64
var nonce uint64 var nonce uint64
var status string
var isContract bool
var age time.Time
var data []byte var data []byte
row.Scan( row.Scan(
&txhash, &txhash,
&to_addr, &to_addr,
&from_addr, &from_addr,
&blockhash, &blockhash,
&blocknumber,
&amount, &amount,
&gasprice, &gasprice,
&gas, &gas,
&gasLimit,
&txfee, &txfee,
&nonce, &nonce,
&status,
&isContract,
&age,
&data) &data)
tx := ShyftTxEntryPretty{ tx := ShyftTxEntryPretty{
TxHash: txhash, TxHash: txhash,
To: to_addr, To: to_addr,
@ -719,8 +717,12 @@ func GetTransaction(sqldb *sql.DB, txHash string) string {
Amount: amount, Amount: amount,
GasPrice: gasprice, GasPrice: gasprice,
Gas: gas, Gas: gas,
GasLimit: gasLimit,
Cost: txfee, Cost: txfee,
Nonce: nonce, Nonce: nonce,
Status: status,
IsContract: isContract,
Age: age,
Data: data, Data: data,
} }
json, _ := json.Marshal(tx) json, _ := json.Marshal(tx)