- package types
-
- import (
- abci "github.com/tendermint/tendermint/abci/types"
- "github.com/tendermint/tendermint/crypto/merkle"
- )
-
- // ABCIResults wraps the deliver tx results to return a proof.
- type ABCIResults []*abci.ExecTxResult
-
- // NewResults strips non-deterministic fields from ResponseDeliverTx responses
- // and returns ABCIResults.
- func NewResults(responses []*abci.ExecTxResult) ABCIResults {
- res := make(ABCIResults, len(responses))
- for i, d := range responses {
- res[i] = deterministicExecTxResult(d)
- }
- return res
- }
-
- // Hash returns a merkle hash of all results.
- func (a ABCIResults) Hash() []byte {
- return merkle.HashFromByteSlices(a.toByteSlices())
- }
-
- // ProveResult returns a merkle proof of one result from the set
- func (a ABCIResults) ProveResult(i int) merkle.Proof {
- _, proofs := merkle.ProofsFromByteSlices(a.toByteSlices())
- return *proofs[i]
- }
-
- func (a ABCIResults) toByteSlices() [][]byte {
- l := len(a)
- bzs := make([][]byte, l)
- for i := 0; i < l; i++ {
- bz, err := a[i].Marshal()
- if err != nil {
- panic(err)
- }
- bzs[i] = bz
- }
- return bzs
- }
-
- // deterministicExecTxResult strips non-deterministic fields from
- // ResponseDeliverTx and returns another ResponseDeliverTx.
- func deterministicExecTxResult(response *abci.ExecTxResult) *abci.ExecTxResult {
- return &abci.ExecTxResult{
- Code: response.Code,
- Data: response.Data,
- GasWanted: response.GasWanted,
- GasUsed: response.GasUsed,
- }
- }
|