|
- package endpoints
-
- import (
- "encoding/json"
- "fmt"
- "net/http"
- "strings"
-
- . "github.com/imosed/signet/data"
- "github.com/imosed/signet/utils"
- "github.com/rs/zerolog/log"
- "github.com/stellar/go/keypair"
- "github.com/stellar/go/txnbuild"
- )
-
- type ContributeRequest struct {
- PrivateKey string `json:"privateKey"`
- Amount float64 `json:"amount"`
- RewardFund uint `json:"rewardFund"`
- }
-
- func Contribute(resp http.ResponseWriter, req *http.Request) {
- var cont ContributeRequest
- err := json.NewDecoder(req.Body).Decode(&cont)
- if err != nil {
- log.Error().Err(err).Msg("Could not read in contribution")
- return
- }
-
- var fund RewardFund
-
- Db.Table("reward_funds").Select("id", "deleted_at", "fund_wallet", "memo", "min_contribution").First(&fund, cont.RewardFund)
-
- if cont.Amount < fund.MinContribution || !strings.HasPrefix(cont.PrivateKey, "S") || !fund.DeletedAt.Time.IsZero() {
- err = json.NewEncoder(resp).Encode(&SuccessResponse{Success: false})
- if err != nil {
- log.Error().Err(err).Msg("Could not deliver unsuccessful contribution response")
- }
- return
- }
-
- var result SuccessResponse
- source := keypair.MustParseFull(cont.PrivateKey)
- result.Success, err = utils.SendAsset(source, txnbuild.Memo(txnbuild.MemoText(fund.Memo)), []txnbuild.Operation{
- &txnbuild.Payment{
- Destination: fund.FundWallet,
- Amount: fmt.Sprintf("%f", cont.Amount),
- Asset: txnbuild.NativeAsset{},
- SourceAccount: source.Address(),
- },
- })
- if err != nil {
- log.Error().Err(err).Msg("Could not send asset in contribution")
- return
- }
-
- err = json.NewEncoder(resp).Encode(&result)
- if err != nil {
- log.Error().Err(err).Msg("Could not create response for new contribution")
- }
- }
|