Browse Source

call it LastResultsHash

pull/999/head
Ethan Buchman 7 years ago
parent
commit
028ee58580
7 changed files with 23 additions and 32 deletions
  1. +5
    -5
      lite/helpers.go
  2. +3
    -3
      state/execution.go
  3. +1
    -1
      state/execution_test.go
  4. +5
    -5
      state/state.go
  5. +0
    -2
      state/state_test.go
  6. +6
    -6
      types/block.go
  7. +3
    -10
      types/results.go

+ 5
- 5
lite/helpers.go View File

@ -120,11 +120,11 @@ func genHeader(chainID string, height int64, txs types.Txs,
TotalTxs: int64(len(txs)), TotalTxs: int64(len(txs)),
// LastBlockID // LastBlockID
// LastCommitHash // LastCommitHash
ValidatorsHash: vals.Hash(),
DataHash: txs.Hash(),
AppHash: appHash,
ConsensusHash: consHash,
ResultsHash: resHash,
ValidatorsHash: vals.Hash(),
DataHash: txs.Hash(),
AppHash: appHash,
ConsensusHash: consHash,
LastResultsHash: resHash,
} }
} }


+ 3
- 3
state/execution.go View File

@ -243,7 +243,7 @@ func (s *State) MakeBlock(height int64, txs []types.Tx, commit *types.Commit) (*
block.ValidatorsHash = s.Validators.Hash() block.ValidatorsHash = s.Validators.Hash()
block.AppHash = s.AppHash block.AppHash = s.AppHash
block.ConsensusHash = s.LastConsensusParams.Hash() block.ConsensusHash = s.LastConsensusParams.Hash()
block.ResultsHash = s.LastResultHash
block.LastResultsHash = s.LastResultsHash
return block, block.MakePartSet(s.ConsensusParams.BlockGossip.BlockPartSizeBytes) return block, block.MakePartSet(s.ConsensusParams.BlockGossip.BlockPartSizeBytes)
} }
@ -282,8 +282,8 @@ func (s *State) validateBlock(b *types.Block) error {
if !bytes.Equal(b.ConsensusHash, s.LastConsensusParams.Hash()) { if !bytes.Equal(b.ConsensusHash, s.LastConsensusParams.Hash()) {
return fmt.Errorf("Wrong Block.Header.ConsensusHash. Expected %X, got %v", s.LastConsensusParams.Hash(), b.ConsensusHash) return fmt.Errorf("Wrong Block.Header.ConsensusHash. Expected %X, got %v", s.LastConsensusParams.Hash(), b.ConsensusHash)
} }
if !bytes.Equal(b.ResultsHash, s.LastResultHash) {
return fmt.Errorf("Wrong Block.Header.ResultsHash. Expected %X, got %v", s.LastResultHash, b.ResultsHash)
if !bytes.Equal(b.LastResultsHash, s.LastResultsHash) {
return fmt.Errorf("Wrong Block.Header.LastResultsHash. Expected %X, got %v", s.LastResultsHash, b.LastResultsHash)
} }
// Validate block LastCommit. // Validate block LastCommit.


+ 1
- 1
state/execution_test.go View File

@ -70,7 +70,7 @@ func TestValidateBlock(t *testing.T) {
// wrong results hash fails // wrong results hash fails
block = makeBlock(state, 1) block = makeBlock(state, 1)
block.ResultsHash = []byte("wrong results hash")
block.LastResultsHash = []byte("wrong results hash")
err = state.ValidateBlock(block) err = state.ValidateBlock(block)
require.Error(t, err) require.Error(t, err)
} }


+ 5
- 5
state/state.go View File

