(self)
| 83 | break |
| 84 | |
| 85 | def run_test(self): |
| 86 | p2p0 = self.nodes[0].add_p2p_connection(BaseNode()) |
| 87 | |
| 88 | # Build the blockchain |
| 89 | self.tip = int(self.nodes[0].getbestblockhash(), 16) |
| 90 | self.block_time = self.nodes[0].getblock(self.nodes[0].getbestblockhash())['time'] + 1 |
| 91 | |
| 92 | self.blocks = [] |
| 93 | |
| 94 | # Get a pubkey for the coinbase TXO |
| 95 | coinbase_key = ECKey() |
| 96 | coinbase_key.generate() |
| 97 | coinbase_pubkey = coinbase_key.get_pubkey().get_bytes() |
| 98 | |
| 99 | # Create the first block with a coinbase output to our key |
| 100 | height = self.nodes[0].getblockcount() + 1 |
| 101 | block = create_block(self.tip, create_coinbase(height, coinbase_pubkey), self.block_time) |
| 102 | self.blocks.append(block) |
| 103 | self.block_time += 1 |
| 104 | block.solve() |
| 105 | # Save the coinbase for later |
| 106 | self.block1 = block |
| 107 | self.tip = block.sha256 |
| 108 | height += 1 |
| 109 | |
| 110 | # Bury the block 100 deep so the coinbase output is spendable |
| 111 | for _ in range(100): |
| 112 | block = create_block(self.tip, create_coinbase(height), self.block_time) |
| 113 | block.solve() |
| 114 | self.blocks.append(block) |
| 115 | self.tip = block.sha256 |
| 116 | self.block_time += 1 |
| 117 | height += 1 |
| 118 | |
| 119 | # Create a transaction spending the coinbase output with an invalid (null) signature |
| 120 | tx = CTransaction() |
| 121 | tx.vin.append(CTxIn(COutPoint(self.block1.vtx[0].sha256, 0), scriptSig=b"")) |
| 122 | tx.vout.append(CTxOut(49 * 100000000, CScript([OP_TRUE]))) |
| 123 | tx.calc_sha256() |
| 124 | |
| 125 | block102 = create_block(self.tip, create_coinbase(height), self.block_time, txlist=[tx]) |
| 126 | self.block_time += 1 |
| 127 | block102.solve() |
| 128 | self.blocks.append(block102) |
| 129 | self.tip = block102.sha256 |
| 130 | self.block_time += 1 |
| 131 | height += 1 |
| 132 | |
| 133 | # Bury the assumed valid block 2100 deep |
| 134 | for _ in range(2100): |
| 135 | block = create_block(self.tip, create_coinbase(height), self.block_time) |
| 136 | block.solve() |
| 137 | self.blocks.append(block) |
| 138 | self.tip = block.sha256 |
| 139 | self.block_time += 1 |
| 140 | height += 1 |
| 141 | |
| 142 | self.nodes[0].disconnect_p2ps() |
nothing calls this directly
no test coverage detected