Skip to content

Commit 759c9bb

Browse files
authored
Merge pull request #1765 from theQRL/dev
Merged Dev
2 parents 1bbd78d + cbddb72 commit 759c9bb

12 files changed

+81
-56
lines changed

.circleci/config.yml

+9-18
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ version: 2
22
jobs:
33
build:
44
docker:
5-
- image: qrledger/qrl-docker-ci:xenial
5+
- image: qrledger/qrl-docker-ci:bionic
66
steps:
77
- checkout
88
- run: pip install -U setuptools
@@ -14,7 +14,7 @@ jobs:
1414

1515
test_leaks_CLI:
1616
docker:
17-
- image: qrledger/qrl-docker-ci:xenial
17+
- image: qrledger/qrl-docker-ci:bionic
1818
steps:
1919
- checkout
2020
- run: pip install -U setuptools
@@ -25,15 +25,15 @@ jobs:
2525

2626
flake8:
2727
docker:
28-
- image: qrledger/qrl-docker-ci:xenial
28+
- image: qrledger/qrl-docker-ci:bionic
2929
steps:
3030
- checkout
3131
- run: pip install -U setuptools
3232
- run: flake8
3333

3434
test_leaks_other:
3535
docker:
36-
- image: qrledger/qrl-docker-ci:xenial
36+
- image: qrledger/qrl-docker-ci:bionic
3737
steps:
3838
- checkout
3939
- run: pip install -U setuptools
@@ -42,17 +42,6 @@ jobs:
4242
- run: pip install -U pytest-openfiles pytest-leaks pytest-threadleak pytest-repeat
4343
- run: python3 setup.py test --addopts "--ignore=tests/tools/ --ignore=tests/daemon/ --ignore=tests/services/test_WalletAPIService.py --open-files --threadleak -n0"
4444

45-
build_trusty:
46-
docker:
47-
- image: qrledger/qrl-docker-ci:trusty
48-
steps:
49-
- checkout
50-
- run: pip install -U setuptools
51-
- run: pip install -U -r requirements.txt
52-
- run: pip install -U -r test-requirements.txt
53-
- run: python3 --version
54-
- run: python3 setup.py test
55-
5645
build_bionic:
5746
docker:
5847
- image: qrledger/qrl-docker-ci:bionic
@@ -65,7 +54,7 @@ jobs:
6554

6655
integration_fast:
6756
docker:
68-
- image: qrledger/qrl-docker-ci:xenial
57+
- image: qrledger/qrl-docker-ci:bionic
6958
environment:
7059
PYTHONPATH: /root/project:/root/project/tests_integration
7160
TESTINPLACE: 1
@@ -79,12 +68,14 @@ jobs:
7968

8069
integration_smoke:
8170
docker:
82-
- image: qrledger/qrl-docker-ci:xenial
71+
- image: qrledger/qrl-docker-ci:bionic
8372
environment:
8473
PYTHONPATH: /root/project:/root/project/tests_integration
8574
TESTINPLACE: 1
8675
steps:
8776
- checkout
77+
- run: apt-get update
78+
- run: apt-get install -y rsync
8879
- run: git submodule update --init --recursive --remote
8980
- run: apt install -y python3-venv
9081
- run: pip install -U -r requirements.txt
@@ -119,7 +110,7 @@ jobs:
119110

120111
deploy-pypi:
121112
docker:
122-
- image: qrledger/qrl-docker-ci:xenial
113+
- image: qrledger/qrl-docker-ci:bionic
123114
steps:
124115
- checkout
125116
- run: git submodule update --init --recursive

requirements.txt

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
11
# Fixing sphinx version due to https://github.com/sphinx-doc/sphinx/issues/3976
22
# setuptools==50.3.2 # It needs to be installed manually in some cases
3-
plyvel==1.2.0
3+
plyvel>=1.2.0,<=1.4.0
44
ntplib==0.3.4
55
Twisted==20.3.0
66
colorlog==3.1.0
77
simplejson==3.11.1
88
PyYAML==5.3.1
9-
grpcio-tools>=1.9.0,<=1.27.2
10-
grpcio>=1.9.0,<=1.27.2
9+
grpcio-tools>=1.9.0,<=1.50.0
10+
grpcio>=1.9.0,<=1.50.0
1111
google-api-python-client==1.8.3
1212
google-auth<2.0dev,>=1.21.1
1313
httplib2>=0.15.0
1414
service_identity==17.0.0
15-
protobuf==3.15.8
15+
protobuf>3.19.0,<=3.20.3
1616
pyopenssl==17.5.0
1717
six==1.13.0
18-
click==7.1.2
18+
click==8.0
1919
pyqrllib>=1.2.3,<1.3.0
2020
pyqryptonight>=0.99.9
2121
pyqrandomx>=0.3.0,<1.0.0
22-
Flask>=1.0.0,<=1.1.2
23-
json-rpc==1.10.8
22+
Flask>=2.0.0,<=2.2.2
23+
json-rpc==1.13.0
2424
idna==2.6
2525
cryptography==2.3
26-
mock==2.0.0
26+
mock>=2.0.0
2727
daemonize==2.4.7

