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..26c2892d7b 100644 --- a/core/shyft_database_util.go +++ b/core/shyft_database_util.go @@ -372,8 +372,8 @@ func InsertTx(sqldb *sql.DB, txData stypes.ShyftTxEntryPretty) { //InsertInternalTx writes internal tx to Postgres Db 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) + sqlStatement := `INSERT INTO internaltxs(action, 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.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..7304e45e65 100644 --- a/core/shyft_get_utils.go +++ b/core/shyft_get_utils.go @@ -386,3 +386,86 @@ 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 { + var arr stypes.InternalArray + var internaltx string + + sqlStatement := `SELECT * FROM internaltxs WHERE txhash=$1;` + rows, err := sqldb.Query(sqlStatement, txHash) + if err != nil { + fmt.Println("err") + } + defer rows.Close() + + for rows.Next() { + var txhash, action, to_addr, from_addr, amount, input, output string + var id int + var gas, gasUsed uint64 + 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 +} diff --git a/eth/shyft_tracer.go b/eth/shyft_tracer.go index 083b21a06b..ba740d0028 100644 --- a/eth/shyft_tracer.go +++ b/eth/shyft_tracer.go @@ -2,7 +2,6 @@ package eth import ( "context" - "fmt" "github.com/ShyftNetwork/go-empyrean/common" "github.com/ShyftNetwork/go-empyrean/params" 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/shyft-cli/postgres_setup/drop_tables.psql b/shyft-cli/postgres_setup/drop_tables.psql index 368c809a42..85b27ccaf3 100644 --- a/shyft-cli/postgres_setup/drop_tables.psql +++ b/shyft-cli/postgres_setup/drop_tables.psql @@ -1,5 +1,4 @@ -\connect -shyftdb; +\connect shyftdb; DROP TABLE internalTxs; DROP TABLE txs; DROP TABLE blocks; diff --git a/shyftBlockExplorerApi/handler.go b/shyftBlockExplorerApi/handler.go index 4f59f7675b..2a396d55c2 100644 --- a/shyftBlockExplorerApi/handler.go +++ b/shyftBlockExplorerApi/handler.go @@ -195,25 +195,37 @@ func GetRecentBlock(w http.ResponseWriter, r *http.Request) { } //GetInternalTransactions gets internal txs -func GetInternalTransactions(w http.ResponseWriter, r *http.Request) { +func GetInternalTransactionsByHash(w http.ResponseWriter, r *http.Request) { + sqldb, err := core.DBConnection() + vars := mux.Vars(r) - address := vars["address"] + txHash := vars["txHash"] + + internalTxs := core.SGetInternalTransaction(sqldb, txHash) + 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, "Get InternalTransactions", address) + fmt.Fprintln(w, internalTxs) } //GetInternalTransactionsHash gets internal txs hash -func GetInternalTransactionsHash(w http.ResponseWriter, r *http.Request) { - vars := mux.Vars(r) - transactionHash := vars["transaction_hash"] +func GetInternalTransactions(w http.ResponseWriter, r *http.Request) { + sqldb, err := core.DBConnection() + internalTxs := core.SGetAllInternalTransactions(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) - fmt.Fprintln(w, "Get Internal Transaction Hash", transactionHash) + fmt.Fprintln(w, internalTxs) } func BroadcastTx(w http.ResponseWriter, r *http.Request) { diff --git a/shyftBlockExplorerApi/routes.go b/shyftBlockExplorerApi/routes.go index fd6517eb5e..4c23fabe65 100644 --- a/shyftBlockExplorerApi/routes.go +++ b/shyftBlockExplorerApi/routes.go @@ -58,34 +58,34 @@ var routes = Routes{ GetTransaction, }, Route{ - Name: "GetRecentBlock", - Method: "GET", - Pattern: "/api/get_recent_block", + Name: "GetRecentBlock", + Method: "GET", + Pattern: "/api/get_recent_block", HandlerFunc: GetRecentBlock, }, Route{ - Name: "GetAllTransactionsFromBlock", - Method: "GET", - Pattern: "/api/get_all_transactions_from_block/{blockNumber}", + Name: "GetAllTransactionsFromBlock", + Method: "GET", + Pattern: "/api/get_all_transactions_from_block/{blockNumber}", HandlerFunc: GetAllTransactionsFromBlock, }, Route{ - Name: "GetAllBlocksMinedByAddress", - Method: "GET", - Pattern: "/api/get_blocks_mined/{coinbase}", + Name: "GetAllBlocksMinedByAddress", + Method: "GET", + Pattern: "/api/get_blocks_mined/{coinbase}", HandlerFunc: GetAllBlocksMinedByAddress, }, Route{ "GetInternalTransactions", "GET", - "/api/get_internal_transactions/{address}", + "/api/get_internal_transactions/", GetInternalTransactions, }, Route{ - "GetInternalTransactionsHash", + "GetInternalTransactionsByHash", "GET", - "/api/get_internal_transactions_hash/{transactions_hash}", - GetInternalTransactionsHash, + "/api/get_internal_transactions/{txHash}", + GetInternalTransactionsByHash, }, Route{ "BroadcastTx",