Minor Python cleanups to make flake8 pass with the new rules enabled

This commit is contained in:
practicalswift 2018-04-16 11:13:07 +02:00
parent 0d6992168c
commit f020aca297
21 changed files with 58 additions and 50 deletions

View File

@ -286,7 +286,7 @@ Arguments:
def report_cmd(argv): def report_cmd(argv):
if len(argv) == 2: if len(argv) == 2:
sys.exit(REPORT_USAGE) sys.exit(REPORT_USAGE)
base_directory = argv[2] base_directory = argv[2]
if not os.path.exists(base_directory): if not os.path.exists(base_directory):
sys.exit("*** bad <base_directory>: %s" % base_directory) sys.exit("*** bad <base_directory>: %s" % base_directory)
@ -444,7 +444,7 @@ def print_file_action_message(filename, action):
def update_cmd(argv): def update_cmd(argv):
if len(argv) != 3: if len(argv) != 3:
sys.exit(UPDATE_USAGE) sys.exit(UPDATE_USAGE)
base_directory = argv[2] base_directory = argv[2]
if not os.path.exists(base_directory): if not os.path.exists(base_directory):
sys.exit("*** bad base_directory: %s" % base_directory) sys.exit("*** bad base_directory: %s" % base_directory)
@ -570,13 +570,13 @@ def insert_cmd(argv):
_, extension = os.path.splitext(filename) _, extension = os.path.splitext(filename)
if extension not in ['.h', '.cpp', '.cc', '.c', '.py']: if extension not in ['.h', '.cpp', '.cc', '.c', '.py']:
sys.exit("*** cannot insert for file extension %s" % extension) sys.exit("*** cannot insert for file extension %s" % extension)
if extension == '.py': if extension == '.py':
style = 'python' style = 'python'
else: else:
style = 'cpp' style = 'cpp'
exec_insert_header(filename, style) exec_insert_header(filename, style)
################################################################################ ################################################################################
# UI # UI
################################################################################ ################################################################################

View File

@ -21,7 +21,8 @@ import argparse
import hashlib import hashlib
import subprocess import subprocess
import sys import sys
import json,codecs import json
import codecs
try: try:
from urllib.request import Request,urlopen from urllib.request import Request,urlopen
except: except:

View File

