- package types
-
- import (
- abci "github.com/tendermint/tendermint/abci/types"
- "github.com/tendermint/tendermint/crypto/merkle"
- "github.com/tendermint/tendermint/crypto/tmhash"
- cmn "github.com/tendermint/tendermint/libs/common"
- )
-
- //-----------------------------------------------------------------------------
-
- // ABCIResult is the deterministic component of a ResponseDeliverTx.
- // TODO: add Tags
- type ABCIResult struct {
- Code uint32 `json:"code"`
- Data cmn.HexBytes `json:"data"`
- }
-
- // Hash returns the canonical hash of the ABCIResult
- func (a ABCIResult) Hash() []byte {
- bz := tmhash.Sum(cdcEncode(a))
- return bz
- }
-
- func (a ABCIResult) Bytes() []byte {
- return cdcEncode(a)
- }
-
- // ABCIResults wraps the deliver tx results to return a proof
- type ABCIResults []ABCIResult
-
- // NewResults creates ABCIResults from the list of ResponseDeliverTx.
- func NewResults(responses []*abci.ResponseDeliverTx) ABCIResults {
- res := make(ABCIResults, len(responses))
- for i, d := range responses {
- res[i] = NewResultFromResponse(d)
- }
- return res
- }
-
- // NewResultFromResponse creates ABCIResult from ResponseDeliverTx.
- func NewResultFromResponse(response *abci.ResponseDeliverTx) ABCIResult {
- return ABCIResult{
- Code: response.Code,
- Data: response.Data,
- }
- }
-
- // Bytes serializes the ABCIResponse using wire
- func (a ABCIResults) Bytes() []byte {
- bz, err := cdc.MarshalBinaryLengthPrefixed(a)
- if err != nil {
- panic(err)
- }
- return bz
- }
-
- // Hash returns a merkle hash of all results
- func (a ABCIResults) Hash() []byte {
- // NOTE: we copy the impl of the merkle tree for txs -
- // we should be consistent and either do it for both or not.
- return merkle.SimpleHashFromByteSlices(a.toByteSlices())
- }
-
- // ProveResult returns a merkle proof of one result from the set
- func (a ABCIResults) ProveResult(i int) merkle.SimpleProof {
- _, proofs := merkle.SimpleProofsFromByteSlices(a.toByteSlices())
- return *proofs[i]
- }
-
- func (a ABCIResults) toByteSlices() [][]byte {
- l := len(a)
- bzs := make([][]byte, l)
- for i := 0; i < l; i++ {
- bzs[i] = a[i].Bytes()
- }
- return bzs
- }
|