github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/evm/client/rest/rest_proposal.go (about)

     1  package rest
     2  
     3  import (
     4  	"net/http"
     5  
     6  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/context"
     7  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     8  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/rest"
     9  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth/client/utils"
    10  	comm "github.com/fibonacci-chain/fbc/x/common"
    11  	"github.com/fibonacci-chain/fbc/x/evm/types"
    12  	"github.com/fibonacci-chain/fbc/x/gov"
    13  	govrest "github.com/fibonacci-chain/fbc/x/gov/client/rest"
    14  )
    15  
    16  type ManageSysContractAddressProposalReq struct {
    17  	BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"`
    18  
    19  	Title       string `json:"title" yaml:"title"`
    20  	Description string `json:"description" yaml:"description"`
    21  
    22  	ContractAddr sdk.AccAddress `json:"contract_address" yaml:"contract_address"`
    23  	IsAdded      bool           `json:"is_added" yaml:"is_added"`
    24  
    25  	Proposer sdk.AccAddress `json:"proposer" yaml:"proposer"`
    26  	Deposit  sdk.SysCoins   `json:"deposit" yaml:"deposit"`
    27  }
    28  
    29  // ManageSysContractAddressProposalRESTHandler defines evm proposal handler
    30  func ManageSysContractAddressProposalRESTHandler(cliCtx context.CLIContext) govrest.ProposalRESTHandler {
    31  	return govrest.ProposalRESTHandler{
    32  		SubRoute: "manage_system_contract_address",
    33  		Handler:  postManageSysContractAddressProposalHandlerFn(cliCtx),
    34  	}
    35  }
    36  
    37  func postManageSysContractAddressProposalHandlerFn(cliCtx context.CLIContext) http.HandlerFunc {
    38  	return func(w http.ResponseWriter, r *http.Request) {
    39  		var req ManageSysContractAddressProposalReq
    40  		if !rest.ReadRESTReq(w, r, cliCtx.Codec, &req) {
    41  			return
    42  		}
    43  
    44  		req.BaseReq = req.BaseReq.Sanitize()
    45  		if !req.BaseReq.ValidateBasic(w) {
    46  			return
    47  		}
    48  
    49  		content := types.NewManageSysContractAddressProposal(
    50  			req.Title,
    51  			req.Description,
    52  			req.ContractAddr,
    53  			req.IsAdded,
    54  		)
    55  
    56  		msg := gov.NewMsgSubmitProposal(content, req.Deposit, req.Proposer)
    57  		if err := msg.ValidateBasic(); err != nil {
    58  			comm.HandleErrorMsg(w, cliCtx, comm.CodeInvalidParam, err.Error())
    59  			return
    60  		}
    61  
    62  		utils.WriteGenerateStdTxResponse(w, cliCtx, req.BaseReq, []sdk.Msg{msg})
    63  	}
    64  }