53 lines
1.4 KiB
Go
53 lines
1.4 KiB
Go
package api
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
"github.com/gorilla/mux"
|
|
)
|
|
|
|
type StakeRequest struct {
|
|
Address string `json:"address"`
|
|
Amount uint64 `json:"amount"`
|
|
Duration int64 `json:"duration"`
|
|
}
|
|
|
|
type UnstakeRequest struct {
|
|
Address string `json:"address"`
|
|
}
|
|
|
|
func (h *Handler) StakeHandler(w http.ResponseWriter, r *http.Request) {
|
|
var req StakeRequest
|
|
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
|
|
WriteError(w, http.StatusBadRequest, "Invalid request")
|
|
return
|
|
}
|
|
if err := h.StakingStore.Stake(req.Address, req.Amount, uint64(req.Duration)); err != nil {
|
|
WriteError(w, http.StatusInternalServerError, "Failed to stake")
|
|
return
|
|
}
|
|
WriteJSON(w, map[string]string{"message": "Stake registered successfully"})
|
|
}
|
|
|
|
func (h *Handler) UnstakeHandler(w http.ResponseWriter, r *http.Request) {
|
|
var req UnstakeRequest
|
|
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
|
|
WriteError(w, http.StatusBadRequest, "Invalid request")
|
|
return
|
|
}
|
|
if err := h.StakingStore.Unstake(req.Address); err != nil {
|
|
WriteError(w, http.StatusInternalServerError, "Failed to unstake")
|
|
return
|
|
}
|
|
WriteJSON(w, map[string]string{"message": "Unstake successful"})
|
|
}
|
|
|
|
func (h *Handler) GetStakeInfo(w http.ResponseWriter, r *http.Request) {
|
|
address := mux.Vars(r)["address"]
|
|
info, ok := h.StakingStore.GetStakeInfo(address)
|
|
if !ok {
|
|
WriteError(w, http.StatusNotFound, "Stake info not found")
|
|
return
|
|
}
|
|
WriteJSON(w, info)
|
|
} |