mirror of
https://github.com/fluencelabs/tendermint
synced 2025-06-12 21:01:21 +00:00
Add ABCIResults with Hash and Proof to State
State maintains LastResultsHash Verify that we can produce unique hashes for each result, and provide valid proofs from the root hash.
This commit is contained in:
committed by
Ethan Buchman
parent
d844799b3b
commit
f870a49f42
@ -279,6 +279,40 @@ func TestConsensusParamsChangesSaveLoad(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestABCIResults(t *testing.T) {
|
||||
a := ABCIResult{Code: 0, Data: nil}
|
||||
b := ABCIResult{Code: 0, Data: []byte{}}
|
||||
c := ABCIResult{Code: 0, Data: []byte("one")}
|
||||
d := ABCIResult{Code: 14, Data: nil}
|
||||
e := ABCIResult{Code: 14, Data: []byte("foo")}
|
||||
f := ABCIResult{Code: 14, Data: []byte("bar")}
|
||||
|
||||
// nil and []byte{} should produce same hash
|
||||
assert.Equal(t, a.Hash(), b.Hash())
|
||||
|
||||
// a and b should be the same, don't go in results
|
||||
results := ABCIResults{a, c, d, e, f}
|
||||
|
||||
// make sure each result hashes properly
|
||||
var last []byte
|
||||
for i, res := range results {
|
||||
h := res.Hash()
|
||||
assert.NotEqual(t, last, h, "%d", i)
|
||||
last = h
|
||||
}
|
||||
|
||||
// make sure that we can get a root hash from results
|
||||
// and verify proofs
|
||||
root := results.Hash()
|
||||
assert.NotEmpty(t, root)
|
||||
|
||||
for i, res := range results {
|
||||
proof := results.ProveResult(i)
|
||||
valid := proof.Verify(i, len(results), res.Hash(), root)
|
||||
assert.True(t, valid, "%d", i)
|
||||
}
|
||||
}
|
||||
|
||||
func makeParams(blockBytes, blockTx, blockGas, txBytes,
|
||||
txGas, partSize int) types.ConsensusParams {
|
||||
|
||||
|
Reference in New Issue
Block a user