github.com/ari-anchor/sei-tendermint@v0.0.0-20230519144642-dc826b7b56bb/abci/types/types_test.go (about) 1 package types_test 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 "github.com/stretchr/testify/require" 8 9 abci "github.com/ari-anchor/sei-tendermint/abci/types" 10 "github.com/ari-anchor/sei-tendermint/crypto/merkle" 11 ) 12 13 func TestHashAndProveResults(t *testing.T) { 14 trs := []*abci.ExecTxResult{ 15 // Note, these tests rely on the first two entries being in this order. 16 {Code: 0, Data: nil}, 17 {Code: 0, Data: []byte{}}, 18 19 {Code: 0, Data: []byte("one")}, 20 {Code: 14, Data: nil}, 21 {Code: 14, Data: []byte("foo")}, 22 {Code: 14, Data: []byte("bar")}, 23 } 24 25 // Nil and []byte{} should produce the same bytes 26 bz0, err := trs[0].Marshal() 27 require.NoError(t, err) 28 bz1, err := trs[1].Marshal() 29 require.NoError(t, err) 30 require.Equal(t, bz0, bz1) 31 32 // Make sure that we can get a root hash from results and verify proofs. 33 rs, err := abci.MarshalTxResults(trs) 34 require.NoError(t, err) 35 root := merkle.HashFromByteSlices(rs) 36 assert.NotEmpty(t, root) 37 38 _, proofs := merkle.ProofsFromByteSlices(rs) 39 for i, tr := range trs { 40 bz, err := tr.Marshal() 41 require.NoError(t, err) 42 43 valid := proofs[i].Verify(root, bz) 44 assert.NoError(t, valid, "%d", i) 45 } 46 } 47 48 func TestHashDeterministicFieldsOnly(t *testing.T) { 49 tr1 := abci.ExecTxResult{ 50 Code: 1, 51 Data: []byte("transaction"), 52 Log: "nondeterministic data: abc", 53 Info: "nondeterministic data: abc", 54 GasWanted: 1000, 55 GasUsed: 1000, 56 Events: []abci.Event{}, 57 Codespace: "nondeterministic.data.abc", 58 } 59 tr2 := abci.ExecTxResult{ 60 Code: 1, 61 Data: []byte("transaction"), 62 Log: "nondeterministic data: def", 63 Info: "nondeterministic data: def", 64 GasWanted: 1000, 65 GasUsed: 1000, 66 Events: []abci.Event{}, 67 Codespace: "nondeterministic.data.def", 68 } 69 r1, err := abci.MarshalTxResults([]*abci.ExecTxResult{&tr1}) 70 require.NoError(t, err) 71 r2, err := abci.MarshalTxResults([]*abci.ExecTxResult{&tr2}) 72 require.NoError(t, err) 73 require.Equal(t, merkle.HashFromByteSlices(r1), merkle.HashFromByteSlices(r2)) 74 }