Fix get_custody_columns

This commit is contained in:
Hsiao-Wei Wang 2024-05-06 17:25:47 +08:00
parent 331f1e9a6a
commit 9c1acbb5e5
No known key found for this signature in database
GPG Key ID: AE3D6B174F971DE4
2 changed files with 18 additions and 5 deletions

View File

@ -106,18 +106,20 @@ def get_custody_columns(node_id: NodeID, custody_subnet_count: uint64) -> Sequen
assert custody_subnet_count <= DATA_COLUMN_SIDECAR_SUBNET_COUNT
subnet_ids: List[uint64] = []
i = 0
tmp_id = uint256(node_id)
while len(subnet_ids) < custody_subnet_count:
if node_id == UINT256_MAX:
node_id = NodeID(0)
# Overflow prevention
if tmp_id == UINT256_MAX:
tmp_id = NodeID(0)
subnet_id = (
bytes_to_uint64(hash(uint_to_bytes(uint256(node_id + i)))[0:8])
bytes_to_uint64(hash(uint_to_bytes(uint256(tmp_id)))[0:8])
% DATA_COLUMN_SIDECAR_SUBNET_COUNT
)
if subnet_id not in subnet_ids:
subnet_ids.append(subnet_id)
i += 1
tmp_id += 1
assert len(subnet_ids) == len(set(subnet_ids))
columns_per_subnet = NUMBER_OF_COLUMNS // DATA_COLUMN_SIDECAR_SUBNET_COUNT

View File

@ -65,6 +65,17 @@ def test_get_custody_columns__max_node_id_max_custody_subnet_count(spec):
)
@with_eip7594_and_later
@spec_test
@single_phase
def test_get_custody_columns__max_node_id_max_custody_subnet_count_minus_1(spec):
rng = random.Random(1111)
yield from _run_get_custody_columns(
spec, rng, node_id=2**256 - 2,
custody_subnet_count=spec.config.DATA_COLUMN_SIDECAR_SUBNET_COUNT,
)
@with_eip7594_and_later
@spec_test
@single_phase