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 assert custody_subnet_count <= DATA_COLUMN_SIDECAR_SUBNET_COUNT
subnet_ids: List[uint64] = [] subnet_ids: List[uint64] = []
i = 0 tmp_id = uint256(node_id)
while len(subnet_ids) < custody_subnet_count: while len(subnet_ids) < custody_subnet_count:
if node_id == UINT256_MAX: # Overflow prevention
node_id = NodeID(0) if tmp_id == UINT256_MAX:
tmp_id = NodeID(0)
subnet_id = ( 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 % DATA_COLUMN_SIDECAR_SUBNET_COUNT
) )
if subnet_id not in subnet_ids: if subnet_id not in subnet_ids:
subnet_ids.append(subnet_id) subnet_ids.append(subnet_id)
i += 1 tmp_id += 1
assert len(subnet_ids) == len(set(subnet_ids)) assert len(subnet_ids) == len(set(subnet_ids))
columns_per_subnet = NUMBER_OF_COLUMNS // DATA_COLUMN_SIDECAR_SUBNET_COUNT 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 @with_eip7594_and_later
@spec_test @spec_test
@single_phase @single_phase