MCPcopy Create free account
hub / github.com/DNAProject/DNA / constructProposalMsg

Method constructProposalMsg

consensus/vbft/msg_builder.go:227–285  ·  view source on GitHub ↗
(blkNum uint32, sysTxs, userTxs []*types.Transaction, chainconfig *vconfig.ChainConfig)

Source from the content-addressed store, hash-verified

225}
226
227func (self *Server) constructProposalMsg(blkNum uint32, sysTxs, userTxs []*types.Transaction, chainconfig *vconfig.ChainConfig) (*blockProposalMsg, error) {
228
229 prevBlk, prevBlkHash := self.blockPool.getSealedBlock(blkNum - 1)
230 if prevBlk == nil {
231 return nil, fmt.Errorf("failed to get prevBlock (%d)", blkNum-1)
232 }
233 blocktimestamp := uint32(time.Now().Unix())
234 if prevBlk.Block.Header.Timestamp >= blocktimestamp {
235 blocktimestamp = prevBlk.Block.Header.Timestamp + 1
236 }
237
238 vrfValue, vrfProof, err := computeVrf(self.account.PrivateKey, blkNum, prevBlk.getVrfValue())
239 if err != nil {
240 return nil, fmt.Errorf("failed to get vrf and proof: %s", err)
241 }
242
243 lastConfigBlkNum := prevBlk.Info.LastConfigBlockNum
244 if prevBlk.Info.NewChainConfig != nil {
245 lastConfigBlkNum = prevBlk.getBlockNum()
246 }
247 if chainconfig != nil {
248 lastConfigBlkNum = blkNum
249 }
250 vbftBlkInfo := &vconfig.VbftBlockInfo{
251 Proposer: self.Index,
252 VrfValue: vrfValue,
253 VrfProof: vrfProof,
254 LastConfigBlockNum: lastConfigBlkNum,
255 NewChainConfig: chainconfig,
256 }
257 consensusPayload, err := json.Marshal(vbftBlkInfo)
258 if err != nil {
259 return nil, err
260 }
261
262 emptyBlk, err := self.constructBlock(blkNum, prevBlkHash, sysTxs, consensusPayload, blocktimestamp)
263 if err != nil {
264 return nil, fmt.Errorf("failed to construct empty block: %s", err)
265 }
266 blk, err := self.constructBlock(blkNum, prevBlkHash, append(sysTxs, userTxs...), consensusPayload, blocktimestamp)
267 if err != nil {
268 return nil, fmt.Errorf("failed to constuct blk: %s", err)
269 }
270 merkleRoot, err := self.blockPool.getExecMerkleRoot(blkNum - 1)
271 if err != nil {
272 return nil, fmt.Errorf("failed to GetExecMerkleRoot: %s,blkNum:%d", err, (blkNum - 1))
273 }
274
275 msg := &blockProposalMsg{
276 Block: &Block{
277 Block: blk,
278 EmptyBlock: emptyBlk,
279 Info: vbftBlkInfo,
280 PrevBlockMerkleRoot: merkleRoot,
281 },
282 }
283
284 return msg, nil

Callers 1

makeProposalMethod · 0.95

Calls 8

constructBlockMethod · 0.95
computeVrfFunction · 0.85
getSealedBlockMethod · 0.80
ErrorfMethod · 0.80
getVrfValueMethod · 0.80
getBlockNumMethod · 0.80
MarshalMethod · 0.80
getExecMerkleRootMethod · 0.45

Tested by

no test coverage detected