@ -75,7 +75,7 @@ type State struct {
LastHeightConsensusParamsChanged int64 LastHeightConsensusParamsChanged int64
// Merkle root of the results from executing prev block // Merkle root of the results from executing prev block
LastResultHash []byte
LastResultsHash []byte
// The latest AppHash we've received from calling abci.Commit() // The latest AppHash we've received from calling abci.Commit()
AppHash []byte AppHash []byte
@ -151,7 +151,7 @@ func (s *State) Copy() *State {
AppHash: s.AppHash, AppHash: s.AppHash,
LastResultHash: s.LastResultHash,
LastResultsHash: s.LastResultsHash,
logger: s.logger, logger: s.logger,
} }
@ -377,7 +377,7 @@ func (s *State) setBlockAndValidators(height int64,
s.LastConsensusParams = s.ConsensusParams s.LastConsensusParams = s.ConsensusParams
s.ConsensusParams = params s.ConsensusParams = params
s.LastResultHash = resultsHash
s.LastResultsHash = resultsHash
} }
// GetValidators returns the last and current validator sets. // GetValidators returns the last and current validator sets.
@ -387,9 +387,9 @@ func (s *State) GetValidators() (last *types.ValidatorSet, current *types.Valida
//------------------------------------------------------------------------ //------------------------------------------------------------------------
// ABCIResponses retains the deterministic components of the responses
// ABCIResponses retains the responses
// of the various ABCI calls during block processing. // of the various ABCI calls during block processing.
// It is persisted to disk before calling Commit.
// It is persisted to disk for each height before calling Commit.
type ABCIResponses struct { type ABCIResponses struct {
DeliverTx []*abci.ResponseDeliverTx DeliverTx []*abci.ResponseDeliverTx
EndBlock *abci.ResponseEndBlock EndBlock *abci.ResponseEndBlock


+ 0
- 2
state/state_test.go View File

@ -422,7 +422,6 @@ func TestLessThanOneThirdOfVotingPowerPerBlockEnforced(t *testing.T) {
height := state.LastBlockHeight + 1 height := state.LastBlockHeight + 1
block := makeBlock(state, height) block := makeBlock(state, height)
abciResponses := &ABCIResponses{ abciResponses := &ABCIResponses{
Height: height,
EndBlock: &abci.ResponseEndBlock{ValidatorUpdates: tc.valUpdatesFn(state.Validators)}, EndBlock: &abci.ResponseEndBlock{ValidatorUpdates: tc.valUpdatesFn(state.Validators)},
} }
err := state.SetBlockAndValidators(block.Header, types.PartSetHeader{}, abciResponses) err := state.SetBlockAndValidators(block.Header, types.PartSetHeader{}, abciResponses)
@ -512,7 +511,6 @@ func makeHeaderPartsResponsesValPowerChange(state *State, height int64,
block := makeBlock(state, height) block := makeBlock(state, height)
abciResponses := &ABCIResponses{ abciResponses := &ABCIResponses{
Height: height,
EndBlock: &abci.ResponseEndBlock{ValidatorUpdates: []*abci.Validator{}}, EndBlock: &abci.ResponseEndBlock{ValidatorUpdates: []*abci.Validator{}},
} }


+ 6
- 6
types/block.go View File

@ -150,10 +150,10 @@ type Header struct {
DataHash data.Bytes `json:"data_hash"` // transactions DataHash data.Bytes `json:"data_hash"` // transactions
// hashes from the app output from the prev block // hashes from the app output from the prev block
ValidatorsHash data.Bytes `json:"validators_hash"` // validators for the current block
ConsensusHash data.Bytes `json:"consensus_hash"` // consensus params for current block
AppHash data.Bytes `json:"app_hash"` // state after txs from the previous block
ResultsHash data.Bytes `json:"results_hash"` // root hash of all results from the txs from the previous block
ValidatorsHash data.Bytes `json:"validators_hash"` // validators for the current block
ConsensusHash data.Bytes `json:"consensus_hash"` // consensus params for current block
AppHash data.Bytes `json:"app_hash"` // state after txs from the previous block
LastResultsHash data.Bytes `json:"last_results_hash"` // root hash of all results from the txs from the previous block
} }
// Hash returns the hash of the header. // Hash returns the hash of the header.
@ -174,7 +174,7 @@ func (h *Header) Hash() data.Bytes {
"Validators": h.ValidatorsHash, "Validators": h.ValidatorsHash,
"App": h.AppHash, "App": h.AppHash,
"Consensus": h.ConsensusHash, "Consensus": h.ConsensusHash,
"Results": h.ResultsHash,
"Results": h.LastResultsHash,
}) })
} }
@ -208,7 +208,7 @@ func (h *Header) StringIndented(indent string) string {
indent, h.ValidatorsHash, indent, h.ValidatorsHash,
indent, h.AppHash, indent, h.AppHash,
indent, h.ConsensusHash, indent, h.ConsensusHash,
indent, h.ResultsHash,
indent, h.LastResultsHash,
indent, h.Hash()) indent, h.Hash())
} }


+ 3
- 10
types/results.go View File

@ -1,10 +1,6 @@
package types package types
import ( import (
"fmt"
"golang.org/x/crypto/ripemd160"
abci "github.com/tendermint/abci/types" abci "github.com/tendermint/abci/types"
wire "github.com/tendermint/go-wire" wire "github.com/tendermint/go-wire"
"github.com/tendermint/go-wire/data" "github.com/tendermint/go-wire/data"
@ -14,18 +10,15 @@ import (
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// ABCIResult is the deterministic component of a ResponseDeliverTx. // ABCIResult is the deterministic component of a ResponseDeliverTx.
// TODO: add Tags
type ABCIResult struct { type ABCIResult struct {
Code uint32 `json:"code"` Code uint32 `json:"code"`
Data data.Bytes `json:"data"` Data data.Bytes `json:"data"`
} }
// Hash returns the canonical json hash of the ABCIResult
// Hash returns the canonical hash of the ABCIResult
func (a ABCIResult) Hash() []byte { func (a ABCIResult) Hash() []byte {
// stupid canonical json output, easy to check in any language
bs := fmt.Sprintf(`{"code":%d,"data":"%s"}`, a.Code, a.Data)
var hasher = ripemd160.New()
hasher.Write([]byte(bs))
return hasher.Sum(nil)
return wire.BinaryRipemd160(a)
} }
// ABCIResults wraps the deliver tx results to return a proof // ABCIResults wraps the deliver tx results to return a proof


Loading…
Cancel
Save