func send_all_tx(par string) { network.TxMutex.Lock() for k, v := range network.TransactionsToSend { if v.Own != 0 { cnt := network.NetRouteInv(1, btc.NewUint256(k[:]), nil) v.Invsentcnt += cnt fmt.Println("INV for TxID", v.Hash.String(), "sent to", cnt, "node(s)") } } network.TxMutex.Unlock() }
func send_tx(par string) { txid := btc.NewUint256FromString(par) if txid == nil { fmt.Println("You must specify a valid transaction ID for this command.") list_txs("") return } network.TxMutex.Lock() if ptx, ok := network.TransactionsToSend[txid.BIdx()]; ok { network.TxMutex.Unlock() cnt := network.NetRouteInv(1, txid, nil) ptx.Invsentcnt += cnt fmt.Println("INV for TxID", txid.String(), "sent to", cnt, "node(s)") fmt.Println("If it does not appear in the chain, you may want to redo it.") } else { network.TxMutex.Unlock() fmt.Println("No such transaction ID in the memory pool.") list_txs("") } }
func xml_txs2s(w http.ResponseWriter, r *http.Request) { if !ipchecker(r) { return } if checksid(r) { if len(r.Form["del"]) > 0 { tid := btc.NewUint256FromString(r.Form["del"][0]) if tid != nil { network.TxMutex.Lock() delete(network.TransactionsToSend, tid.BIdx()) network.TxMutex.Unlock() } } if len(r.Form["send"]) > 0 { tid := btc.NewUint256FromString(r.Form["send"][0]) if tid != nil { network.TxMutex.Lock() if ptx, ok := network.TransactionsToSend[tid.BIdx()]; ok { network.TxMutex.Unlock() cnt := network.NetRouteInv(1, tid, nil) if cnt == 0 { usif.SendInvToRandomPeer(1, tid) } else { ptx.Invsentcnt += cnt } } else { network.TxMutex.Unlock() } } } if len(r.Form["sendone"]) > 0 { tid := btc.NewUint256FromString(r.Form["sendone"][0]) if tid != nil { network.TxMutex.Lock() if ptx, ok := network.TransactionsToSend[tid.BIdx()]; ok { network.TxMutex.Unlock() usif.SendInvToRandomPeer(1, tid) ptx.Invsentcnt++ } else { network.TxMutex.Unlock() } } } } w.Header()["Content-Type"] = []string{"text/xml"} if len(r.Form["id"]) > 0 { output_tx_xml(w, r.Form["id"][0]) return } w.Write([]byte("<txpool>")) network.TxMutex.Lock() for _, v := range network.TransactionsToSend { w.Write([]byte("<tx>")) fmt.Fprint(w, "<id>", v.Tx.Hash.String(), "</id>") fmt.Fprint(w, "<time>", v.Firstseen.Unix(), "</time>") fmt.Fprint(w, "<len>", len(v.Data), "</len>") fmt.Fprint(w, "<own>", v.Own, "</own>") fmt.Fprint(w, "<firstseen>", v.Firstseen.Unix(), "</firstseen>") fmt.Fprint(w, "<invsentcnt>", v.Invsentcnt, "</invsentcnt>") fmt.Fprint(w, "<sentcnt>", v.SentCnt, "</sentcnt>") fmt.Fprint(w, "<sentlast>", v.Lastsent.Unix(), "</sentlast>") fmt.Fprint(w, "<volume>", v.Volume, "</volume>") fmt.Fprint(w, "<fee>", v.Fee, "</fee>") fmt.Fprint(w, "<blocked>", v.Blocked, "</blocked>") w.Write([]byte("</tx>")) } network.TxMutex.Unlock() w.Write([]byte("</txpool>")) }
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]) /* 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.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(), 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 }