setup.cfg

+11-11
Original file line numberDiff line numberDiff line change
@@ -26,37 +26,37 @@ package_dir =
2626
# install_requires = numpy; scipy
2727
install_requires =
2828
# setuptools==50.3.2
29-
plyvel==1.2.0
29+
plyvel>=1.2.0,<=1.4.0
3030
ntplib==0.3.4
3131
Twisted==20.3.0
3232
colorlog==3.1.0
3333
simplejson==3.11.1
3434
PyYAML==5.3.1
35-
grpcio-tools>=1.9.0,<=1.27.2
36-
grpcio>=1.9.0,<=1.27.2
35+
grpcio-tools>=1.9.0,<=1.50.0
36+
grpcio>=1.9.0,<=1.50.0
3737
google-api-python-client==1.8.3
3838
google-auth<2.0dev,>=1.21.1
3939
httplib2>=0.15.0
4040
service_identity==17.0.0
41-
protobuf==3.15.8
41+
protobuf>3.19.0,<=3.20.3
4242
pyopenssl==17.5.0
4343
six==1.13.0
44-
click==7.1.2
44+
click==8.0
4545
pyqrllib>=1.2.3,<1.3.0
4646
pyqryptonight>=0.99.9
4747
pyqrandomx>=0.3.0,<1.0.0
48-
Flask>=1.0.0,<=1.1.2
49-
json-rpc==1.10.8
48+
Flask>=2.0.0,<=2.2.2
49+
json-rpc==1.13.0
5050
idna==2.6
5151
cryptography==2.3
52-
mock==2.0.0
52+
mock>=2.0.0
5353
daemonize==2.4.7
5454

5555
# Add here test requirements (semicolon-separated)
5656
tests_require =
57-
pytest==3.6
58-
pytest-cov==2.5.1
59-
pytest-xdist==1.22.2
57+
pytest>=7.0.0,<=7.1.3
58+
pytest-cov==4.0.0
59+
pytest-xdist==2.5.0
6060
pytest-flake8==1.0.0
6161
flake8==3.5.0
6262
autoflake==1.1

src/qrl/core/ChainManager.py

+22-2
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,24 @@ def get_config_by_block_number(self, block_number: int) -> config.DevConfig:
327327
dev_config = config.DevConfig(dev_config_pb_data, True, True)
328328
return dev_config
329329

330+
def get_seed_block(self, blockheader: BlockHeader):
331+
qn = Qryptonight()
332+
seed_height = qn.get_seed_height(blockheader.block_number)
333+
334+
# If parent block belongs to main chain, then seed block will also be in the main chain
335+
prev_mainchain_block = self.get_block_by_number(blockheader.block_number - 1)
336+
if prev_mainchain_block.headerhash == blockheader.prev_headerhash:
337+
return self.get_block_by_number(seed_height)
338+
339+
prev_block = self.get_block(blockheader.prev_headerhash)
340+
while prev_block.block_number > seed_height:
341+
prev_mainchain_block = self.get_block_by_number(prev_block.block_number)
342+
if prev_mainchain_block.headerhash == prev_block.headerhash:
343+
return self.get_block_by_number(seed_height)
344+
prev_block = self.get_block(prev_block.prev_headerhash)
345+
346+
return prev_block
347+
330348
def validate_mining_nonce(self, blockheader: BlockHeader, dev_config: config.DevConfig, enable_logging=True):
331349
with self.lock:
332350
parent_metadata = BlockMetadata.get_block_metadata(self._state, blockheader.prev_headerhash)
@@ -342,6 +360,8 @@ def validate_mining_nonce(self, blockheader: BlockHeader, dev_config: config.Dev
342360
dev_config=dev_config)
343361

344362
mining_blob = blockheader.mining_blob(dev_config)
363+
qn = Qryptonight()
364+
seed_block = self.get_seed_block(blockheader)
345365

