package drand import ( "github.com/harmony-one/harmony/api/proto" msg_pb "github.com/harmony-one/harmony/api/proto/message" "github.com/harmony-one/harmony/internal/utils" ) // Constructs the init message func (dRand *DRand) constructCommitMessage(vrf [32]byte, proof []byte) []byte { message := &msg_pb.Message{ ReceiverType: msg_pb.ReceiverType_LEADER, ServiceType: msg_pb.ServiceType_DRAND, Type: msg_pb.MessageType_DRAND_COMMIT, Request: &msg_pb.Message_Drand{ Drand: &msg_pb.DrandRequest{}, }, } drandMsg := message.GetDrand() drandMsg.SenderPubkey = dRand.pubKey.Serialize() drandMsg.BlockHash = dRand.blockHash[:] drandMsg.BlockHash = dRand.blockHash[:] drandMsg.Payload = append(vrf[:], proof...) // Adding the public key into payload so leader can verify the vrf // TODO: change the curve to follow the same curve with consensus, so the public key doesn't need to be attached. drandMsg.Payload = append(drandMsg.Payload, (*dRand.vrfPubKey).Serialize()...) marshaledMessage, err := dRand.signAndMarshalDRandMessage(message) if err != nil { utils.GetLogInstance().Error("Failed to sign and marshal the commit message", "error", err) } return proto.ConstructDRandMessage(marshaledMessage) }