@ -41,19 +41,19 @@ for folder in folders:
file_path = os.path.join(absFolder, file) file_path = os.path.join(absFolder, file)
fileMetaMap = {'file' : file, 'osize': os.path.getsize(file_path), 'sha256Old' : file_hash(file_path)} fileMetaMap = {'file' : file, 'osize': os.path.getsize(file_path), 'sha256Old' : file_hash(file_path)}
fileMetaMap['contentHashPre'] = content_hash(file_path) fileMetaMap['contentHashPre'] = content_hash(file_path)
try: try:
subprocess.call([pngcrush, "-brute", "-ow", "-rem", "gAMA", "-rem", "cHRM", "-rem", "iCCP", "-rem", "sRGB", "-rem", "alla", "-rem", "text", file_path], subprocess.call([pngcrush, "-brute", "-ow", "-rem", "gAMA", "-rem", "cHRM", "-rem", "iCCP", "-rem", "sRGB", "-rem", "alla", "-rem", "text", file_path],
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
except: except:
print("pngcrush is not installed, aborting...") print("pngcrush is not installed, aborting...")
sys.exit(0) sys.exit(0)
#verify #verify
if "Not a PNG file" in subprocess.check_output([pngcrush, "-n", "-v", file_path], stderr=subprocess.STDOUT, universal_newlines=True): if "Not a PNG file" in subprocess.check_output([pngcrush, "-n", "-v", file_path], stderr=subprocess.STDOUT, universal_newlines=True):
print("PNG file "+file+" is corrupted after crushing, check out pngcursh version") print("PNG file "+file+" is corrupted after crushing, check out pngcursh version")
sys.exit(1) sys.exit(1)
fileMetaMap['sha256New'] = file_hash(file_path) fileMetaMap['sha256New'] = file_hash(file_path)
fileMetaMap['contentHashPost'] = content_hash(file_path) fileMetaMap['contentHashPost'] = content_hash(file_path)
@ -72,5 +72,5 @@ for fileDict in outputArray:
totalSaveBytes += fileDict['osize'] - fileDict['psize'] totalSaveBytes += fileDict['osize'] - fileDict['psize']
noHashChange = noHashChange and (oldHash == newHash) noHashChange = noHashChange and (oldHash == newHash)
print(fileDict['file']+"\n size diff from: "+str(fileDict['osize'])+" to: "+str(fileDict['psize'])+"\n old sha256: "+oldHash+"\n new sha256: "+newHash+"\n") print(fileDict['file']+"\n size diff from: "+str(fileDict['osize'])+" to: "+str(fileDict['psize'])+"\n old sha256: "+oldHash+"\n new sha256: "+newHash+"\n")
print("completed. Checksum stable: "+str(noHashChange)+". Total reduction: "+str(totalSaveBytes)+" bytes") print("completed. Checksum stable: "+str(noHashChange)+". Total reduction: "+str(totalSaveBytes)+" bytes")

View File

@ -21,7 +21,6 @@ from binascii import hexlify, unhexlify
settings = {} settings = {}
##### Switch endian-ness #####
def hex_switchEndian(s): def hex_switchEndian(s):
""" Switches the endianness of a hex string (in pairs of hex chars) """ """ Switches the endianness of a hex string (in pairs of hex chars) """
pairList = [s[i:i+2].encode() for i in range(0, len(s), 2)] pairList = [s[i:i+2].encode() for i in range(0, len(s), 2)]

View File

@ -21,7 +21,6 @@ import os.path
settings = {} settings = {}
##### Switch endian-ness #####
def hex_switchEndian(s): def hex_switchEndian(s):
""" Switches the endianness of a hex string (in pairs of hex chars) """ """ Switches the endianness of a hex string (in pairs of hex chars) """
pairList = [s[i:i+2].encode() for i in range(0, len(s), 2)] pairList = [s[i:i+2].encode() for i in range(0, len(s), 2)]

View File

@ -34,7 +34,8 @@ These should be pasted into `src/chainparamsseeds.h`.
from base64 import b32decode from base64 import b32decode
from binascii import a2b_hex from binascii import a2b_hex
import sys, os import sys
import os
import re import re
# ipv4 in ipv6 prefix # ipv4 in ipv6 prefix
@ -46,7 +47,7 @@ def name_to_ipv6(addr):
if len(addr)>6 and addr.endswith('.onion'): if len(addr)>6 and addr.endswith('.onion'):
vchAddr = b32decode(addr[0:-6], True) vchAddr = b32decode(addr[0:-6], True)
if len(vchAddr) != 16-len(pchOnionCat): if len(vchAddr) != 16-len(pchOnionCat):
raise ValueError('Invalid onion %s' % s) raise ValueError('Invalid onion %s' % vchAddr)
return pchOnionCat + vchAddr return pchOnionCat + vchAddr
elif '.' in addr: # IPv4 elif '.' in addr: # IPv4
return pchIPv4 + bytearray((int(x) for x in addr.split('.'))) return pchIPv4 + bytearray((int(x) for x in addr.split('.')))
@ -132,7 +133,7 @@ def main():
with open(os.path.join(indir,'nodes_test.txt'),'r') as f: with open(os.path.join(indir,'nodes_test.txt'),'r') as f:
process_nodes(g, f, 'pnSeed6_test', 18333) process_nodes(g, f, 'pnSeed6_test', 18333)
g.write('#endif // BITCOIN_CHAINPARAMSSEEDS_H\n') g.write('#endif // BITCOIN_CHAINPARAMSSEEDS_H\n')
if __name__ == '__main__': if __name__ == '__main__':
main() main()

View File

@ -6,6 +6,11 @@
# Generate seeds.txt from Pieter's DNS seeder # Generate seeds.txt from Pieter's DNS seeder
# #
import re
import sys
import dns.resolver
import collections
NSEEDS=512 NSEEDS=512
MAX_SEEDS_PER_ASN=2 MAX_SEEDS_PER_ASN=2
@ -22,11 +27,6 @@ SUSPICIOUS_HOSTS = {
"54.94.195.96", "54.94.200.247" "54.94.195.96", "54.94.200.247"
} }
import re
import sys
import dns.resolver
import collections
PATTERN_IPV4 = re.compile(r"^((\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})):(\d+)$") PATTERN_IPV4 = re.compile(r"^((\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})):(\d+)$")
PATTERN_IPV6 = re.compile(r"^\[([0-9a-z:]+)\]:(\d+)$") PATTERN_IPV6 = re.compile(r"^\[([0-9a-z:]+)\]:(\d+)$")
PATTERN_ONION = re.compile(r"^([abcdefghijklmnopqrstuvwxyz234567]{16}\.onion):(\d+)$") PATTERN_ONION = re.compile(r"^([abcdefghijklmnopqrstuvwxyz234567]{16}\.onion):(\d+)$")

View File

@ -43,8 +43,10 @@ def b58encode(v):
# leading 0-bytes in the input become leading-1s # leading 0-bytes in the input become leading-1s
nPad = 0 nPad = 0
for c in v: for c in v:
if c == 0: nPad += 1 if c == 0:
else: break nPad += 1
else:
break
return (__b58chars[0]*nPad) + result return (__b58chars[0]*nPad) + result
@ -98,7 +100,8 @@ def b58decode_chk(v):
def get_bcaddress_version(strAddress): def get_bcaddress_version(strAddress):
""" Returns None if strAddress is invalid. Otherwise returns integer version of address. """ """ Returns None if strAddress is invalid. Otherwise returns integer version of address. """
addr = b58decode_chk(strAddress) addr = b58decode_chk(strAddress)
if addr is None or len(addr)!=21: return None if addr is None or len(addr)!=21:
return None
version = addr[0] version = addr[0]
return ord(version) return ord(version)

View File

@ -74,12 +74,12 @@ def gen_invalid_vector(template, corrupt_prefix, randomize_payload_size, corrupt
prefix = os.urandom(1) prefix = os.urandom(1)
else: else:
prefix = bytearray(template[0]) prefix = bytearray(template[0])
if randomize_payload_size: if randomize_payload_size:
payload = os.urandom(max(int(random.expovariate(0.5)), 50)) payload = os.urandom(max(int(random.expovariate(0.5)), 50))
else: else:
payload = os.urandom(template[1]) payload = os.urandom(template[1])
if corrupt_suffix: if corrupt_suffix:
suffix = os.urandom(len(template[2])) suffix = os.urandom(len(template[2]))
else: else:
@ -114,7 +114,8 @@ def gen_invalid_vectors():
yield val, yield val,
if __name__ == '__main__': if __name__ == '__main__':
import sys, json import sys
import json
iters = {'valid':gen_valid_vectors, 'invalid':gen_invalid_vectors} iters = {'valid':gen_valid_vectors, 'invalid':gen_invalid_vectors}
try: try:
uiter = iters[sys.argv[1]] uiter = iters[sys.argv[1]]
@ -124,7 +125,7 @@ if __name__ == '__main__':
count = int(sys.argv[2]) count = int(sys.argv[2])
except IndexError: except IndexError:
count = 0 count = 0
data = list(islice(uiter(), count)) data = list(islice(uiter(), count))
json.dump(data, sys.stdout, sort_keys=True, indent=4) json.dump(data, sys.stdout, sort_keys=True, indent=4)
sys.stdout.write('\n') sys.stdout.write('\n')

View File

@ -25,7 +25,7 @@ salt = "".join([x[2:] for x in hexseq])
#Create 32 byte b64 password #Create 32 byte b64 password
password = base64.urlsafe_b64encode(os.urandom(32)).decode("utf-8") password = base64.urlsafe_b64encode(os.urandom(32)).decode("utf-8")
m = hmac.new(bytearray(salt, 'utf-8'), bytearray(password, 'utf-8'), "SHA256") m = hmac.new(bytearray(salt, 'utf-8'), bytearray(password, 'utf-8'), "SHA256")
result = m.hexdigest() result = m.hexdigest()

View File

@ -129,7 +129,7 @@ class BIP68Test(BitcoinTestFramework):
# Track whether any sequence locks used should fail # Track whether any sequence locks used should fail
should_pass = True should_pass = True
# Track whether this transaction was built with sequence locks # Track whether this transaction was built with sequence locks
using_sequence_locks = False using_sequence_locks = False
@ -343,7 +343,7 @@ class BIP68Test(BitcoinTestFramework):
tx2.rehash() tx2.rehash()
self.nodes[0].sendrawtransaction(ToHex(tx2)) self.nodes[0].sendrawtransaction(ToHex(tx2))
# Now make an invalid spend of tx2 according to BIP68 # Now make an invalid spend of tx2 according to BIP68
sequence_value = 100 # 100 block relative locktime sequence_value = 100 # 100 block relative locktime

View File

@ -30,7 +30,7 @@ class TestP2PConn(P2PInterface):
self.block_receive_map[message.block.sha256] += 1 self.block_receive_map[message.block.sha256] += 1
class MaxUploadTest(BitcoinTestFramework): class MaxUploadTest(BitcoinTestFramework):
def set_test_params(self): def set_test_params(self):
self.setup_clean_chain = True self.setup_clean_chain = True
self.num_nodes = 1 self.num_nodes = 1

View File

@ -182,7 +182,7 @@ class ProxyTest(BitcoinTestFramework):
assert_equal(n1['onion']['proxy'], '%s:%i' % (self.conf2.addr)) assert_equal(n1['onion']['proxy'], '%s:%i' % (self.conf2.addr))
assert_equal(n1['onion']['proxy_randomize_credentials'], False) assert_equal(n1['onion']['proxy_randomize_credentials'], False)
assert_equal(n1['onion']['reachable'], True) assert_equal(n1['onion']['reachable'], True)
n2 = networks_dict(self.nodes[2].getnetworkinfo()) n2 = networks_dict(self.nodes[2].getnetworkinfo())
for net in ['ipv4','ipv6','onion']: for net in ['ipv4','ipv6','onion']:
assert_equal(n2[net]['proxy'], '%s:%i' % (self.conf2.addr)) assert_equal(n2[net]['proxy'], '%s:%i' % (self.conf2.addr))

View File

@ -186,10 +186,10 @@ class RESTTest (BitcoinTestFramework):
self.test_rest_request("/getutxos/checkmempool", http_method='POST', req_type=ReqType.JSON, status=400, ret_type=RetType.OBJ) self.test_rest_request("/getutxos/checkmempool", http_method='POST', req_type=ReqType.JSON, status=400, ret_type=RetType.OBJ)
# Test limits # Test limits
long_uri = '/'.join(["{}-{}".format(txid, n) for n in range(20)]) long_uri = '/'.join(["{}-{}".format(txid, n_) for n_ in range(20)])
self.test_rest_request("/getutxos/checkmempool/{}".format(long_uri), http_method='POST', status=400, ret_type=RetType.OBJ) self.test_rest_request("/getutxos/checkmempool/{}".format(long_uri), http_method='POST', status=400, ret_type=RetType.OBJ)
long_uri = '/'.join(['{}-{}'.format(txid, n) for n in range(15)]) long_uri = '/'.join(['{}-{}'.format(txid, n_) for n_ in range(15)])
self.test_rest_request("/getutxos/checkmempool/{}".format(long_uri), http_method='POST', status=200) self.test_rest_request("/getutxos/checkmempool/{}".format(long_uri), http_method='POST', status=200)
self.nodes[0].generate(1) # generate block to not affect upcoming tests self.nodes[0].generate(1) # generate block to not affect upcoming tests

View File

@ -30,6 +30,6 @@ class P2PMempoolTests(BitcoinTestFramework):
#mininode must be disconnected at this point #mininode must be disconnected at this point
assert_equal(len(self.nodes[0].getpeerinfo()), 0) assert_equal(len(self.nodes[0].getpeerinfo()), 0)
if __name__ == '__main__': if __name__ == '__main__':
P2PMempoolTests().main() P2PMempoolTests().main()

View File

@ -450,7 +450,7 @@ class SegWitTest(BitcoinTestFramework):
block = self.build_next_block() block = self.build_next_block()
assert(len(self.utxo) > 0) assert(len(self.utxo) > 0)
# Create a P2WSH transaction. # Create a P2WSH transaction.
# The witness program will be a bunch of OP_2DROP's, followed by OP_TRUE. # The witness program will be a bunch of OP_2DROP's, followed by OP_TRUE.
# This should give us plenty of room to tweak the spending tx's # This should give us plenty of room to tweak the spending tx's
@ -562,7 +562,7 @@ class SegWitTest(BitcoinTestFramework):
self.log.info("Testing extra witness data in tx") self.log.info("Testing extra witness data in tx")
assert(len(self.utxo) > 0) assert(len(self.utxo) > 0)
block = self.build_next_block() block = self.build_next_block()
witness_program = CScript([OP_DROP, OP_TRUE]) witness_program = CScript([OP_DROP, OP_TRUE])
@ -730,7 +730,7 @@ class SegWitTest(BitcoinTestFramework):
witness_program = CScript([OP_DROP, OP_TRUE]) witness_program = CScript([OP_DROP, OP_TRUE])
witness_hash = sha256(witness_program) witness_hash = sha256(witness_program)
scriptPubKey = CScript([OP_0, witness_hash]) scriptPubKey = CScript([OP_0, witness_hash])
# Create a transaction that splits our utxo into many outputs # Create a transaction that splits our utxo into many outputs
tx = CTransaction() tx = CTransaction()
tx.vin.append(CTxIn(COutPoint(self.utxo[0].sha256, self.utxo[0].n), b"")) tx.vin.append(CTxIn(COutPoint(self.utxo[0].sha256, self.utxo[0].n), b""))

View File

@ -4,12 +4,14 @@
# file COPYING or http://www.opensource.org/licenses/mit-license.php. # file COPYING or http://www.opensource.org/licenses/mit-license.php.
"""Dummy Socks5 server for testing.""" """Dummy Socks5 server for testing."""
import socket, threading, queue import socket
import threading
import queue
import logging import logging
logger = logging.getLogger("TestFramework.socks5") logger = logging.getLogger("TestFramework.socks5")
### Protocol constants # Protocol constants
class Command: class Command:
CONNECT = 0x01 CONNECT = 0x01
@ -18,7 +20,7 @@ class AddressType:
DOMAINNAME = 0x03 DOMAINNAME = 0x03
IPV6 = 0x04 IPV6 = 0x04
### Utility functions # Utility functions
def recvall(s, n): def recvall(s, n):
"""Receive n bytes from a socket, or fail.""" """Receive n bytes from a socket, or fail."""
rv = bytearray() rv = bytearray()
@ -30,7 +32,7 @@ def recvall(s, n):
n -= len(d) n -= len(d)
return rv return rv
### Implementation classes # Implementation classes
class Socks5Configuration(): class Socks5Configuration():
"""Proxy configuration.""" """Proxy configuration."""
def __init__(self): def __init__(self):
@ -141,7 +143,7 @@ class Socks5Server():
thread = threading.Thread(None, conn.handle) thread = threading.Thread(None, conn.handle)
thread.daemon = True thread.daemon = True
thread.start() thread.start()
def start(self): def start(self):
assert(not self.running) assert(not self.running)
self.running = True self.running = True

View File

@ -16,7 +16,7 @@ class ImportPrunedFundsTest(BitcoinTestFramework):
self.nodes[0].generate(101) self.nodes[0].generate(101)
self.sync_all() self.sync_all()
# address # address
address1 = self.nodes[0].getnewaddress() address1 = self.nodes[0].getnewaddress()
# pubkey # pubkey

View File

@ -17,7 +17,7 @@ class KeyPoolTest(BitcoinTestFramework):
addr_before_encrypting_data = nodes[0].getaddressinfo(addr_before_encrypting) addr_before_encrypting_data = nodes[0].getaddressinfo(addr_before_encrypting)
wallet_info_old = nodes[0].getwalletinfo() wallet_info_old = nodes[0].getwalletinfo()
assert(addr_before_encrypting_data['hdmasterkeyid'] == wallet_info_old['hdmasterkeyid']) assert(addr_before_encrypting_data['hdmasterkeyid'] == wallet_info_old['hdmasterkeyid'])
# Encrypt wallet and wait to terminate # Encrypt wallet and wait to terminate
nodes[0].node_encrypt_wallet('test') nodes[0].node_encrypt_wallet('test')
# Restart node 0 # Restart node 0

View File

@ -92,7 +92,8 @@ class TxnMallTest(BitcoinTestFramework):
# Node0's balance should be starting balance, plus 50BTC for another # Node0's balance should be starting balance, plus 50BTC for another
# matured block, minus tx1 and tx2 amounts, and minus transaction fees: # matured block, minus tx1 and tx2 amounts, and minus transaction fees:
expected = starting_balance + fund_foo_tx["fee"] + fund_bar_tx["fee"] expected = starting_balance + fund_foo_tx["fee"] + fund_bar_tx["fee"]
if self.options.mine_block: expected += 50 if self.options.mine_block:
expected += 50
expected += tx1["amount"] + tx1["fee"] expected += tx1["amount"] + tx1["fee"]
expected += tx2["amount"] + tx2["fee"] expected += tx2["amount"] + tx2["fee"]
assert_equal(self.nodes[0].getbalance(), expected) assert_equal(self.nodes[0].getbalance(), expected)
@ -131,7 +132,7 @@ class TxnMallTest(BitcoinTestFramework):
tx1 = self.nodes[0].gettransaction(txid1) tx1 = self.nodes[0].gettransaction(txid1)
tx1_clone = self.nodes[0].gettransaction(txid1_clone) tx1_clone = self.nodes[0].gettransaction(txid1_clone)
tx2 = self.nodes[0].gettransaction(txid2) tx2 = self.nodes[0].gettransaction(txid2)
# Verify expected confirmations # Verify expected confirmations
assert_equal(tx1["confirmations"], -2) assert_equal(tx1["confirmations"], -2)
assert_equal(tx1_clone["confirmations"], 2) assert_equal(tx1_clone["confirmations"], 2)

View File

@ -27,7 +27,7 @@ class TxnMallTest(BitcoinTestFramework):
for i in range(4): for i in range(4):
assert_equal(self.nodes[i].getbalance(), starting_balance) assert_equal(self.nodes[i].getbalance(), starting_balance)
self.nodes[i].getnewaddress("") # bug workaround, coins generated assigned to first getnewaddress! self.nodes[i].getnewaddress("") # bug workaround, coins generated assigned to first getnewaddress!
# Assign coins to foo and bar accounts: # Assign coins to foo and bar accounts:
node0_address_foo = self.nodes[0].getnewaddress("foo") node0_address_foo = self.nodes[0].getnewaddress("foo")
fund_foo_txid = self.nodes[0].sendfrom("", node0_address_foo, 1219) fund_foo_txid = self.nodes[0].sendfrom("", node0_address_foo, 1219)
@ -64,7 +64,7 @@ class TxnMallTest(BitcoinTestFramework):
# Create two spends using 1 50 BTC coin each # Create two spends using 1 50 BTC coin each
txid1 = self.nodes[0].sendfrom("foo", node1_address, 40, 0) txid1 = self.nodes[0].sendfrom("foo", node1_address, 40, 0)
txid2 = self.nodes[0].sendfrom("bar", node1_address, 20, 0) txid2 = self.nodes[0].sendfrom("bar", node1_address, 20, 0)
# Have node0 mine a block: # Have node0 mine a block:
if (self.options.mine_block): if (self.options.mine_block):
self.nodes[0].generate(1) self.nodes[0].generate(1)
@ -76,7 +76,8 @@ class TxnMallTest(BitcoinTestFramework):
# Node0's balance should be starting balance, plus 50BTC for another # Node0's balance should be starting balance, plus 50BTC for another
# matured block, minus 40, minus 20, and minus transaction fees: # matured block, minus 40, minus 20, and minus transaction fees:
expected = starting_balance + fund_foo_tx["fee"] + fund_bar_tx["fee"] expected = starting_balance + fund_foo_tx["fee"] + fund_bar_tx["fee"]
if self.options.mine_block: expected += 50 if self.options.mine_block:
expected += 50
expected += tx1["amount"] + tx1["fee"] expected += tx1["amount"] + tx1["fee"]
expected += tx2["amount"] + tx2["fee"] expected += tx2["amount"] + tx2["fee"]
assert_equal(self.nodes[0].getbalance(), expected) assert_equal(self.nodes[0].getbalance(), expected)
@ -93,7 +94,7 @@ class TxnMallTest(BitcoinTestFramework):
else: else:
assert_equal(tx1["confirmations"], 0) assert_equal(tx1["confirmations"], 0)
assert_equal(tx2["confirmations"], 0) assert_equal(tx2["confirmations"], 0)
# Now give doublespend and its parents to miner: # Now give doublespend and its parents to miner:
self.nodes[2].sendrawtransaction(fund_foo_tx["hex"]) self.nodes[2].sendrawtransaction(fund_foo_tx["hex"])
self.nodes[2].sendrawtransaction(fund_bar_tx["hex"]) self.nodes[2].sendrawtransaction(fund_bar_tx["hex"])