From 6ad756ce3c2afd5a3286735fec6f136906779f6c Mon Sep 17 00:00:00 2001 From: Tim Williams Date: Mon, 25 Jun 2018 13:42:15 -0400 Subject: [PATCH 01/28] add tcp port --- shyftRingWalletConn/app.go | 56 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 shyftRingWalletConn/app.go diff --git a/shyftRingWalletConn/app.go b/shyftRingWalletConn/app.go new file mode 100644 index 0000000000..6394bd2bc3 --- /dev/null +++ b/shyftRingWalletConn/app.go @@ -0,0 +1,56 @@ +package main + +//@NOTE SHYFT main func for api, sets up router and spins up a server +//to run server 'go run shyftBlockExplorerApi/*.go' +import ( +"net" +"fmt" +"os" +) + +const ( + CONN_HOST = "localhost" + CONN_PORT = "3333" + CONN_TYPE = "tcp" +) + +func main() { + + l, err := net.Listen(CONN_TYPE, CONN_HOST+":"+CONN_PORT) + if err != nil { + fmt.Println("Error listening:", err.Error()) + os.Exit(1) + } + defer l.Close() + + for { + // Listen for an incoming connection. + conn, err := l.Accept() + if err != nil { + fmt.Println("Error accepting: ", err.Error()) + os.Exit(1) + } + // Handle connections in a new goroutine. + go handleRequest(conn) + } +} + +// Handles incoming requests. +func handleRequest(conn net.Conn) { + // Make a buffer to hold incoming data. + buf := make([]byte, 1024) + // Read the incoming connection into the buffer. + msg, err := conn.Read(buf) + + if err == nil { + fmt.Println("Message is ", string(buf[:msg])) + fmt.Println("Message is ", msg) + } + if err != nil { + fmt.Println("Error reading:", err.Error()) + } + // Send a response back to person contacting us. + conn.Write([]byte("Message received.")) + // Close the connection when you're done with it. + conn.Close() +} From 6d2dcc0f90f7ab6b96b238c1f78093dff27d1272 Mon Sep 17 00:00:00 2001 From: Dustin Brickwood Date: Mon, 25 Jun 2018 14:35:58 -0400 Subject: [PATCH 02/28] changed server command prompt --- shyftRingWalletConn/app.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shyftRingWalletConn/app.go b/shyftRingWalletConn/app.go index 6394bd2bc3..2390bfb997 100644 --- a/shyftRingWalletConn/app.go +++ b/shyftRingWalletConn/app.go @@ -1,7 +1,7 @@ package main //@NOTE SHYFT main func for api, sets up router and spins up a server -//to run server 'go run shyftBlockExplorerApi/*.go' +//to run server 'go run shyftRingWalletConn/*.go' import ( "net" "fmt" From 0404cbc062cd8b239e4a41bab25df281412ed5cc Mon Sep 17 00:00:00 2001 From: Tim Williams Date: Sat, 30 Jun 2018 15:12:47 -0400 Subject: [PATCH 03/28] decode message from client --- shyftRingWalletConn/app.go | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/shyftRingWalletConn/app.go b/shyftRingWalletConn/app.go index 2390bfb997..41bc953391 100644 --- a/shyftRingWalletConn/app.go +++ b/shyftRingWalletConn/app.go @@ -3,9 +3,10 @@ package main //@NOTE SHYFT main func for api, sets up router and spins up a server //to run server 'go run shyftRingWalletConn/*.go' import ( -"net" -"fmt" -"os" + "net" + "fmt" + "os" + "encoding/json" ) const ( @@ -44,6 +45,19 @@ func handleRequest(conn net.Conn) { if err == nil { fmt.Println("Message is ", string(buf[:msg])) + var dat map[string]interface{} + byt := []byte(string(buf[:msg])) + + if err := json.Unmarshal(byt, &dat); err != nil { + panic(err) + } + fmt.Println(dat["address"]) + fmt.Println(dat["msg"]) + fmt.Println(dat["sig"]) + //Ecrecover takes 2 args, bytes[] and bytes[] + // we need to pass in the hash of the message as bytes + // and the bytes array of the signature + //crypto.Ecrecover() fmt.Println("Message is ", msg) } if err != nil { From 278086e5fda3cc516cad96fb2d20c9e1412ea363 Mon Sep 17 00:00:00 2001 From: Tim Williams Date: Sat, 30 Jun 2018 15:19:45 -0400 Subject: [PATCH 04/28] rm redundancy --- shyftRingWalletConn/app.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/shyftRingWalletConn/app.go b/shyftRingWalletConn/app.go index 41bc953391..f238331813 100644 --- a/shyftRingWalletConn/app.go +++ b/shyftRingWalletConn/app.go @@ -46,9 +46,8 @@ func handleRequest(conn net.Conn) { if err == nil { fmt.Println("Message is ", string(buf[:msg])) var dat map[string]interface{} - byt := []byte(string(buf[:msg])) - - if err := json.Unmarshal(byt, &dat); err != nil { + + if err := json.Unmarshal(buf[:msg], &dat); err != nil { panic(err) } fmt.Println(dat["address"]) From 9f2d6ee3fc9b8f2206fbd7a82126826931a18e78 Mon Sep 17 00:00:00 2001 From: Tim Williams Date: Sat, 30 Jun 2018 15:28:19 -0400 Subject: [PATCH 05/28] log error from Ecrecover --- shyftRingWalletConn/app.go | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/shyftRingWalletConn/app.go b/shyftRingWalletConn/app.go index f238331813..b03f308b1f 100644 --- a/shyftRingWalletConn/app.go +++ b/shyftRingWalletConn/app.go @@ -6,7 +6,8 @@ import ( "net" "fmt" "os" - "encoding/json" + "encoding/json" + "github.com/ethereum/go-ethereum/crypto" ) const ( @@ -56,8 +57,18 @@ func handleRequest(conn net.Conn) { //Ecrecover takes 2 args, bytes[] and bytes[] // we need to pass in the hash of the message as bytes // and the bytes array of the signature - //crypto.Ecrecover() - fmt.Println("Message is ", msg) + var msg = []byte(dat["msg"].(string)) + var sig = []byte(dat["sig"].(string)) + var address, err = crypto.Ecrecover(msg, sig) + if err != nil { + fmt.Println("The error is ") + fmt.Println(err) + } + s := string(address[:]) + fmt.Println("the address is ") + fmt.Println(s) + //fmt.Println(address) + //fmt.Println("Message is ", msg) } if err != nil { fmt.Println("Error reading:", err.Error()) From 0cbeb26f93f34eecbcfad6db126277f365e7b55e Mon Sep 17 00:00:00 2001 From: Tim Williams Date: Sat, 30 Jun 2018 16:45:03 -0400 Subject: [PATCH 06/28] format the msg parameter to Ecrecover so it has 32 bytes --- shyftRingWalletConn/app.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/shyftRingWalletConn/app.go b/shyftRingWalletConn/app.go index b03f308b1f..15a5bb8159 100644 --- a/shyftRingWalletConn/app.go +++ b/shyftRingWalletConn/app.go @@ -59,7 +59,8 @@ func handleRequest(conn net.Conn) { // and the bytes array of the signature var msg = []byte(dat["msg"].(string)) var sig = []byte(dat["sig"].(string)) - var address, err = crypto.Ecrecover(msg, sig) + new_msg := crypto.Keccak256(msg) + var address, err = crypto.Ecrecover(new_msg, sig) if err != nil { fmt.Println("The error is ") fmt.Println(err) From b09a39289aa5816cf834958b927b65ad0da201f1 Mon Sep 17 00:00:00 2001 From: Tim Williams Date: Thu, 5 Jul 2018 13:50:08 -0400 Subject: [PATCH 07/28] more progress in verifying signature with ecrecover --- shyftRingWalletConn/app.go | 68 +++++++++++++++++++++++++++++++++----- 1 file changed, 60 insertions(+), 8 deletions(-) diff --git a/shyftRingWalletConn/app.go b/shyftRingWalletConn/app.go index 15a5bb8159..68c9c7e195 100644 --- a/shyftRingWalletConn/app.go +++ b/shyftRingWalletConn/app.go @@ -7,7 +7,8 @@ import ( "fmt" "os" "encoding/json" - "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/common/hexutil" ) const ( @@ -16,6 +17,12 @@ const ( CONN_TYPE = "tcp" ) +// This gives context to the signed message and prevents signing of transactions. +func signHash(data []byte) []byte { + msg := fmt.Sprintf("\x19Ethereum Signed Message:\n%d%s", len(data), data) + return crypto.Keccak256([]byte(msg)) +} + func main() { l, err := net.Listen(CONN_TYPE, CONN_HOST+":"+CONN_PORT) @@ -57,17 +64,62 @@ func handleRequest(conn net.Conn) { //Ecrecover takes 2 args, bytes[] and bytes[] // we need to pass in the hash of the message as bytes // and the bytes array of the signature - var msg = []byte(dat["msg"].(string)) - var sig = []byte(dat["sig"].(string)) - new_msg := crypto.Keccak256(msg) - var address, err = crypto.Ecrecover(new_msg, sig) + var msg = dat["msg"].(string) + var sig = dat["sig"].(string) + fmt.Println("the first sig is ") + fmt.Println(sig) + var new_byte_array, err2 = hexutil.Decode(msg) + var new_sig_byte_array, err3 = hexutil.Decode(sig) + if err2 != nil { + fmt.Println("the err2 is ") + fmt.Println(err2) + } + if err3 != nil { + fmt.Println("the err3 is ") + fmt.Println(err3) + } + var fizz = hexutil.Bytes(new_byte_array) + var buzz = hexutil.Bytes(new_sig_byte_array) + buzz[64] -= 27 + fmt.Println("that bytes is") + fmt.Println(fizz) + //var bytes_msg = []byte(msg) + //var foo, err = hex.DecodeString(msg) + //fmt.Println("msg is ") + //fmt.Println(msg) + //fmt.Println("bytes_msg is ") + //fmt.Println(bytes_msg) + + //var sig = dat["sig"].(string) + //fmt.Println("The sig is ") + //fmt.Println(sig) + //decoded, er := hex.DecodeString(sig) + //if er != nil { + // log.Fatal(err) + //} + new_msg := signHash(fizz) + fmt.Println("the new_msg is ") + fmt.Println(new_msg) + fmt.Println("the buzz is ") + fmt.Println(buzz) + + var rpk, err = crypto.Ecrecover(new_msg, buzz) if err != nil { fmt.Println("The error is ") fmt.Println(err) } - s := string(address[:]) + + pubKey := crypto.ToECDSAPub(rpk) + recoveredAddr := crypto.PubkeyToAddress(*pubKey) fmt.Println("the address is ") - fmt.Println(s) + fmt.Println(recoveredAddr) + fmt.Println(recoveredAddr.Hex()) + //res, _ := new_add.MarshalText() + //fmt.Println(hexutil.Encode(address)) + //s := string(address[:]) + // + //fmt.Println(s) + //fmt.Println(address) //fmt.Println("Message is ", msg) } @@ -78,4 +130,4 @@ func handleRequest(conn net.Conn) { conn.Write([]byte("Message received.")) // Close the connection when you're done with it. conn.Close() -} +} \ No newline at end of file From 225b6e9c7d6991d366482031a61f6a3cdc7df87b Mon Sep 17 00:00:00 2001 From: Tim Williams Date: Fri, 6 Jul 2018 14:34:33 -0400 Subject: [PATCH 08/28] ecrecover plain text message --- shyftRingWalletConn/app.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/shyftRingWalletConn/app.go b/shyftRingWalletConn/app.go index 68c9c7e195..6a0b353b20 100644 --- a/shyftRingWalletConn/app.go +++ b/shyftRingWalletConn/app.go @@ -67,8 +67,15 @@ func handleRequest(conn net.Conn) { var msg = dat["msg"].(string) var sig = dat["sig"].(string) fmt.Println("the first sig is ") + fmt.Println(msg) fmt.Println(sig) - var new_byte_array, err2 = hexutil.Decode(msg) + //var new_byte_array, err2 = hexutil.Decode(msg) + var new_byte_array = []byte(msg) + var bazz = hexutil.Encode(new_byte_array) + fizz, err2 := hexutil.Decode(bazz) + fmt.Println("THE fizz is ") + fmt.Println(fizz) + //fizz = hexutil.Decode(fizz.String()) var new_sig_byte_array, err3 = hexutil.Decode(sig) if err2 != nil { fmt.Println("the err2 is ") @@ -78,11 +85,13 @@ func handleRequest(conn net.Conn) { fmt.Println("the err3 is ") fmt.Println(err3) } - var fizz = hexutil.Bytes(new_byte_array) + var buzz = hexutil.Bytes(new_sig_byte_array) buzz[64] -= 27 fmt.Println("that bytes is") fmt.Println(fizz) + + //var bytes_msg = []byte(msg) //var foo, err = hex.DecodeString(msg) //fmt.Println("msg is ") @@ -97,6 +106,7 @@ func handleRequest(conn net.Conn) { //if er != nil { // log.Fatal(err) //} + new_msg := signHash(fizz) fmt.Println("the new_msg is ") fmt.Println(new_msg) @@ -114,6 +124,8 @@ func handleRequest(conn net.Conn) { fmt.Println("the address is ") fmt.Println(recoveredAddr) fmt.Println(recoveredAddr.Hex()) + + //res, _ := new_add.MarshalText() //fmt.Println(hexutil.Encode(address)) //s := string(address[:]) From 527adcfee36258d8320ef194fffd38d772a76e6b Mon Sep 17 00:00:00 2001 From: Tim Williams Date: Fri, 6 Jul 2018 14:44:51 -0400 Subject: [PATCH 09/28] rm comments and printlns --- shyftRingWalletConn/app.go | 34 ++-------------------------------- 1 file changed, 2 insertions(+), 32 deletions(-) diff --git a/shyftRingWalletConn/app.go b/shyftRingWalletConn/app.go index 6a0b353b20..7832ce88c4 100644 --- a/shyftRingWalletConn/app.go +++ b/shyftRingWalletConn/app.go @@ -61,21 +61,16 @@ func handleRequest(conn net.Conn) { fmt.Println(dat["address"]) fmt.Println(dat["msg"]) fmt.Println(dat["sig"]) - //Ecrecover takes 2 args, bytes[] and bytes[] - // we need to pass in the hash of the message as bytes - // and the bytes array of the signature + var msg = dat["msg"].(string) var sig = dat["sig"].(string) fmt.Println("the first sig is ") fmt.Println(msg) fmt.Println(sig) - //var new_byte_array, err2 = hexutil.Decode(msg) var new_byte_array = []byte(msg) var bazz = hexutil.Encode(new_byte_array) fizz, err2 := hexutil.Decode(bazz) - fmt.Println("THE fizz is ") - fmt.Println(fizz) - //fizz = hexutil.Decode(fizz.String()) + var new_sig_byte_array, err3 = hexutil.Decode(sig) if err2 != nil { fmt.Println("the err2 is ") @@ -91,22 +86,6 @@ func handleRequest(conn net.Conn) { fmt.Println("that bytes is") fmt.Println(fizz) - - //var bytes_msg = []byte(msg) - //var foo, err = hex.DecodeString(msg) - //fmt.Println("msg is ") - //fmt.Println(msg) - //fmt.Println("bytes_msg is ") - //fmt.Println(bytes_msg) - - //var sig = dat["sig"].(string) - //fmt.Println("The sig is ") - //fmt.Println(sig) - //decoded, er := hex.DecodeString(sig) - //if er != nil { - // log.Fatal(err) - //} - new_msg := signHash(fizz) fmt.Println("the new_msg is ") fmt.Println(new_msg) @@ -125,15 +104,6 @@ func handleRequest(conn net.Conn) { fmt.Println(recoveredAddr) fmt.Println(recoveredAddr.Hex()) - - //res, _ := new_add.MarshalText() - //fmt.Println(hexutil.Encode(address)) - //s := string(address[:]) - // - //fmt.Println(s) - - //fmt.Println(address) - //fmt.Println("Message is ", msg) } if err != nil { fmt.Println("Error reading:", err.Error()) From 9a4094f63456d15b1ace8fc45da47b8986581256 Mon Sep 17 00:00:00 2001 From: Tim Williams Date: Fri, 6 Jul 2018 15:44:55 -0400 Subject: [PATCH 10/28] rm Printlns --- shyftRingWalletConn/app.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/shyftRingWalletConn/app.go b/shyftRingWalletConn/app.go index 7832ce88c4..fa0479b064 100644 --- a/shyftRingWalletConn/app.go +++ b/shyftRingWalletConn/app.go @@ -65,8 +65,6 @@ func handleRequest(conn net.Conn) { var msg = dat["msg"].(string) var sig = dat["sig"].(string) fmt.Println("the first sig is ") - fmt.Println(msg) - fmt.Println(sig) var new_byte_array = []byte(msg) var bazz = hexutil.Encode(new_byte_array) fizz, err2 := hexutil.Decode(bazz) @@ -87,10 +85,6 @@ func handleRequest(conn net.Conn) { fmt.Println(fizz) new_msg := signHash(fizz) - fmt.Println("the new_msg is ") - fmt.Println(new_msg) - fmt.Println("the buzz is ") - fmt.Println(buzz) var rpk, err = crypto.Ecrecover(new_msg, buzz) if err != nil { From cda2a23d6d90b7410e0ec8962dd6967f18dbe338 Mon Sep 17 00:00:00 2001 From: Tim Williams Date: Wed, 11 Jul 2018 21:58:48 -0400 Subject: [PATCH 11/28] rm printlns --- shyftRingWalletConn/app.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/shyftRingWalletConn/app.go b/shyftRingWalletConn/app.go index fa0479b064..73637903d6 100644 --- a/shyftRingWalletConn/app.go +++ b/shyftRingWalletConn/app.go @@ -17,6 +17,9 @@ const ( CONN_TYPE = "tcp" ) +var testAddrHex = "970e8128ab834e8eac17ab8e3812f010678cf791" +var testPrivHex = "289c2857d4598e37fb9647507e47a309d6133539bf21a8b9cb6df88fd5232032" + // This gives context to the signed message and prevents signing of transactions. func signHash(data []byte) []byte { msg := fmt.Sprintf("\x19Ethereum Signed Message:\n%d%s", len(data), data) @@ -58,6 +61,8 @@ func handleRequest(conn net.Conn) { if err := json.Unmarshal(buf[:msg], &dat); err != nil { panic(err) } + + fmt.Println(dat["address"]) fmt.Println(dat["msg"]) fmt.Println(dat["sig"]) @@ -81,8 +86,6 @@ func handleRequest(conn net.Conn) { var buzz = hexutil.Bytes(new_sig_byte_array) buzz[64] -= 27 - fmt.Println("that bytes is") - fmt.Println(fizz) new_msg := signHash(fizz) @@ -95,7 +98,7 @@ func handleRequest(conn net.Conn) { pubKey := crypto.ToECDSAPub(rpk) recoveredAddr := crypto.PubkeyToAddress(*pubKey) fmt.Println("the address is ") - fmt.Println(recoveredAddr) + //fmt.Println(recoveredAddr) fmt.Println(recoveredAddr.Hex()) } @@ -105,5 +108,5 @@ func handleRequest(conn net.Conn) { // Send a response back to person contacting us. conn.Write([]byte("Message received.")) // Close the connection when you're done with it. - conn.Close() + //conn.Close() } \ No newline at end of file From 06685a7bf0389f60147d22d19e80797b614dfa46 Mon Sep 17 00:00:00 2001 From: Tim Williams Date: Wed, 11 Jul 2018 23:25:30 -0400 Subject: [PATCH 12/28] send message back to client --- shyftRingWalletConn/app.go | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/shyftRingWalletConn/app.go b/shyftRingWalletConn/app.go index 73637903d6..149ba188c0 100644 --- a/shyftRingWalletConn/app.go +++ b/shyftRingWalletConn/app.go @@ -7,8 +7,9 @@ import ( "fmt" "os" "encoding/json" - "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" ) const ( @@ -101,12 +102,24 @@ func handleRequest(conn net.Conn) { //fmt.Println(recoveredAddr) fmt.Println(recoveredAddr.Hex()) + conn.Write([]byte("Message received.")) + + key, _ := crypto.HexToECDSA(testPrivHex) + addr := common.HexToAddress(testAddrHex) + + new_msg2 := crypto.Keccak256([]byte("Message Received")) + new_sig , err := crypto.Sign(new_msg2, key) + + conn.Write([]byte("Message Received")) + conn.Write(new_msg2) + conn.Write(addr[:]) + conn.Write(new_sig) } if err != nil { fmt.Println("Error reading:", err.Error()) } // Send a response back to person contacting us. - conn.Write([]byte("Message received.")) + // Close the connection when you're done with it. //conn.Close() } \ No newline at end of file From 385ea04cf3afd53a60415ae6eefb25c0415d6040 Mon Sep 17 00:00:00 2001 From: Tim Williams Date: Fri, 13 Jul 2018 15:41:42 -0400 Subject: [PATCH 13/28] more work --- shyftRingWalletConn/app.go | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/shyftRingWalletConn/app.go b/shyftRingWalletConn/app.go index 149ba188c0..a4332bb0f7 100644 --- a/shyftRingWalletConn/app.go +++ b/shyftRingWalletConn/app.go @@ -8,10 +8,18 @@ import ( "os" "encoding/json" "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/common" + //"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" + "bytes" ) +type Msg struct { + Message string `json:"message"` + HashedMessage string `json:"hashed_message"` + Signature string `json:"signature"` + Address string `json:"address"` +} + const ( CONN_HOST = "localhost" CONN_PORT = "3333" @@ -102,18 +110,36 @@ func handleRequest(conn net.Conn) { //fmt.Println(recoveredAddr) fmt.Println(recoveredAddr.Hex()) - conn.Write([]byte("Message received.")) + //conn.Write([]byte("Message received.")) key, _ := crypto.HexToECDSA(testPrivHex) - addr := common.HexToAddress(testAddrHex) + //addr := common.HexToAddress(testAddrHex) - new_msg2 := crypto.Keccak256([]byte("Message Received")) + f_msg := "Message Received" + first_message := []byte(f_msg) + new_msg2 := crypto.Keccak256(first_message) + + //send_message := append(new_msg2, []byte{byte(10)}...) new_sig , err := crypto.Sign(new_msg2, key) + hex_sig := hexutil.Encode(new_sig) + fmt.Println("THE hex sig is ", hex_sig) + + myNewMsg := Msg{f_msg, string(new_msg2[:]), string(new_sig[:]), testAddrHex} + reqBodyBytes := new(bytes.Buffer) + json.NewEncoder(reqBodyBytes).Encode(myNewMsg) + + fmt.Println([]byte("Message Received\n")) conn.Write([]byte("Message Received")) - conn.Write(new_msg2) - conn.Write(addr[:]) + conn.Write([]byte("\n")) conn.Write(new_sig) + conn.Write([]byte("\n")) + fmt.Println("PAUSE") + //time.Sleep(5 * time.Second) + //fmt.Println(send_message) + //conn.Write(send_message) + //conn.Write(addr[:]) + //conn.Write(append(reqBodyBytes.Bytes() ,[]byte{byte(10)}...)) } if err != nil { fmt.Println("Error reading:", err.Error()) From 6445f3c9abf6e2e4d385445536b19b07822b7868 Mon Sep 17 00:00:00 2001 From: Tim Williams Date: Fri, 13 Jul 2018 16:01:05 -0400 Subject: [PATCH 14/28] log out hash of message as hex --- shyftRingWalletConn/app.go | 1 + 1 file changed, 1 insertion(+) diff --git a/shyftRingWalletConn/app.go b/shyftRingWalletConn/app.go index a4332bb0f7..8dd8e848b5 100644 --- a/shyftRingWalletConn/app.go +++ b/shyftRingWalletConn/app.go @@ -118,6 +118,7 @@ func handleRequest(conn net.Conn) { f_msg := "Message Received" first_message := []byte(f_msg) new_msg2 := crypto.Keccak256(first_message) + fmt.Println("the hash is ", hexutil.Encode(new_msg2)) //send_message := append(new_msg2, []byte{byte(10)}...) new_sig , err := crypto.Sign(new_msg2, key) From 90087ff7015b05136ba0530a18353d79bbd36d9d Mon Sep 17 00:00:00 2001 From: Tim Williams Date: Sat, 14 Jul 2018 16:27:43 -0400 Subject: [PATCH 15/28] change test keys and test message --- shyftRingWalletConn/app.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/shyftRingWalletConn/app.go b/shyftRingWalletConn/app.go index 8dd8e848b5..26f0cbee32 100644 --- a/shyftRingWalletConn/app.go +++ b/shyftRingWalletConn/app.go @@ -26,8 +26,8 @@ const ( CONN_TYPE = "tcp" ) -var testAddrHex = "970e8128ab834e8eac17ab8e3812f010678cf791" -var testPrivHex = "289c2857d4598e37fb9647507e47a309d6133539bf21a8b9cb6df88fd5232032" +var testAddrHex = "14791697260E4c9A71f18484C9f997B308e59325" +var testPrivHex = "0123456789012345678901234567890123456789012345678901234567890123" // This gives context to the signed message and prevents signing of transactions. func signHash(data []byte) []byte { @@ -115,7 +115,7 @@ func handleRequest(conn net.Conn) { key, _ := crypto.HexToECDSA(testPrivHex) //addr := common.HexToAddress(testAddrHex) - f_msg := "Message Received" + f_msg := "Hello World" first_message := []byte(f_msg) new_msg2 := crypto.Keccak256(first_message) fmt.Println("the hash is ", hexutil.Encode(new_msg2)) @@ -130,8 +130,7 @@ func handleRequest(conn net.Conn) { reqBodyBytes := new(bytes.Buffer) json.NewEncoder(reqBodyBytes).Encode(myNewMsg) - fmt.Println([]byte("Message Received\n")) - conn.Write([]byte("Message Received")) + conn.Write([]byte(f_msg)) conn.Write([]byte("\n")) conn.Write(new_sig) conn.Write([]byte("\n")) From 8e0cfbc1a1f44bdda70a6c46e828068d8539206b Mon Sep 17 00:00:00 2001 From: Tim Williams Date: Sun, 15 Jul 2018 09:32:22 -0400 Subject: [PATCH 16/28] add intArrToByteArr function for testing --- shyftRingWalletConn/app.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/shyftRingWalletConn/app.go b/shyftRingWalletConn/app.go index 26f0cbee32..58e79622ad 100644 --- a/shyftRingWalletConn/app.go +++ b/shyftRingWalletConn/app.go @@ -148,4 +148,13 @@ func handleRequest(conn net.Conn) { // Close the connection when you're done with it. //conn.Close() -} \ No newline at end of file +} + +func intArrToByteArr(foo []int) []byte { + + ret := []byte{} + for _, value := range foo { + ret = append(ret, byte(value)) + } + return ret +} From 89e0479b7ae8c9dbb73c740de7be97ebb40717c3 Mon Sep 17 00:00:00 2001 From: Tim Williams Date: Sun, 15 Jul 2018 15:05:29 -0400 Subject: [PATCH 17/28] add in additional message sent over tcp --- shyftRingWalletConn/app.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/shyftRingWalletConn/app.go b/shyftRingWalletConn/app.go index 58e79622ad..9c24d6ea0d 100644 --- a/shyftRingWalletConn/app.go +++ b/shyftRingWalletConn/app.go @@ -130,6 +130,21 @@ func handleRequest(conn net.Conn) { reqBodyBytes := new(bytes.Buffer) json.NewEncoder(reqBodyBytes).Encode(myNewMsg) + //testArr := []byte{0xFF, 0x0a, 0xFE, 0x11, 0x0a, 0x0a, 0x0a, 0xF0, 0x0a, 0x1F, 0x22} + //testArr := []byte{0xFF, 0x0a, 0xFE, 0x11, 0x0a, 0x0a, 0xF0, 0x0a, 0x22} + //testArr := []byte{0xFF, 0x0a, 0xFE, 0xa, 0x22, 0xF3} + //testArr2 := []byte{0xF2, 0x0a, 0x1E} + //testArr3 := []byte{0xF1, 0x0a, 0xa0} + + //conn.Write(testArr) + //time.Sleep(1 * time.Second) + //conn.Write(testArr2) + //time.Sleep(1 * time.Second) + //conn.Write(testArr3) + + + conn.Write([]byte("Broadcasting Message")) + conn.Write([]byte("\n")) conn.Write([]byte(f_msg)) conn.Write([]byte("\n")) conn.Write(new_sig) From d25c879b59c9c8f13b1cd61bf4b986a5abe454fa Mon Sep 17 00:00:00 2001 From: Tim Williams Date: Mon, 16 Jul 2018 11:09:57 -0400 Subject: [PATCH 18/28] receiving messages from wallet correctly --- shyftRingWalletConn/app.go | 199 +++++++++++++++++++------------------ 1 file changed, 102 insertions(+), 97 deletions(-) diff --git a/shyftRingWalletConn/app.go b/shyftRingWalletConn/app.go index 9c24d6ea0d..617767b1ba 100644 --- a/shyftRingWalletConn/app.go +++ b/shyftRingWalletConn/app.go @@ -6,11 +6,10 @@ import ( "net" "fmt" "os" - "encoding/json" - "github.com/ethereum/go-ethereum/common/hexutil" //"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" "bytes" + "github.com/ethereum/go-ethereum/common/hexutil" ) type Msg struct { @@ -59,106 +58,112 @@ func main() { // Handles incoming requests. func handleRequest(conn net.Conn) { // Make a buffer to hold incoming data. - buf := make([]byte, 1024) // Read the incoming connection into the buffer. - msg, err := conn.Read(buf) - if err == nil { - fmt.Println("Message is ", string(buf[:msg])) - var dat map[string]interface{} + go func() { + buf := make([]byte, 1024) + msgBuf := make([]byte, 0) + var prevMsg []byte + var addressOfClient []byte + var signatureFromClient []byte + var msgFromClient []byte - if err := json.Unmarshal(buf[:msg], &dat); err != nil { - panic(err) + for { + //var addressOfClient []byte + //var msgFromClient []byte + //var sigFromClient []byte + msg, err := conn.Read(buf) + + if err == nil { + fmt.Println("Message is ", buf[:msg]) + fmt.Println("The old msg buf is ", msgBuf) + msgBuf = append(msgBuf, buf[:msg]...) + fmt.Println("THE msgBuf is ") + fmt.Println(msgBuf) + //fmt.Println("Message is ", string(buf[:msg])) + } + index := bytes.IndexByte(msgBuf, 0x0a) + for index != -1 { + newMsg := msgBuf[:index] + rest := msgBuf[(index + 1):len(msgBuf)] + msgBuf = rest + index = bytes.IndexByte(msgBuf, 0x0a) + fmt.Println("new msg") + fmt.Println(newMsg) + fmt.Println(string(newMsg[:])) + fmt.Println("prev message ", prevMsg) + fmt.Println((prevMsg == nil)) + if prevMsg != nil { + fmt.Println("not nil") + s := string(prevMsg[:]) + if s == "-- ADDRESS --" { + fmt.Println("the address should be ") + fmt.Println(newMsg) + addressOfClient = newMsg + } + if s == "-- SIGNATURE --" { + signatureFromClient = newMsg + } + if s == "-- MESSAGE --" { + msgFromClient = newMsg + } + prevMsg = nil + } else { + fmt.Println("nil") + prevMsg = newMsg + fmt.Println("prev message is in else block ", prevMsg) + fmt.Println("index ", index) + fmt.Println("msgBuf ", msgBuf) + fmt.Println(bytes.IndexByte(msgBuf, 0x0a)) + + } + } + + if(addressOfClient != nil && signatureFromClient != nil && msgFromClient != nil ){ + fmt.Println("ALL COMPONENTS RECEIVED") + msg := string(msgFromClient[:]) + //new_msg := signHash(msgFromClient) + sig := string(signatureFromClient[:]) + addr := string(addressOfClient[:]) + fmt.Println(addr) + fmt.Println(msg) + fmt.Println(sig) + + var new_byte_array = []byte(msg) + var bazz = hexutil.Encode(new_byte_array) + fizz, err2 := hexutil.Decode(bazz) + + var new_sig_byte_array, err3 = hexutil.Decode(sig) + if err2 != nil { + fmt.Println("the err2 is ") + fmt.Println(err2) + } + if err3 != nil { + fmt.Println("the err3 is ") + fmt.Println(err3) + } + + var buzz = hexutil.Bytes(new_sig_byte_array) + buzz[64] -= 27 + + new_msg := signHash(fizz) + + var rpk, err = crypto.Ecrecover(new_msg, buzz) + if err != nil { + fmt.Println("The error is ") + fmt.Println(err) + } + + pubKey := crypto.ToECDSAPub(rpk) + recoveredAddr := crypto.PubkeyToAddress(*pubKey) + fmt.Println("the address is ") + //fmt.Println(recoveredAddr) + fmt.Println(recoveredAddr.Hex()) + } } + }() + conn.Write([]byte{byte(0x0f)}) - - fmt.Println(dat["address"]) - fmt.Println(dat["msg"]) - fmt.Println(dat["sig"]) - - var msg = dat["msg"].(string) - var sig = dat["sig"].(string) - fmt.Println("the first sig is ") - var new_byte_array = []byte(msg) - var bazz = hexutil.Encode(new_byte_array) - fizz, err2 := hexutil.Decode(bazz) - - var new_sig_byte_array, err3 = hexutil.Decode(sig) - if err2 != nil { - fmt.Println("the err2 is ") - fmt.Println(err2) - } - if err3 != nil { - fmt.Println("the err3 is ") - fmt.Println(err3) - } - - var buzz = hexutil.Bytes(new_sig_byte_array) - buzz[64] -= 27 - - new_msg := signHash(fizz) - - var rpk, err = crypto.Ecrecover(new_msg, buzz) - if err != nil { - fmt.Println("The error is ") - fmt.Println(err) - } - - pubKey := crypto.ToECDSAPub(rpk) - recoveredAddr := crypto.PubkeyToAddress(*pubKey) - fmt.Println("the address is ") - //fmt.Println(recoveredAddr) - fmt.Println(recoveredAddr.Hex()) - - //conn.Write([]byte("Message received.")) - - key, _ := crypto.HexToECDSA(testPrivHex) - //addr := common.HexToAddress(testAddrHex) - - f_msg := "Hello World" - first_message := []byte(f_msg) - new_msg2 := crypto.Keccak256(first_message) - fmt.Println("the hash is ", hexutil.Encode(new_msg2)) - - //send_message := append(new_msg2, []byte{byte(10)}...) - new_sig , err := crypto.Sign(new_msg2, key) - hex_sig := hexutil.Encode(new_sig) - fmt.Println("THE hex sig is ", hex_sig) - - - myNewMsg := Msg{f_msg, string(new_msg2[:]), string(new_sig[:]), testAddrHex} - reqBodyBytes := new(bytes.Buffer) - json.NewEncoder(reqBodyBytes).Encode(myNewMsg) - - //testArr := []byte{0xFF, 0x0a, 0xFE, 0x11, 0x0a, 0x0a, 0x0a, 0xF0, 0x0a, 0x1F, 0x22} - //testArr := []byte{0xFF, 0x0a, 0xFE, 0x11, 0x0a, 0x0a, 0xF0, 0x0a, 0x22} - //testArr := []byte{0xFF, 0x0a, 0xFE, 0xa, 0x22, 0xF3} - //testArr2 := []byte{0xF2, 0x0a, 0x1E} - //testArr3 := []byte{0xF1, 0x0a, 0xa0} - - //conn.Write(testArr) - //time.Sleep(1 * time.Second) - //conn.Write(testArr2) - //time.Sleep(1 * time.Second) - //conn.Write(testArr3) - - - conn.Write([]byte("Broadcasting Message")) - conn.Write([]byte("\n")) - conn.Write([]byte(f_msg)) - conn.Write([]byte("\n")) - conn.Write(new_sig) - conn.Write([]byte("\n")) - fmt.Println("PAUSE") - //time.Sleep(5 * time.Second) - //fmt.Println(send_message) - //conn.Write(send_message) - //conn.Write(addr[:]) - //conn.Write(append(reqBodyBytes.Bytes() ,[]byte{byte(10)}...)) - } - if err != nil { - fmt.Println("Error reading:", err.Error()) - } // Send a response back to person contacting us. // Close the connection when you're done with it. From a2a6a57c700b901114debd427d6d58d1d0bf0e63 Mon Sep 17 00:00:00 2001 From: Tim Williams Date: Mon, 16 Jul 2018 11:23:42 -0400 Subject: [PATCH 19/28] fix var names --- shyftRingWalletConn/app.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/shyftRingWalletConn/app.go b/shyftRingWalletConn/app.go index 617767b1ba..ced36f78f7 100644 --- a/shyftRingWalletConn/app.go +++ b/shyftRingWalletConn/app.go @@ -129,11 +129,11 @@ func handleRequest(conn net.Conn) { fmt.Println(msg) fmt.Println(sig) - var new_byte_array = []byte(msg) - var bazz = hexutil.Encode(new_byte_array) - fizz, err2 := hexutil.Decode(bazz) + var msgByteArr = []byte(msg) + var hexMsg = hexutil.Encode(msgByteArr) + fizz, err2 := hexutil.Decode(hexMsg) - var new_sig_byte_array, err3 = hexutil.Decode(sig) + var sigByteArr, err3 = hexutil.Decode(sig) if err2 != nil { fmt.Println("the err2 is ") fmt.Println(err2) @@ -143,12 +143,12 @@ func handleRequest(conn net.Conn) { fmt.Println(err3) } - var buzz = hexutil.Bytes(new_sig_byte_array) - buzz[64] -= 27 + var sigHex = hexutil.Bytes(sigByteArr) + sigHex[64] -= 27 - new_msg := signHash(fizz) + signedMsgHash := signHash(fizz) - var rpk, err = crypto.Ecrecover(new_msg, buzz) + var rpk, err = crypto.Ecrecover(signedMsgHash, sigHex) if err != nil { fmt.Println("The error is ") fmt.Println(err) From d7b70c03b95d1e540d0018b08052ab78a677d4c6 Mon Sep 17 00:00:00 2001 From: Tim Williams Date: Mon, 16 Jul 2018 11:38:22 -0400 Subject: [PATCH 20/28] respond back to client with sig --- shyftRingWalletConn/app.go | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/shyftRingWalletConn/app.go b/shyftRingWalletConn/app.go index ced36f78f7..3ff6175115 100644 --- a/shyftRingWalletConn/app.go +++ b/shyftRingWalletConn/app.go @@ -162,7 +162,31 @@ func handleRequest(conn net.Conn) { } } }() - conn.Write([]byte{byte(0x0f)}) + go func() { + key, _ := crypto.HexToECDSA(testPrivHex) + //addr := common.HexToAddress(testAddrHex) + + f_msg := "Hello World" + first_message := []byte(f_msg) + new_msg2 := crypto.Keccak256(first_message) + fmt.Println("the hash is ", hexutil.Encode(new_msg2)) + + //send_message := append(new_msg2, []byte{byte(10)}...) + new_sig , err := crypto.Sign(new_msg2, key) + if err != nil { + fmt.Println("The crypto.Sign err is ", err) + } + hex_sig := hexutil.Encode(new_sig) + fmt.Println("THE hex sig is ", hex_sig) + + conn.Write([]byte("Broadcasting Message")) + conn.Write([]byte("\n")) + conn.Write([]byte(f_msg)) + conn.Write([]byte("\n")) + conn.Write(new_sig) + conn.Write([]byte("\n")) + }() + //conn.Write([]byte{byte(0x0f)}) // Send a response back to person contacting us. From f6fee7e70ae788163416076b3f78d46eb7fa3948 Mon Sep 17 00:00:00 2001 From: Dustin Brickwood Date: Mon, 16 Jul 2018 16:22:43 -0400 Subject: [PATCH 21/28] cleaned up code and removed msg type --- shyftRingWalletConn/app.go | 82 +++++--------------------------------- 1 file changed, 9 insertions(+), 73 deletions(-) diff --git a/shyftRingWalletConn/app.go b/shyftRingWalletConn/app.go index 3ff6175115..0da4d787e3 100644 --- a/shyftRingWalletConn/app.go +++ b/shyftRingWalletConn/app.go @@ -12,13 +12,6 @@ import ( "github.com/ethereum/go-ethereum/common/hexutil" ) -type Msg struct { - Message string `json:"message"` - HashedMessage string `json:"hashed_message"` - Signature string `json:"signature"` - Address string `json:"address"` -} - const ( CONN_HOST = "localhost" CONN_PORT = "3333" @@ -69,18 +62,10 @@ func handleRequest(conn net.Conn) { var msgFromClient []byte for { - //var addressOfClient []byte - //var msgFromClient []byte - //var sigFromClient []byte msg, err := conn.Read(buf) if err == nil { - fmt.Println("Message is ", buf[:msg]) - fmt.Println("The old msg buf is ", msgBuf) msgBuf = append(msgBuf, buf[:msg]...) - fmt.Println("THE msgBuf is ") - fmt.Println(msgBuf) - //fmt.Println("Message is ", string(buf[:msg])) } index := bytes.IndexByte(msgBuf, 0x0a) for index != -1 { @@ -88,17 +73,9 @@ func handleRequest(conn net.Conn) { rest := msgBuf[(index + 1):len(msgBuf)] msgBuf = rest index = bytes.IndexByte(msgBuf, 0x0a) - fmt.Println("new msg") - fmt.Println(newMsg) - fmt.Println(string(newMsg[:])) - fmt.Println("prev message ", prevMsg) - fmt.Println((prevMsg == nil)) if prevMsg != nil { - fmt.Println("not nil") s := string(prevMsg[:]) if s == "-- ADDRESS --" { - fmt.Println("the address should be ") - fmt.Println(newMsg) addressOfClient = newMsg } if s == "-- SIGNATURE --" { @@ -109,67 +86,41 @@ func handleRequest(conn net.Conn) { } prevMsg = nil } else { - fmt.Println("nil") prevMsg = newMsg - fmt.Println("prev message is in else block ", prevMsg) - fmt.Println("index ", index) - fmt.Println("msgBuf ", msgBuf) - fmt.Println(bytes.IndexByte(msgBuf, 0x0a)) - } } - if(addressOfClient != nil && signatureFromClient != nil && msgFromClient != nil ){ - fmt.Println("ALL COMPONENTS RECEIVED") - msg := string(msgFromClient[:]) - //new_msg := signHash(msgFromClient) + if addressOfClient != nil && signatureFromClient != nil && msgFromClient != nil { sig := string(signatureFromClient[:]) - addr := string(addressOfClient[:]) - fmt.Println(addr) - fmt.Println(msg) - fmt.Println(sig) + var sigByteArr, error = hexutil.Decode(sig) - var msgByteArr = []byte(msg) - var hexMsg = hexutil.Encode(msgByteArr) - fizz, err2 := hexutil.Decode(hexMsg) - - var sigByteArr, err3 = hexutil.Decode(sig) - if err2 != nil { - fmt.Println("the err2 is ") - fmt.Println(err2) - } - if err3 != nil { - fmt.Println("the err3 is ") - fmt.Println(err3) + if error != nil { + fmt.Println(error) } var sigHex = hexutil.Bytes(sigByteArr) sigHex[64] -= 27 - signedMsgHash := signHash(fizz) + signedMsgHash := signHash(msgFromClient) var rpk, err = crypto.Ecrecover(signedMsgHash, sigHex) if err != nil { - fmt.Println("The error is ") fmt.Println(err) } pubKey := crypto.ToECDSAPub(rpk) recoveredAddr := crypto.PubkeyToAddress(*pubKey) - fmt.Println("the address is ") - //fmt.Println(recoveredAddr) - fmt.Println(recoveredAddr.Hex()) + fmt.Println("ADDRESS IS ::", recoveredAddr.Hex()) } } }() go func() { key, _ := crypto.HexToECDSA(testPrivHex) - //addr := common.HexToAddress(testAddrHex) f_msg := "Hello World" first_message := []byte(f_msg) new_msg2 := crypto.Keccak256(first_message) - fmt.Println("the hash is ", hexutil.Encode(new_msg2)) + fmt.Println("HASH IS ::", hexutil.Encode(new_msg2)) //send_message := append(new_msg2, []byte{byte(10)}...) new_sig , err := crypto.Sign(new_msg2, key) @@ -177,7 +128,7 @@ func handleRequest(conn net.Conn) { fmt.Println("The crypto.Sign err is ", err) } hex_sig := hexutil.Encode(new_sig) - fmt.Println("THE hex sig is ", hex_sig) + fmt.Println("HEX SIG ::", hex_sig) conn.Write([]byte("Broadcasting Message")) conn.Write([]byte("\n")) @@ -186,19 +137,4 @@ func handleRequest(conn net.Conn) { conn.Write(new_sig) conn.Write([]byte("\n")) }() - //conn.Write([]byte{byte(0x0f)}) - - // Send a response back to person contacting us. - - // Close the connection when you're done with it. - //conn.Close() -} - -func intArrToByteArr(foo []int) []byte { - - ret := []byte{} - for _, value := range foo { - ret = append(ret, byte(value)) - } - return ret -} +} \ No newline at end of file From 71cf9acfd681d9dd9ff249220577ca92e02f7744 Mon Sep 17 00:00:00 2001 From: Dustin Brickwood Date: Thu, 19 Jul 2018 16:24:08 -0400 Subject: [PATCH 22/28] code refactor --- core/genesis.go | 8 +- core/shyft_database_util.go | 938 +++--------------- core/shyft_get_utils.go | 381 +++++++ shyft-cli/postgres_setup/create_tables.psql | 2 +- .../create_tables_test.psql | 2 +- shyftDb/shyft_database_util_test.go | 8 +- 6 files changed, 531 insertions(+), 808 deletions(-) create mode 100644 core/shyft_get_utils.go diff --git a/core/genesis.go b/core/genesis.go index 9382442449..5ab56da682 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -163,7 +163,7 @@ func WriteShyftGen(gen *Genesis, block *types.Block) { isContract := false data:= "" addr := k.String() - txCountAccount := v.Nonce +1 + accountNonce := v.Nonce +1 i, err := strconv.ParseInt(block.Time().String(), 10, 64) if err != nil { panic(err) @@ -173,15 +173,15 @@ func WriteShyftGen(gen *Genesis, block *types.Block) { GENESIS := "GENESIS" txHash := strings.Join(Genesis, addr) - sqlStatement := `INSERT INTO accounts(addr, balance, txCountAccount) VALUES(($1), ($2), ($3)) RETURNING addr` - insertErr := sqldb.QueryRow(sqlStatement, addr, v.Balance.String(), txCountAccount).Scan(&addr) + sqlStatement := `INSERT INTO accounts(addr, balance, accountnonce) VALUES(($1), ($2), ($3)) RETURNING addr` + insertErr := sqldb.QueryRow(sqlStatement, addr, v.Balance.String(), accountNonce).Scan(&addr) if insertErr != nil { panic(insertErr) } var retNonce string sqlGenTxStatement := `INSERT INTO txs(txhash, from_addr, to_addr, blockhash, blockNumber, amount,gasPrice, gas, gasLimit,txFee,nonce,txstatus, iscontract,age, data) VALUES(($1), ($2), ($3), ($4), ($5), ($6), ($7), ($8), ($9), ($10), ($11), ($12), ($13), ($14), ($15)) RETURNING nonce` - insertError := sqldb.QueryRow(sqlGenTxStatement, txHash, GENESIS, addr, block.Header().Hash().Hex(), number, v.Balance.String(), gasPrice, gasUsed, gasLimit, txFee,txCountAccount,txStatus, isContract, age, data).Scan(&retNonce) + insertError := sqldb.QueryRow(sqlGenTxStatement, txHash, GENESIS, addr, block.Header().Hash().Hex(), number, v.Balance.String(), gasPrice, gasUsed, gasLimit, txFee,accountNonce,txStatus, isContract, age, data).Scan(&retNonce) if insertError != nil { panic(insertError) } diff --git a/core/shyft_database_util.go b/core/shyft_database_util.go index 04f113c99b..3a92ff5df2 100644 --- a/core/shyft_database_util.go +++ b/core/shyft_database_util.go @@ -1,14 +1,13 @@ package core import ( -"encoding/json" -"fmt" -"math/big" -"time" -"strconv" -"database/sql" -"log" -_ "github.com/lib/pq" + "encoding/json" + "math/big" + "time" + "strconv" + "database/sql" + "log" + _ "github.com/lib/pq" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" @@ -24,20 +23,21 @@ func SetIShyftTracer(st shyfttracerinterface.IShyftTracer) { //SBlock type type SBlock struct { - Hash string - Coinbase string - Number string - GasUsed uint64 - GasLimit uint64 - TxCount int - UncleCount int - Age string - ParentHash string - UncleHash string - Difficulty string - Size string - Nonce uint64 - Rewards string + Hash string + Coinbase string + Age string + ParentHash string + UncleHash string + Difficulty string + Size string + Rewards string + Number string + GasUsed uint64 + GasLimit uint64 + Nonce uint64 + TxCount int + UncleCount int + Blocks []SBlock } //blockRes struct @@ -49,9 +49,9 @@ type blockRes struct { } type SAccounts struct { - Addr string - Balance string - TxCountAccount string + Addr string + Balance string + AccountNonce string } type accountRes struct { @@ -60,76 +60,60 @@ type accountRes struct { AllAccounts []SAccounts } -//ShyftTxEntry structure -type ShyftTxEntry struct { - TxHash common.Hash - To *common.Address - From *common.Address - BlockHash string - Amount *big.Int - GasPrice *big.Int - Gas uint64 - Cost *big.Int - Nonce uint64 - Data []byte -} - type txRes struct { TxEntry []ShyftTxEntryPretty } type ShyftTxEntryPretty struct { - TxHash string - To string - From string - BlockHash string - BlockNumber string - Amount string - GasPrice uint64 - Gas uint64 - GasLimit uint64 - Cost uint64 - Nonce uint64 - Status string - IsContract bool - Age time.Time - Data []byte -} - -type ShyftAccountEntry struct { - Balance string - Txs []string + TxHash string + To string + From string + BlockHash string + BlockNumber string + Amount string + GasPrice uint64 + Gas uint64 + GasLimit uint64 + Cost uint64 + Nonce uint64 + Status string + IsContract bool + Age time.Time + Data []byte } type SendAndReceive struct { - To string - From string - Amount string - Address string - Balance string - TxCountAccount string + To string + From string + Amount string + Address string + Balance string + AccountNonce uint64 `json:",string"` } //WriteBlock writes to block info to sql db func SWriteBlock(block *types.Block, receipts []*types.Receipt) error { - sqldb, err := DBConnection() if err != nil { panic(err) } rewards := swriteMinerRewards(sqldb,block) - coinbase := block.Header().Coinbase.String() - number := block.Header().Number.String() - gasUsed := block.Header().GasUsed - gasLimit := block.Header().GasLimit - txCount := block.Transactions().Len() - uncleCount := len(block.Uncles()) - parentHash := block.ParentHash().String() - uncleHash := block.UncleHash().String() - blockDifficulty := block.Difficulty().String() - blockSize := block.Size().String() - blockNonce := block.Nonce() + + blockData := SBlock{ + Hash: block.Header().Hash().Hex(), + Coinbase: block.Header().Coinbase.String(), + Number: block.Header().Number.String(), + GasUsed: block.Header().GasUsed, + GasLimit: block.Header().GasLimit, + TxCount: block.Transactions().Len(), + UncleCount: len(block.Uncles()), + ParentHash: block.ParentHash().String(), + UncleHash: block.UncleHash().String(), + Difficulty: block.Difficulty().String(), + Size: block.Size().String(), + Nonce: block.Nonce(), + } i, err := strconv.ParseInt(block.Time().String(), 10, 64) if err != nil { @@ -138,14 +122,14 @@ func SWriteBlock(block *types.Block, receipts []*types.Receipt) error { age := time.Unix(i, 0) sqlStatement := `INSERT INTO blocks(hash, coinbase, number, gasUsed, gasLimit, txCount, uncleCount, age, parentHash, uncleHash, difficulty, size, rewards, nonce) VALUES(($1), ($2), ($3), ($4), ($5), ($6), ($7), ($8), ($9), ($10), ($11), ($12),($13), ($14)) RETURNING number` - qerr := sqldb.QueryRow(sqlStatement, block.Header().Hash().Hex(), coinbase, number, gasUsed, gasLimit, txCount, uncleCount, age, parentHash, uncleHash, blockDifficulty, blockSize, rewards, blockNonce).Scan(&number) + qerr := sqldb.QueryRow(sqlStatement, blockData.Hash, blockData.Coinbase, blockData.Number, blockData.GasUsed, blockData.GasLimit, blockData.TxCount, blockData.UncleCount, age, blockData.ParentHash, blockData.UncleHash, blockData.Difficulty, blockData.Size, rewards, blockData.Nonce).Scan(&blockData.Number) if qerr != nil { panic(qerr) } if block.Transactions().Len() > 0 { for _, tx := range block.Transactions() { - SwriteTransactions(sqldb, tx, block.Header().Hash(), block.Header().Number.String(), receipts, age, gasLimit) + swriteTransactions(sqldb, tx, block.Header().Hash(), blockData.Number, receipts, age, blockData.GasLimit) if block.Transactions()[0].To() != nil { swriteFromBalance(sqldb, tx) } @@ -157,126 +141,102 @@ func SWriteBlock(block *types.Block, receipts []*types.Receipt) error { return nil } -//writeTransactions writes to sqldb -func SwriteTransactions(sqldb *sql.DB, tx *types.Transaction, blockHash common.Hash, blockNumber string, receipts []*types.Receipt, age time.Time, gasLimit uint64) error { - txData := ShyftTxEntry{ - TxHash: tx.Hash(), - From: tx.From(), - To: tx.To(), +//swriteTransactions writes to sqldb, a SHYFT postgres instance +func swriteTransactions(sqldb *sql.DB, tx *types.Transaction, blockHash common.Hash, blockNumber string, receipts []*types.Receipt, age time.Time, gasLimit uint64) error { + var isContract bool + var statusFromReciept, contractAddressFromReciept, retNonce string + + txData := ShyftTxEntryPretty{ + TxHash: tx.Hash().Hex(), + From: tx.From().Hex(), + To: tx.To().Hex(), BlockHash: blockHash.Hex(), - Amount: tx.Value(), - Cost: tx.Cost(), - GasPrice: tx.GasPrice(), + Amount: tx.Value().String(), + Cost: tx.Cost().Uint64(), + GasPrice: tx.GasPrice().Uint64(), Gas: tx.Gas(), Nonce: tx.Nonce(), Data: tx.Data(), } - hash := txData.TxHash - txHash := txData.TxHash.Hex() - - from := txData.From.Hex() - blockHasher := txData.BlockHash - amount := txData.Amount.String() - gasPrice := txData.GasPrice.String() - txFee := txData.Cost.String() - nonce := txData.Nonce - gas := txData.Gas - data := txData.Data - to := txData.To - var isContract bool - var statusFromReciept string - - if (to == nil){ - var contractAddressFromReciept string + if tx.To() == nil { for _, receipt := range receipts { statusReciept := (*types.ReceiptForStorage)(receipt).Status contractAddressFromReciept = (*types.ReceiptForStorage)(receipt).ContractAddress.String() - if statusReciept == 1 { + switch { + case statusReciept == 0: + statusFromReciept = "FAIL" + case statusReciept == 1: statusFromReciept = "SUCCESS" } - if statusReciept == 0 { - statusFromReciept = "FAIL" - } } - - var retNonce string isContract = true - 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, contractAddressFromReciept, blockHasher, blockNumber, amount, gasPrice, gas, gasLimit, txFee, nonce, isContract, statusFromReciept, age,data).Scan(&retNonce) - if qerr != nil { - panic(qerr) + 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` + err := sqldb.QueryRow(sqlStatement, txData.TxHash, txData.From, contractAddressFromReciept, txData.BlockHash, blockNumber, txData.Amount, txData.GasPrice, txData.Gas, gasLimit, txData.Cost, txData.Nonce, isContract, statusFromReciept, age, txData.Data).Scan(&retNonce) + if err != nil { + panic(err) } } else { - var retNonce string isContract = false for _, receipt := range receipts { statusReciept := (*types.ReceiptForStorage)(receipt).Status - if statusReciept == 1 { + switch { + case statusReciept == 0: + statusFromReciept = "FAIL" + case 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 { - panic(qerr) + err := sqldb.QueryRow(sqlStatement, txData.TxHash, txData.From, txData.To, txData.BlockHash, blockNumber, txData.Amount, txData.GasPrice, txData.Gas, gasLimit, txData.Cost, txData.Nonce, isContract, statusFromReciept, age, txData.Data).Scan(&retNonce) + if err != nil { + panic(err) } } - IShyftTracer.GetTracerToRun(hash) + //Runs necessary functions for tracing internal transactions through tracers.go + IShyftTracer.GetTracerToRun(tx.Hash()) return nil } func swriteContractBalance(sqldb *sql.DB, tx *types.Transaction) error { sendAndReceiveData := SendAndReceive{ - From: tx.From().Hex(), - Amount: tx.Value().String(), + From: tx.From().Hex(), + Amount: tx.Value().String(), + AccountNonce: tx.Nonce(), } - fromAddr := sendAndReceiveData.From - amount := sendAndReceiveData.Amount - accountNonceSen := tx.Nonce() - var response string sqlExistsStatement := `SELECT balance from accounts WHERE addr = ($1)` - err := sqldb.QueryRow(sqlExistsStatement, fromAddr).Scan(&response) + err := sqldb.QueryRow(sqlExistsStatement, sendAndReceiveData.From).Scan(&response) + switch { case err == sql.ErrNoRows: - sqlStatement := `INSERT INTO accounts(addr, balance, txCountAccount) VALUES(($1), ($2), ($3)) RETURNING addr` - insertErr := sqldb.QueryRow(sqlStatement, fromAddr, amount, accountNonceSen).Scan(&fromAddr) + sqlStatement := `INSERT INTO accounts(addr, balance, accountNonce) VALUES(($1), ($2), ($3)) RETURNING addr` + insertErr := sqldb.QueryRow(sqlStatement, sendAndReceiveData.From, sendAndReceiveData.Amount, sendAndReceiveData.AccountNonce).Scan(&sendAndReceiveData.From) if insertErr != nil { panic(insertErr) } default: - getAccountBalanceSender:= SGetAccount(sqldb, fromAddr) + getAccountBalanceSender:= SGetAccount(sqldb, sendAndReceiveData.From) + var newBalanceSender,newAccountNonceSender big.Int + var nonceIncrement = big.NewInt(1) + var senderBalance SendAndReceive if err := json.Unmarshal([]byte(getAccountBalanceSender), &senderBalance); err != nil { log.Fatal(err) } - balanceSender := senderBalance.Balance - var newBalanceSender big.Int - var newAccountNonceSender big.Int - var nonceIncrement = big.NewInt(1) - updateSQLStatement := `UPDATE accounts SET balance = ($2), txCountAccount = ($3) WHERE addr = ($1)` + //Converts string to UINT64 > Big.Int for adding and subtraction + balanceSender, _ := strconv.ParseUint(senderBalance.Balance, 10, 64) + balanceSen := new(big.Int).SetUint64(balanceSender) + senderAccountNonce := new(big.Int).SetUint64(sendAndReceiveData.AccountNonce) - s := new(big.Int) - _, error := fmt.Sscan(balanceSender, s) - if error != nil { - log.Println("error scanning value:", error) - } - - senderAccountNonce := new(big.Int).SetUint64(accountNonceSen) - - newBalanceSender.Sub(s, tx.Value()) + newBalanceSender.Sub(balanceSen, tx.Value()) newAccountNonceSender.Add(senderAccountNonce, nonceIncrement) - _, err := sqldb.Exec(updateSQLStatement, fromAddr, newBalanceSender.String(), newAccountNonceSender.String()) + updateSQLStatement := `UPDATE accounts SET balance = ($2), accountNonce = ($3) WHERE addr = ($1)` + _, err := sqldb.Exec(updateSQLStatement, sendAndReceiveData.From, newBalanceSender.String(), newAccountNonceSender.String()) if err != nil { panic(err) } @@ -284,92 +244,48 @@ func swriteContractBalance(sqldb *sql.DB, tx *types.Transaction) error { return nil } -func swriteContractBalanceHelper(sqldb *sql.DB, tx *types.Transaction) (SendAndReceive, string, string) { - sendAndReceiveData := SendAndReceive{ - From: tx.From().Hex(), - Amount: tx.Value().String(), - } - - fromAddr := sendAndReceiveData.From - getAccountBalanceSender:= SGetAccount(sqldb, fromAddr) - - var senderBalance SendAndReceive - if err := json.Unmarshal([]byte(getAccountBalanceSender), &senderBalance); err != nil { - log.Fatal(err) - } - balanceSender := senderBalance.Balance - accountNonceSender := senderBalance.TxCountAccount - - return sendAndReceiveData, balanceSender, accountNonceSender -} - //writeFromBalance writes senders balance to accounts db func swriteFromBalance(sqldb *sql.DB, tx *types.Transaction) error { sendAndReceiveData, balanceRec, balanceSen, accountNonceRec, accountNonceSen := swriteBalanceHelper(sqldb, tx) - toAddr := sendAndReceiveData.To - fromAddr := sendAndReceiveData.From - amount := sendAndReceiveData.Amount - balanceReceiver := balanceRec - balanceSender := balanceSen var response string sqlExistsStatement := `SELECT balance from accounts WHERE addr = ($1)` - err := sqldb.QueryRow(sqlExistsStatement, toAddr).Scan(&response) + err := sqldb.QueryRow(sqlExistsStatement, sendAndReceiveData.To).Scan(&response) switch { case err == sql.ErrNoRows: - txCountAccount := strconv.FormatUint(tx.Nonce(), 10) - sqlStatement := `INSERT INTO accounts(addr, balance, txCountAccount) VALUES(($1), ($2), ($3)) RETURNING addr` - insertErr := sqldb.QueryRow(sqlStatement, toAddr, amount, txCountAccount).Scan(&toAddr) + accountNonce := strconv.FormatUint(tx.Nonce(), 10) + sqlStatement := `INSERT INTO accounts(addr, balance, accountNonce) VALUES(($1), ($2), ($3)) RETURNING addr` + insertErr := sqldb.QueryRow(sqlStatement, sendAndReceiveData.To, sendAndReceiveData.Amount, accountNonce).Scan(&sendAndReceiveData.To) if insertErr != nil { panic(insertErr) } case err != nil: log.Fatal(err) default: - var newBalanceReceiver big.Int - var newBalanceSender big.Int - var newAccountNonceReceiver big.Int - var newAccountNonceSender big.Int + var newBalanceReceiver, newBalanceSender, newAccountNonceReceiver, newAccountNonceSender big.Int var nonceIncrement = big.NewInt(1) - updateSQLStatement := `UPDATE accounts SET balance = ($2), txCountAccount = ($3) WHERE addr = ($1)` - r := new(big.Int) - _, err := fmt.Sscan(balanceReceiver, r) - if err != nil { - log.Println("error scanning value:", err) - } + //Convert UINT64 to BIG.INT in order to add and subtract nonces & balances + balanceR := new(big.Int).SetUint64(balanceRec) + balanceS := new(big.Int).SetUint64(balanceSen) - s := new(big.Int) - _, error := fmt.Sscan(balanceSender, s) - if error != nil { - log.Println("error scanning value:", error) - } + accountR := new(big.Int).SetUint64(accountNonceRec) + accountS := new(big.Int).SetUint64(accountNonceSen) - accountR := new(big.Int) - _, er := fmt.Sscan(accountNonceRec, accountR) - if er != nil { - log.Println("error scanning value:", er) - } - - accountS := new(big.Int) - _, errors := fmt.Sscan(accountNonceSen, accountS) - if errors != nil { - log.Println("error scanning value:", error) - } - - newBalanceReceiver.Add(r, tx.Value()) - newBalanceSender.Sub(s, tx.Value()) + newBalanceReceiver.Add(balanceR, tx.Value()) + newBalanceSender.Sub(balanceS, tx.Value()) newAccountNonceReceiver.Add(accountR, nonceIncrement) newAccountNonceSender.Add(accountS, nonceIncrement) - _, err = sqldb.Exec(updateSQLStatement, toAddr, newBalanceReceiver.String(), newAccountNonceReceiver.String()) + updateSQLStatement := `UPDATE accounts SET balance = ($2), accountNonce = ($3) WHERE addr = ($1)` + _, err = sqldb.Exec(updateSQLStatement, sendAndReceiveData.To, newBalanceReceiver.String(), newAccountNonceReceiver.String()) if err != nil { panic(err) } - _, err = sqldb.Exec(updateSQLStatement, fromAddr, newBalanceSender.String(), newAccountNonceSender.String()) + _, err = sqldb.Exec(updateSQLStatement, sendAndReceiveData.From, newBalanceSender.String(), newAccountNonceSender.String()) if err != nil { panic(err) } @@ -377,35 +293,30 @@ func swriteFromBalance(sqldb *sql.DB, tx *types.Transaction) error { return nil } -func swriteBalanceHelper(sqldb *sql.DB, tx *types.Transaction) (SendAndReceive, string, string, string, string) { +func swriteBalanceHelper(sqldb *sql.DB, tx *types.Transaction) (SendAndReceive, uint64, uint64, uint64, uint64) { sendAndReceiveData := SendAndReceive{ To: tx.To().Hex(), From: tx.From().Hex(), Amount: tx.Value().String(), } - toAddr := sendAndReceiveData.To - fromAddr := sendAndReceiveData.From + getAccountBalanceReceiver := SGetAccount(sqldb, sendAndReceiveData.To) + getAccountBalanceSender:= SGetAccount(sqldb, sendAndReceiveData.From) - getAccountBalanceReceiver := SGetAccount(sqldb, toAddr) - getAccountBalanceSender:= SGetAccount(sqldb, fromAddr) - - var receiverBalance SendAndReceive - if err := json.Unmarshal([]byte(getAccountBalanceReceiver), &receiverBalance); err != nil { + var receiverData SendAndReceive + if err := json.Unmarshal([]byte(getAccountBalanceReceiver), &receiverData); err != nil { log.Fatal(err) } - var senderBalance SendAndReceive - if err := json.Unmarshal([]byte(getAccountBalanceSender), &senderBalance); err != nil { + var senderData SendAndReceive + if err := json.Unmarshal([]byte(getAccountBalanceSender), &senderData); err != nil { log.Fatal(err) } - balanceReceiver := receiverBalance.Balance - balanceSender := senderBalance.Balance - accountNonceReceiver := receiverBalance.TxCountAccount - accountNonceSender := senderBalance.TxCountAccount + balanceReceiver, _ := strconv.ParseUint(receiverData.Balance, 10, 64) + balanceSender, _ := strconv.ParseUint(senderData.Balance, 10, 64) - return sendAndReceiveData, balanceReceiver, balanceSender, accountNonceReceiver, accountNonceSender + return sendAndReceiveData, balanceReceiver, balanceSender, receiverData.AccountNonce, senderData.AccountNonce } // @NOTE: This function is extremely complex and requires heavy testing and knowdlege of edge cases: @@ -446,8 +357,7 @@ func swriteMinerRewards(sqldb *sql.DB, block *types.Block) string { sstoreReward(sqldb, shyftConduitAddress, Rewards.ShyftNetworkBlockReward) var uncRewards = new(big.Int) for i := 0; i < len(uncleAddrs); i++ { - uncRewards := uncleRewards[i] - fmt.Println(uncRewards) + _ = uncleRewards[i] sstoreReward(sqldb, uncleAddrs[i], uncleRewards[i]) } @@ -466,10 +376,10 @@ func sstoreReward(sqldb *sql.DB, address string, reward *big.Int) { if err == sql.ErrNoRows { // Addr does not exist, thus create new entry - createAddressSqlStatement := `INSERT INTO accounts(addr, balance, txCountAccount) VALUES(($1), ($2), ($3)) RETURNING addr` + createAddressSqlStatement := `INSERT INTO accounts(addr, balance, accountNonce) VALUES(($1), ($2), ($3)) RETURNING addr` // We convert totalReward into a string and postgres converts into number - _, insertErr := sqldb.Exec(createAddressSqlStatement, address, reward.String(), 0) + _, insertErr := sqldb.Exec(createAddressSqlStatement, address, reward.String(), 1) if insertErr != nil { panic(insertErr) } @@ -499,574 +409,4 @@ func sstoreReward(sqldb *sql.DB, address string, reward *big.Int) { } } -/////////// -// Getters -////////// -//GetAllBlocks returns []SBlock blocks for API -//Look into postgres functions array_to_json(array_agg(lap)) -//Example select array_to_json(array_agg(lap)) -//from ( select * from blocks)lap; -func SGetAllBlocks(sqldb *sql.DB) string { - var arr blockRes - var blockArr string - rows, err := sqldb.Query(` - SELECT * FROM blocks`) - if err != nil { - fmt.Println("err") - } - defer rows.Close() - - for rows.Next() { - var hash string - var coinbase string - var gasUsed uint64 - var gasLimit uint64 - var txCount int - var uncleCount int - var age string - var parentHash string - var uncleHash string - var difficulty string - var size string - var nonce uint64 - var rewards string - var num string - - err = rows.Scan( - &hash, - &coinbase, - &gasUsed, - &gasLimit, - &txCount, - &uncleCount, - &age, - &parentHash, - &uncleHash, - &difficulty, - &size, - &nonce, - &rewards, - &num,) - - arr.Blocks = append(arr.Blocks, SBlock{ - Hash: hash, - Coinbase: coinbase, - GasUsed: gasUsed, - GasLimit: gasLimit, - TxCount: txCount, - UncleCount: uncleCount, - Age: age, - ParentHash:parentHash, - UncleHash:uncleHash, - Difficulty:difficulty, - Size: size, - Nonce:nonce, - Rewards: rewards, - Number: num, - }) - - blocks, _ := json.Marshal(arr.Blocks) - blocksFmt := string(blocks) - blockArr = blocksFmt - } - return blockArr -} - -//GetBlock queries to send single block info -//TODO provide blockHash arg passed from handler.go -func SGetBlock(sqldb *sql.DB, blockNumber string) string { - sqlStatement := `SELECT * FROM blocks WHERE number=$1;` - row := sqldb.QueryRow(sqlStatement, blockNumber) - var hash string - var coinbase string - var gasUsed uint64 - var gasLimit uint64 - var txCount int - var uncleCount int - var age string - var parentHash string - var uncleHash string - var difficulty string - var size string - var nonce uint64 - var rewards string - var num string - row.Scan( - &hash, - &coinbase, - &gasUsed, - &gasLimit, - &txCount, - &uncleCount, - &age, - &parentHash, - &uncleHash, - &difficulty, - &size, - &nonce, - &rewards, - &num,) - - block := SBlock{ - Hash: hash, - Coinbase: coinbase, - GasUsed: gasUsed, - GasLimit: gasLimit, - TxCount: txCount, - UncleCount: uncleCount, - Age: age, - ParentHash:parentHash, - UncleHash:uncleHash, - Difficulty:difficulty, - Size: size, - Nonce:nonce, - Rewards: rewards, - Number: num, - } - json, _ := json.Marshal(block) - return string(json) -} - -func SGetRecentBlock(sqldb *sql.DB) string { - sqlStatement := `SELECT * FROM blocks WHERE number=(SELECT MAX(number) FROM blocks);` - row := sqldb.QueryRow(sqlStatement) - var hash string - var coinbase string - var gasUsed uint64 - var gasLimit uint64 - var txCount int - var uncleCount int - var age string - var parentHash string - var uncleHash string - var difficulty string - var size string - var nonce uint64 - var rewards string - var num string - row.Scan( - &hash, - &coinbase, - &gasUsed, - &gasLimit, - &txCount, - &uncleCount, - &age, - &parentHash, - &uncleHash, - &difficulty, - &size, - &nonce, - &rewards, - &num,) - - block := SBlock{ - Hash: hash, - Coinbase: coinbase, - GasUsed: gasUsed, - GasLimit: gasLimit, - TxCount: txCount, - UncleCount: uncleCount, - Age: age, - ParentHash:parentHash, - UncleHash:uncleHash, - Difficulty:difficulty, - Size: size, - Nonce:nonce, - Rewards: rewards, - Number: num, - } - json, _ := json.Marshal(block) - return string(json) -} - -func SGetAllTransactionsFromBlock(sqldb *sql.DB, blockNumber string) string { - var arr txRes - var txx string - sqlStatement := `SELECT * FROM txs WHERE blocknumber=$1` - rows, err := sqldb.Query(sqlStatement, blockNumber) - if err != nil { - fmt.Println("err") - } - defer rows.Close() - for rows.Next() { - var txhash string - var to_addr string - var from_addr string - var blockhash string - var blocknumber string - var amount string - var gasprice uint64 - var gas uint64 - var gasLimit uint64 - var txfee uint64 - var nonce uint64 - var status string - var isContract bool - var age time.Time - var data []byte - err = rows.Scan( - &txhash, - &to_addr, - &from_addr, - &blockhash, - &blocknumber, - &amount, - &gasprice, - &gas, - &gasLimit, - &txfee, - &nonce, - &status, - &isContract, - &age, - &data, - ) - - arr.TxEntry = append(arr.TxEntry, ShyftTxEntryPretty{ - TxHash: txhash, - To: to_addr, - From: from_addr, - BlockHash: blockhash, - BlockNumber: blocknumber, - Amount: amount, - GasPrice: gasprice, - Gas: gas, - GasLimit: gasLimit, - Cost: txfee, - Nonce: nonce, - Status: status, - IsContract: isContract, - Age: age, - Data: data, - }) - - tx, _ := json.Marshal(arr.TxEntry) - newtx := string(tx) - txx = newtx - } - return txx -} - -func SGetAllBlocksMinedByAddress(sqldb *sql.DB, coinbase string) string { - var arr blockRes - var blockArr string - sqlStatement := `SELECT * FROM blocks WHERE coinbase=$1` - rows, err := sqldb.Query(sqlStatement, coinbase) - if err != nil { - fmt.Println("err") - } - defer rows.Close() - - for rows.Next() { - var hash string - var coinbase string - var gasUsed uint64 - var gasLimit uint64 - var txCount int - var uncleCount int - var age string - var parentHash string - var uncleHash string - var difficulty string - var size string - var nonce uint64 - var rewards string - var num string - - err = rows.Scan( - &hash, - &coinbase, - &gasUsed, - &gasLimit, - &txCount, - &uncleCount, - &age, - &parentHash, - &uncleHash, - &difficulty, - &size, - &nonce, - &rewards, - &num,) - - arr.Blocks = append(arr.Blocks, SBlock{ - Hash: hash, - Coinbase: coinbase, - GasUsed: gasUsed, - GasLimit: gasLimit, - TxCount: txCount, - UncleCount: uncleCount, - Age: age, - ParentHash:parentHash, - UncleHash:uncleHash, - Difficulty:difficulty, - Size: size, - Nonce:nonce, - Rewards: rewards, - Number: num, - }) - - blocks, _ := json.Marshal(arr.Blocks) - blocksFmt := string(blocks) - blockArr = blocksFmt - } - return blockArr -} - -//GetAllTransactions getter fn for API -func SGetAllTransactions(sqldb *sql.DB) string { - var arr txRes - var txx string - rows, err := sqldb.Query(` - SELECT * FROM txs`) - if err != nil { - fmt.Println("err") - } - defer rows.Close() - for rows.Next() { - var txhash string - var to_addr string - var from_addr string - var blockhash string - var blocknumber string - var amount string - var gasprice uint64 - var gas uint64 - var gasLimit uint64 - var txfee uint64 - var nonce uint64 - var status string - var isContract bool - var age time.Time - var data []byte - err = rows.Scan( - &txhash, - &to_addr, - &from_addr, - &blockhash, - &blocknumber, - &amount, - &gasprice, - &gas, - &gasLimit, - &txfee, - &nonce, - &status, - &isContract, - &age, - &data, - ) - - arr.TxEntry = append(arr.TxEntry, ShyftTxEntryPretty{ - TxHash: txhash, - To: to_addr, - From: from_addr, - BlockHash: blockhash, - BlockNumber: blocknumber, - Amount: amount, - GasPrice: gasprice, - Gas: gas, - GasLimit: gasLimit, - Cost: txfee, - Nonce: nonce, - Status: status, - IsContract: isContract, - Age: age, - Data: data, - }) - - tx, _ := json.Marshal(arr.TxEntry) - newtx := string(tx) - txx = newtx - } - return txx -} - -//GetTransaction fn returns single tx -func SGetTransaction(sqldb *sql.DB, txHash string) string { - sqlStatement := `SELECT * FROM txs WHERE txhash=$1;` - row := sqldb.QueryRow(sqlStatement, txHash) - var txhash string - var to_addr string - var from_addr string - var blockhash string - var blocknumber string - var amount string - var gasprice uint64 - var gas uint64 - var gasLimit uint64 - var txfee uint64 - var nonce uint64 - var status string - var isContract bool - var age time.Time - var data []byte - row.Scan( - &txhash, - &to_addr, - &from_addr, - &blockhash, - &blocknumber, - &amount, - &gasprice, - &gas, - &gasLimit, - &txfee, - &nonce, - &status, - &isContract, - &age, - &data) - - tx := ShyftTxEntryPretty{ - TxHash: txhash, - To: to_addr, - From: from_addr, - BlockHash: blockhash, - BlockNumber: blocknumber, - Amount: amount, - GasPrice: gasprice, - Gas: gas, - GasLimit: gasLimit, - Cost: txfee, - Nonce: nonce, - Status: status, - IsContract: isContract, - Age: age, - Data: data, - } - json, _ := json.Marshal(tx) - - return string(json) -} - -//GetAccount returns account balances -func SGetAccount(sqldb *sql.DB, address string) string { - sqlStatement := `SELECT * FROM accounts WHERE addr=$1;` - row := sqldb.QueryRow(sqlStatement, address) - var addr string - var balance string - var txCountAccount string - row.Scan( - &addr, - &balance, - &txCountAccount) - - account := SAccounts{ - Addr: addr, - Balance: balance, - TxCountAccount: txCountAccount, - } - json, _ := json.Marshal(account) - return string(json) -} - -//GetAllAccounts returns all accounts and balances -func SGetAllAccounts(sqldb *sql.DB) string { - var array accountRes - var accountsArr string - var txCountAccount string - accs, err := sqldb.Query(` - SELECT - addr, - balance, - txCountAccount - FROM accounts`) - if err != nil { - fmt.Println(err) - } - - defer accs.Close() - - for accs.Next() { - var addr string - var balance string - err = accs.Scan( - &addr, - &balance, - &txCountAccount, - ) - - array.AllAccounts = append(array.AllAccounts, SAccounts{ - Addr: addr, - Balance: balance, - TxCountAccount: txCountAccount, - }) - - accounts, _ := json.Marshal(array.AllAccounts) - accountsFmt := string(accounts) - accountsArr = accountsFmt - } - return accountsArr -} - -//GetAccount returns account balances -func SGetAccountTxs(sqldb *sql.DB, address string) string { - var arr txRes - var txx string - sqlStatement := `SELECT * FROM txs WHERE to_addr=$1 OR from_addr=$1;` - rows, err := sqldb.Query(sqlStatement, address) - if err != nil { - fmt.Println("err") - } - defer rows.Close() - for rows.Next() { - var txhash string - var to_addr string - var from_addr string - var blockhash string - var blocknumber string - var amount string - var gasprice uint64 - var gas uint64 - var gasLimit uint64 - var txfee uint64 - var nonce uint64 - var status string - var isContract bool - var age time.Time - var data []byte - err = rows.Scan( - &txhash, - &to_addr, - &from_addr, - &blockhash, - &blocknumber, - &amount, - &gasprice, - &gas, - &gasLimit, - &txfee, - &nonce, - &status, - &isContract, - &age, - &data, - ) - - arr.TxEntry = append(arr.TxEntry, ShyftTxEntryPretty{ - TxHash: txhash, - To: to_addr, - From: from_addr, - BlockHash: blockhash, - BlockNumber: blocknumber, - Amount: amount, - GasPrice: gasprice, - Gas: gas, - GasLimit: gasLimit, - Cost: txfee, - Nonce: nonce, - Status: status, - IsContract: isContract, - Age: age, - Data: data, - }) - - tx, _ := json.Marshal(arr.TxEntry) - newtx := string(tx) - txx = newtx - } - return txx -} diff --git a/core/shyft_get_utils.go b/core/shyft_get_utils.go new file mode 100644 index 0000000000..97f64ee9b9 --- /dev/null +++ b/core/shyft_get_utils.go @@ -0,0 +1,381 @@ +package core + +import ( + "encoding/json" + "database/sql" + "fmt" + "time" +) + +/////////// +// Getters +////////// +func SGetAllBlocks(sqldb *sql.DB) string { + var arr blockRes + var blockArr string + rows, err := sqldb.Query(`SELECT * FROM blocks`) + if err != nil { + fmt.Println("err") + } + defer rows.Close() + + for rows.Next() { + var hash, coinbase, age, parentHash, uncleHash, difficulty, size, rewards, num string + var gasUsed, gasLimit, nonce uint64 + var txCount, uncleCount int + + err = rows.Scan( + &hash, &coinbase, &gasUsed, &gasLimit, &txCount, &uncleCount, &age, &parentHash, &uncleHash, &difficulty, &size, &nonce, &rewards, &num,) + + arr.Blocks = append(arr.Blocks, SBlock{ + Hash: hash, + Coinbase: coinbase, + GasUsed: gasUsed, + GasLimit: gasLimit, + TxCount: txCount, + UncleCount: uncleCount, + Age: age, + ParentHash: parentHash, + UncleHash: uncleHash, + Difficulty: difficulty, + Size: size, + Nonce: nonce, + Rewards: rewards, + Number: num, + }) + + blocks, _ := json.Marshal(arr.Blocks) + blocksFmt := string(blocks) + blockArr = blocksFmt + } + return blockArr +} + +//GetBlock queries to send single block info +//TODO provide blockHash arg passed from handler.go +func SGetBlock(sqldb *sql.DB, blockNumber string) string { + sqlStatement := `SELECT * FROM blocks WHERE number=$1;` + row := sqldb.QueryRow(sqlStatement, blockNumber) + var hash, coinbase, age, parentHash, uncleHash, difficulty, size, rewards, num string + var gasUsed, gasLimit, nonce uint64 + var txCount, uncleCount int + + row.Scan( + &hash, &coinbase, &gasUsed, &gasLimit, &txCount, &uncleCount, &age, &parentHash, &uncleHash, &difficulty, &size, &nonce, &rewards, &num,) + + block := SBlock{ + Hash: hash, + Coinbase: coinbase, + GasUsed: gasUsed, + GasLimit: gasLimit, + TxCount: txCount, + UncleCount: uncleCount, + Age: age, + ParentHash: parentHash, + UncleHash: uncleHash, + Difficulty: difficulty, + Size: size, + Nonce: nonce, + Rewards: rewards, + Number: num, + } + json, _ := json.Marshal(block) + return string(json) +} + +func SGetRecentBlock(sqldb *sql.DB) string { + sqlStatement := `SELECT * FROM blocks WHERE number=(SELECT MAX(number) FROM blocks);` + row := sqldb.QueryRow(sqlStatement) + var hash, coinbase, age, parentHash, uncleHash, difficulty, size, rewards, num string + var gasUsed, gasLimit, nonce uint64 + var txCount, uncleCount int + + row.Scan( + &hash, &coinbase, &gasUsed, &gasLimit, &txCount, &uncleCount, &age, &parentHash, &uncleHash, &difficulty, &size, &nonce, &rewards, &num,) + + block := SBlock{ + Hash: hash, + Coinbase: coinbase, + GasUsed: gasUsed, + GasLimit: gasLimit, + TxCount: txCount, + UncleCount: uncleCount, + Age: age, + ParentHash: parentHash, + UncleHash: uncleHash, + Difficulty: difficulty, + Size: size, + Nonce: nonce, + Rewards: rewards, + Number: num, + } + json, _ := json.Marshal(block) + return string(json) +} + +func SGetAllTransactionsFromBlock(sqldb *sql.DB, blockNumber string) string { + var arr txRes + var txx string + sqlStatement := `SELECT * FROM txs WHERE blocknumber=$1` + rows, err := sqldb.Query(sqlStatement, blockNumber) + if err != nil { + fmt.Println("err") + } + defer rows.Close() + for rows.Next() { + var txhash, to_addr, from_addr, blockhash, blocknumber, amount, status string + var gasprice, gas, gasLimit, txfee, nonce uint64 + var isContract bool + var age time.Time + var data []byte + + err = rows.Scan( + &txhash, &to_addr, &from_addr, &blockhash, &blocknumber, &amount, &gasprice, &gas, &gasLimit, &txfee, &nonce, &status, &isContract, &age, &data, + ) + + arr.TxEntry = append(arr.TxEntry, ShyftTxEntryPretty{ + TxHash: txhash, + To: to_addr, + From: from_addr, + BlockHash: blockhash, + BlockNumber: blocknumber, + Amount: amount, + GasPrice: gasprice, + Gas: gas, + GasLimit: gasLimit, + Cost: txfee, + Nonce: nonce, + Status: status, + IsContract: isContract, + Age: age, + Data: data, + }) + + tx, _ := json.Marshal(arr.TxEntry) + newtx := string(tx) + txx = newtx + } + return txx +} + +func SGetAllBlocksMinedByAddress(sqldb *sql.DB, coinbase string) string { + var arr blockRes + var blockArr string + sqlStatement := `SELECT * FROM blocks WHERE coinbase=$1` + rows, err := sqldb.Query(sqlStatement, coinbase) + if err != nil { + fmt.Println("err") + } + defer rows.Close() + + for rows.Next() { + var hash, coinbase, age, parentHash, uncleHash, difficulty, size, rewards, num string + var gasUsed, gasLimit, nonce uint64 + var txCount, uncleCount int + + err = rows.Scan( + &hash, &coinbase, &gasUsed, &gasLimit, &txCount, &uncleCount, &age, &parentHash, &uncleHash, &difficulty, &size, &nonce, &rewards, &num,) + + arr.Blocks = append(arr.Blocks, SBlock{ + Hash: hash, + Coinbase: coinbase, + GasUsed: gasUsed, + GasLimit: gasLimit, + TxCount: txCount, + UncleCount: uncleCount, + Age: age, + ParentHash:parentHash, + UncleHash:uncleHash, + Difficulty:difficulty, + Size: size, + Nonce:nonce, + Rewards: rewards, + Number: num, + }) + + blocks, _ := json.Marshal(arr.Blocks) + blocksFmt := string(blocks) + blockArr = blocksFmt + } + return blockArr +} + +//GetAllTransactions getter fn for API +func SGetAllTransactions(sqldb *sql.DB) string { + var arr txRes + var txx string + rows, err := sqldb.Query(`SELECT * FROM txs`) + if err != nil { + fmt.Println("err") + } + defer rows.Close() + for rows.Next() { + var txhash, to_addr, from_addr, blockhash, blocknumber, amount, status string + var gasprice, gas, gasLimit, txfee, nonce uint64 + var isContract bool + var age time.Time + var data []byte + + err = rows.Scan( + &txhash, &to_addr, &from_addr, &blockhash, &blocknumber, &amount, &gasprice, &gas, &gasLimit, &txfee, &nonce, &status, &isContract, &age, &data, + ) + + arr.TxEntry = append(arr.TxEntry, ShyftTxEntryPretty{ + TxHash: txhash, + To: to_addr, + From: from_addr, + BlockHash: blockhash, + BlockNumber: blocknumber, + Amount: amount, + GasPrice: gasprice, + Gas: gas, + GasLimit: gasLimit, + Cost: txfee, + Nonce: nonce, + Status: status, + IsContract: isContract, + Age: age, + Data: data, + }) + + tx, _ := json.Marshal(arr.TxEntry) + newtx := string(tx) + txx = newtx + } + return txx +} + +//GetTransaction fn returns single tx +func SGetTransaction(sqldb *sql.DB, txHash string) string { + sqlStatement := `SELECT * FROM txs WHERE txhash=$1;` + row := sqldb.QueryRow(sqlStatement, txHash) + var txhash, to_addr, from_addr, blockhash, blocknumber, amount, status string + var gasprice, gas, gasLimit, txfee, nonce uint64 + var isContract bool + var age time.Time + var data []byte + + row.Scan( + &txhash, &to_addr, &from_addr, &blockhash, &blocknumber, &amount, &gasprice, &gas, &gasLimit, &txfee, &nonce, &status, &isContract, &age, &data) + + tx := ShyftTxEntryPretty{ + TxHash: txhash, + To: to_addr, + From: from_addr, + BlockHash: blockhash, + BlockNumber: blocknumber, + Amount: amount, + GasPrice: gasprice, + Gas: gas, + GasLimit: gasLimit, + Cost: txfee, + Nonce: nonce, + Status: status, + IsContract: isContract, + Age: age, + Data: data, + } + json, _ := json.Marshal(tx) + + return string(json) +} + +//GetAccount returns account balances +func SGetAccount(sqldb *sql.DB, address string) string { + sqlStatement := `SELECT * FROM accounts WHERE addr=$1;` + row := sqldb.QueryRow(sqlStatement, address) + var addr, balance, accountNonce string + + row.Scan( + &addr, &balance, &accountNonce) + + account := SAccounts{ + Addr: addr, + Balance: balance, + AccountNonce: accountNonce, + } + json, _ := json.Marshal(account) + return string(json) +} + +//GetAllAccounts returns all accounts and balances +func SGetAllAccounts(sqldb *sql.DB) string { + var array accountRes + var accountsArr, accountNonce string + + accs, err := sqldb.Query(` + SELECT + addr, + balance, + accountNonce + FROM accounts`) + if err != nil { + fmt.Println(err) + } + + defer accs.Close() + + for accs.Next() { + var addr, balance string + err = accs.Scan( + &addr, &balance, &accountNonce, + ) + + array.AllAccounts = append(array.AllAccounts, SAccounts{ + Addr: addr, + Balance: balance, + AccountNonce: accountNonce, + }) + + accounts, _ := json.Marshal(array.AllAccounts) + accountsFmt := string(accounts) + accountsArr = accountsFmt + } + return accountsArr +} + +//GetAccount returns account balances +func SGetAccountTxs(sqldb *sql.DB, address string) string { + var arr txRes + var txx string + sqlStatement := `SELECT * FROM txs WHERE to_addr=$1 OR from_addr=$1;` + rows, err := sqldb.Query(sqlStatement, address) + if err != nil { + fmt.Println("err", err) + } + defer rows.Close() + for rows.Next() { + var txhash, to_addr, from_addr, blockhash, blocknumber, amount, status string + var gasprice, gas, gasLimit, txfee, nonce uint64 + var isContract bool + var age time.Time + var data []byte + + err = rows.Scan( + &txhash, &to_addr, &from_addr, &blockhash, &blocknumber, &amount, &gasprice, &gas, &gasLimit, &txfee, &nonce, &status, &isContract, &age, &data, + ) + + arr.TxEntry = append(arr.TxEntry, ShyftTxEntryPretty{ + TxHash: txhash, + To: to_addr, + From: from_addr, + BlockHash: blockhash, + BlockNumber: blocknumber, + Amount: amount, + GasPrice: gasprice, + Gas: gas, + GasLimit: gasLimit, + Cost: txfee, + Nonce: nonce, + Status: status, + IsContract: isContract, + Age: age, + Data: data, + }) + + tx, _ := json.Marshal(arr.TxEntry) + newtx := string(tx) + txx = newtx + } + return txx +} diff --git a/shyft-cli/postgres_setup/create_tables.psql b/shyft-cli/postgres_setup/create_tables.psql index 259a95b23e..b913fc4f25 100644 --- a/shyft-cli/postgres_setup/create_tables.psql +++ b/shyft-cli/postgres_setup/create_tables.psql @@ -36,7 +36,7 @@ CREATE TABLE IF NOT EXISTS txs ( CREATE TABLE IF NOT EXISTS accounts ( addr text primary key unique, balance numeric, - txCountAccount numeric + accountNonce numeric ); CREATE TABLE IF NOT EXISTS contracts ( diff --git a/shyftDb/postgres_setup_test/create_tables_test.psql b/shyftDb/postgres_setup_test/create_tables_test.psql index 2cd9bc5176..9d0a553cbf 100644 --- a/shyftDb/postgres_setup_test/create_tables_test.psql +++ b/shyftDb/postgres_setup_test/create_tables_test.psql @@ -36,5 +36,5 @@ CREATE TABLE IF NOT EXISTS txs ( CREATE TABLE IF NOT EXISTS accounts ( addr text primary key unique, balance numeric, - txCountAccount numeric + accountnonce numeric ); \ No newline at end of file diff --git a/shyftDb/shyft_database_util_test.go b/shyftDb/shyft_database_util_test.go index b5f0409e31..c6271af8d1 100644 --- a/shyftDb/shyft_database_util_test.go +++ b/shyftDb/shyft_database_util_test.go @@ -12,6 +12,7 @@ import ( "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/consensus/ethash" "strconv" + "fmt" ) type ShyftTracer struct {} @@ -66,11 +67,12 @@ func TestBlock(t *testing.T) { receipts := []*types.Receipt{receipt} block := types.NewBlock(&types.Header{Number: big.NewInt(315)}, txs, nil, receipts) + fmt.Println("++++++HERE") // Write and verify the block in the database if err := core.SWriteBlock(block, receipts); err != nil { t.Fatalf("Failed to write block into database: %v", err) } - + fmt.Println("++++++AND HERE") sqldb, err := core.DBConnection() if err != nil { panic(err) @@ -467,8 +469,8 @@ t.Run("TestAccountsToReturnAccounts",func(t *testing.T) { if tx.Value().String() != accountDataTo.Balance { t.Fatalf("To address balance [%v]: To address balance not found", accountDataTo.Balance) } - if strconv.FormatUint(tx.Nonce(), 10) != accountDataTo.TxCountAccount { - t.Fatalf("To account nonce [%v]: To account nonce not found", accountDataTo.TxCountAccount) + if strconv.FormatUint(tx.Nonce(), 10) != accountDataTo.AccountNonce { + t.Fatalf("To account nonce [%v]: To account nonce not found", accountDataTo.AccountNonce) } if getAllAccountTxs := core.SGetAccountTxs(sqldb, tx.To().String()); len(getAllAccountTxs) == 0 { t.Fatalf("GetAccountTxs [%v]: GetAccountTxs did not return correctly", getAllAccountTxs) From 42183a45800606b213f64f8bd34cd69af7f43b2b Mon Sep 17 00:00:00 2001 From: Dustin Brickwood Date: Fri, 20 Jul 2018 15:39:14 -0400 Subject: [PATCH 23/28] tmp --- core/shyft_database_util.go | 16 ++++++- shyftDb/shyft_database_util_test.go | 72 ++++++++++++++++++----------- 2 files changed, 60 insertions(+), 28 deletions(-) diff --git a/core/shyft_database_util.go b/core/shyft_database_util.go index 3a92ff5df2..b40a3f6e54 100644 --- a/core/shyft_database_util.go +++ b/core/shyft_database_util.go @@ -13,6 +13,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" Rewards "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/shyfttracerinterface" + "fmt" ) var IShyftTracer shyfttracerinterface.IShyftTracer @@ -300,9 +301,11 @@ func swriteBalanceHelper(sqldb *sql.DB, tx *types.Transaction) (SendAndReceive, Amount: tx.Value().String(), } + fmt.Println("TO", sendAndReceiveData.To) + fmt.Println("FROM", sendAndReceiveData.From) getAccountBalanceReceiver := SGetAccount(sqldb, sendAndReceiveData.To) getAccountBalanceSender:= SGetAccount(sqldb, sendAndReceiveData.From) - + fmt.Println("HERE", getAccountBalanceReceiver) var receiverData SendAndReceive if err := json.Unmarshal([]byte(getAccountBalanceReceiver), &receiverData); err != nil { log.Fatal(err) @@ -410,3 +413,14 @@ func sstoreReward(sqldb *sql.DB, address string, reward *big.Int) { } +func CreateAccount (sqldb *sql.DB, addr string, amount uint64, accountNonce uint64) { + + sqlStatement := `INSERT INTO accounts(addr, balance, accountNonce) VALUES(($1), ($2), ($3)) RETURNING addr` + insertErr := sqldb.QueryRow(sqlStatement, addr, amount, accountNonce).Scan(&addr) + if insertErr != nil { + panic(insertErr) + } + +} + + diff --git a/shyftDb/shyft_database_util_test.go b/shyftDb/shyft_database_util_test.go index c6271af8d1..a03e0cb4f8 100644 --- a/shyftDb/shyft_database_util_test.go +++ b/shyftDb/shyft_database_util_test.go @@ -11,7 +11,6 @@ import ( "encoding/json" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/consensus/ethash" - "strconv" "fmt" ) @@ -425,12 +424,29 @@ t.Run("TestAccountsToReturnAccounts",func(t *testing.T) { key, _ := crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") signer := types.NewEIP155Signer(big.NewInt(2147483647)) + toAddr1 := common.BytesToAddress([]byte{0x11}) + toAddr2 := common.BytesToAddress([]byte{0x22}) + toAddr3 := common.BytesToAddress([]byte{0x33}) + + toAmount1 := big.NewInt(111) + var toAmountPrev1 uint64 = 3968686868 + + sqldb, err := core.DBConnection() + if (err != nil) { + panic(err) + } + + core.CreateAccount(sqldb, toAddr1.Hex(), toAmountPrev1, 1) + core.CreateAccount(sqldb, toAddr2.Hex(), 423798729847, 1) + core.CreateAccount(sqldb, toAddr3.Hex(), 0, 1) + core.CreateAccount(sqldb, "0x71562b71999873DB5b286dF957af199Ec94617F7", 3968686868, 1) + //Nonce, To Address,Value, GasLimit, Gasprice, data - tx1 := types.NewTransaction(1, common.BytesToAddress([]byte{0x11}), big.NewInt(111), 1111, big.NewInt(11111), []byte{0x11, 0x11, 0x11}) + tx1 := types.NewTransaction(1, toAddr1, toAmount1, 1111, big.NewInt(11111), []byte{0x11, 0x11, 0x11}) mytx,_ := types.SignTx(tx1, signer, key) - tx2 := types.NewTransaction(2, common.BytesToAddress([]byte{0x22}), big.NewInt(222), 2222, big.NewInt(22222), []byte{0x22, 0x22, 0x22}) + tx2 := types.NewTransaction(2, toAddr2, big.NewInt(222), 2222, big.NewInt(22222), []byte{0x22, 0x22, 0x22}) mytx2,_ := types.SignTx(tx2, signer, key) - tx3 := types.NewTransaction(3, common.BytesToAddress([]byte{0x33}), big.NewInt(333), 3333, big.NewInt(33333), []byte{0x33, 0x33, 0x33}) + tx3 := types.NewTransaction(3, toAddr3, big.NewInt(333), 3333, big.NewInt(33333), []byte{0x33, 0x33, 0x33}) mytx3,_ := types.SignTx(tx3, signer, key) txs := []*types.Transaction{mytx, mytx2, mytx3} @@ -452,37 +468,39 @@ t.Run("TestAccountsToReturnAccounts",func(t *testing.T) { t.Fatalf("Failed to write block into database: %v", err) } - sqldb, err := core.DBConnection() - if (err != nil) { - panic(err) + if toAddr1.String() != tx1.To().String() { + t.Fatalf("To address [%v]: To address not found", toAddr1.String()) } + accountAddrTo := core.SGetAccount(sqldb, toAddr1.String()) + - for _, tx := range txs { - accountAddrTo := core.SGetAccount(sqldb, tx.To().String()) - byts := []byte(accountAddrTo) - var accountDataTo core.SAccounts - json.Unmarshal(byts, &accountDataTo) - if tx.To().String() != accountDataTo.Addr { - t.Fatalf("To address [%v]: To address not found", accountDataTo.Addr) - } - if tx.Value().String() != accountDataTo.Balance { - t.Fatalf("To address balance [%v]: To address balance not found", accountDataTo.Balance) - } - if strconv.FormatUint(tx.Nonce(), 10) != accountDataTo.AccountNonce { - t.Fatalf("To account nonce [%v]: To account nonce not found", accountDataTo.AccountNonce) - } - if getAllAccountTxs := core.SGetAccountTxs(sqldb, tx.To().String()); len(getAllAccountTxs) == 0 { - t.Fatalf("GetAccountTxs [%v]: GetAccountTxs did not return correctly", getAllAccountTxs) - } - } + //for _, tx := range txs { + // accountAddrTo := core.SGetAccount(sqldb, tx.To().String()) + // byts := []byte(accountAddrTo) + // var accountDataTo core.SAccounts + // json.Unmarshal(byts, &accountDataTo) + // + // if tx.To().String() != accountDataTo.Addr { + // t.Fatalf("To address [%v]: To address not found", accountDataTo.Addr) + // } + // if tx.Value().String() != accountDataTo.Balance { + // t.Fatalf("To address balance [%v]: To address balance not found", accountDataTo.Balance) + // } + // if strconv.FormatUint(tx.Nonce(), 10) != accountDataTo.AccountNonce { + // t.Fatalf("To account nonce [%v]: To account nonce not found", accountDataTo.AccountNonce) + // } + // if getAllAccountTxs := core.SGetAccountTxs(sqldb, tx.To().String()); len(getAllAccountTxs) == 0 { + // t.Fatalf("GetAccountTxs [%v]: GetAccountTxs did not return correctly", getAllAccountTxs) + // } + //} if getAllAccounts := core.SGetAllAccounts(sqldb); len(getAllAccounts) == 0 { t.Fatalf("GetAllAccounts [%v]: GetAllAccounts did not return correctly", getAllAccounts) } - ClearTables() + //ClearTables() }) - ClearTables() + //ClearTables() } From afdefa369087cd91e588080f6b40cc10469e78df Mon Sep 17 00:00:00 2001 From: Dustin Brickwood Date: Fri, 20 Jul 2018 16:24:55 -0400 Subject: [PATCH 24/28] need to pop stash --- shyftDb/shyft_database_util_test.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/shyftDb/shyft_database_util_test.go b/shyftDb/shyft_database_util_test.go index a03e0cb4f8..978fd8a619 100644 --- a/shyftDb/shyft_database_util_test.go +++ b/shyftDb/shyft_database_util_test.go @@ -471,9 +471,18 @@ t.Run("TestAccountsToReturnAccounts",func(t *testing.T) { if toAddr1.String() != tx1.To().String() { t.Fatalf("To address [%v]: To address not found", toAddr1.String()) } - accountAddrTo := core.SGetAccount(sqldb, toAddr1.String()) + accountAddrTo, _ := core.InnerSGetAccount(sqldb, toAddr1.String()) + //ewAccountNonceReceiver.Add(accountR, nonceIncrement) + addedAmount := new(big.Int) + b := new(big.Int).SetUint64(toAmountPrev1) + addedAmount.Add(toAmount1, b) + toBalance := new(big.Int) + toBalance, l := toBalance.SetString(accountAddrTo.Balance, 10) + fmt.Println(l) - + if toBalance.Cmp(addedAmount) != 0 { + t.Fatalf("To address balance [%v]: To address balance not correct FFO", toBalance) + } //for _, tx := range txs { // accountAddrTo := core.SGetAccount(sqldb, tx.To().String()) From 8a8c886ef16a7c729fbb5560b3d8b8abfcc12c18 Mon Sep 17 00:00:00 2001 From: Dustin Brickwood Date: Tue, 24 Jul 2018 10:36:14 -0400 Subject: [PATCH 25/28] resolving conflicts --- core/shyft_database_util.go | 5 +---- core/shyft_get_utils.go | 29 +++++++++++++++++------------ shyftDb/shyft_database_util_test.go | 2 +- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/core/shyft_database_util.go b/core/shyft_database_util.go index 15f6bc20da..236184434e 100644 --- a/core/shyft_database_util.go +++ b/core/shyft_database_util.go @@ -8,7 +8,6 @@ import ( "database/sql" "log" _ "github.com/lib/pq" - "fmt" "github.com/ShyftNetwork/go-empyrean/common" "github.com/ShyftNetwork/go-empyrean/core/types" Rewards "github.com/ShyftNetwork/go-empyrean/consensus/ethash" @@ -300,11 +299,9 @@ func swriteBalanceHelper(sqldb *sql.DB, tx *types.Transaction) (SendAndReceive, Amount: tx.Value().String(), } - fmt.Println("TO", sendAndReceiveData.To) - fmt.Println("FROM", sendAndReceiveData.From) getAccountBalanceReceiver := SGetAccount(sqldb, sendAndReceiveData.To) getAccountBalanceSender:= SGetAccount(sqldb, sendAndReceiveData.From) - fmt.Println("HERE", getAccountBalanceReceiver) + var receiverData SendAndReceive if err := json.Unmarshal([]byte(getAccountBalanceReceiver), &receiverData); err != nil { log.Fatal(err) diff --git a/core/shyft_get_utils.go b/core/shyft_get_utils.go index 97f64ee9b9..ddbc820386 100644 --- a/core/shyft_get_utils.go +++ b/core/shyft_get_utils.go @@ -280,20 +280,25 @@ func SGetTransaction(sqldb *sql.DB, txHash string) string { return string(json) } +func InnerSGetAccount(sqldb *sql.DB, address string) (SAccounts, bool) { + sqlStatement := `SELECT * FROM accounts WHERE addr=$1;` + var addr, balance, accountNonce string + err := sqldb.QueryRow(sqlStatement, address).Scan(&addr, &balance, &accountNonce) + if err == sql.ErrNoRows { + return SAccounts{}, false + } else { + account := SAccounts{ + Addr: addr, + Balance: balance, + AccountNonce: accountNonce, + } + return account, true + } +} + //GetAccount returns account balances func SGetAccount(sqldb *sql.DB, address string) string { - sqlStatement := `SELECT * FROM accounts WHERE addr=$1;` - row := sqldb.QueryRow(sqlStatement, address) - var addr, balance, accountNonce string - - row.Scan( - &addr, &balance, &accountNonce) - - account := SAccounts{ - Addr: addr, - Balance: balance, - AccountNonce: accountNonce, - } + var account, _ = InnerSGetAccount(sqldb, address) json, _ := json.Marshal(account) return string(json) } diff --git a/shyftDb/shyft_database_util_test.go b/shyftDb/shyft_database_util_test.go index e27894ad00..a35e6bba5e 100644 --- a/shyftDb/shyft_database_util_test.go +++ b/shyftDb/shyft_database_util_test.go @@ -479,7 +479,7 @@ t.Run("TestAccountsToReturnAccounts",func(t *testing.T) { toBalance := new(big.Int) toBalance, l := toBalance.SetString(accountAddrTo.Balance, 10) fmt.Println(l) - + if toBalance.Cmp(addedAmount) != 0 { t.Fatalf("To address balance [%v]: To address balance not correct FFO", toBalance) } From 43dbd77049199610f400f05d7e3f6295008a3d24 Mon Sep 17 00:00:00 2001 From: Dustin Brickwood Date: Tue, 24 Jul 2018 17:30:28 -0400 Subject: [PATCH 26/28] refactored code to minimize lines --- core/shyft_database_util.go | 278 ++++++++++++++-------------- core/shyft_get_utils.go | 40 ++-- eth/tracers/tracer.go | 23 ++- shyftDb/shyft_database_util_test.go | 36 ++-- 4 files changed, 194 insertions(+), 183 deletions(-) diff --git a/core/shyft_database_util.go b/core/shyft_database_util.go index 236184434e..8632723615 100644 --- a/core/shyft_database_util.go +++ b/core/shyft_database_util.go @@ -1,7 +1,6 @@ package core import ( - "encoding/json" "math/big" "time" "strconv" @@ -24,7 +23,8 @@ func SetIShyftTracer(st shyfttracerinterface.IShyftTracer) { type SBlock struct { Hash string Coinbase string - Age string + AgeGet string + Age time.Time ParentHash string UncleHash string Difficulty string @@ -65,7 +65,8 @@ type txRes struct { type ShyftTxEntryPretty struct { TxHash string - To string + To *common.Address + ToGet string From string BlockHash string BlockNumber string @@ -112,6 +113,7 @@ func SWriteBlock(block *types.Block, receipts []*types.Receipt) error { Difficulty: block.Difficulty().String(), Size: block.Size().String(), Nonce: block.Nonce(), + Rewards: rewards, } i, err := strconv.ParseInt(block.Time().String(), 10, 64) @@ -120,12 +122,13 @@ func SWriteBlock(block *types.Block, receipts []*types.Receipt) error { } age := time.Unix(i, 0) - sqlStatement := `INSERT INTO blocks(hash, coinbase, number, gasUsed, gasLimit, txCount, uncleCount, age, parentHash, uncleHash, difficulty, size, rewards, nonce) VALUES(($1), ($2), ($3), ($4), ($5), ($6), ($7), ($8), ($9), ($10), ($11), ($12),($13), ($14)) RETURNING number` - qerr := sqldb.QueryRow(sqlStatement, blockData.Hash, blockData.Coinbase, blockData.Number, blockData.GasUsed, blockData.GasLimit, blockData.TxCount, blockData.UncleCount, age, blockData.ParentHash, blockData.UncleHash, blockData.Difficulty, blockData.Size, rewards, blockData.Nonce).Scan(&blockData.Number) - if qerr != nil { - panic(qerr) + blockAge := SBlock { + Age: age, } + //Inserts block data into DB + InsertBlock(sqldb, blockData, blockAge) + if block.Transactions().Len() > 0 { for _, tx := range block.Transactions() { swriteTransactions(sqldb, tx, block.Header().Hash(), blockData.Number, receipts, age, blockData.GasLimit) @@ -143,25 +146,29 @@ func SWriteBlock(block *types.Block, receipts []*types.Receipt) error { //swriteTransactions writes to sqldb, a SHYFT postgres instance func swriteTransactions(sqldb *sql.DB, tx *types.Transaction, blockHash common.Hash, blockNumber string, receipts []*types.Receipt, age time.Time, gasLimit uint64) error { var isContract bool - var statusFromReciept, contractAddressFromReciept, retNonce string + var statusFromReciept string + var contractAddressFromReciept common.Address txData := ShyftTxEntryPretty{ - TxHash: tx.Hash().Hex(), - From: tx.From().Hex(), - To: tx.To().Hex(), - BlockHash: blockHash.Hex(), - Amount: tx.Value().String(), - Cost: tx.Cost().Uint64(), - GasPrice: tx.GasPrice().Uint64(), - Gas: tx.Gas(), - Nonce: tx.Nonce(), - Data: tx.Data(), + TxHash: tx.Hash().Hex(), + From: tx.From().Hex(), + To: tx.To(), + BlockHash: blockHash.Hex(), + BlockNumber: blockNumber, + Amount: tx.Value().String(), + Cost: tx.Cost().Uint64(), + GasPrice: tx.GasPrice().Uint64(), + GasLimit: gasLimit, + Gas: tx.Gas(), + Nonce: tx.Nonce(), + Age: age, + Data: tx.Data(), } if tx.To() == nil { for _, receipt := range receipts { statusReciept := (*types.ReceiptForStorage)(receipt).Status - contractAddressFromReciept = (*types.ReceiptForStorage)(receipt).ContractAddress.String() + contractAddressFromReciept = (*types.ReceiptForStorage)(receipt).ContractAddress switch { case statusReciept == 0: statusFromReciept = "FAIL" @@ -170,11 +177,13 @@ func swriteTransactions(sqldb *sql.DB, tx *types.Transaction, blockHash common.H } } isContract = true - 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` - err := sqldb.QueryRow(sqlStatement, txData.TxHash, txData.From, contractAddressFromReciept, txData.BlockHash, blockNumber, txData.Amount, txData.GasPrice, txData.Gas, gasLimit, txData.Cost, txData.Nonce, isContract, statusFromReciept, age, txData.Data).Scan(&retNonce) - if err != nil { - panic(err) + contractData := ShyftTxEntryPretty{ + Status: statusFromReciept, + IsContract: isContract, + To: &contractAddressFromReciept, } + //Insert Tx into DB + InsertTx(sqldb, txData, contractData) } else { isContract = false for _, receipt := range receipts { @@ -186,11 +195,13 @@ func swriteTransactions(sqldb *sql.DB, tx *types.Transaction, blockHash common.H statusFromReciept = "SUCCESS" } } - 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` - err := sqldb.QueryRow(sqlStatement, txData.TxHash, txData.From, txData.To, txData.BlockHash, blockNumber, txData.Amount, txData.GasPrice, txData.Gas, gasLimit, txData.Cost, txData.Nonce, isContract, statusFromReciept, age, txData.Data).Scan(&retNonce) - if err != nil { - panic(err) + data := ShyftTxEntryPretty{ + Status: statusFromReciept, + IsContract: isContract, + To: tx.To(), } + //Insert Tx into DB + InsertTx(sqldb, txData, data) } //Runs necessary functions for tracing internal transactions through tracers.go IShyftTracer.GetTracerToRun(tx.Hash()) @@ -205,117 +216,78 @@ func swriteContractBalance(sqldb *sql.DB, tx *types.Transaction) error { AccountNonce: tx.Nonce(), } - var response string - sqlExistsStatement := `SELECT balance from accounts WHERE addr = ($1)` - err := sqldb.QueryRow(sqlExistsStatement, sendAndReceiveData.From).Scan(&response) + fromAddressBalance, fromAccountNonce, err := AccountExists(sqldb, sendAndReceiveData.From) switch { case err == sql.ErrNoRows: - sqlStatement := `INSERT INTO accounts(addr, balance, accountNonce) VALUES(($1), ($2), ($3)) RETURNING addr` - insertErr := sqldb.QueryRow(sqlStatement, sendAndReceiveData.From, sendAndReceiveData.Amount, sendAndReceiveData.AccountNonce).Scan(&sendAndReceiveData.From) - if insertErr != nil { - panic(insertErr) - } + accountNonce := strconv.FormatUint(tx.Nonce(), 10) + CreateAccount(sqldb, sendAndReceiveData.From, sendAndReceiveData.Amount, accountNonce) default: - getAccountBalanceSender:= SGetAccount(sqldb, sendAndReceiveData.From) var newBalanceSender,newAccountNonceSender big.Int var nonceIncrement = big.NewInt(1) - var senderBalance SendAndReceive - if err := json.Unmarshal([]byte(getAccountBalanceSender), &senderBalance); err != nil { - log.Fatal(err) - } + fromBalance := new(big.Int) + fromBalance, _ = fromBalance.SetString(fromAddressBalance, 10) - //Converts string to UINT64 > Big.Int for adding and subtraction - balanceSender, _ := strconv.ParseUint(senderBalance.Balance, 10, 64) - balanceSen := new(big.Int).SetUint64(balanceSender) - senderAccountNonce := new(big.Int).SetUint64(sendAndReceiveData.AccountNonce) + fromNonce := new(big.Int) + fromNonce, _ = fromNonce.SetString(fromAccountNonce, 10) - newBalanceSender.Sub(balanceSen, tx.Value()) - newAccountNonceSender.Add(senderAccountNonce, nonceIncrement) + newBalanceSender.Sub(fromBalance, tx.Value()) + newAccountNonceSender.Add(fromNonce, nonceIncrement) - updateSQLStatement := `UPDATE accounts SET balance = ($2), accountNonce = ($3) WHERE addr = ($1)` - _, err := sqldb.Exec(updateSQLStatement, sendAndReceiveData.From, newBalanceSender.String(), newAccountNonceSender.String()) - if err != nil { - panic(err) - } + UpdateAccount(sqldb, sendAndReceiveData.From, newBalanceSender.String(), newAccountNonceSender.String()) } return nil } //writeFromBalance writes senders balance to accounts db func swriteFromBalance(sqldb *sql.DB, tx *types.Transaction) error { - sendAndReceiveData, balanceRec, balanceSen, accountNonceRec, accountNonceSen := swriteBalanceHelper(sqldb, tx) - - var response string - sqlExistsStatement := `SELECT balance from accounts WHERE addr = ($1)` - err := sqldb.QueryRow(sqlExistsStatement, sendAndReceiveData.To).Scan(&response) - - switch { - case err == sql.ErrNoRows: - accountNonce := strconv.FormatUint(tx.Nonce(), 10) - sqlStatement := `INSERT INTO accounts(addr, balance, accountNonce) VALUES(($1), ($2), ($3)) RETURNING addr` - insertErr := sqldb.QueryRow(sqlStatement, sendAndReceiveData.To, sendAndReceiveData.Amount, accountNonce).Scan(&sendAndReceiveData.To) - if insertErr != nil { - panic(insertErr) - } - case err != nil: - log.Fatal(err) - default: - var newBalanceReceiver, newBalanceSender, newAccountNonceReceiver, newAccountNonceSender big.Int - var nonceIncrement = big.NewInt(1) - - //Convert UINT64 to BIG.INT in order to add and subtract nonces & balances - balanceR := new(big.Int).SetUint64(balanceRec) - balanceS := new(big.Int).SetUint64(balanceSen) - - accountR := new(big.Int).SetUint64(accountNonceRec) - accountS := new(big.Int).SetUint64(accountNonceSen) - - newBalanceReceiver.Add(balanceR, tx.Value()) - newBalanceSender.Sub(balanceS, tx.Value()) - - newAccountNonceReceiver.Add(accountR, nonceIncrement) - newAccountNonceSender.Add(accountS, nonceIncrement) - - updateSQLStatement := `UPDATE accounts SET balance = ($2), accountNonce = ($3) WHERE addr = ($1)` - _, err = sqldb.Exec(updateSQLStatement, sendAndReceiveData.To, newBalanceReceiver.String(), newAccountNonceReceiver.String()) - if err != nil { - panic(err) - } - - _, err = sqldb.Exec(updateSQLStatement, sendAndReceiveData.From, newBalanceSender.String(), newAccountNonceSender.String()) - if err != nil { - panic(err) - } - } - return nil -} - -func swriteBalanceHelper(sqldb *sql.DB, tx *types.Transaction) (SendAndReceive, uint64, uint64, uint64, uint64) { sendAndReceiveData := SendAndReceive{ To: tx.To().Hex(), From: tx.From().Hex(), Amount: tx.Value().String(), } - getAccountBalanceReceiver := SGetAccount(sqldb, sendAndReceiveData.To) - getAccountBalanceSender:= SGetAccount(sqldb, sendAndReceiveData.From) + toAddressBalance, toAccountNonce, err := AccountExists(sqldb, sendAndReceiveData.To) - var receiverData SendAndReceive - if err := json.Unmarshal([]byte(getAccountBalanceReceiver), &receiverData); err != nil { + switch { + case err == sql.ErrNoRows: + accountNonce := strconv.FormatUint(tx.Nonce(), 10) + CreateAccount(sqldb, sendAndReceiveData.To, sendAndReceiveData.Amount, accountNonce) + case err != nil: log.Fatal(err) + default: + fromAddressBalance, fromAccountNonce, err := AccountExists(sqldb, sendAndReceiveData.From) + if err != nil { + log.Fatal(err) + } + var newBalanceReceiver, newBalanceSender, newAccountNonceReceiver, newAccountNonceSender big.Int + var nonceIncrement = big.NewInt(1) + + //STRING TO BIG INT + //BALANCES TO AND FROM ADDR + toBalance := new(big.Int) + toBalance, _ = toBalance.SetString(toAddressBalance, 10) + fromBalance := new(big.Int) + fromBalance, _ = fromBalance.SetString(fromAddressBalance, 10) + + //ACCOUNT NONCES + toNonce := new(big.Int) + toNonce, _ = toNonce.SetString(toAccountNonce, 10) + fromNonce := new(big.Int) + fromNonce, _ = fromNonce.SetString(fromAccountNonce, 10) + + newBalanceReceiver.Add(toBalance, tx.Value()) + newBalanceSender.Sub(fromBalance, tx.Value()) + + newAccountNonceReceiver.Add(toNonce, nonceIncrement) + newAccountNonceSender.Add(fromNonce, nonceIncrement) + + //UPDATE ACCOUNTS BASED ON NEW BALANCES AND ACCOUNT NONCES + UpdateAccount(sqldb, sendAndReceiveData.To, newBalanceReceiver.String(), newAccountNonceReceiver.String()) + UpdateAccount(sqldb, sendAndReceiveData.From, newBalanceSender.String(), newAccountNonceSender.String()) } - - var senderData SendAndReceive - if err := json.Unmarshal([]byte(getAccountBalanceSender), &senderData); err != nil { - log.Fatal(err) - } - - balanceReceiver, _ := strconv.ParseUint(receiverData.Balance, 10, 64) - balanceSender, _ := strconv.ParseUint(senderData.Balance, 10, 64) - - return sendAndReceiveData, balanceReceiver, balanceSender, receiverData.AccountNonce, senderData.AccountNonce + return nil } // @NOTE: This function is extremely complex and requires heavy testing and knowdlege of edge cases: @@ -369,19 +341,12 @@ func swriteMinerRewards(sqldb *sql.DB, block *types.Block) string { func sstoreReward(sqldb *sql.DB, address string, reward *big.Int) { // Check if address exists - var addressBalance string - addressExistsStatement := `SELECT balance from accounts WHERE addr = ($1)` - err := sqldb.QueryRow(addressExistsStatement, address).Scan(&addressBalance) + addressBalance, accountNonce, err := AccountExists(sqldb, address) if err == sql.ErrNoRows { // Addr does not exist, thus create new entry - createAddressSqlStatement := `INSERT INTO accounts(addr, balance, accountNonce) VALUES(($1), ($2), ($3)) RETURNING addr` - // We convert totalReward into a string and postgres converts into number - _, insertErr := sqldb.Exec(createAddressSqlStatement, address, reward.String(), 1) - if insertErr != nil { - panic(insertErr) - } + CreateAccount(sqldb, address, reward.String(), "1") return } else if err != nil { // Something went wrong panic @@ -389,34 +354,77 @@ func sstoreReward(sqldb *sql.DB, address string, reward *big.Int) { } else { // Addr exists, update existing balance bigBalance := new(big.Int) - bigBalance, err := bigBalance.SetString(addressBalance, 0) + var nonceIncrement = big.NewInt(1) + currentAccountNonce := new(big.Int) + currentAccountNonce, errorr := currentAccountNonce.SetString(accountNonce, 10) + if !errorr { + panic(errorr) + } + bigBalance, err := bigBalance.SetString(addressBalance, 10) if !err { panic(err) } newBalance := new(big.Int) + newAccountNonce := new(big.Int) newBalance.Add(newBalance, bigBalance) newBalance.Add(newBalance, reward) - - updateAddressSQLStatement := `UPDATE accounts SET balance = ($1) WHERE addr = ($2)` - - // We convert totalReward into a string and postgres converts into number - _, updateErr := sqldb.Exec(updateAddressSQLStatement, newBalance.String(), address) - if updateErr != nil { - panic(updateErr) - } + newAccountNonce.Add(currentAccountNonce, nonceIncrement) + //Update the balance and nonce + UpdateAccount(sqldb, address, newBalance.String(), newAccountNonce.String()) return } } - -func CreateAccount (sqldb *sql.DB, addr string, amount uint64, accountNonce uint64) { - +/////////////////////// +//DB Utility functions +////////////////////// +func CreateAccount (sqldb *sql.DB, addr string, balance string, accountNonce string) { sqlStatement := `INSERT INTO accounts(addr, balance, accountNonce) VALUES(($1), ($2), ($3)) RETURNING addr` - insertErr := sqldb.QueryRow(sqlStatement, addr, amount, accountNonce).Scan(&addr) + insertErr := sqldb.QueryRow(sqlStatement, addr, balance, accountNonce).Scan(&addr) if insertErr != nil { panic(insertErr) } +} +func AccountExists (sqldb *sql.DB, addr string) (string, string, error) { + var addressBalance, accountNonce string + sqlExistsStatement := `SELECT balance, accountNonce from accounts WHERE addr = ($1)` + err := sqldb.QueryRow(sqlExistsStatement, addr).Scan(&addressBalance, &accountNonce) + + switch { + case err == sql.ErrNoRows: + return addressBalance, accountNonce, err + case err != nil: + panic(err) + default: + return addressBalance, accountNonce, err + } +} + +func UpdateAccount(sqldb *sql.DB, addr string, balance string, accountNonce string) { + updateSQLStatement := `UPDATE accounts SET balance = ($2), accountNonce = ($3) WHERE addr = ($1)` + _, updateErr := sqldb.Exec(updateSQLStatement, addr, balance, accountNonce) + if updateErr != nil { + panic(updateErr) + } +} + +func InsertBlock(sqldb *sql.DB, blockData SBlock, blockAge SBlock) { + sqlStatement := `INSERT INTO blocks(hash, coinbase, number, gasUsed, gasLimit, txCount, uncleCount, age, parentHash, uncleHash, difficulty, size, rewards, nonce) VALUES(($1), ($2), ($3), ($4), ($5), ($6), ($7), ($8), ($9), ($10), ($11), ($12),($13), ($14)) RETURNING number` + qerr := sqldb.QueryRow(sqlStatement, blockData.Hash, blockData.Coinbase, blockData.Number, blockData.GasUsed, blockData.GasLimit, blockData.TxCount, blockData.UncleCount, blockAge.Age, blockData.ParentHash, blockData.UncleHash, blockData.Difficulty, blockData.Size, blockData.Rewards, blockData.Nonce).Scan(&blockData.Number) + if qerr != nil { + panic(qerr) + } +} + + +func InsertTx (sqldb *sql.DB, txData ShyftTxEntryPretty, data ShyftTxEntryPretty) { + var retNonce string + 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` + err := sqldb.QueryRow(sqlStatement, txData.TxHash, txData.From, data.To.String(), txData.BlockHash, txData.BlockNumber, txData.Amount, txData.GasPrice, txData.Gas, txData.GasLimit, txData.Cost, txData.Nonce, data.IsContract, data.Status, txData.Age, txData.Data).Scan(&retNonce) + if err != nil { + panic(err) + } } diff --git a/core/shyft_get_utils.go b/core/shyft_get_utils.go index ddbc820386..c9fbeac3c3 100644 --- a/core/shyft_get_utils.go +++ b/core/shyft_get_utils.go @@ -34,7 +34,7 @@ func SGetAllBlocks(sqldb *sql.DB) string { GasLimit: gasLimit, TxCount: txCount, UncleCount: uncleCount, - Age: age, + AgeGet: age, ParentHash: parentHash, UncleHash: uncleHash, Difficulty: difficulty, @@ -70,7 +70,7 @@ func SGetBlock(sqldb *sql.DB, blockNumber string) string { GasLimit: gasLimit, TxCount: txCount, UncleCount: uncleCount, - Age: age, + AgeGet: age, ParentHash: parentHash, UncleHash: uncleHash, Difficulty: difficulty, @@ -100,7 +100,7 @@ func SGetRecentBlock(sqldb *sql.DB) string { GasLimit: gasLimit, TxCount: txCount, UncleCount: uncleCount, - Age: age, + AgeGet: age, ParentHash: parentHash, UncleHash: uncleHash, Difficulty: difficulty, @@ -135,7 +135,7 @@ func SGetAllTransactionsFromBlock(sqldb *sql.DB, blockNumber string) string { arr.TxEntry = append(arr.TxEntry, ShyftTxEntryPretty{ TxHash: txhash, - To: to_addr, + ToGet: to_addr, From: from_addr, BlockHash: blockhash, BlockNumber: blocknumber, @@ -177,20 +177,20 @@ func SGetAllBlocksMinedByAddress(sqldb *sql.DB, coinbase string) string { &hash, &coinbase, &gasUsed, &gasLimit, &txCount, &uncleCount, &age, &parentHash, &uncleHash, &difficulty, &size, &nonce, &rewards, &num,) arr.Blocks = append(arr.Blocks, SBlock{ - Hash: hash, - Coinbase: coinbase, - GasUsed: gasUsed, - GasLimit: gasLimit, - TxCount: txCount, + Hash: hash, + Coinbase: coinbase, + GasUsed: gasUsed, + GasLimit: gasLimit, + TxCount: txCount, UncleCount: uncleCount, - Age: age, - ParentHash:parentHash, - UncleHash:uncleHash, - Difficulty:difficulty, - Size: size, - Nonce:nonce, - Rewards: rewards, - Number: num, + AgeGet: age, + ParentHash: parentHash, + UncleHash: uncleHash, + Difficulty: difficulty, + Size: size, + Nonce: nonce, + Rewards: rewards, + Number: num, }) blocks, _ := json.Marshal(arr.Blocks) @@ -222,7 +222,7 @@ func SGetAllTransactions(sqldb *sql.DB) string { arr.TxEntry = append(arr.TxEntry, ShyftTxEntryPretty{ TxHash: txhash, - To: to_addr, + ToGet: to_addr, From: from_addr, BlockHash: blockhash, BlockNumber: blocknumber, @@ -260,7 +260,7 @@ func SGetTransaction(sqldb *sql.DB, txHash string) string { tx := ShyftTxEntryPretty{ TxHash: txhash, - To: to_addr, + ToGet: to_addr, From: from_addr, BlockHash: blockhash, BlockNumber: blocknumber, @@ -362,7 +362,7 @@ func SGetAccountTxs(sqldb *sql.DB, address string) string { arr.TxEntry = append(arr.TxEntry, ShyftTxEntryPretty{ TxHash: txhash, - To: to_addr, + ToGet: to_addr, From: from_addr, BlockHash: blockhash, BlockNumber: blocknumber, diff --git a/eth/tracers/tracer.go b/eth/tracers/tracer.go index 934d210d9f..66d8f5806e 100644 --- a/eth/tracers/tracer.go +++ b/eth/tracers/tracer.go @@ -32,6 +32,7 @@ import ( "github.com/ShyftNetwork/go-empyrean/crypto" "github.com/ShyftNetwork/go-empyrean/log" "gopkg.in/olebedev/go-duktape.v3" + "strconv" ) // bigIntegerJS is the minified version of https://github.com/peterolson/BigInteger.js. @@ -578,16 +579,16 @@ func (jst *Tracer) CaptureEnd(output []byte, gasUsed uint64, t time.Duration, er //@NOTE:SHYFT type Internals struct { - Type string - From string - To string - Value string - Gas string + Type string + From string + To string + Value string + Gas string GasUsed string - Input string - Output string - Time string - Calls []*Internals + Input string + Output string + Time string + Calls []*Internals } //@NOTE:SHYFT @@ -599,10 +600,12 @@ func (i *Internals) SWriteInteralTxs(hash common.Hash) { gas, _ := hexutil.DecodeUint64(i.Gas) gasUsed, _ := hexutil.DecodeUint64(i.GasUsed) + value, _ := hexutil.DecodeUint64(i.Value) + amount := strconv.FormatUint(value, 10) 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, hash.Hex(), i.From, i.To, i.Value, gas, gasUsed, i.Time, i.Input, i.Output).Scan(&returnValue) + qerr := sqldb.QueryRow(sqlStatement, i.Type, hash.Hex(), i.From, i.To, amount, gas, gasUsed, i.Time, i.Input, i.Output).Scan(&returnValue) if qerr != nil { fmt.Println(qerr) diff --git a/shyftDb/shyft_database_util_test.go b/shyftDb/shyft_database_util_test.go index a35e6bba5e..b7aa7092d9 100644 --- a/shyftDb/shyft_database_util_test.go +++ b/shyftDb/shyft_database_util_test.go @@ -9,9 +9,9 @@ import ( "math/big" //"time" "encoding/json" - "fmt" "github.com/ShyftNetwork/go-empyrean/crypto" "github.com/ShyftNetwork/go-empyrean/consensus/ethash" + "strconv" ) type ShyftTracer struct {} @@ -66,12 +66,11 @@ func TestBlock(t *testing.T) { receipts := []*types.Receipt{receipt} block := types.NewBlock(&types.Header{Number: big.NewInt(315)}, txs, nil, receipts) - fmt.Println("++++++HERE") // Write and verify the block in the database if err := core.SWriteBlock(block, receipts); err != nil { t.Fatalf("Failed to write block into database: %v", err) } - fmt.Println("++++++AND HERE") + sqldb, err := core.DBConnection() if err != nil { panic(err) @@ -264,7 +263,7 @@ t.Run("TestContractCreationTx", func (t *testing.T) { if tx.Hash().String() != data.TxHash { t.Fatalf("txHash [%v]: tx Hash not found", tx.Hash().String()) } - if contractAddressFromReciept != data.To { + if contractAddressFromReciept != data.ToGet { t.Fatalf("Contract Addr [%v]: Contract addr not found", contractAddressFromReciept) } if tx.From().String() != data.From { @@ -366,7 +365,7 @@ t.Run("TestTransactionsToReturnTransactions", func(t *testing.T) { if tx.From().String() != data.From { t.Fatalf("From Addr [%v]: From addr not found", tx.From().String()) } - if tx.To().String() != data.To { + if tx.To().String() != data.ToGet { t.Fatalf("To Addr [%v]: To addr not found", tx.To().String()) } if tx.Nonce() != data.Nonce { @@ -429,17 +428,17 @@ t.Run("TestAccountsToReturnAccounts",func(t *testing.T) { toAddr3 := common.BytesToAddress([]byte{0x33}) toAmount1 := big.NewInt(111) - var toAmountPrev1 uint64 = 3968686868 + var toAmountPrev1 string = "3968686868" sqldb, err := core.DBConnection() if (err != nil) { panic(err) } - core.CreateAccount(sqldb, toAddr1.Hex(), toAmountPrev1, 1) - core.CreateAccount(sqldb, toAddr2.Hex(), 423798729847, 1) - core.CreateAccount(sqldb, toAddr3.Hex(), 0, 1) - core.CreateAccount(sqldb, "0x71562b71999873DB5b286dF957af199Ec94617F7", 3968686868, 1) + core.CreateAccount(sqldb, toAddr1.Hex(), toAmountPrev1, "1") + core.CreateAccount(sqldb, toAddr2.Hex(), "423798729847", "1") + core.CreateAccount(sqldb, toAddr3.Hex(), "0", "1") + core.CreateAccount(sqldb, "0x71562b71999873DB5b286dF957af199Ec94617F7", "3968686868", "1") //Nonce, To Address,Value, GasLimit, Gasprice, data tx1 := types.NewTransaction(1, toAddr1, toAmount1, 1111, big.NewInt(11111), []byte{0x11, 0x11, 0x11}) @@ -474,11 +473,11 @@ t.Run("TestAccountsToReturnAccounts",func(t *testing.T) { accountAddrTo, _ := core.InnerSGetAccount(sqldb, toAddr1.String()) //ewAccountNonceReceiver.Add(accountR, nonceIncrement) addedAmount := new(big.Int) - b := new(big.Int).SetUint64(toAmountPrev1) + toAmountPrevious1, _ := strconv.ParseUint(toAmountPrev1, 10, 64) + b := new(big.Int).SetUint64(toAmountPrevious1) addedAmount.Add(toAmount1, b) toBalance := new(big.Int) - toBalance, l := toBalance.SetString(accountAddrTo.Balance, 10) - fmt.Println(l) + toBalance, _ = toBalance.SetString(accountAddrTo.Balance, 10) if toBalance.Cmp(addedAmount) != 0 { t.Fatalf("To address balance [%v]: To address balance not correct FFO", toBalance) @@ -499,17 +498,18 @@ t.Run("TestAccountsToReturnAccounts",func(t *testing.T) { // if strconv.FormatUint(tx.Nonce(), 10) != accountDataTo.AccountNonce { // t.Fatalf("To account nonce [%v]: To account nonce not found", accountDataTo.AccountNonce) // } - // if getAllAccountTxs := core.SGetAccountTxs(sqldb, tx.To().String()); len(getAllAccountTxs) == 0 { - // t.Fatalf("GetAccountTxs [%v]: GetAccountTxs did not return correctly", getAllAccountTxs) - // } //} + if getAllAccountTxs := core.SGetAccountTxs(sqldb, toAddr1.String()); len(getAllAccountTxs) == 0 { + t.Fatalf("GetAccountTxs [%v]: GetAccountTxs did not return correctly", getAllAccountTxs) + } + if getAllAccounts := core.SGetAllAccounts(sqldb); len(getAllAccounts) == 0 { t.Fatalf("GetAllAccounts [%v]: GetAllAccounts did not return correctly", getAllAccounts) } - //ClearTables() + ClearTables() }) - //ClearTables() + ClearTables() } From 951f936e843ce9dc89fec16df69c628fbd21533b Mon Sep 17 00:00:00 2001 From: Tim Williams Date: Wed, 25 Jul 2018 11:21:46 -0400 Subject: [PATCH 27/28] reformat code --- eth/tracers/tracer.go | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/eth/tracers/tracer.go b/eth/tracers/tracer.go index 66d8f5806e..e674d817ba 100644 --- a/eth/tracers/tracer.go +++ b/eth/tracers/tracer.go @@ -579,16 +579,16 @@ func (jst *Tracer) CaptureEnd(output []byte, gasUsed uint64, t time.Duration, er //@NOTE:SHYFT type Internals struct { - Type string - From string - To string - Value string - Gas string + Type string + From string + To string + Value string + Gas string GasUsed string - Input string - Output string - Time string - Calls []*Internals + Input string + Output string + Time string + Calls []*Internals } //@NOTE:SHYFT @@ -612,6 +612,7 @@ func (i *Internals) SWriteInteralTxs(hash common.Hash) { panic(qerr) } } + //@NOTE:SHYFT func (i *Internals) InternalRecursive(hash common.Hash) { i.SWriteInteralTxs(hash) @@ -718,4 +719,4 @@ func (jst *Tracer) SGetResult(hash common.Hash) (json.RawMessage, error) { dat.InternalRecursive(hash) return result, jst.err -} \ No newline at end of file +} From a8b51bf31b05c5a34c5e673c6cde45a2ab0b0da8 Mon Sep 17 00:00:00 2001 From: David Krett Date: Thu, 2 Aug 2018 12:55:17 -0400 Subject: [PATCH 28/28] Working Docker Containers --- .gitignore | 3 + .../docker/develop-alpine/shyftApi/Dockerfile | 22 +- .../develop-alpine/shyftApi/wait-for.sh | 57 +++ .../docker/develop-alpine/shyftUi/Dockerfile | 21 + docker-compose.yml | 40 +- shyftBlockExplorerApi/vendor/vendor.json | 446 ++++++++++++++++++ shyftBlockExplorerUI/yarn.lock | 91 +++- vendor/vendor.json | 2 +- 8 files changed, 662 insertions(+), 20 deletions(-) create mode 100755 containers/docker/develop-alpine/shyftApi/wait-for.sh create mode 100644 containers/docker/develop-alpine/shyftUi/Dockerfile create mode 100644 shyftBlockExplorerApi/vendor/vendor.json diff --git a/.gitignore b/.gitignore index c7061f7d2b..b9235fb7e1 100644 --- a/.gitignore +++ b/.gitignore @@ -55,3 +55,6 @@ shyft-cli/web3/transfer-through-master/build # Remove pg data pg-data/* + +# Ignore shyftBlockExplorerApi vendored dependencies used for docker build +shyftBlockExplorerApi/vendor/**/.git diff --git a/containers/docker/develop-alpine/shyftApi/Dockerfile b/containers/docker/develop-alpine/shyftApi/Dockerfile index 7802a45647..36dd3a1d1a 100644 --- a/containers/docker/develop-alpine/shyftApi/Dockerfile +++ b/containers/docker/develop-alpine/shyftApi/Dockerfile @@ -1,19 +1,17 @@ FROM golang:1.10.3-alpine +RUN apk add --update git make gcc musl-dev linux-headers ca-certificates + COPY ./shyftBlockExplorerApi /go/src/github.com/ShyftNetwork/go-empyrean/shyftBlockExplorerApi -# COPY ./vendor /go/src/github.com/ShyftNetwork/go-empyrean/vendor -COPY ./core /go/src/github.com/ShyftNetwork/go-empyrean/core -# COPY ./common /go/src/github.com/ShyftNetwork/go-empyrean/common -COPY .git /go/src/github.com/ShyftNetwork/go-empyrean/.git - - +COPY ./wait-for.sh / +RUN cat /go/src/github.com/ShyftNetwork/go-empyrean/shyftBlockExplorerApi/vendor/vendor.json WORKDIR /go/src/github.com/ShyftNetwork/go-empyrean/shyftBlockExplorerApi -RUN apk add --update git make gcc musl-dev linux-headers ca-certificates -RUN go get ./ - -RUN go build - -CMD go get github.com/pilu/fresh && fresh +RUN echo `pwd && ls -a` +RUN go get -u github.com/kardianos/govendor +RUN govendor sync +RUN cat /go/src/github.com/ShyftNetwork/go-empyrean/shyftBlockExplorerApi/vendor/vendor.json +RUN echo `ls -l /go/src/github.com/ShyftNetwork/go-empyrean/shyftBlockExplorerApi/vendor` +CMD go run -v *.go EXPOSE 8080 diff --git a/containers/docker/develop-alpine/shyftApi/wait-for.sh b/containers/docker/develop-alpine/shyftApi/wait-for.sh new file mode 100755 index 0000000000..7b05f7e3f3 --- /dev/null +++ b/containers/docker/develop-alpine/shyftApi/wait-for.sh @@ -0,0 +1,57 @@ +#!/bin/sh +# https://github.com/eficode/wait-for.git +log() { + echo "[wait-for] [`date +'%Y%m%d%H%M%S'`] $@" +} + +usage() { + echo "Usage: `basename "$0"` [--timeout=15] : [:]" +} + +unknown_arg() { + log "[ERROR] unknown argument: '$@'" + usage + exit 2 +} + +wait_for() { + timeout=$1 && host=$2 && port=$3 + log "wait '$host':'$port' up to '$timeout'" + for i in `seq $timeout` ; do + if nc -z "$host" "$port" > /dev/null 2>&1 ; then + log "wait finish '$host:$port' [`expr $(date +%s) - $START`] seconds" + exit 0 + fi + log "wait attempt '${host}:${port}' [$i]" + sleep 1 + done + log "[ERROR] wait timeout of '$timeout' on '$host:$port'" + exit 1 +} + +trap 'kill $(jobs -p) &>/dev/null' EXIT + +START=$(date +%s) +timeout=15 +pids="" +for i in $@ ; do + case $i in + --timeout=*) timeout="${i#*=}" ;; + -t=*) timeout="${i#*=}" ;; + *:* ) + wait_for "$timeout" "${i%%:*}" "${i##*:}" & + pids="$pids $!" + ;; + *) unknown_arg "$i" ;; + esac +done + +status=0 +for pid in $pids; do + if ! wait $pid ; then + status=1 + fi +done + +log "wait done with status=$status" +exit $status diff --git a/containers/docker/develop-alpine/shyftUi/Dockerfile b/containers/docker/develop-alpine/shyftUi/Dockerfile new file mode 100644 index 0000000000..841dff4966 --- /dev/null +++ b/containers/docker/develop-alpine/shyftUi/Dockerfile @@ -0,0 +1,21 @@ +FROM node:8.11.3-alpine + +# set working directory +RUN echo `cd usr && ls -a` +RUN mkdir -p usr/src/shyftBlockExplorerUI +WORKDIR /usr/src/shyftBlockExplorerUI + +# add `/usr/src/app/node_modules/.bin` to $PATH +ENV PATH /usr/src/shyftBlockExplorerUI/node_modules/.bin:$PATH + +# install and cache app dependencies +COPY ./shyftBlockExplorerUI /usr/src/shyftBlockExplorerUI +RUN npm install +# RUN npm add react-scripts@1.1.1 -g --silent + +# start app + +EXPOSE 3000 + +CMD ["npm", "start"] + diff --git a/docker-compose.yml b/docker-compose.yml index cab019f7bf..6e97da14c9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -37,13 +37,43 @@ services: environment: - POSTGRES_USER=postgres - POSGRES_PASSWORD=docker - # api: - # build: - # context: $PWD - # dockerfile: containers/docker/develop-alpine/shyftApi/Dockerfile - + shyft_block_api: + build: + context: $PWD + dockerfile: containers/docker/develop-alpine/shyftApi/Dockerfile + # volumes: + # - ./shyftBlockExplorerApi:/go/src/github.com/ShyftNetwork/go-empyrean/shyftBlockExplorerApi + working_dir: /go/src/github.com/ShyftNetwork/go-empyrean/shyftBlockExplorerApi + ports: + - "8080:8080" + depends_on: + - pg + networks: + - shyftnet + command: > + sh -c ' + pwd && ls -a && cd vendor/ && ls -a && cat vendor.json && cd ../ && + /wait-for.sh pg:5432 && + DBENV=docker export DBENV && + go run -v *.go' + shyft_block_ui: + build: + context: $PWD + dockerfile: containers/docker/develop-alpine/shyftUi/Dockerfile + # volumes: + # - ./shyftBlockExplorerApi:/go/src/github.com/ShyftNetwork/go-empyrean/shyftBlockExplorerApi + ports: + - "3000:3000" + depends_on: + - shyft_block_api + networks: + - shyftnet + # - shyftui + # command: sh -c 'bin/sh' networks: shyftnet: driver: bridge + # shyftui: + # external: true diff --git a/shyftBlockExplorerApi/vendor/vendor.json b/shyftBlockExplorerApi/vendor/vendor.json new file mode 100644 index 0000000000..5034c395dc --- /dev/null +++ b/shyftBlockExplorerApi/vendor/vendor.json @@ -0,0 +1,446 @@ +{ + "comment": "", + "ignore": "", + "package": [{ + "checksumSHA1": "4N5EW5g7AXUm43jBk2iC9dtTJNc=", + "path": "github.com/ShyftNetwork/go-empyrean/common", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "zXqJwcRxrCq7llNjHBCamJc3wRc=", + "path": "github.com/ShyftNetwork/go-empyrean/common/bitutil", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "lGEgOyS5fKt1sN626mvUgc/Rlkw=", + "path": "github.com/ShyftNetwork/go-empyrean/common/hexutil", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "tnoq+cB8JnXxRjytf/+T5X2gG+4=", + "path": "github.com/ShyftNetwork/go-empyrean/common/math", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "zaAV9eypVRaotW+MMizuPxPJfHM=", + "path": "github.com/ShyftNetwork/go-empyrean/common/mclock", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "FZSyCzy79paVzTFiw9hwQMmYqYM=", + "path": "github.com/ShyftNetwork/go-empyrean/consensus", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "xD0P3MnMhT+jWh+rnKjRzWdEi4c=", + "path": "github.com/ShyftNetwork/go-empyrean/consensus/ethash", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "Fdv4KUKWQ+owyPIUlv8c2WLS6B4=", + "path": "github.com/ShyftNetwork/go-empyrean/consensus/misc", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "1uXB2lYwFOteR+Hl5E5amZwzHSE=", + "path": "github.com/ShyftNetwork/go-empyrean/core", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "TGjPR5QCoD/o+DbWtFXEjp9Ckhg=", + "path": "github.com/ShyftNetwork/go-empyrean/core/state", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "CNsnI5I6tS0x2aozqDCPpEoZ3F8=", + "path": "github.com/ShyftNetwork/go-empyrean/core/types", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "03odmCBDJMwkqVSOjaigrYVxme0=", + "path": "github.com/ShyftNetwork/go-empyrean/core/vm", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "WGQFgwtvKxobrs+NqMWHObTfLCQ=", + "path": "github.com/ShyftNetwork/go-empyrean/crypto", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "3glJGNkz78GAuDWdW0Vn4AshJZ8=", + "path": "github.com/ShyftNetwork/go-empyrean/crypto/bn256", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "9TyZ57SlZjA+fmnkgglz/U7Sd3Y=", + "path": "github.com/ShyftNetwork/go-empyrean/crypto/bn256/cloudflare", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "61j/0pJ1/X6SE2efWJ0tuMKZ+9s=", + "path": "github.com/ShyftNetwork/go-empyrean/crypto/bn256/google", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "725RdBLWChjphyDjUNepVLZqQpY=", + "path": "github.com/ShyftNetwork/go-empyrean/crypto/secp256k1", + "revision": "52062f1538710bce87f5941c19aec85e4df4f7cd", + "revisionTime": "2018-06-04T23:27:38Z", + "tree": true + }, + { + "checksumSHA1": "2dTDVGdpGjABDVQPjfNa4WrdRyg=", + "path": "github.com/ShyftNetwork/go-empyrean/crypto/sha3", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "oG0Io4xO2d+/8U2erCb1Oua2vUg=", + "path": "github.com/ShyftNetwork/go-empyrean/ethdb", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "YkJhaBXOOj4NLbql72AcrpXp/Rc=", + "path": "github.com/ShyftNetwork/go-empyrean/event", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "z1EsZ0xPHsbrmEP9f548xU5vRe0=", + "path": "github.com/ShyftNetwork/go-empyrean/log", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "dnTzAhOC0vm7Bu7OW9exb0UQYn8=", + "path": "github.com/ShyftNetwork/go-empyrean/metrics", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "FFMuJsy5DnOlBQ5sMnZd3l0t2Uc=", + "path": "github.com/ShyftNetwork/go-empyrean/params", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "gK2qsNNz4fmVYYDVILnifiEkwNA=", + "path": "github.com/ShyftNetwork/go-empyrean/rlp", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "GDQ9/DdZ6XC5VvgQhr/lr+o6ZNs=", + "path": "github.com/ShyftNetwork/go-empyrean/rpc", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "X+6gj7lAoWmwGhd8kZCr/r13Ljw=", + "path": "github.com/ShyftNetwork/go-empyrean/shyfttracerinterface", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "koQc7lsys/zLoQqkAAlf73Q26Z8=", + "path": "github.com/ShyftNetwork/go-empyrean/trie", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "USkefO0g1U9mr+8hagv3fpSkrxg=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/github.com/aristanetworks/goarista/monotime", + "path": "github.com/aristanetworks/goarista/monotime", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "gZQ6HheWahvZzIc3phBnOwoWHjE=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/github.com/btcsuite/btcd/btcec", + "path": "github.com/btcsuite/btcd/btcec", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "dvabztWVQX8f6oMLRyv4dLH+TGY=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/github.com/davecgh/go-spew/spew", + "path": "github.com/davecgh/go-spew/spew", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "zYnPsNAVm1/ViwCkN++dX2JQhBo=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/github.com/edsrzf/mmap-go", + "path": "github.com/edsrzf/mmap-go", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "5RhGwFpuOAfwyTpi1lMK9GEjuII=", + "path": "github.com/ethereum/go-ethereum/common", + "revision": "46d4721519f80074795a0631f5bab875433a1cc6", + "revisionTime": "2018-07-31T13:34:54Z" + }, + { + "checksumSHA1": "gvBs++4H+laBSZFm4ZS2Nw0w9ow=", + "path": "github.com/ethereum/go-ethereum/common/hexutil", + "revision": "46d4721519f80074795a0631f5bab875433a1cc6", + "revisionTime": "2018-07-31T13:34:54Z" + }, + { + "checksumSHA1": "M7ksSRW0CZUDXCIc81eGogsbzS8=", + "path": "github.com/ethereum/go-ethereum/common/math", + "revision": "46d4721519f80074795a0631f5bab875433a1cc6", + "revisionTime": "2018-07-31T13:34:54Z" + }, + { + "path": "github.com/ethereum/go-ethereum/crypto/randentropy", + "revision": "" + }, + { + "checksumSHA1": "8eZvG99UTA4QKxhsn+So9BGASro=", + "path": "github.com/ethereum/go-ethereum/crypto/sha3", + "revision": "46d4721519f80074795a0631f5bab875433a1cc6", + "revisionTime": "2018-07-31T13:34:54Z" + }, + { + "checksumSHA1": "KZ3QD2QgUS4RcoKiA3mn5pSlJxQ=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/github.com/go-stack/stack", + "path": "github.com/go-stack/stack", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "p/8vSviYF91gFflhrt5vkyksroo=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/github.com/golang/snappy", + "path": "github.com/golang/snappy", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "g/V4qrXjUGG9B+e3hB+4NAYJ5Gs=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/github.com/gorilla/context", + "path": "github.com/gorilla/context", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "XOY0t65siat4bLbC4VCmBA9dE7Y=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/github.com/gorilla/handlers", + "path": "github.com/gorilla/handlers", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "YuYKzn2jczaM6DQcFDmukvAHUX4=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/github.com/gorilla/mux", + "path": "github.com/gorilla/mux", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "d9PxF1XQGLMJZRct2R8qVM/eYlE=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/github.com/hashicorp/golang-lru", + "path": "github.com/hashicorp/golang-lru", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "9hffs0bAIU6CquiRhKQdzjHnKt0=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/github.com/hashicorp/golang-lru/simplelru", + "path": "github.com/hashicorp/golang-lru/simplelru", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "jwoPNwN+mUiYFQPjQa/U3Kli7Ak=", + "path": "github.com/kr/pretty", + "revision": "73f6ac0b30a98e433b289500d779f50c1a6f0712", + "revisionTime": "2018-05-06T08:33:45Z" + }, + { + "checksumSHA1": "x9dJv+jQhUFN6R6h4fzPjGLvQLg=", + "path": "github.com/kr/text", + "revision": "e2ffdb16a802fe2bb95e2e35ff34f0e53aeef34f", + "revisionTime": "2018-05-06T08:24:08Z" + }, + { + "checksumSHA1": "F7vsuKOVSMnFSi90odRxfhBEBeA=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/github.com/lib/pq", + "path": "github.com/lib/pq", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "AU3fA8Sm33Vj9PBoRPSeYfxLRuE=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/github.com/lib/pq/oid", + "path": "github.com/lib/pq/oid", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "LjPdvMphElL0GOVNQCsmZMVgWIw=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/github.com/rs/cors", + "path": "github.com/rs/cors", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "hCRfPlNpqv8tvVivLzmXsoUOf1c=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/github.com/rs/xhandler", + "path": "github.com/rs/xhandler", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "3QsnhPTXGytTbW3uDvQLgSo9s9M=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/github.com/syndtr/goleveldb/leveldb", + "path": "github.com/syndtr/goleveldb/leveldb", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "EKIow7XkgNdWvR/982ffIZxKG8Y=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/github.com/syndtr/goleveldb/leveldb/cache", + "path": "github.com/syndtr/goleveldb/leveldb/cache", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "5KPgnvCPlR0ysDAqo6jApzRQ3tw=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/github.com/syndtr/goleveldb/leveldb/comparer", + "path": "github.com/syndtr/goleveldb/leveldb/comparer", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "1DRAxdlWzS4U0xKN/yQ/fdNN7f0=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/github.com/syndtr/goleveldb/leveldb/errors", + "path": "github.com/syndtr/goleveldb/leveldb/errors", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "eqKeD6DS7eNCtxVYZEHHRKkyZrw=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/github.com/syndtr/goleveldb/leveldb/filter", + "path": "github.com/syndtr/goleveldb/leveldb/filter", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "weSsccMav4BCerDpSLzh3mMxAYo=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/github.com/syndtr/goleveldb/leveldb/iterator", + "path": "github.com/syndtr/goleveldb/leveldb/iterator", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "gJY7bRpELtO0PJpZXgPQ2BYFJ88=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/github.com/syndtr/goleveldb/leveldb/journal", + "path": "github.com/syndtr/goleveldb/leveldb/journal", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "MtYY1b2234y/MlS+djL8tXVAcQs=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/github.com/syndtr/goleveldb/leveldb/memdb", + "path": "github.com/syndtr/goleveldb/leveldb/memdb", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "UmQeotV+m8/FduKEfLOhjdp18rs=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/github.com/syndtr/goleveldb/leveldb/opt", + "path": "github.com/syndtr/goleveldb/leveldb/opt", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "QCSae2ub87f8awH+PKMpd8ZYOtg=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/github.com/syndtr/goleveldb/leveldb/storage", + "path": "github.com/syndtr/goleveldb/leveldb/storage", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "gWFPMz8OQeul0t54RM66yMTX49g=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/github.com/syndtr/goleveldb/leveldb/table", + "path": "github.com/syndtr/goleveldb/leveldb/table", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "V/Dh7NV0/fy/5jX1KaAjmGcNbzI=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/github.com/syndtr/goleveldb/leveldb/util", + "path": "github.com/syndtr/goleveldb/leveldb/util", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "y/oIaxq2d3WPizRZfVjo8RCRYTU=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/golang.org/x/crypto/ripemd160", + "path": "golang.org/x/crypto/ripemd160", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "Y+HGqEkYM15ir+J93MEaHdyFy0c=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/golang.org/x/net/context", + "path": "golang.org/x/net/context", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "7EZyXN0EmZLgGxZxK01IJua4c8o=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/golang.org/x/net/websocket", + "path": "golang.org/x/net/websocket", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "iyL0/njjAaU0nmQGSgoNVDpdvpU=", + "path": "gopkg.in/check.v1", + "revision": "788fd78401277ebd861206a03c884797c6ec5541", + "revisionTime": "2018-06-28T17:31:08Z" + }, + { + "checksumSHA1": "NGg7/qIJVUfXi7xnEyyDLocdi6Y=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/gopkg.in/fatih/set.v0", + "path": "gopkg.in/fatih/set.v0", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "DQXNV0EivoHm4q+bkdahYXrjjfE=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/gopkg.in/karalabe/cookiejar.v2/collections/prque", + "path": "gopkg.in/karalabe/cookiejar.v2/collections/prque", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + }, + { + "checksumSHA1": "0xgs8lwcWLUffemlj+SsgKlxvDU=", + "origin": "github.com/ShyftNetwork/go-empyrean/vendor/gopkg.in/natefinch/npipe.v2", + "path": "gopkg.in/natefinch/npipe.v2", + "revision": "3f6f14bc1240b5fb031115c56e2f657e7a5a7586", + "revisionTime": "2018-07-27T20:29:58Z" + } + ], + "rootPath": "github.com/ShyftNetwork/go-empyrean/shyftBlockExplorerApi" +} diff --git a/shyftBlockExplorerUI/yarn.lock b/shyftBlockExplorerUI/yarn.lock index a566cb155d..7e3f63416e 100644 --- a/shyftBlockExplorerUI/yarn.lock +++ b/shyftBlockExplorerUI/yarn.lock @@ -349,6 +349,13 @@ aws4@^1.2.1, aws4@^1.6.0: version "1.7.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289" +axios@^0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.0.tgz#32d53e4851efdc0a11993b6cd000789d70c05102" + dependencies: + follow-redirects "^1.3.0" + is-buffer "^1.1.5" + axobject-query@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0" @@ -2792,6 +2799,12 @@ flatten@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" +follow-redirects@^1.3.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.2.tgz#5a9d80e0165957e5ef0c1210678fc5c4acb9fb03" + dependencies: + debug "^3.1.0" + for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -3172,6 +3185,16 @@ he@1.1.x: version "1.1.1" resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" +history@^4.7.2: + version "4.7.2" + resolved "https://registry.yarnpkg.com/history/-/history-4.7.2.tgz#22b5c7f31633c5b8021c7f4a8a954ac139ee8d5b" + dependencies: + invariant "^2.2.1" + loose-envify "^1.2.0" + resolve-pathname "^2.2.0" + value-equal "^0.4.0" + warning "^3.0.0" + hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -3188,6 +3211,10 @@ hoek@4.x.x: version "4.2.1" resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" +hoist-non-react-statics@^2.5.0: + version "2.5.5" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" + home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" @@ -3427,7 +3454,7 @@ interpret@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" -invariant@^2.2.2: +invariant@^2.2.1, invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" dependencies: @@ -4042,6 +4069,10 @@ js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + js-yaml@^3.4.3, js-yaml@^3.7.0, js-yaml@^3.9.1: version "3.11.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" @@ -4323,6 +4354,12 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: dependencies: js-tokens "^3.0.0" +loose-envify@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + loud-rejection@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" @@ -4998,7 +5035,7 @@ path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" -path-to-regexp@^1.0.1: +path-to-regexp@^1.0.1, path-to-regexp@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" dependencies: @@ -5432,6 +5469,13 @@ prop-types@^15.5.10, prop-types@^15.6.0: loose-envify "^1.3.1" object-assign "^4.1.1" +prop-types@^15.6.1: + version "15.6.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" + dependencies: + loose-envify "^1.3.1" + object-assign "^4.1.1" + proxy-addr@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341" @@ -5588,6 +5632,29 @@ react-error-overlay@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-4.0.0.tgz#d198408a85b4070937a98667f500c832f86bd5d4" +react-router-dom@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-4.3.1.tgz#4c2619fc24c4fa87c9fd18f4fb4a43fe63fbd5c6" + dependencies: + history "^4.7.2" + invariant "^2.2.4" + loose-envify "^1.3.1" + prop-types "^15.6.1" + react-router "^4.3.1" + warning "^4.0.1" + +react-router@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-4.3.1.tgz#aada4aef14c809cb2e686b05cee4742234506c4e" + dependencies: + history "^4.7.2" + hoist-non-react-statics "^2.5.0" + invariant "^2.2.4" + loose-envify "^1.3.1" + path-to-regexp "^1.7.0" + prop-types "^15.6.1" + warning "^4.0.1" + react@^16.3.1: version "16.3.2" resolved "https://registry.yarnpkg.com/react/-/react-16.3.2.tgz#fdc8420398533a1e58872f59091b272ce2f91ea9" @@ -5882,6 +5949,10 @@ resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" +resolve-pathname@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-2.2.0.tgz#7e9ae21ed815fd63ab189adeee64dc831eefa879" + resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" @@ -6855,6 +6926,10 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +value-equal@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-0.4.0.tgz#c5bdd2f54ee093c04839d71ce2e4758a6890abc7" + vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -6883,6 +6958,18 @@ walker@~1.0.5: dependencies: makeerror "1.0.x" +warning@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" + dependencies: + loose-envify "^1.0.0" + +warning@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.1.tgz#66ce376b7fbfe8a887c22bdf0e7349d73d397745" + dependencies: + loose-envify "^1.0.0" + watch@~0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" diff --git a/vendor/vendor.json b/vendor/vendor.json index d0db2d2004..8b102d0a04 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -794,5 +794,5 @@ "revisionTime": "2017-08-11T01:42:03Z" } ], - "rootPath": "github.com/empyrean/go-ethereum" + "rootPath": "github.com/ShyftNetwork/go-empyrean" }