fix protos to make all tests pass, document differences

This commit is contained in:
Liamsi 2018-07-18 19:06:38 +02:00
parent a81ca93139
commit 96818af9d5
3 changed files with 52 additions and 29 deletions

View File

@ -195,9 +195,13 @@ func (m *Header) GetEvidenceHash() []byte {
return nil
}
// Timestamp wraps how amino encodes time. Note that this is different from the protobuf well-known type
// protobuf/timestamp.proto in the sense that there seconds and nanos are varint encoded. See:
// https://github.com/google/protobuf/blob/d2980062c859649523d5fd51d6b55ab310e47482/src/google/protobuf/timestamp.proto#L123-L135
// Also nanos do not get skipped if they are zero in amino.
type Timestamp struct {
Seconds int64 `protobuf:"varint,1,opt,name=seconds" json:"seconds,omitempty"`
Nanos int32 `protobuf:"varint,2,opt,name=nanos" json:"nanos,omitempty"`
Seconds int64 `protobuf:"fixed64,1,opt,name=seconds" json:"seconds,omitempty"`
Nanos int32 `protobuf:"fixed32,2,opt,name=nanos" json:"nanos,omitempty"`
}
func (m *Timestamp) Reset() { *m = Timestamp{} }
@ -229,29 +233,29 @@ func init() {
func init() { proto.RegisterFile("block.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{
// 371 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x5c, 0x92, 0x5f, 0x4b, 0xeb, 0x40,
0x10, 0xc5, 0xc9, 0xed, 0xff, 0x49, 0x7b, 0x4b, 0x87, 0x7b, 0x25, 0xf8, 0x54, 0x82, 0x4a, 0x9f,
0x0a, 0xda, 0x07, 0x11, 0x9f, 0xb4, 0x15, 0x5a, 0x10, 0x91, 0xb5, 0xf4, 0x7d, 0xdb, 0x2c, 0x36,
0x98, 0xec, 0x86, 0xec, 0x56, 0xfc, 0x7c, 0x7e, 0x32, 0xd9, 0xd9, 0x24, 0x36, 0x7d, 0x6a, 0xcf,
0x99, 0x33, 0xbf, 0xd9, 0xcc, 0x2e, 0xf8, 0xdb, 0x44, 0xed, 0x3e, 0xa6, 0x59, 0xae, 0x8c, 0xc2,
0x36, 0xfd, 0xcc, 0xc2, 0x3b, 0x18, 0xbc, 0xf2, 0xdc, 0xbc, 0x09, 0xb3, 0x14, 0x3c, 0x12, 0x39,
0xfe, 0x83, 0xd6, 0x5a, 0x19, 0x9e, 0x04, 0xde, 0xd8, 0x9b, 0x8c, 0x98, 0x13, 0x88, 0xd0, 0x5c,
0x72, 0xbd, 0x0f, 0xfe, 0x8c, 0xbd, 0x49, 0x9f, 0xd1, 0xff, 0x70, 0x03, 0x9d, 0x47, 0x4b, 0x5c,
0x2d, 0xaa, 0xb2, 0xf7, 0x5b, 0xc6, 0x5b, 0xf0, 0x2d, 0x59, 0x3b, 0x2e, 0x75, 0xfa, 0x37, 0xff,
0xdd, 0xf8, 0xd9, 0xb4, 0x36, 0x94, 0x1d, 0x27, 0xc3, 0xef, 0x06, 0xb4, 0x8b, 0xc3, 0x04, 0xd0,
0x99, 0xef, 0x79, 0x2c, 0x57, 0x0b, 0x42, 0xf7, 0x58, 0x29, 0xf1, 0xcc, 0x66, 0xe2, 0xf7, 0xbd,
0x21, 0x30, 0xb2, 0x42, 0xe1, 0x25, 0x34, 0xd7, 0x71, 0x2a, 0x82, 0x06, 0x8d, 0x1b, 0x95, 0xe3,
0xac, 0xa7, 0x0d, 0x4f, 0x33, 0x46, 0x65, 0xdb, 0xfe, 0x72, 0x48, 0xd7, 0x5f, 0x3a, 0x68, 0xba,
0x76, 0xa7, 0xf0, 0x1a, 0xfc, 0x67, 0xae, 0x4d, 0xf1, 0x5d, 0x41, 0x8b, 0x28, 0xc3, 0x92, 0x52,
0xd8, 0xec, 0x38, 0x83, 0xe7, 0xd0, 0xa5, 0x1d, 0x59, 0x58, 0x9b, 0x60, 0x95, 0xc6, 0x2b, 0xf8,
0x6b, 0xa3, 0x73, 0x95, 0xa6, 0xb1, 0xa1, 0x0d, 0x75, 0x68, 0x43, 0x27, 0xae, 0x65, 0x2c, 0xb8,
0xe1, 0x94, 0xe8, 0x52, 0xa2, 0xd2, 0x96, 0xb1, 0xe1, 0x49, 0x1c, 0x71, 0xa3, 0x72, 0x4d, 0x89,
0x9e, 0x63, 0xd4, 0x5d, 0xbc, 0x80, 0xc1, 0x5c, 0x49, 0x2d, 0xa4, 0x3e, 0xb8, 0x18, 0x50, 0xac,
0x6e, 0xda, 0x8d, 0x3e, 0x64, 0x19, 0xd5, 0x7d, 0xaa, 0x97, 0x12, 0x27, 0x30, 0xb4, 0xa7, 0x62,
0x42, 0x1f, 0x12, 0xe3, 0x08, 0x7d, 0x4a, 0x9c, 0xda, 0x18, 0x42, 0xff, 0xe9, 0x33, 0x8e, 0x84,
0xdc, 0x09, 0x8a, 0x0d, 0x28, 0x56, 0xf3, 0xc2, 0x7b, 0xe8, 0x55, 0x3b, 0xb7, 0x43, 0xb5, 0xd8,
0x29, 0x19, 0x69, 0xba, 0xc6, 0x06, 0x2b, 0xa5, 0x7d, 0x6d, 0x92, 0x4b, 0xa5, 0xe9, 0x16, 0x5b,
0xcc, 0x89, 0x6d, 0xf1, 0x38, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x31, 0x7d, 0xc7, 0x97, 0xb2,
0x02, 0x00, 0x00,
// 372 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x5c, 0x92, 0x4f, 0x6b, 0xe3, 0x30,
0x10, 0xc5, 0xf1, 0xe6, 0xff, 0x38, 0xd9, 0x6c, 0x86, 0xdd, 0xc5, 0xf4, 0x14, 0x4c, 0x5b, 0x72,
0x0a, 0xb4, 0x39, 0x94, 0xd2, 0x53, 0x9b, 0x14, 0x12, 0x28, 0xa5, 0xa8, 0x21, 0x77, 0x25, 0x16,
0x8d, 0xa9, 0x2d, 0x19, 0x4b, 0x29, 0xfd, 0x7c, 0xfd, 0x64, 0x45, 0x23, 0xdb, 0x8d, 0x73, 0x4a,
0xde, 0x9b, 0x37, 0xbf, 0x91, 0x47, 0x02, 0x7f, 0x9b, 0xa8, 0xdd, 0xfb, 0x34, 0xcb, 0x95, 0x51,
0xd8, 0xa6, 0x9f, 0x59, 0x78, 0x0b, 0x83, 0x17, 0x9e, 0x9b, 0x57, 0x61, 0x96, 0x82, 0x47, 0x22,
0xc7, 0xbf, 0xd0, 0x5a, 0x2b, 0xc3, 0x93, 0xc0, 0x1b, 0x7b, 0x93, 0x11, 0x73, 0x02, 0x11, 0x9a,
0x4b, 0xae, 0xf7, 0xc1, 0xaf, 0xb1, 0x37, 0xe9, 0x33, 0xfa, 0x1f, 0x6e, 0xa0, 0xf3, 0x60, 0x89,
0xab, 0x45, 0x55, 0xf6, 0x7e, 0xca, 0x78, 0x03, 0xbe, 0x25, 0x6b, 0xc7, 0xa5, 0x4e, 0xff, 0xfa,
0x9f, 0x1b, 0x3f, 0x9b, 0xd6, 0x86, 0xb2, 0xe3, 0x64, 0xf8, 0xd5, 0x80, 0x76, 0x71, 0x98, 0x00,
0x3a, 0xf3, 0x3d, 0x8f, 0xe5, 0x6a, 0x41, 0xe8, 0x1e, 0x2b, 0x25, 0xfe, 0xb7, 0x99, 0xf8, 0x6d,
0x6f, 0x08, 0x8c, 0xac, 0x50, 0x78, 0x01, 0xcd, 0x75, 0x9c, 0x8a, 0xa0, 0x41, 0xe3, 0x46, 0xe5,
0x38, 0xeb, 0x69, 0xc3, 0xd3, 0x8c, 0x51, 0xd9, 0xb6, 0x3f, 0x1f, 0xd2, 0xf5, 0xa7, 0x0e, 0x9a,
0xae, 0xdd, 0x29, 0xbc, 0x02, 0xff, 0x89, 0x6b, 0x53, 0x7c, 0x57, 0xd0, 0x22, 0xca, 0xb0, 0xa4,
0x14, 0x36, 0x3b, 0xce, 0xe0, 0x19, 0x74, 0x69, 0x47, 0x16, 0xd6, 0x26, 0x58, 0xa5, 0xf1, 0x12,
0x7e, 0xdb, 0xe8, 0x5c, 0xa5, 0x69, 0x6c, 0x68, 0x43, 0x1d, 0xda, 0xd0, 0x89, 0x6b, 0x19, 0x0b,
0x6e, 0x38, 0x25, 0xba, 0x94, 0xa8, 0xb4, 0x65, 0x6c, 0x78, 0x12, 0x47, 0xdc, 0xa8, 0x5c, 0x53,
0xa2, 0xe7, 0x18, 0x75, 0x17, 0xcf, 0x61, 0x30, 0x57, 0x52, 0x0b, 0xa9, 0x0f, 0x2e, 0x06, 0x14,
0xab, 0x9b, 0x76, 0xa3, 0xf7, 0x59, 0x46, 0x75, 0x9f, 0xea, 0xa5, 0xc4, 0x09, 0x0c, 0xed, 0xa9,
0x98, 0xd0, 0x87, 0xc4, 0x38, 0x42, 0x9f, 0x12, 0xa7, 0x36, 0x86, 0xd0, 0x7f, 0xfc, 0x88, 0x23,
0x21, 0x77, 0x82, 0x62, 0x03, 0x8a, 0xd5, 0xbc, 0xf0, 0x0e, 0x7a, 0xd5, 0xce, 0xed, 0x50, 0x2d,
0x76, 0x4a, 0x46, 0x9a, 0xae, 0xf1, 0x0f, 0x2b, 0xa5, 0x7d, 0x6d, 0x92, 0x4b, 0xa5, 0xe9, 0x16,
0x87, 0xcc, 0x89, 0x6d, 0xf1, 0x38, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x6b, 0x74, 0x2f, 0xbd,
0xb2, 0x02, 0x00, 0x00,
}

View File

@ -38,7 +38,11 @@ message Header {
bytes EvidenceHash = 13; // evidence included in the block
}
// Timestamp wraps how amino encodes time. Note that this is different from the protobuf well-known type
// protobuf/timestamp.proto in the sense that there seconds and nanos are varint encoded. See:
// https://github.com/google/protobuf/blob/d2980062c859649523d5fd51d6b55ab310e47482/src/google/protobuf/timestamp.proto#L123-L135
// Also nanos do not get skipped if they are zero in amino.
message Timestamp {
int64 seconds = 1;
int32 nanos = 2;
sfixed64 seconds = 1;
sfixed32 nanos = 2;
}

View File

@ -13,8 +13,13 @@ import (
func TestProto3Compatibility(t *testing.T) {
tm, err := time.Parse("Mon Jan 2 15:04:05 -0700 MST 2006", "Mon Jan 2 15:04:05 -0700 MST 2006")
assert.NoError(t, err)
// add some nanos, otherwise protobuf will skip over this while amino (still) won't!
tm = tm.Add(50000 * time.Nanosecond)
seconds := tm.Unix()
nanos := int32(tm.Nanosecond())
t.Log("seconds", seconds)
t.Log("nanos", nanos)
pbHeader := proto3.Header{
ChainID: "cosmos",
Height: 150,
@ -62,6 +67,11 @@ func TestProto3Compatibility(t *testing.T) {
Height: 150,
Time: &proto3.Timestamp{Seconds: seconds, Nanos: nanos},
NumTxs: 7,
// This is not fully skipped in amino (yet) although it is empty:
LastBlockID: &proto3.BlockID{
PartsHeader: &proto3.PartSetHeader{
},
},
TotalTxs: 100,
LastCommitHash: []byte("commit hash"),
DataHash: []byte("data hash"),
@ -89,6 +99,8 @@ func TestProto3Compatibility(t *testing.T) {
pb, err = proto.Marshal(&proto3.Header{})
assert.NoError(t, err, "unexpected error")
t.Log(pb)
// While in protobuf Header{} encodes to an empty byte slice it does not in amino:
ab, err = cdc.MarshalBinaryBare(Header{})
assert.NoError(t, err, "unexpected error")
t.Log(ab)
@ -97,4 +109,7 @@ func TestProto3Compatibility(t *testing.T) {
assert.NoError(t, err, "unexpected error")
t.Log(pb)
ab, err = cdc.MarshalBinaryBare(time.Time{})
assert.NoError(t, err, "unexpected error")
t.Log(ab)
}