Commit 914e819d authored by 袁兴强's avatar 袁兴强 Committed by vipwzw

fix ticket data race bug

parent 52413d6f
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
package ticket package ticket
import ( import (
"errors"
"fmt" "fmt"
"math/big" "math/big"
"strconv" "strconv"
...@@ -530,7 +531,7 @@ func (client *Client) delTicket(ticketID string) { ...@@ -530,7 +531,7 @@ func (client *Client) delTicket(ticketID string) {
} }
// Miner ticket miner function // Miner ticket miner function
func (client *Client) Miner(parent, block *types.Block) bool { func (client *Client) Miner(parent, block *types.Block) error {
//add miner address //add miner address
ticket, priv, diff, modify, ticketID, err := client.searchTargetTicket(parent, block) ticket, priv, diff, modify, ticketID, err := client.searchTargetTicket(parent, block)
if err != nil { if err != nil {
...@@ -540,21 +541,21 @@ func (client *Client) Miner(parent, block *types.Block) bool { ...@@ -540,21 +541,21 @@ func (client *Client) Miner(parent, block *types.Block) bool {
tlog.Error("Miner.RequestLastBlock", "err", err) tlog.Error("Miner.RequestLastBlock", "err", err)
} }
client.SetCurrentBlock(newblock) client.SetCurrentBlock(newblock)
return false return err
} }
if ticket == nil { if ticket == nil {
return false return errors.New("ticket is nil")
} }
err = client.addMinerTx(parent, block, diff, priv, ticket.TicketId, modify) err = client.addMinerTx(parent, block, diff, priv, ticket.TicketId, modify)
if err != nil { if err != nil {
return false return err
} }
err = client.WriteBlock(parent.StateHash, block) err = client.WriteBlock(parent.StateHash, block)
if err != nil { if err != nil {
return false return err
} }
client.delTicket(ticketID) client.delTicket(ticketID)
return true return nil
} }
//gas 直接燃烧 //gas 直接燃烧
...@@ -687,7 +688,10 @@ func (client *Client) CreateBlock() { ...@@ -687,7 +688,10 @@ func (client *Client) CreateBlock() {
} }
block, lastBlock := client.createBlock() block, lastBlock := client.createBlock()
hashlist := getTxHashes(block.Txs) hashlist := getTxHashes(block.Txs)
for !client.Miner(lastBlock, block) { for err := client.Miner(lastBlock, block); err != nil; err = client.Miner(lastBlock, block) {
if err == queue.ErrIsQueueClosed {
break
}
//加入新的txs, 继续挖矿 //加入新的txs, 继续挖矿
lasttime := block.BlockTime lasttime := block.BlockTime
//只有时间增加了1s影响,影响难度计算了,才会去更新区块 //只有时间增加了1s影响,影响难度计算了,才会去更新区块
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment