func LocalAcceptBlock(bl *btc.Block, from *network.OneConnection) (e error) { sta := time.Now() e = common.BlockChain.AcceptBlock(bl) if e == nil { network.MutexRcv.Lock() network.ReceivedBlocks[bl.Hash.BIdx()].TmAccept = time.Now().Sub(sta) network.MutexRcv.Unlock() for i := 1; i < len(bl.Txs); i++ { network.TxMined(bl.Txs[i].Hash) } if int64(bl.BlockTime) > time.Now().Add(-10*time.Minute).Unix() { // Freshly mined block - do the inv and beeps... common.Busy("NetRouteInv") network.NetRouteInv(2, bl.Hash, from) if common.CFG.Beeps.NewBlock { fmt.Println("\007Received block", common.BlockChain.BlockTreeEnd.Height) textui.ShowPrompt() } if common.MinedByUs(bl.Raw) { fmt.Println("\007Mined by '"+common.CFG.Beeps.MinerID+"':", bl.Hash) textui.ShowPrompt() } if common.CFG.Beeps.ActiveFork && common.Last.Block == common.BlockChain.BlockTreeEnd { // Last block has not changed, so it must have been an orphaned block bln := common.BlockChain.BlockIndex[bl.Hash.BIdx()] commonNode := common.Last.Block.FirstCommonParent(bln) forkDepth := bln.Height - commonNode.Height fmt.Println("Orphaned block:", bln.Height, bl.Hash.String()) if forkDepth > 1 { fmt.Println("\007\007\007WARNING: the fork is", forkDepth, "blocks deep") } textui.ShowPrompt() } if wallet.BalanceChanged && common.CFG.Beeps.NewBalance { fmt.Print("\007") } } common.Last.Mutex.Lock() common.Last.Time = time.Now() common.Last.Block = common.BlockChain.BlockTreeEnd common.Last.Mutex.Unlock() if wallet.BalanceChanged { wallet.BalanceChanged = false fmt.Println("Your balance has just changed") fmt.Print(wallet.DumpBalance(nil, false)) textui.ShowPrompt() } } else { fmt.Println("Warning: AcceptBlock failed. If the block was valid, you may need to rebuild the unspent DB (-r)") } return }
func LocalAcceptBlock(newbl *network.BlockRcvd) (e error) { newbl.TmQueue = time.Now() bl := newbl.Block if common.FLAG.TrustAll { bl.Trusted = true } if !common.BlockChain.DoNotSync { common.BlockChain.DoNotSync = true syncNow <- true } e = common.BlockChain.CommitBlock(bl, newbl.BlockTreeNode) if e == nil { // new block accepted newbl.TmAccepted = time.Now() newbl.NonWitnessSize = len(bl.OldData) common.RecalcAverageBlockSize(false) for i := 1; i < len(bl.Txs); i++ { network.TxMined(bl.Txs[i]) kspb := 1000 * bl.Txs[i].Fee / uint64(bl.Txs[i].Size) if i == 1 || newbl.MinFeeKSPB > kspb { newbl.MinFeeKSPB = kspb } } if int64(bl.BlockTime()) > time.Now().Add(-10*time.Minute).Unix() { // Freshly mined block - do the inv and beeps... new_block_mined(bl, newbl.Conn) } common.Last.Mutex.Lock() common.Last.Time = time.Now() common.Last.Block = common.BlockChain.BlockTreeEnd if false && common.Last.Block.Height == 725676 { fmt.Println("Reached block number", common.Last.Block.Height, "- exiting...") usif.Exit_now = true } common.Last.Mutex.Unlock() } else { fmt.Println("Warning: AcceptBlock failed. If the block was valid, you may need to rebuild the unspent DB (-r)") common.Last.Mutex.Lock() common.Last.Block = common.BlockChain.BlockTreeEnd common.Last.Mutex.Unlock() // update network.LastCommitedHeader network.MutexRcv.Lock() if network.LastCommitedHeader != common.BlockChain.BlockTreeEnd { network.LastCommitedHeader = common.BlockChain.BlockTreeEnd println("LastCommitedHeader moved to", network.LastCommitedHeader.Height) } network.DiscardedBlocks[newbl.Hash.BIdx()] = true network.MutexRcv.Unlock() } return }
func HandleRpcBlock(msg *rpcapi.BlockSubmited) { network.MutexRcv.Lock() rb := network.ReceivedBlocks[msg.Block.Hash.BIdx()] network.MutexRcv.Unlock() if rb == nil { panic("Block " + msg.Block.Hash.String() + " not in ReceivedBlocks map") } rb.TmQueue = time.Now() e, _, _ := common.BlockChain.CheckBlock(msg.Block) if e == nil { e = common.BlockChain.AcceptBlock(msg.Block) rb.TmAccepted = time.Now() } if e != nil { common.CountSafe("RPCBlockError") msg.Error = e.Error() msg.Done.Done() return } common.RecalcAverageBlockSize(false) for i := 1; i < len(msg.Block.Txs); i++ { network.TxMined(msg.Block.Txs[i]) } common.CountSafe("RPCBlockOK") println("New mined block", msg.Block.Height, "accepted OK") new_block_mined(msg.Block, nil) common.Last.Mutex.Lock() common.Last.Time = time.Now() common.Last.Block = common.BlockChain.BlockTreeEnd common.Last.Mutex.Unlock() msg.Done.Done() }
func LocalAcceptBlock(bl *btc.Block, from *network.OneConnection) (e error) { sta := time.Now() e = common.BlockChain.AcceptBlock(bl) if e == nil { network.MutexRcv.Lock() network.ReceivedBlocks[bl.Hash.BIdx()].TmAccept = time.Now().Sub(sta) network.MutexRcv.Unlock() for i := 1; i < len(bl.Txs); i++ { network.TxMined(bl.Txs[i]) /* dupa if msg:=contains_message(bl.Txs[i]); msg!=nil { for xx:=range msg { if msg[xx]<' ' || msg[xx]>127 { msg[xx] = '.' } } fmt.Println("TX", bl.Txs[i].Hash.String(), "says:", "'" + string(msg) + "'") textui.ShowPrompt() } */ } if int64(bl.BlockTime()) > time.Now().Add(-10*time.Minute).Unix() { // Freshly mined block - do the inv and beeps... common.Busy("NetRouteInv") network.NetRouteInv(2, bl.Hash, from) if common.CFG.Beeps.NewBlock { fmt.Println("\007Received block", common.BlockChain.BlockTreeEnd.Height) textui.ShowPrompt() } if common.CFG.Beeps.MinerID != "" { //_, rawtxlen := btc.NewTx(bl[bl.TxOffset:]) if bytes.Contains(bl.Txs[0].Serialize(), []byte(common.CFG.Beeps.MinerID)) { fmt.Println("\007Mined by '"+common.CFG.Beeps.MinerID+"':", bl.Hash) textui.ShowPrompt() } } if common.CFG.Beeps.ActiveFork && common.Last.Block == common.BlockChain.BlockTreeEnd { // Last block has not changed, so it must have been an orphaned block bln := common.BlockChain.BlockIndex[bl.Hash.BIdx()] commonNode := common.Last.Block.FirstCommonParent(bln) forkDepth := bln.Height - commonNode.Height fmt.Println("Orphaned block:", bln.Height, bl.Hash.String(), bln.BlockSize>>10, "KB") if forkDepth > 1 { fmt.Println("\007\007\007WARNING: the fork is", forkDepth, "blocks deep") } textui.ShowPrompt() } if wallet.BalanceChanged && common.CFG.Beeps.NewBalance { fmt.Print("\007") } } common.Last.Mutex.Lock() common.Last.Time = time.Now() common.Last.Block = common.BlockChain.BlockTreeEnd common.Last.Mutex.Unlock() if wallet.BalanceChanged { wallet.BalanceChanged = false fmt.Println("Your balance has just changed") fmt.Print(wallet.DumpBalance(wallet.MyBalance, nil, false, true)) textui.ShowPrompt() } } else { fmt.Println("Warning: AcceptBlock failed. If the block was valid, you may need to rebuild the unspent DB (-r)") } return }