- 0971A01F7FA9F4D6209A769A8D5249AFAC1E458907C031626EE764B6F85416AEDA8DE595E8F18F3E9968D7E699F35259BC833BBA1D88C14DDB26D29AFD45C7FB
+ 1F0735D2CEE2F9CA2A177AEAD4ECC7A1371D59C4375AEDB172EE99C28B02FA28E664DECEC9580A510BFCA4738D85E377FB74396FE4979B75ADBE1A3EC92B01C9
bitcoin/src/main.cpp
(1322 . 14)(1322 . 25)
32
33 bool ProcessBlock(CNode* pfrom, CBlock* pblock)
34 {
35 // Whose block we are trying.
36 string peer_ip;
37
38 if (pfrom != NULL) {
39 peer_ip = pfrom->addr.ToStringIP(); // if candidate block came from a peer
40 } else {
41 peer_ip = "LOCAL"; // if it came from, e.g., EatBlock
42 }
43
44 // Check for duplicate
45 uint256 hash = pblock->GetHash();
46 if (mapBlockIndex.count(hash))
47 return error("ProcessBlock() : already have block %d %s", mapBlockIndex[hash]->nHeight, hash.ToString().c_str());
48 return error("ProcessBlock() : already have block %d %s from peer %s",
49 mapBlockIndex[hash]->nHeight, hash.ToString().c_str(),
50 peer_ip.c_str());
51
52 // Preliminary checks
53 if (!pblock->CheckBlock())
54 return error("ProcessBlock() : CheckBlock FAILED");
55 return error("ProcessBlock() : CheckBlock FAILED from peer %s", peer_ip.c_str());
56
57 CBlockIndex* pcheckpoint = Checkpoints::GetLastCheckpoint(mapBlockIndex);
58 if (pcheckpoint && pblock->hashPrevBlock != hashBestChain)
(1340 . 7)(1351 . 8)
60 {
61 if (pfrom)
62 pfrom->Misbehaving(100);
63 return error("ProcessBlock() : block with timestamp before last checkpoint");
64 return error("ProcessBlock() : block with timestamp before last checkpoint from peer %s",
65 peer_ip.c_str());
66 }
67 CBigNum bnNewBlock;
68 bnNewBlock.SetCompact(pblock->nBits);
(1350 . 14)(1362 . 17)
70 {
71 if (pfrom)
72 pfrom->Misbehaving(100);
73 return error("ProcessBlock() : block with too little proof-of-work");
74 return error("ProcessBlock() : block with too little proof-of-work from peer %s",
75 peer_ip.c_str());
76 }
77 }
78
79 // If don't already have its previous block, throw it out!
80 if (!mapBlockIndex.count(pblock->hashPrevBlock))
81 {
82 printf("ProcessBlock: BASTARD BLOCK, prev=%s, DISCARDED\n", pblock->hashPrevBlock.ToString().c_str());
83 printf("ProcessBlock: BASTARD BLOCK, prev=%s, DISCARDED from peer %s\n",
84 pblock->hashPrevBlock.ToString().c_str(),
85 peer_ip.c_str());
86
87 // Ask this guy to fill in what we're missing
88 if (pfrom)
(1368 . 9)(1383 . 11)
90
91 // Store to disk
92 if (!pblock->AcceptBlock())
93 return error("ProcessBlock() : AcceptBlock FAILED");
94
95 printf("ProcessBlock: ACCEPTED\n");
96 return error("ProcessBlock() : AcceptBlock FAILED from peer %s", peer_ip.c_str());
97
98 printf("ProcessBlock: ACCEPTED block %s from: %s\n",
99 hash.ToString().c_str(), peer_ip.c_str());
100
101 return true;
102 }
103