From bde7db514da535163736a8befd025806e1ef5979 Mon Sep 17 00:00:00 2001 From: Jeremy Chou Date: Wed, 16 Mar 2022 10:28:55 +0800 Subject: [PATCH] Replace ptypes.TimestampProto with timestamppb.New (#3183) --- action/protocol/poll/blockmeta.go | 11 ++--- action/protocol/staking/vote_bucket.go | 46 ++++++------------- api/coreservice.go | 12 ++--- api/grpcserver_test.go | 5 +- blockchain/block/block_test.go | 4 +- blockchain/block/footer.go | 11 ++--- blockchain/block/header.go | 12 ++--- consensus/scheme/rolldpos/rolldpos_test.go | 5 +- consensus/scheme/rolldpos/subchain_test.go | 4 +- endorsement/endorsement.go | 10 ++-- ioctl/cmd/action/actionhash.go | 5 +- ioctl/cmd/bc/bcbucket.go | 11 ++--- p2p/agent.go | 10 ++-- .../internal/client/client_test.go | 4 +- 14 files changed, 59 insertions(+), 91 deletions(-) diff --git a/action/protocol/poll/blockmeta.go b/action/protocol/poll/blockmeta.go index 3c4a2ce176..5ccb3a2f93 100644 --- a/action/protocol/poll/blockmeta.go +++ b/action/protocol/poll/blockmeta.go @@ -9,9 +9,9 @@ package poll import ( "time" - "github.com/golang/protobuf/ptypes" "github.com/pkg/errors" "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/timestamppb" "github.com/iotexproject/iotex-core/action/protocol/poll/blockmetapb" ) @@ -43,10 +43,7 @@ func (bm *BlockMeta) Serialize() ([]byte, error) { // Proto converts the BlockMeta struct to a protobuf message func (bm *BlockMeta) Proto() (*blockmetapb.BlockMeta, error) { - blkTime, err := ptypes.TimestampProto(bm.MintTime) - if err != nil { - return nil, err - } + blkTime := timestamppb.New(bm.MintTime) return &blockmetapb.BlockMeta{ BlockHeight: bm.Height, BlockProducer: bm.Producer, @@ -65,10 +62,10 @@ func (bm *BlockMeta) Deserialize(buf []byte) error { // LoadProto loads blockMeta from proto func (bm *BlockMeta) LoadProto(pb *blockmetapb.BlockMeta) error { - mintTime, err := ptypes.Timestamp(pb.GetBlockTime()) - if err != nil { + if err := pb.GetBlockTime().CheckValid(); err != nil { return err } + mintTime := pb.GetBlockTime().AsTime() bm.Height = pb.GetBlockHeight() bm.Producer = pb.GetBlockProducer() bm.MintTime = mintTime.UTC() diff --git a/action/protocol/staking/vote_bucket.go b/action/protocol/staking/vote_bucket.go index 4ce0e6c36e..ed9e4bb0ee 100644 --- a/action/protocol/staking/vote_bucket.go +++ b/action/protocol/staking/vote_bucket.go @@ -11,11 +11,11 @@ import ( "math/big" "time" - "github.com/golang/protobuf/ptypes" "github.com/iotexproject/iotex-address/address" "github.com/iotexproject/iotex-proto/golang/iotextypes" "github.com/pkg/errors" "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/timestamppb" "github.com/iotexproject/iotex-core/action/protocol" "github.com/iotexproject/iotex-core/action/protocol/staking/stakingpb" @@ -87,18 +87,20 @@ func (vb *VoteBucket) fromProto(pb *stakingpb.Bucket) error { return err } - createTime, err := ptypes.Timestamp(pb.GetCreateTime()) - if err != nil { + if err := pb.GetCreateTime().CheckValid(); err != nil { return err } - stakeTime, err := ptypes.Timestamp(pb.GetStakeStartTime()) - if err != nil { + createTime := pb.GetCreateTime().AsTime() + + if err := pb.GetStakeStartTime().CheckValid(); err != nil { return err } - unstakeTime, err := ptypes.Timestamp(pb.GetUnstakeStartTime()) - if err != nil { + stakeTime := pb.GetStakeStartTime().AsTime() + + if err := pb.GetUnstakeStartTime().CheckValid(); err != nil { return err } + unstakeTime := pb.GetUnstakeStartTime().AsTime() vb.Index = pb.GetIndex() vb.Candidate = candAddr @@ -116,18 +118,9 @@ func (vb *VoteBucket) toProto() (*stakingpb.Bucket, error) { if vb.Candidate == nil || vb.Owner == nil || vb.StakedAmount == nil { return nil, ErrMissingField } - createTime, err := ptypes.TimestampProto(vb.CreateTime) - if err != nil { - return nil, err - } - stakeTime, err := ptypes.TimestampProto(vb.StakeStartTime) - if err != nil { - return nil, err - } - unstakeTime, err := ptypes.TimestampProto(vb.UnstakeStartTime) - if err != nil { - return nil, err - } + createTime := timestamppb.New(vb.CreateTime) + stakeTime := timestamppb.New(vb.StakeStartTime) + unstakeTime := timestamppb.New(vb.UnstakeStartTime) return &stakingpb.Bucket{ Index: vb.Index, @@ -143,18 +136,9 @@ func (vb *VoteBucket) toProto() (*stakingpb.Bucket, error) { } func (vb *VoteBucket) toIoTeXTypes() (*iotextypes.VoteBucket, error) { - createTime, err := ptypes.TimestampProto(vb.CreateTime) - if err != nil { - return nil, err - } - stakeTime, err := ptypes.TimestampProto(vb.StakeStartTime) - if err != nil { - return nil, err - } - unstakeTime, err := ptypes.TimestampProto(vb.UnstakeStartTime) - if err != nil { - return nil, err - } + createTime := timestamppb.New(vb.CreateTime) + stakeTime := timestamppb.New(vb.StakeStartTime) + unstakeTime := timestamppb.New(vb.UnstakeStartTime) return &iotextypes.VoteBucket{ Index: vb.Index, diff --git a/api/coreservice.go b/api/coreservice.go index 19220a5301..e19f1b76b5 100644 --- a/api/coreservice.go +++ b/api/coreservice.go @@ -16,13 +16,14 @@ import ( "strconv" "time" - "github.com/golang/protobuf/ptypes" "github.com/pkg/errors" "go.uber.org/zap" "google.golang.org/genproto/googleapis/rpc/errdetails" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/durationpb" + "google.golang.org/protobuf/types/known/timestamppb" "github.com/iotexproject/go-pkgs/hash" "github.com/iotexproject/iotex-address/address" @@ -671,16 +672,13 @@ func (core *coreService) ElectionBuckets(epochNum uint64) ([]*iotextypes.Electio } re := make([]*iotextypes.ElectionBucket, len(buckets)) for i, b := range buckets { - startTime, err := ptypes.TimestampProto(b.StartTime()) - if err != nil { - return nil, status.Error(codes.Internal, err.Error()) - } + startTime := timestamppb.New(b.StartTime()) re[i] = &iotextypes.ElectionBucket{ Voter: b.Voter(), Candidate: b.Candidate(), Amount: b.Amount().Bytes(), StartTime: startTime, - Duration: ptypes.DurationProto(b.Duration()), + Duration: durationpb.New(b.Duration()), Decay: b.Decay(), } } @@ -1118,7 +1116,7 @@ func (core *coreService) getBlockMetaByHeight(height uint64) (*iotextypes.BlockM func generateBlockMeta(blk *block.Block) *iotextypes.BlockMeta { header := blk.Header height := header.Height() - ts, _ := ptypes.TimestampProto(header.Timestamp()) + ts := timestamppb.New(header.Timestamp()) var ( producerAddress string h hash.Hash256 diff --git a/api/grpcserver_test.go b/api/grpcserver_test.go index af0b214eef..89eafbc9ab 100644 --- a/api/grpcserver_test.go +++ b/api/grpcserver_test.go @@ -18,12 +18,12 @@ import ( "time" "github.com/golang/mock/gomock" - "github.com/golang/protobuf/ptypes" "github.com/pkg/errors" "github.com/stretchr/testify/require" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/timestamppb" "github.com/iotexproject/go-pkgs/crypto" "github.com/iotexproject/go-pkgs/hash" @@ -2201,8 +2201,7 @@ func TestGrpcServer_GetRawBlocks(t *testing.T) { header := blkInfos[0].Block.Header.Core require.EqualValues(version.ProtocolVersion, header.Version) require.Zero(header.Height) - ts, err := ptypes.TimestampProto(time.Unix(genesis.Timestamp(), 0)) - require.NoError(err) + ts := timestamppb.New(time.Unix(genesis.Timestamp(), 0)) require.Equal(ts, header.Timestamp) require.Equal(0, bytes.Compare(hash.ZeroHash256[:], header.PrevBlockHash)) require.Equal(0, bytes.Compare(hash.ZeroHash256[:], header.TxRoot)) diff --git a/blockchain/block/block_test.go b/blockchain/block/block_test.go index 31420f9e21..e53f6b5561 100644 --- a/blockchain/block/block_test.go +++ b/blockchain/block/block_test.go @@ -14,9 +14,9 @@ import ( "testing" "time" - "github.com/golang/protobuf/ptypes" "github.com/stretchr/testify/require" "go.uber.org/zap" + "google.golang.org/protobuf/types/known/timestamppb" "github.com/iotexproject/go-pkgs/hash" "github.com/iotexproject/iotex-core/action" @@ -83,7 +83,7 @@ var ( Core: &iotextypes.BlockHeaderCore{ Version: version.ProtocolVersion, Height: 123456789, - Timestamp: ptypes.TimestampNow(), + Timestamp: timestamppb.Now(), }, ProducerPubkey: pkBytes, }, diff --git a/blockchain/block/footer.go b/blockchain/block/footer.go index 829819cf1e..61a672fe87 100644 --- a/blockchain/block/footer.go +++ b/blockchain/block/footer.go @@ -9,8 +9,8 @@ package block import ( "time" - "github.com/golang/protobuf/ptypes" "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/timestamppb" "github.com/iotexproject/iotex-core/endorsement" "github.com/iotexproject/iotex-proto/golang/iotextypes" @@ -25,10 +25,7 @@ type Footer struct { // ConvertToBlockFooterPb converts BlockFooter func (f *Footer) ConvertToBlockFooterPb() (*iotextypes.BlockFooter, error) { pb := iotextypes.BlockFooter{} - commitTime, err := ptypes.TimestampProto(f.commitTime) - if err != nil { - return nil, err - } + commitTime := timestamppb.New(f.commitTime) pb.Timestamp = commitTime pb.Endorsements = []*iotextypes.Endorsement{} for _, en := range f.endorsements { @@ -46,10 +43,10 @@ func (f *Footer) ConvertFromBlockFooterPb(pb *iotextypes.BlockFooter) error { if pb == nil { return nil } - commitTime, err := ptypes.Timestamp(pb.GetTimestamp()) - if err != nil { + if err := pb.GetTimestamp().CheckValid(); err != nil { return err } + commitTime := pb.GetTimestamp().AsTime() f.commitTime = commitTime pbEndorsements := pb.GetEndorsements() if pbEndorsements == nil { diff --git a/blockchain/block/header.go b/blockchain/block/header.go index 2c76eec533..efc35dd0bb 100644 --- a/blockchain/block/header.go +++ b/blockchain/block/header.go @@ -9,7 +9,6 @@ package block import ( "time" - "github.com/golang/protobuf/ptypes" "github.com/iotexproject/go-pkgs/bloom" "github.com/iotexproject/go-pkgs/crypto" "github.com/iotexproject/go-pkgs/hash" @@ -17,6 +16,7 @@ import ( "github.com/pkg/errors" "go.uber.org/zap" "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/timestamppb" "github.com/iotexproject/iotex-core/pkg/log" "github.com/iotexproject/iotex-core/pkg/util/byteutil" @@ -89,10 +89,7 @@ func (h *Header) BlockHeaderProto() *iotextypes.BlockHeader { // BlockHeaderCoreProto returns BlockHeaderCore proto. func (h *Header) BlockHeaderCoreProto() *iotextypes.BlockHeaderCore { - ts, err := ptypes.TimestampProto(h.timestamp) - if err != nil { - log.L().Panic("failed to cast to ptypes.timestamp", zap.Error(err)) - } + ts := timestamppb.New(h.timestamp) header := iotextypes.BlockHeaderCore{ Version: h.version, Height: h.height, @@ -127,15 +124,16 @@ func (h *Header) LoadFromBlockHeaderProto(pb *iotextypes.BlockHeader) error { func (h *Header) loadFromBlockHeaderCoreProto(pb *iotextypes.BlockHeaderCore) error { h.version = pb.GetVersion() h.height = pb.GetHeight() - ts, err := ptypes.Timestamp(pb.GetTimestamp()) - if err != nil { + if err := pb.GetTimestamp().CheckValid(); err != nil { return err } + ts := pb.GetTimestamp().AsTime() h.timestamp = ts copy(h.prevBlockHash[:], pb.GetPrevBlockHash()) copy(h.txRoot[:], pb.GetTxRoot()) copy(h.deltaStateDigest[:], pb.GetDeltaStateDigest()) copy(h.receiptRoot[:], pb.GetReceiptRoot()) + var err error if pb.GetLogsBloom() != nil { h.logsBloom, err = bloom.NewBloomFilterLegacy(2048, 3) if err != nil { diff --git a/consensus/scheme/rolldpos/rolldpos_test.go b/consensus/scheme/rolldpos/rolldpos_test.go index c4bf9f9236..7f1eca3a83 100644 --- a/consensus/scheme/rolldpos/rolldpos_test.go +++ b/consensus/scheme/rolldpos/rolldpos_test.go @@ -16,7 +16,6 @@ import ( "github.com/facebookgo/clock" "github.com/golang/mock/gomock" - "github.com/golang/protobuf/ptypes" "github.com/iotexproject/go-pkgs/crypto" "github.com/iotexproject/go-pkgs/hash" "github.com/iotexproject/iotex-proto/golang/iotextypes" @@ -25,6 +24,7 @@ import ( "github.com/stretchr/testify/require" "golang.org/x/net/context" "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/timestamppb" "github.com/iotexproject/iotex-core/action/protocol" "github.com/iotexproject/iotex-core/action/protocol/account" @@ -169,8 +169,7 @@ func makeBlock(t *testing.T, accountIndex, numOfEndosements int, makeInvalidEndo require.NoError(t, err) typesFooter.Endorsements = append(typesFooter.Endorsements, enProto) } - ts, err := ptypes.TimestampProto(time.Unix(int64(unixTime), 0)) - require.NoError(t, err) + ts := timestamppb.New(time.Unix(int64(unixTime), 0)) typesFooter.Timestamp = ts require.NotNil(t, typesFooter.Timestamp) err = footerForBlk.ConvertFromBlockFooterPb(&typesFooter) diff --git a/consensus/scheme/rolldpos/subchain_test.go b/consensus/scheme/rolldpos/subchain_test.go index 43617bc930..406e0a3407 100644 --- a/consensus/scheme/rolldpos/subchain_test.go +++ b/consensus/scheme/rolldpos/subchain_test.go @@ -10,9 +10,9 @@ import ( "testing" "github.com/golang/mock/gomock" - "github.com/golang/protobuf/ptypes" "github.com/iotexproject/iotex-proto/golang/iotextypes" "github.com/stretchr/testify/require" + "google.golang.org/protobuf/types/known/timestamppb" "github.com/iotexproject/iotex-core/action" "github.com/iotexproject/iotex-core/blockchain/block" @@ -33,7 +33,7 @@ func TestPutBlockToParentChain(t *testing.T) { Core: &iotextypes.BlockHeaderCore{ Version: version.ProtocolVersion, Height: 123456789, - Timestamp: ptypes.TimestampNow(), + Timestamp: timestamppb.Now(), }, ProducerPubkey: pubKey.Bytes(), }, diff --git a/endorsement/endorsement.go b/endorsement/endorsement.go index cf25b00bcc..629741bd26 100644 --- a/endorsement/endorsement.go +++ b/endorsement/endorsement.go @@ -9,10 +9,10 @@ package endorsement import ( "time" - "github.com/golang/protobuf/ptypes" "github.com/iotexproject/go-pkgs/crypto" "github.com/iotexproject/go-pkgs/hash" "github.com/iotexproject/iotex-proto/golang/iotextypes" + "google.golang.org/protobuf/types/known/timestamppb" "github.com/iotexproject/iotex-core/pkg/util/byteutil" ) @@ -115,10 +115,7 @@ func (en *Endorsement) Signature() []byte { // Proto converts an endorsement to protobuf message func (en *Endorsement) Proto() (*iotextypes.Endorsement, error) { - ts, err := ptypes.TimestampProto(en.ts) - if err != nil { - return nil, err - } + ts := timestamppb.New(en.ts) return &iotextypes.Endorsement{ Timestamp: ts, Endorser: en.endorser.Bytes(), @@ -128,9 +125,10 @@ func (en *Endorsement) Proto() (*iotextypes.Endorsement, error) { // LoadProto converts a protobuf message to endorsement func (en *Endorsement) LoadProto(ePb *iotextypes.Endorsement) (err error) { - if en.ts, err = ptypes.Timestamp(ePb.Timestamp); err != nil { + if err = ePb.Timestamp.CheckValid(); err != nil { return err } + en.ts = ePb.Timestamp.AsTime() eb := make([]byte, len(ePb.Endorser)) copy(eb, ePb.Endorser) if en.endorser, err = crypto.BytesToPublicKey(eb); err != nil { diff --git a/ioctl/cmd/action/actionhash.go b/ioctl/cmd/action/actionhash.go index 0bdfdd0b4e..31d2f7ca1d 100644 --- a/ioctl/cmd/action/actionhash.go +++ b/ioctl/cmd/action/actionhash.go @@ -15,7 +15,6 @@ import ( "strconv" protoV1 "github.com/golang/protobuf/proto" - "github.com/golang/protobuf/ptypes" "github.com/grpc-ecosystem/go-grpc-middleware/util/metautils" "github.com/spf13/cobra" "google.golang.org/grpc/codes" @@ -148,10 +147,10 @@ func printAction(actionInfo *iotexapi.ActionInfo) (string, error) { return "", err } if actionInfo.Timestamp != nil { - ts, err := ptypes.Timestamp(actionInfo.Timestamp) - if err != nil { + if err := actionInfo.Timestamp.CheckValid(); err != nil { return "", err } + ts := actionInfo.Timestamp.AsTime() result += fmt.Sprintf("timeStamp: %d\n", ts.Unix()) result += fmt.Sprintf("blkHash: %s\n", actionInfo.BlkHash) } diff --git a/ioctl/cmd/bc/bcbucket.go b/ioctl/cmd/bc/bcbucket.go index 2982290df2..45661f0b95 100644 --- a/ioctl/cmd/bc/bcbucket.go +++ b/ioctl/cmd/bc/bcbucket.go @@ -14,7 +14,6 @@ import ( "strings" "time" - "github.com/golang/protobuf/ptypes" "github.com/grpc-ecosystem/go-grpc-middleware/util/metautils" "github.com/pkg/errors" "github.com/spf13/cobra" @@ -86,12 +85,12 @@ func newBucket(bucketpb *iotextypes.VoteBucket) (*bucket, error) { return nil, output.NewError(output.ConvertError, "failed to convert amount into big int", nil) } unstakeStartTimeFormat := "none" - unstakeTime, err := ptypes.Timestamp(bucketpb.UnstakeStartTime) - if err != nil { + if err := bucketpb.UnstakeStartTime.CheckValid(); err != nil { return nil, err } + unstakeTime := bucketpb.UnstakeStartTime.AsTime() if unstakeTime != time.Unix(0, 0).UTC() { - unstakeStartTimeFormat = ptypes.TimestampString(bucketpb.UnstakeStartTime) + unstakeStartTimeFormat = unstakeTime.Format(time.RFC3339Nano) } return &bucket{ Index: bucketpb.Index, @@ -100,8 +99,8 @@ func newBucket(bucketpb *iotextypes.VoteBucket) (*bucket, error) { StakedAmount: util.RauToString(amount, util.IotxDecimalNum), StakedDuration: bucketpb.StakedDuration, AutoStake: bucketpb.AutoStake, - CreateTime: ptypes.TimestampString(bucketpb.CreateTime), - StakeStartTime: ptypes.TimestampString(bucketpb.StakeStartTime), + CreateTime: bucketpb.CreateTime.AsTime().Format(time.RFC3339Nano), + StakeStartTime: bucketpb.StakeStartTime.AsTime().Format(time.RFC3339Nano), UnstakeStartTime: unstakeStartTimeFormat, }, nil } diff --git a/p2p/agent.go b/p2p/agent.go index 987d5a2206..6354604020 100644 --- a/p2p/agent.go +++ b/p2p/agent.go @@ -15,13 +15,13 @@ import ( "strings" "time" - "github.com/golang/protobuf/ptypes" "github.com/libp2p/go-libp2p-core/peer" "github.com/multiformats/go-multiaddr" "github.com/pkg/errors" "github.com/prometheus/client_golang/prometheus" "go.uber.org/zap" "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/timestamppb" "github.com/iotexproject/go-p2p" "github.com/iotexproject/go-pkgs/hash" @@ -259,7 +259,7 @@ func (p *agent) Start(ctx context.Context) error { return } - t, _ := ptypes.Timestamp(broadcast.GetTimestamp()) + t := broadcast.GetTimestamp().AsTime() latency = time.Since(t).Nanoseconds() / time.Millisecond.Nanoseconds() msg, err := goproto.TypifyRPCMsg(broadcast.MsgType, broadcast.MsgBody) @@ -304,7 +304,7 @@ func (p *agent) Start(ctx context.Context) error { return } - t, _ := ptypes.Timestamp(unicast.GetTimestamp()) + t := unicast.GetTimestamp().AsTime() latency = time.Since(t).Nanoseconds() / time.Millisecond.Nanoseconds() stream, ok := p2p.GetUnicastStream(ctx) @@ -393,7 +393,7 @@ func (p *agent) BroadcastOutbound(ctx context.Context, msg proto.Message) (err e PeerId: host.HostIdentity(), MsgType: msgType, MsgBody: msgBody, - Timestamp: ptypes.TimestampNow(), + Timestamp: timestamppb.Now(), } data, err := proto.Marshal(&broadcast) if err != nil { @@ -437,7 +437,7 @@ func (p *agent) UnicastOutbound(_ context.Context, peer peer.AddrInfo, msg proto PeerId: host.HostIdentity(), MsgType: msgType, MsgBody: msgBody, - Timestamp: ptypes.TimestampNow(), + Timestamp: timestamppb.Now(), } data, err := proto.Marshal(&unicast) if err != nil { diff --git a/tools/actioninjector.v2/internal/client/client_test.go b/tools/actioninjector.v2/internal/client/client_test.go index 4dfc5d1a6e..8a3247bb69 100644 --- a/tools/actioninjector.v2/internal/client/client_test.go +++ b/tools/actioninjector.v2/internal/client/client_test.go @@ -7,9 +7,9 @@ import ( "testing" "github.com/golang/mock/gomock" - "github.com/golang/protobuf/ptypes" "github.com/stretchr/testify/require" "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/timestamppb" "github.com/iotexproject/go-pkgs/hash" "github.com/iotexproject/iotex-proto/golang/iotextypes" @@ -66,7 +66,7 @@ func TestClient(t *testing.T) { bh := &iotextypes.BlockHeader{Core: &iotextypes.BlockHeaderCore{ Version: chainID, Height: 10, - Timestamp: ptypes.TimestampNow(), + Timestamp: timestamppb.Now(), PrevBlockHash: []byte(""), TxRoot: []byte(""), DeltaStateDigest: []byte(""),