Skip to content

Commit f7fd19e

Browse files
authored
Remote-db: fix keys per validator calculation (#241)
* Remote-db: fix keys per validator calculation Signed-off-by: cyc60 <[email protected]> * Review fix Signed-off-by: cyc60 <[email protected]> --------- Signed-off-by: cyc60 <[email protected]>
1 parent 30cb5a9 commit f7fd19e

File tree

2 files changed

+43
-4
lines changed

2 files changed

+43
-4
lines changed

Diff for: src/remote_db/tasks.py

+16-3
Original file line numberDiff line numberDiff line change
@@ -195,9 +195,11 @@ def setup_validator(
195195
raise click.ClickException('No keypairs found in the remote db.')
196196

197197
public_keys_count = len(keypairs)
198-
keys_per_validator = public_keys_count // total_validators
199-
start_index = keys_per_validator * validator_index
200-
end_index = min(start_index + keys_per_validator, public_keys_count)
198+
start_index, end_index = _get_key_indexes(
199+
public_keys_count=public_keys_count,
200+
validator_index=validator_index,
201+
total_validators=total_validators,
202+
)
201203
if not 0 <= start_index < end_index <= public_keys_count:
202204
raise click.ClickException('Invalid validator index')
203205

@@ -348,3 +350,14 @@ def _generate_proposer_config(
348350
}
349351
with open(filepath, 'w', encoding='utf-8') as f:
350352
json.dump(config, f, ensure_ascii=False, indent=4)
353+
354+
355+
def _get_key_indexes(
356+
public_keys_count: int,
357+
total_validators: int,
358+
validator_index: int,
359+
) -> tuple[int, int]:
360+
keys_per_validator = (public_keys_count - 1) // total_validators + 1
361+
start_index = keys_per_validator * validator_index
362+
end_index = min(start_index + keys_per_validator, public_keys_count)
363+
return start_index, end_index

Diff for: src/remote_db/tests/test_tasks.py

+27-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from src.common.typings import Oracles
1616
from src.remote_db.commands import remote_db_group
1717
from src.remote_db.database import ConfigsCrud, KeyPairsCrud
18-
from src.remote_db.tasks import _encrypt_private_key
18+
from src.remote_db.tasks import _encrypt_private_key, _get_key_indexes
1919
from src.remote_db.typings import RemoteDatabaseKeyPair
2020
from src.validators.signing.key_shares import private_key_to_private_key_shares
2121
from src.validators.typings import BLSPrivkey
@@ -395,3 +395,29 @@ def test_setup_operator(
395395
result = runner.invoke(remote_db_group, args)
396396
output = 'Successfully created operator configuration file.\n'
397397
assert output.strip() in result.output.strip()
398+
399+
400+
def test_get_key_indexes():
401+
assert _get_key_indexes(1, 1, 0) == (0, 1)
402+
403+
assert _get_key_indexes(2, 1, 0) == (0, 2)
404+
405+
assert _get_key_indexes(2, 2, 0) == (0, 1)
406+
assert _get_key_indexes(2, 2, 1) == (1, 2)
407+
408+
assert _get_key_indexes(27, 2, 0) == (0, 14)
409+
assert _get_key_indexes(27, 2, 1) == (14, 27)
410+
411+
assert _get_key_indexes(150, 3, 0) == (0, 50)
412+
assert _get_key_indexes(150, 3, 1) == (50, 100)
413+
assert _get_key_indexes(150, 3, 2) == (100, 150)
414+
415+
total = 50
416+
count = 0
417+
for i in range(total):
418+
if i == 49:
419+
assert _get_key_indexes(199, total, i) == (196, 199)
420+
else:
421+
assert _get_key_indexes(199, total, i) == (i * 4, i * 4 + 4)
422+
count += _get_key_indexes(199, total, i)[1] - _get_key_indexes(199, total, i)[0]
423+
assert count == 199

0 commit comments

Comments
 (0)