Skip to content

Commit

Permalink
We’ve made the following improvements in the latest update
Browse files Browse the repository at this point in the history
1.	Updated the mining process
2.	Updated the miner election algorithm
3.	Updated the difficulty adjustment algorithm
4.	Adjusted the award distribution frequency and one time payout, while maintaining the cap of total available rewards.
5.	added compute penalty process.
6.	storage optimization
  • Loading branch information
MatrixAINetworkMan committed Oct 23, 2019
1 parent 3999c63 commit f66aa71
Show file tree
Hide file tree
Showing 304 changed files with 73,840 additions and 3,091 deletions.
294 changes: 278 additions & 16 deletions README.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion accounts/signhelper/sign_helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ func (sh *SignHelper) SignVrfByAccount(msg []byte, account common.Address) ([]by

func (sh *SignHelper) SignVrf(msg []byte, blkHash common.Hash) ([]byte, []byte, []byte, error) {
signAccount, signPassword, err := sh.getSignAccountAndPassword(sh.authReader, blkHash)
//log.ERROR(ModeLog, "signAccount", signAccount, "signPassword", signPassword, "err", err, "blkhash", blkHash)
//log.Error(ModeLog, "signAccount", signAccount, "signPassword", signPassword, "err", err, "blkhash", blkHash)
if err != nil {
return []byte{}, []byte{}, []byte{}, ErrGetAccountAndPassword
}
Expand Down
2 changes: 1 addition & 1 deletion baseinterface/election.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ func NewElect(ElectPlugs string) ElectionInterface {
}

type ElectionInterface interface {
MinerTopGen(*mc.MasterMinerReElectionReqMsg) *mc.MasterMinerReElectionRsp
MinerTopGen(*mc.MasterMinerReElectionReqMsg, *state.StateDBManage) *mc.MasterMinerReElectionRsp
ValidatorTopGen(*mc.MasterValidatorReElectionReqMsg, *state.StateDBManage) *mc.MasterValidatorReElectionRsq
ToPoUpdate(support.AllNative, *mc.TopologyGraph) []mc.Alternative
// PrimarylistUpdate([]mc.TopologyNodeInfo, []mc.TopologyNodeInfo, []mc.TopologyNodeInfo, mc.TopologyNodeInfo, int) ([]mc.TopologyNodeInfo, []mc.TopologyNodeInfo, []mc.TopologyNodeInfo)
Expand Down
67 changes: 47 additions & 20 deletions blkgenor/blockgenor.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"github.com/MatrixAINetwork/go-matrix/event"
"github.com/MatrixAINetwork/go-matrix/log"
"github.com/MatrixAINetwork/go-matrix/mc"
"github.com/MatrixAINetwork/go-matrix/params/manversion"
)

type BlockGenor struct {
Expand Down Expand Up @@ -100,7 +101,7 @@ func New(man Backend) (*BlockGenor, error) {
}

go bg.update()
log.INFO("区块生成模块对象创建成功")
log.Info("区块生成模块对象创建成功")
return bg, nil
}

Expand All @@ -119,7 +120,7 @@ func (self *BlockGenor) update() {
self.minerResultSub.Unsubscribe()
self.leaderChangeSub.Unsubscribe()
self.roleUpdatedMsgSub.Unsubscribe()
log.INFO("区块生成模块退出成功")
log.Info("区块生成模块退出成功")
}()

for {
Expand Down Expand Up @@ -157,16 +158,25 @@ func (self *BlockGenor) update() {
}

func (self *BlockGenor) roleUpdatedMsgHandle(roleMsg *mc.RoleUpdatedMsg) error {
log.INFO(self.logExtraInfo(), "CA身份消息处理", "开始", "高度", roleMsg.BlockNum, "角色", roleMsg.Role.String(), "block hash", roleMsg.BlockHash.TerminalString())
log.Info(self.logExtraInfo(), "CA身份消息处理", "开始", "高度", roleMsg.BlockNum, "角色", roleMsg.Role.String(), "block hash", roleMsg.BlockHash.TerminalString(), "version", roleMsg.Version)
curNumber := roleMsg.BlockNum + 1
self.pm.SetCurNumber(curNumber, roleMsg.SuperSeq)
if curNumber >= manversion.VersionNumAIMine {
log.Trace(self.logExtraInfo(), "CA身份消息处理", "高度大于指定高度,不处理", "指定版本切换高度", manversion.VersionNumAIMine)
return nil
}
if manversion.VersionCmp(roleMsg.Version, manversion.VersionAIMine) >= 0 {
log.Trace(self.logExtraInfo(), "CA身份消息处理", "版本大于指定版本,不处理", "msg version", roleMsg.Version, "指定version", manversion.VersionAIMine)
return nil
}

bcInterval, err := self.man.BlockChain().GetBroadcastIntervalByHash(roleMsg.BlockHash)
if err != nil {
log.Error(self.logExtraInfo(), "CA身份消息处理", "获取广播周期信息by hash 失败", "err", err)
return err
}

role := roleMsg.Role
curNumber := roleMsg.BlockNum + 1
self.pm.SetCurNumber(curNumber, roleMsg.SuperSeq)
if role == common.RoleValidator || role == common.RoleBroadcast {
curProcess := self.pm.GetCurrentProcess()
curProcess.StartRunning(role, bcInterval)
Expand All @@ -176,7 +186,7 @@ func (self *BlockGenor) roleUpdatedMsgHandle(roleMsg *mc.RoleUpdatedMsg) error {
}

func (self *BlockGenor) leaderChangeNotifyHandle(leaderMsg *mc.LeaderChangeNotify) {
log.INFO(self.logExtraInfo(), "Leader变更消息处理", "开始", "高度", leaderMsg.Number, "轮次",
log.Info(self.logExtraInfo(), "Leader变更消息处理", "开始", "高度", leaderMsg.Number, "轮次",
leaderMsg.ReelectTurn, "有效", leaderMsg.ConsensusState, "leader", leaderMsg.Leader.Hex(), "next leader", leaderMsg.NextLeader.Hex())

number := leaderMsg.Number
Expand Down Expand Up @@ -206,7 +216,7 @@ func (self *BlockGenor) leaderChangeNotifyHandle(leaderMsg *mc.LeaderChangeNotif
if err == nil {
nextProcess.SetCurLeader(leaderMsg.NextLeader, mc.ConsensusTurnInfo{})
} else {
log.WARN(self.logExtraInfo(), "获取下个高度process失败", err)
log.Warn(self.logExtraInfo(), "获取下个高度process失败", err)
}
} else {
process.ReInit()
Expand All @@ -217,33 +227,43 @@ func (self *BlockGenor) leaderChangeNotifyHandle(leaderMsg *mc.LeaderChangeNotif
}

func (self *BlockGenor) minerResultHandle(minerResult *mc.HD_MiningRspMsg) {
//log.INFO(self.logExtraInfo(), "矿工挖矿结果消息处理", "开始", "高度", minerResult.Number, "难度", minerResult.Difficulty.Uint64(), "block hash", minerResult.BlockHash.TerminalString())
//defer log.INFO(self.logExtraInfo(), "矿工挖矿结果消息处理", "结束", "高度", minerResult.Number, "block hash", minerResult.BlockHash.TerminalString())
//log.Info(self.logExtraInfo(), "矿工挖矿结果消息处理", "开始", "高度", minerResult.Number, "难度", minerResult.Difficulty.Uint64(), "block hash", minerResult.BlockHash.TerminalString())
//defer log.Info(self.logExtraInfo(), "矿工挖矿结果消息处理", "结束", "高度", minerResult.Number, "block hash", minerResult.BlockHash.TerminalString())
process, err := self.pm.GetProcess(minerResult.Number)
if err != nil {
log.INFO(self.logExtraInfo(), "矿工挖矿结果消息 获取Process失败", err)
log.Info(self.logExtraInfo(), "矿工挖矿结果消息 获取Process失败", err)
return
}
process.AddMinerResult(minerResult)
}

func (self *BlockGenor) broadcastMinerResultHandle(result *mc.HD_BroadcastMiningRspMsg) {
if manversion.VersionCmp(string(result.BlockMainData.Header.Version), manversion.VersionAIMine) >= 0 {
log.Trace(self.logExtraInfo(), "广播矿工挖矿结果消息处理", "版本大于指定版本,不处理", "msg version", string(result.BlockMainData.Header.Version), "指定version", manversion.VersionAIMine)
return
}

number := result.BlockMainData.Header.Number.Uint64()
log.INFO(self.logExtraInfo(), "广播矿工挖矿结果消息处理", "开始", "高度", number, "交易数量", len(types.GetTX(result.BlockMainData.Txs)), "from", result.From.Hex())
log.Info(self.logExtraInfo(), "广播矿工挖矿结果消息处理", "开始", "高度", number, "交易数量", len(types.GetTX(result.BlockMainData.Txs)), "from", result.From.Hex())
defer log.Debug(self.logExtraInfo(), "广播矿工挖矿结果消息处理", "结束", "高度", number)

process, err := self.pm.GetProcess(number)
if err != nil {
log.INFO(self.logExtraInfo(), "矿工挖矿结果消息 获取Process失败", err)
log.Info(self.logExtraInfo(), "矿工挖矿结果消息 获取Process失败", err)
return
}
process.AddBroadcastMinerResult(result)
}

func (self *BlockGenor) consensusBlockMsgHandle(data *mc.BlockLocalVerifyOK) {
log.INFO(self.logExtraInfo(), "共识结果消息处理", "开始", "高度", data.Header.Number, "block hash", data.BlockHash.TerminalString(),
log.Info(self.logExtraInfo(), "共识结果消息处理", "开始", "高度", data.Header.Number, "block hash", data.BlockHash.TerminalString(),
"root", data.Header.Roots)
//defer log.INFO(self.logExtraInfo(), "共识结果消息处理", "结束", "高度", data.Header.Number)
if manversion.VersionCmp(string(data.Header.Version), manversion.VersionAIMine) >= 0 {
log.Trace(self.logExtraInfo(), "共识结果消息处理", "版本大于指定版本,不处理", "msg version", data.Header.Version, "指定version", manversion.VersionAIMine)
return
}

//defer log.Info(self.logExtraInfo(), "共识结果消息处理", "结束", "高度", data.Header.Number)
process, err := self.pm.GetProcess(data.Header.Number.Uint64())
if err != nil {
log.Error(self.logExtraInfo(), "共识结果消息 获取Process失败", err)
Expand All @@ -254,9 +274,12 @@ func (self *BlockGenor) consensusBlockMsgHandle(data *mc.BlockLocalVerifyOK) {
}

func (self *BlockGenor) blockInsertMsgHandle(blockInsert *mc.HD_BlockInsertNotify) {
if manversion.VersionCmp(string(blockInsert.Header.Version), manversion.VersionAIMine) >= 0 {
return
}
number := blockInsert.Header.Number.Uint64()
curNumber := self.pm.GetCurNumber()
//log.INFO(self.logExtraInfo(), "收到的区块插入消息广播高度", number, "from", blockInsert.From.Hex(), "当前高度", curNumber)
//log.Info(self.logExtraInfo(), "收到的区块插入消息广播高度", number, "from", blockInsert.From.Hex(), "当前高度", curNumber)

if number > curNumber {
log.Debug(self.logExtraInfo(), "fetch 区块高度", number, "from", blockInsert.From.Hex())
Expand All @@ -274,13 +297,17 @@ func (self *BlockGenor) blockInsertMsgHandle(blockInsert *mc.HD_BlockInsertNotif

func (self *BlockGenor) handleRecoveryMsg(msg *mc.RecoveryStateMsg) {
if nil == msg || nil == msg.Header {
log.ERROR(self.logExtraInfo(), "状态恢复消息", "消息为nil")
log.Error(self.logExtraInfo(), "状态恢复消息", "消息为nil")
return
}
if manversion.VersionCmp(string(msg.Header.Version), manversion.VersionAIMine) >= 0 {
return
}
if msg.Type != mc.RecoveryTypeFullHeader {
log.Warn(self.logExtraInfo(), "状态恢复消息", "类型不是恢复区块,忽略消息")
return
}

number := msg.Header.Number.Uint64()
process, err := self.pm.GetProcess(number)
if err != nil {
Expand All @@ -293,11 +320,11 @@ func (self *BlockGenor) handleRecoveryMsg(msg *mc.RecoveryStateMsg) {

func (self *BlockGenor) handleNewBlockReqMsg(req *mc.HD_FullBlockReqMsg) {
if nil == req {
log.ERROR(self.logExtraInfo(), "完整区块请求消息", "消息为nil")
log.Error(self.logExtraInfo(), "完整区块请求消息", "消息为nil")
return
}

log.INFO(self.logExtraInfo(), "完整区块请求消息", "开始", "高度", req.Number)
log.Info(self.logExtraInfo(), "完整区块请求消息", "开始", "高度", req.Number)
defer log.Debug(self.logExtraInfo(), "完整区块请求消息", "结束", "高度", req.Number)
process, err := self.pm.GetProcess(req.Number)
if err != nil {
Expand All @@ -310,13 +337,13 @@ func (self *BlockGenor) handleNewBlockReqMsg(req *mc.HD_FullBlockReqMsg) {

func (self *BlockGenor) handleNewBlockRspMsg(rsp *mc.HD_FullBlockRspMsg) {
if nil == rsp || nil == rsp.Header {
log.ERROR(self.logExtraInfo(), "完整区块响应消息", "消息为nil")
log.Error(self.logExtraInfo(), "完整区块响应消息", "消息为nil")
return
}

number := rsp.Header.Number.Uint64()

log.INFO(self.logExtraInfo(), "完整区块响应消息", "开始", "高度", number)
log.Info(self.logExtraInfo(), "完整区块响应消息", "开始", "高度", number)
defer log.Debug(self.logExtraInfo(), "完整区块响应消息", "结束", "高度", number)
process, err := self.pm.GetProcess(number)
if err != nil {
Expand Down
6 changes: 3 additions & 3 deletions blkgenor/pow_pool.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ func (bpc *blockPowCache) addPow(diff *big.Int, minerResult *mc.HD_MiningRspMsg)

_, exist := fromMap[minerResult.From]
if exist {
log.WARN(bpc.powPool.logInfo, "添加挖矿结果池,已存在的挖矿结果from", minerResult.From.Hex(), "diff", diff, "block hash", bpc.blockHash.TerminalString())
log.Warn(bpc.powPool.logInfo, "添加挖矿结果池,已存在的挖矿结果from", minerResult.From.Hex(), "diff", diff, "block hash", bpc.blockHash.TerminalString())
return errors.Errorf("矿工挖矿结果已经存在")
}
fromMap[minerResult.From] = minerResult
Expand Down Expand Up @@ -125,7 +125,7 @@ func (self *PowPool) AddMinerResult(blockHash common.Hash, diff *big.Int, minerR
return err
}
self.plusFromCount(minerResult.From)
log.INFO(self.logInfo, "加入挖矿结果池成功 账户", minerResult.From.Hex(), "难度", diff, "区块 hash", blockHash.TerminalString())
log.Info(self.logInfo, "加入挖矿结果池成功 账户", minerResult.From.Hex(), "难度", diff, "区块 hash", blockHash.TerminalString())
return nil
}

Expand All @@ -152,7 +152,7 @@ func (self *PowPool) DelOneResult(blockHash common.Hash, diff *big.Int, from com
success := blockCache.delPow(diff, from)
if success {
count := self.getFromCount(from)
log.INFO(self.logInfo, "删除挖矿结果成功, 账户", from.Hex(), "原结果总数", count)
log.Info(self.logInfo, "删除挖矿结果成功, 账户", from.Hex(), "原结果总数", count)
self.minusFromCount(from)
}
return nil
Expand Down
Loading

0 comments on commit f66aa71

Please sign in to comment.