From 06a401f1820748be3f86b8c3efcd82d7d2733076 Mon Sep 17 00:00:00 2001 From: jiangzehua <1092431698@qq.com> Date: Sat, 21 Oct 2023 18:01:16 +0800 Subject: [PATCH] feat(bpos): support create aux block with minerInfo --- benchmark/tools/generator/chain/datagen.go | 2 +- benchmark/tools/generator/chain/utils.go | 2 +- cmd/script/api/block.go | 2 +- pow/service.go | 18 +++++++++++------- servers/interfaces.go | 10 +++++++--- 5 files changed, 21 insertions(+), 13 deletions(-) diff --git a/benchmark/tools/generator/chain/datagen.go b/benchmark/tools/generator/chain/datagen.go index 4bf35f69f..e6d5ba5f0 100644 --- a/benchmark/tools/generator/chain/datagen.go +++ b/benchmark/tools/generator/chain/datagen.go @@ -195,7 +195,7 @@ func (g *DataGen) generateBlock( } }) - if block, err = g.pow.GenerateBlock(g.foundationAddr, + if block, err = g.pow.GenerateBlock(g.foundationAddr, "ELA", maxTxPerBlock); err != nil { return } diff --git a/benchmark/tools/generator/chain/utils.go b/benchmark/tools/generator/chain/utils.go index 9a6efa8d2..530386949 100644 --- a/benchmark/tools/generator/chain/utils.go +++ b/benchmark/tools/generator/chain/utils.go @@ -161,7 +161,7 @@ func newGenesisBlock(ac *account.Account) *types.Block { func quickGenerateBlock(pow *pow.Service, prevHash *common.Uint256, txs []interfaces.Transaction, minerAddr string, params *config.Configuration, height uint32) (*types.Block, error) { - coinBaseTx, err := pow.CreateCoinbaseTx(minerAddr, height) + coinBaseTx, err := pow.CreateCoinbaseTx(minerAddr, "ELA", height) if err != nil { return nil, err } diff --git a/cmd/script/api/block.go b/cmd/script/api/block.go index a89d945f8..8ae1c2d79 100644 --- a/cmd/script/api/block.go +++ b/cmd/script/api/block.go @@ -45,7 +45,7 @@ func newBlock(L *lua.LState) int { ChainParams: &config.DefaultParams, TxMemPool: m.Peer.GetTxPool(), }) - block, err := service.GenerateBlock(minerAddress, maxTxPerBlock) + block, err := service.GenerateBlock(minerAddress, service.MinerInfo, maxTxPerBlock) if err != nil { fmt.Printf("New block error: %s \n", err.Error()) } diff --git a/pow/service.go b/pow/service.go index 81d46a882..f333ae297 100644 --- a/pow/service.go +++ b/pow/service.go @@ -115,7 +115,8 @@ func (pow *Service) GetDefaultTxVersion(height uint32) common2.TransactionVersio return v } -func (pow *Service) CreateCoinbaseTx(minerAddr string, height uint32) (interfaces.Transaction, error) { +func (pow *Service) CreateCoinbaseTx(minerAddr string, + minerInfo string, height uint32) (interfaces.Transaction, error) { crRewardAddr := pow.chainParams.FoundationProgramHash if height >= pow.chainParams.CRConfiguration.CRCommitteeStartHeight { @@ -135,7 +136,7 @@ func (pow *Service) CreateCoinbaseTx(minerAddr string, height uint32) (interface common2.CoinBase, payload.CoinBaseVersion, &payload.CoinBase{ - Content: []byte(pow.MinerInfo), + Content: []byte(minerInfo), }, []*common2.Attribute{&txAttr}, []*common2.Input{ @@ -255,10 +256,11 @@ func (pow *Service) distributeDPOSReward(coinBaseTx interfaces.Transaction, } func (pow *Service) GenerateBlock(minerAddr string, + minerInfo string, txPerBlock int) (*types.Block, error) { bestChain := pow.chain.BestChain nextBlockHeight := bestChain.Height + 1 - coinBaseTx, err := pow.CreateCoinbaseTx(minerAddr, nextBlockHeight) + coinBaseTx, err := pow.CreateCoinbaseTx(minerAddr, minerInfo, nextBlockHeight) if err != nil { return nil, err } @@ -352,7 +354,7 @@ func (pow *Service) GenerateBlock(minerAddr string, return msgBlock, err } -func (pow *Service) CreateAuxBlock(payToAddr string) (*types.Block, error) { +func (pow *Service) CreateAuxBlock(payToAddr, minerInfo string) (*types.Block, error) { pow.mutex.Lock() defer pow.mutex.Unlock() @@ -366,7 +368,7 @@ func (pow *Service) CreateAuxBlock(payToAddr string) (*types.Block, error) { } // Create new block with nonce = 0 - auxBlock, err := pow.GenerateBlock(payToAddr, maxTxPerBlock) + auxBlock, err := pow.GenerateBlock(payToAddr, minerInfo, maxTxPerBlock) if err != nil { return nil, err } @@ -426,7 +428,8 @@ func (pow *Service) DiscreteMining(n uint32) ([]*common.Uint256, error) { log.Info("<================Discrete Mining==============>\n") for { - msgBlock, err := pow.GenerateBlock(pow.PayToAddr, maxTxPerBlock) + msgBlock, err := pow.GenerateBlock(pow.PayToAddr, + pow.chainParams.PowConfiguration.MinerInfo, maxTxPerBlock) if err != nil { log.Warn("Generate block failed, ", err.Error()) continue @@ -526,7 +529,8 @@ out: log.Debug("<================Packing Block==============>") //time.Sleep(15 * time.Second) - msgBlock, err := pow.GenerateBlock(pow.PayToAddr, maxTxPerBlock) + msgBlock, err := pow.GenerateBlock(pow.PayToAddr, + pow.chainParams.PowConfiguration.MinerInfo, maxTxPerBlock) if err != nil { log.Debug("generage block err", err) continue diff --git a/servers/interfaces.go b/servers/interfaces.go index 4f3354f3d..4b9d5f3d9 100644 --- a/servers/interfaces.go +++ b/servers/interfaces.go @@ -251,8 +251,12 @@ func CreateAuxBlock(param Params) map[string]interface{} { if !ok { return ResponsePack(InvalidParams, "parameter paytoaddress not found") } + minerInfo, ok := param.String("minerinfo") + if !ok { + return ResponsePack(InvalidParams, "parameter minerInfo not found") + } - block, err := Pow.CreateAuxBlock(payToAddr) + block, err := Pow.CreateAuxBlock(payToAddr, minerInfo) if err != nil { return ResponsePack(InternalError, "generate block failed") } @@ -2110,7 +2114,7 @@ type RPCProducerInfo struct { Index uint64 `json:"index"` } -//a group producer info include TotalDPoSV1Votes and producer count +// a group producer info include TotalDPoSV1Votes and producer count type RPCProducersInfo struct { ProducerInfoSlice []RPCProducerInfo `json:"producers"` TotalDPoSV1Votes string `json:"totaldposv1votes"` @@ -2134,7 +2138,7 @@ type RPCCRCandidateInfo struct { Index uint64 `json:"index"` } -//a group cr candidate info include TotalDPoSV1Votes and candidate count +// a group cr candidate info include TotalDPoSV1Votes and candidate count type RPCCRCandidatesInfo struct { CRCandidateInfoSlice []RPCCRCandidateInfo `json:"crcandidatesinfo"` TotalVotes string `json:"totalvotes"`