346366
if enable_logging:
347367
logger.debug('-----------------START--------------------')
@@ -352,10 +372,10 @@ def validate_mining_nonce(self, blockheader: BlockHeader, dev_config: config.Dev
352372
logger.debug('diff %s', UInt256ToString(diff))
353373
logger.debug('target %s', bin2hstr(target))
354374
logger.debug('mining blob %s', bin2hstr(mining_blob))
375+
logger.debug('seed_block #%s', seed_block.block_number)
376+
logger.debug('seed_block hash %s', bin2hstr(seed_block.headerhash))
355377
logger.debug('-------------------END--------------------')
356378

357-
qn = Qryptonight()
358-
seed_block = self.get_block_by_number(qn.get_seed_height(blockheader.block_number))
359379
if not PoWValidator().verify_input(blockheader.block_number,
360380
seed_block.block_number,
361381
seed_block.headerhash,

src/qrl/core/config.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,8 @@ def __init__(self, pbdata, ignore_check=False, ignore_singleton=False):
313313
# ======================================
314314
self.hard_fork_heights = [942375, 1938000, 2078800]
315315
self.hard_fork_node_disconnect_delay = [0, 0, 2880]
316-
self.testnet_hard_fork_heights = [1, 3000]
316+
self.testnet_hard_fork_heights = [0, 0, 0]
317+
self.testnet_hard_fork_node_disconnect_delay = [0, 0, 0]
317318

318319
# ======================================
319320
# PROPOSAL CONFIG

src/qrl/core/misc/expiring_set.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# coding=utf-8
22
# Distributed under the MIT software license, see the accompanying
33
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
4-
from collections import Set
4+
from collections.abc import Set
55

66
import simplejson as json
77

src/qrl/main.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,10 @@ def main():
6868
qrl_dir_post_fix = ''
6969
copy_files = []
7070
if args.network_type == 'testnet':
71-
config.dev.hard_fork_heights = list(config.dev.testnet_hard_fork_heights) # Hard Fork Block Height For Testnet
71+
# Hard Fork Block Height For Testnet
72+
config.dev.hard_fork_heights = list(config.dev.testnet_hard_fork_heights)
73+
# Hard Fork Block Height Disconnect Delay For Testnet
74+
config.dev.hard_fork_node_disconnect_delay = list(config.dev.testnet_hard_fork_node_disconnect_delay)
7275
qrl_dir_post_fix = '-testnet'
7376
package_directory = os.path.dirname(os.path.abspath(__file__))
7477
copy_files.append(os.path.join(package_directory, 'network/testnet/genesis.yml'))

src/qrl/network/testnet/config.yml

+11-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,13 @@
11
peer_list: [ "18.130.83.207", "209.250.246.234", "136.244.104.146", "95.179.154.132" ]
2-
genesis_prev_headerhash: 'Testnet 2022'
3-
genesis_timestamp: 1641963062
2+
genesis_prev_headerhash: 'Final Testnet'
3+
genesis_timestamp: 1668696491
44
genesis_difficulty: 5000
5+
p2p_local_port: 29000
6+
p2p_public_port: 29000
7+
admin_api_port: 29008
8+
public_api_port: 29009
9+
mining_api_port: 29007
10+
grpc_proxy_port: 28090
11+
wallet_daemon_port: 28091
12+
public_api_server: "127.0.0.1:29009"
13+
wallet_api_port: 29010

src/qrl/network/testnet/genesis.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ genesisBalance:
22
- address: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
33
balance: '105000000000000000'
44
header:
5-
hashHeader: LGyQSHq8RYrEHmG7VVtmc9YIqHNxFIH9IMrUTo34lJ0=
6-
hashHeaderPrev: VGVzdG5ldCAyMDIy
5+
hashHeader: 1nZdbgr36LJbrFhyeZmeFruwvTA4RFk04tnzskqJBB4=
6+
hashHeaderPrev: RmluYWwgVGVzdG5ldA==
77
merkleRoot: wquld1GTaqfKWRhAdWpOeREWVdCmlTYIAUrY9eWGwTQ=
88
rewardBlock: '65000000000000000'
9-
timestampSeconds: '1641963062'
9+
timestampSeconds: '1668696491'
1010
transactions:
1111
- coinbase:
1212
addrTo: AQYA3oDYKOMv8cfAHpT2zewSkuiz/0gYQy5+atQfOsdD57loCQog

src/qrl/tools/generate_genesis.py

+6-5
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,12 @@ def get_migration_transactions(signing_xmss, filename):
5757

5858

5959
def main():
60+
exclude_migration_tx = False
6061
if len(sys.argv) > 2:
6162
print("Unexpected arguments")
6263
sys.exit(0)
6364
elif len(sys.argv) == 1:
64-
print("Missing Filename")
65-
sys.exit(0)
66-
67-
filename = sys.argv[1]
65+
exclude_migration_tx = True
6866

6967
if sys.version_info.major > 2:
7068
seed = bytes(hstr2bin(input('Enter extended hexseed: ')))
@@ -73,7 +71,10 @@ def main():
7371

7472
dist_xmss = XMSS.from_extended_seed(seed)
7573

76-
transactions = get_migration_transactions(signing_xmss=dist_xmss, filename=filename)
74+
transactions = []
75+
if not exclude_migration_tx:
76+
filename = sys.argv[1]
77+
transactions = get_migration_transactions(signing_xmss=dist_xmss, filename=filename)
7778

7879
block = Block.create(dev_config=config.dev,
7980
block_number=0,

test-requirements.txt

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
# Add requirements only needed for your unittests and during development here.
22
# They will be installed automatically when running `python setup.py test`.
33
# ATTENTION: Don't remove pytest-cov and pytest as they are needed.
4-
pytest==3.6
5-
pytest-cov==2.5.1
6-
pytest-xdist==1.22.2
4+
pytest>=7.0.0,<=7.1.3
5+
pytest-cov==4.0.0
6+
pytest-xdist==2.5.0
77
flake8==3.5.0
88
autoflake==1.1
99
timeout-decorator==0.4.0

0 commit comments

Comments
 (0)