From 32f78625402003b4dc2e18e6a40e45220eddc869 Mon Sep 17 00:00:00 2001 From: Dustin Brickwood Date: Mon, 13 Aug 2018 11:27:33 -0400 Subject: [PATCH] added internal tx api endpoint --- core/sTypes/stypes.go | 7 +- core/shyft_database_util.go | 2 +- core/shyft_get_utils.go | 71 +++++++++++++++++++++ eth/tracers/tracer.go | 2 +- shyft-cli/postgres_setup/create_tables.psql | 2 +- shyftBlockExplorerApi/handler.go | 11 ++++ 6 files changed, 91 insertions(+), 4 deletions(-) diff --git a/core/sTypes/stypes.go b/core/sTypes/stypes.go index 5954403edf..6eb55f33c1 100644 --- a/core/sTypes/stypes.go +++ b/core/sTypes/stypes.go @@ -27,8 +27,9 @@ type SBlock struct { } type InteralWrite struct { + ID int Hash string - Type string + Action string From string To string Value string @@ -39,6 +40,10 @@ type InteralWrite struct { Time string } +type InternalArray struct { + InternalEntry []InteralWrite +} + //blockRes struct type BlockRes struct { hash string diff --git a/core/shyft_database_util.go b/core/shyft_database_util.go index 3e955d5f97..41879fd4b2 100644 --- a/core/shyft_database_util.go +++ b/core/shyft_database_util.go @@ -373,7 +373,7 @@ func InsertTx(sqldb *sql.DB, txData stypes.ShyftTxEntryPretty) { func InsertInternalTx(sqldb *sql.DB, i stypes.InteralWrite) { var returnValue string sqlStatement := `INSERT INTO internaltxs(type, txhash, from_addr, to_addr, amount, gas, gasUsed, time, input, output) VALUES(($1), ($2), ($3), ($4), ($5), ($6), ($7), ($8), ($9), ($10)) RETURNING txHash` - qerr := sqldb.QueryRow(sqlStatement, i.Type, strings.ToLower(i.Hash), strings.ToLower(i.From), strings.ToLower(i.To), i.Value, i.Gas, i.GasUsed, i.Time, i.Input, i.Output).Scan(&returnValue) + qerr := sqldb.QueryRow(sqlStatement, i.Action, strings.ToLower(i.Hash), strings.ToLower(i.From), strings.ToLower(i.To), i.Value, i.Gas, i.GasUsed, i.Time, i.Input, i.Output).Scan(&returnValue) if qerr != nil { fmt.Println(qerr) panic(qerr) diff --git a/core/shyft_get_utils.go b/core/shyft_get_utils.go index 9a650c5bff..a698392c52 100644 --- a/core/shyft_get_utils.go +++ b/core/shyft_get_utils.go @@ -386,3 +386,74 @@ func SGetAccountTxs(sqldb *sql.DB, address string) string { } return txx } + +//GetAllInternalTransactions getter fn for API +func SGetAllInternalTransactions(sqldb *sql.DB) string { + var arr stypes.InternalArray + var internaltx string + rows, err := sqldb.Query(`SELECT * FROM internaltxs`) + if err != nil { + fmt.Println("err") + } + defer rows.Close() + for rows.Next() { + var txhash, action, to_addr, from_addr, amount, input, output string + var gas, gasUsed uint64 + var id int + var age string + + err = rows.Scan( + &id, &txhash, &action, &to_addr, &from_addr, &amount, &gas, &gasUsed, &age, &input, &output, + ) + + arr.InternalEntry = append(arr.InternalEntry, stypes.InteralWrite{ + ID: id, + Hash: txhash, + Action: action, + To: to_addr, + From: from_addr, + Value: amount, + Gas: gas, + GasUsed: gasUsed, + Time: age, + Input: input, + Output: output, + }) + + tx, _ := json.Marshal(arr.InternalEntry) + newtx := string(tx) + internaltx = newtx + } + return internaltx +} + +//GetInternalTransaction fn returns single tx +func SGetInternalTransaction(sqldb *sql.DB, txHash string) string { + sqlStatement := `SELECT * FROM internaltxs WHERE txhash=$1;` + row := sqldb.QueryRow(sqlStatement, txHash) + var txhash, action, to_addr, from_addr, amount, input, output string + var id int + var gas, gasUsed uint64 + var age string + + row.Scan( + &id, &txhash, &action, &to_addr, &from_addr, &amount, &gas, &gasUsed, &age, &input, &output, + ) + + internaltx := stypes.InteralWrite{ + ID: id, + Hash: txhash, + Action: action, + To: to_addr, + From: from_addr, + Value: amount, + Gas: gas, + GasUsed: gasUsed, + Time: age, + Input: input, + Output: output, + } + json, _ := json.Marshal(internaltx) + + return string(json) +} diff --git a/eth/tracers/tracer.go b/eth/tracers/tracer.go index a6ee995de2..8da66ad25a 100644 --- a/eth/tracers/tracer.go +++ b/eth/tracers/tracer.go @@ -607,7 +607,7 @@ func (i *Internals) SWriteInteralTxs(hash common.Hash) { iTx := stypes.InteralWrite{ Hash: hash.Hex(), - Type: i.Type, + Action: i.Type, From: i.From, To: i.To, Value: amount, diff --git a/shyft-cli/postgres_setup/create_tables.psql b/shyft-cli/postgres_setup/create_tables.psql index 35b1a5c927..ca8fd2dafe 100644 --- a/shyft-cli/postgres_setup/create_tables.psql +++ b/shyft-cli/postgres_setup/create_tables.psql @@ -46,7 +46,7 @@ CREATE TABLE IF NOT EXISTS contracts ( CREATE TABLE IF NOT EXISTS internalTxs ( id SERIAL PRIMARY KEY, txHash text references txs(txHash), - type text, + action text, to_addr text, from_addr text, amount text, diff --git a/shyftBlockExplorerApi/handler.go b/shyftBlockExplorerApi/handler.go index 4f59f7675b..055c0152ab 100644 --- a/shyftBlockExplorerApi/handler.go +++ b/shyftBlockExplorerApi/handler.go @@ -199,6 +199,12 @@ func GetInternalTransactions(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) address := vars["address"] + // mostRecentBlock := core.SGetRecentBlock(sqldb) + // if err != nil { + // http.Error(w, err.Error(), 500) + // return + // } + w.Header().Set("Content-Type", "application/json; charset=UTF-8") w.WriteHeader(http.StatusOK) @@ -210,6 +216,11 @@ func GetInternalTransactionsHash(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) transactionHash := vars["transaction_hash"] + //mostRecentBlock := core.SGetRecentBlock(sqldb) + // if err != nil { + // http.Error(w, err.Error(), 500) + // return + // } w.Header().Set("Content-Type", "application/json; charset=UTF-8") w.WriteHeader(http.StatusOK)