package types import ( "bytes" "encoding/json" "github.com/gogo/protobuf/jsonpb" types "github.com/tendermint/tendermint/proto/tendermint/types" ) const ( CodeTypeOK uint32 = 0 ) // IsOK returns true if Code is OK. func (r ResponseCheckTx) IsOK() bool { return r.Code == CodeTypeOK } // IsErr returns true if Code is something other than OK. func (r ResponseCheckTx) IsErr() bool { return r.Code != CodeTypeOK } // IsOK returns true if Code is OK. func (r ResponseDeliverTx) IsOK() bool { return r.Code == CodeTypeOK } // IsErr returns true if Code is something other than OK. func (r ResponseDeliverTx) IsErr() bool { return r.Code != CodeTypeOK } // IsOK returns true if Code is OK. func (r ExecTxResult) IsOK() bool { return r.Code == CodeTypeOK } // IsErr returns true if Code is something other than OK. func (r ExecTxResult) IsErr() bool { return r.Code != CodeTypeOK } // IsOK returns true if Code is OK. func (r ResponseQuery) IsOK() bool { return r.Code == CodeTypeOK } // IsErr returns true if Code is something other than OK. func (r ResponseQuery) IsErr() bool { return r.Code != CodeTypeOK } func (r ResponsePrepareProposal) IsTxStatusUnknown() bool { return r.ModifiedTxStatus == ResponsePrepareProposal_UNKNOWN } func (r ResponsePrepareProposal) IsTxStatusModified() bool { return r.ModifiedTxStatus == ResponsePrepareProposal_MODIFIED } func (r ResponseProcessProposal) IsAccepted() bool { return r.Status == ResponseProcessProposal_ACCEPT } func (r ResponseProcessProposal) IsStatusUnknown() bool { return r.Status == ResponseProcessProposal_UNKNOWN } // IsStatusUnknown returns true if Code is Unknown func (r ResponseVerifyVoteExtension) IsStatusUnknown() bool { return r.Status == ResponseVerifyVoteExtension_UNKNOWN } // IsOK returns true if Code is OK func (r ResponseVerifyVoteExtension) IsOK() bool { return r.Status == ResponseVerifyVoteExtension_ACCEPT } // IsErr returns true if Code is something other than OK. func (r ResponseVerifyVoteExtension) IsErr() bool { return r.Status != ResponseVerifyVoteExtension_ACCEPT } //--------------------------------------------------------------------------- // override JSON marshaling so we emit defaults (ie. disable omitempty) var ( jsonpbMarshaller = jsonpb.Marshaler{ EnumsAsInts: true, EmitDefaults: true, } jsonpbUnmarshaller = jsonpb.Unmarshaler{} ) func (r *ResponseCheckTx) MarshalJSON() ([]byte, error) { s, err := jsonpbMarshaller.MarshalToString(r) return []byte(s), err } func (r *ResponseCheckTx) UnmarshalJSON(b []byte) error { reader := bytes.NewBuffer(b) return jsonpbUnmarshaller.Unmarshal(reader, r) } func (r *ResponseDeliverTx) MarshalJSON() ([]byte, error) { s, err := jsonpbMarshaller.MarshalToString(r) return []byte(s), err } func (r *ResponseDeliverTx) UnmarshalJSON(b []byte) error { reader := bytes.NewBuffer(b) return jsonpbUnmarshaller.Unmarshal(reader, r) } func (r *ResponseQuery) MarshalJSON() ([]byte, error) { s, err := jsonpbMarshaller.MarshalToString(r) return []byte(s), err } func (r *ResponseQuery) UnmarshalJSON(b []byte) error { reader := bytes.NewBuffer(b) return jsonpbUnmarshaller.Unmarshal(reader, r) } func (r *ResponseCommit) MarshalJSON() ([]byte, error) { s, err := jsonpbMarshaller.MarshalToString(r) return []byte(s), err } func (r *ResponseCommit) UnmarshalJSON(b []byte) error { reader := bytes.NewBuffer(b) return jsonpbUnmarshaller.Unmarshal(reader, r) } func (r *EventAttribute) MarshalJSON() ([]byte, error) { s, err := jsonpbMarshaller.MarshalToString(r) return []byte(s), err } func (r *EventAttribute) UnmarshalJSON(b []byte) error { reader := bytes.NewBuffer(b) return jsonpbUnmarshaller.Unmarshal(reader, r) } // Some compile time assertions to ensure we don't // have accidental runtime surprises later on. // jsonEncodingRoundTripper ensures that asserted // interfaces implement both MarshalJSON and UnmarshalJSON type jsonRoundTripper interface { json.Marshaler json.Unmarshaler } var _ jsonRoundTripper = (*ResponseCommit)(nil) var _ jsonRoundTripper = (*ResponseQuery)(nil) var _ jsonRoundTripper = (*ResponseDeliverTx)(nil) var _ jsonRoundTripper = (*ResponseCheckTx)(nil) var _ jsonRoundTripper = (*EventAttribute)(nil) // ----------------------------------------------- // construct Result data func RespondExtendVote(appDataToSign, appDataSelfAuthenticating []byte) ResponseExtendVote { return ResponseExtendVote{ VoteExtension: &types.VoteExtension{ AppDataToSign: appDataToSign, AppDataSelfAuthenticating: appDataSelfAuthenticating, }, } } func RespondVerifyVoteExtension(ok bool) ResponseVerifyVoteExtension { status := ResponseVerifyVoteExtension_REJECT if ok { status = ResponseVerifyVoteExtension_ACCEPT } return ResponseVerifyVoteExtension{ Status: status, } } // deterministicExecTxResult constructs a copy of response that omits // non-deterministic fields. The input response is not modified. func deterministicExecTxResult(response *ExecTxResult) *ExecTxResult { return &ExecTxResult{ Code: response.Code, Data: response.Data, GasWanted: response.GasWanted, GasUsed: response.GasUsed, } } // MarshalTxResults encodes the the TxResults as a list of byte // slices. It strips off the non-deterministic pieces of the TxResults // so that the resulting data can be used for hash comparisons and used // in Merkle proofs. func MarshalTxResults(r []*ExecTxResult) ([][]byte, error) { s := make([][]byte, len(r)) for i, e := range r { d := deterministicExecTxResult(e) b, err := d.Marshal() if err != nil { return nil, err } s[i] = b } return s, nil }