github.com/electroneum/electroneum-sc@v0.0.0-20230105223411-3bc1d078281e/consensus/istanbul/types/decode.go (about) 1 package qbfttypes 2 3 import ( 4 istanbulcommon "github.com/electroneum/electroneum-sc/consensus/istanbul/common" 5 "github.com/electroneum/electroneum-sc/rlp" 6 ) 7 8 func Decode(code uint64, data []byte) (QBFTMessage, error) { 9 switch code { 10 case PreprepareCode: 11 var preprepare Preprepare 12 if err := rlp.DecodeBytes(data, &preprepare); err != nil { 13 return nil, istanbulcommon.ErrFailedDecodePreprepare 14 } 15 preprepare.code = PreprepareCode 16 return &preprepare, nil 17 case PrepareCode: 18 var prepare Prepare 19 if err := rlp.DecodeBytes(data, &prepare); err != nil { 20 return nil, istanbulcommon.ErrFailedDecodeCommit 21 } 22 prepare.code = PrepareCode 23 return &prepare, nil 24 case CommitCode: 25 var commit Commit 26 if err := rlp.DecodeBytes(data, &commit); err != nil { 27 return nil, istanbulcommon.ErrFailedDecodeCommit 28 } 29 commit.code = CommitCode 30 return &commit, nil 31 case RoundChangeCode: 32 var roundChange RoundChange 33 if err := rlp.DecodeBytes(data, &roundChange); err != nil { 34 return nil, istanbulcommon.ErrFailedDecodeRoundChange 35 } 36 roundChange.code = RoundChangeCode 37 return &roundChange, nil 38 } 39 40 return nil, istanbulcommon.ErrInvalidMessage 41 }