Skip to content

Commit

Permalink
Merge pull request #6 from spacemeshos/fix-hex-data-format
Browse files Browse the repository at this point in the history
Fix hex ID format
  • Loading branch information
AndrewAR2 authored Apr 20, 2021
2 parents 2eda184 + 0a0c733 commit 419faa1
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 27 deletions.
25 changes: 17 additions & 8 deletions api/httpserver/rest/accounts.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ func (s *Service) AccountsHandler(w http.ResponseWriter, r *http.Request) {
}},
})
data = append(data, bson.D{
{"address", model.ToCheckedAddress(address)},
account[0],
account[1],
account[2],
{"sent", sent},
Expand All @@ -60,7 +60,7 @@ func (s *Service) AccountsHandler(w http.ResponseWriter, r *http.Request) {
})
} else {
data = append(data, bson.D{
{"address", model.ToCheckedAddress(address)},
account[0],
account[1],
account[2],
{"sent", uint64(0)},
Expand Down Expand Up @@ -100,7 +100,11 @@ func (s *Service) AccountHandler(w http.ResponseWriter, r *http.Request) {
}

vars := mux.Vars(r)
idStr := strings.ToLower(vars["id"])
idStr := model.ToCheckedAddress(strings.ToLower(vars["id"]))
if idStr == "" {
return nil, http.StatusNotFound, errors.New("Not found")
}

filter := &bson.D{{"address", idStr}}

buf.WriteByte('{')
Expand Down Expand Up @@ -129,7 +133,7 @@ func (s *Service) AccountHandler(w http.ResponseWriter, r *http.Request) {
}},
})
data = append(data, bson.D{
{"address", model.ToCheckedAddress(address)},
account[0],
account[1],
account[2],
{"sent", sent},
Expand All @@ -141,7 +145,7 @@ func (s *Service) AccountHandler(w http.ResponseWriter, r *http.Request) {
})
} else {
data = append(data, bson.D{
{"address", model.ToCheckedAddress(address)},
account[0],
account[1],
account[2],
{"sent", uint64(0)},
Expand Down Expand Up @@ -181,7 +185,10 @@ func (s *Service) AccountRewardsHandler(w http.ResponseWriter, r *http.Request)
}

vars := mux.Vars(r)
idStr := strings.ToLower(vars["id"])
idStr := model.ToCheckedAddress(strings.ToLower(vars["id"]))
if idStr == "" {
return nil, http.StatusNotFound, errors.New("Not found")
}

filter := &bson.D{{"coinbase", idStr}}

Expand Down Expand Up @@ -220,7 +227,10 @@ func (s *Service) AccountTransactionsHandler(w http.ResponseWriter, r *http.Requ
}

vars := mux.Vars(r)
idStr := strings.ToLower(vars["id"])
idStr := model.ToCheckedAddress(strings.ToLower(vars["id"]))
if idStr == "" {
return nil, http.StatusNotFound, errors.New("Not found")
}

filter := &bson.D{
{"$or", bson.A{
Expand All @@ -236,7 +246,6 @@ func (s *Service) AccountTransactionsHandler(w http.ResponseWriter, r *http.Requ
data, err := s.storage.GetTransactions(s.ctx, filter, options.Find().SetSort(bson.D{{"counter", -1}}).SetLimit(pageSize).SetSkip((pageNumber - 1) * pageSize).SetProjection(bson.D{{"_id", 0}}))
if err != nil {
}
fixCheckedAddress(data, []int{17, 18})
setDataInfo(buf, data)
} else {
setDataInfo(buf, nil)
Expand Down
15 changes: 0 additions & 15 deletions api/httpserver/rest/response.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@ import (

"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"

"github.com/spacemeshos/explorer-backend/model"
)
/*
200:
Expand Down Expand Up @@ -407,16 +405,3 @@ func setDataInfo(buf *bytes.Buffer, data []bson.D) error {
buf.WriteByte(']')
return nil
}

func fixCheckedAddress(data []bson.D, positions []int) error {
if data != nil {
for i, _ := range data {
for _, j := range positions {
if address, ok := data[i][j].Value.(string); ok {
data[i][j].Value = model.ToCheckedAddress(address)
}
}
}
}
return nil
}
5 changes: 4 additions & 1 deletion api/httpserver/rest/search.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import (
"github.com/gorilla/mux"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"

"github.com/spacemeshos/explorer-backend/model"
)

func (s *Service) SearchHandler(w http.ResponseWriter, r *http.Request) {
Expand All @@ -23,7 +25,8 @@ func (s *Service) SearchHandler(w http.ResponseWriter, r *http.Request) {

switch len(idStr) {
case 42:
if s.storage.GetAccountsCount(s.ctx, &bson.D{{"address", idStr}}) > 0 {
address := model.ToCheckedAddress(idStr)
if s.storage.GetAccountsCount(s.ctx, &bson.D{{"address", address}}) > 0 {
buf.WriteString(fmt.Sprintf("\"redirect\":\"/accounts/%v\"", idStr))
break
}
Expand Down
25 changes: 22 additions & 3 deletions utils/bytes-to-string.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,31 @@ package utils

import (
"encoding/hex"

"github.com/spacemeshos/go-spacemesh/crypto/sha3"
)

func BytesToAddressString(a []byte) string {
return "0x" + hex.EncodeToString(a[:])
unchecksummed := hex.EncodeToString(a[:])
sha := sha3.NewKeccak256()
sha.Write([]byte(unchecksummed))
hash := sha.Sum(nil)

result := []byte(unchecksummed)
for i := 0; i < len(result); i++ {
hashByte := hash[i/2]
if i%2 == 0 {
hashByte = hashByte >> 4
} else {
hashByte &= 0xf
}
if result[i] > '9' && hashByte > 7 {
result[i] -= 32
}
}
return "0x" + string(result)
}

func BytesToHex(a []byte) string { return hex.EncodeToString(a[:]) }
func BytesToHex(a []byte) string { return "0x" + hex.EncodeToString(a[:]) }

func NBytesToHex(a []byte, n int) string { return hex.EncodeToString(a[:n]) }
func NBytesToHex(a []byte, n int) string { return "0x" + hex.EncodeToString(a[:n]) }

0 comments on commit 419faa1

Please sign in to comment.