2022-10-24 12:16:40 +00:00
|
|
|
# Nimbus - Portal Network
|
2023-02-26 18:18:03 +00:00
|
|
|
# Copyright (c) 2022-2023 Status Research & Development GmbH
|
2022-10-24 12:16:40 +00:00
|
|
|
# Licensed and distributed under either of
|
|
|
|
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
|
|
|
|
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
|
|
|
|
# at your option. This file may not be copied, modified, or distributed except according to those terms.
|
|
|
|
|
|
|
|
{.used.}
|
|
|
|
|
|
|
|
import
|
|
|
|
unittest2,
|
|
|
|
beacon_chain/spec/forks,
|
|
|
|
beacon_chain/spec/datatypes/altair,
|
2022-10-28 07:49:18 +00:00
|
|
|
../../network/beacon_light_client/light_client_content,
|
2023-02-26 18:18:03 +00:00
|
|
|
"."/[light_client_test_data, light_client_test_helpers]
|
2022-10-24 12:16:40 +00:00
|
|
|
|
2023-02-26 18:18:03 +00:00
|
|
|
suite "Beacon Light Client Content Encodings":
|
|
|
|
let forkDigests = testForkDigests
|
2022-10-24 12:16:40 +00:00
|
|
|
|
2023-02-26 18:18:03 +00:00
|
|
|
test "LightClientBootstrap":
|
2022-10-24 12:16:40 +00:00
|
|
|
let
|
2023-02-26 18:18:03 +00:00
|
|
|
altairData = SSZ.decode(bootstrapBytes, altair.LightClientBootstrap)
|
|
|
|
bootstrap = ForkedLightClientBootstrap(
|
|
|
|
kind: LightClientDataFork.Altair, altairData: altairData)
|
|
|
|
|
|
|
|
encoded = encodeForkedLightClientObject(bootstrap, forkDigests.altair)
|
|
|
|
decoded = decodeLightClientBootstrapForked(forkDigests, encoded)
|
2022-10-24 12:16:40 +00:00
|
|
|
|
|
|
|
check:
|
2023-02-26 18:18:03 +00:00
|
|
|
decoded.isOk()
|
|
|
|
decoded.get().kind == LightClientDataFork.Altair
|
|
|
|
decoded.get().altairData == altairData
|
2022-10-24 12:16:40 +00:00
|
|
|
|
2023-02-26 18:18:03 +00:00
|
|
|
test "LightClientUpdate":
|
2022-11-03 08:12:32 +00:00
|
|
|
let
|
2023-02-26 18:18:03 +00:00
|
|
|
altairData = SSZ.decode(lightClientUpdateBytes, altair.LightClientUpdate)
|
|
|
|
update = ForkedLightClientUpdate(
|
|
|
|
kind: LightClientDataFork.Altair, altairData: altairData)
|
|
|
|
|
|
|
|
encoded = encodeForkedLightClientObject(update, forkDigests.altair)
|
|
|
|
decoded = decodeLightClientUpdateForked(forkDigests, encoded)
|
2022-11-03 08:12:32 +00:00
|
|
|
|
|
|
|
check:
|
2023-02-26 18:18:03 +00:00
|
|
|
decoded.isOk()
|
|
|
|
decoded.get().kind == LightClientDataFork.Altair
|
|
|
|
decoded.get().altairData == altairData
|
2022-11-03 08:12:32 +00:00
|
|
|
|
2023-02-26 18:18:03 +00:00
|
|
|
test "LightClientUpdateList":
|
2022-11-03 08:12:32 +00:00
|
|
|
let
|
2023-02-26 18:18:03 +00:00
|
|
|
altairData = SSZ.decode(lightClientUpdateBytes, altair.LightClientUpdate)
|
|
|
|
update = ForkedLightClientUpdate(
|
|
|
|
kind: LightClientDataFork.Altair, altairData: altairData)
|
2022-11-03 08:12:32 +00:00
|
|
|
updateList = @[update, update]
|
2023-02-26 18:18:03 +00:00
|
|
|
|
|
|
|
encoded = encodeLightClientUpdatesForked(forkDigests.altair, updateList)
|
|
|
|
decoded = decodeLightClientUpdatesByRange(forkDigests, encoded)
|
2022-11-03 08:12:32 +00:00
|
|
|
|
|
|
|
check:
|
2023-02-26 18:18:03 +00:00
|
|
|
decoded.isOk()
|
|
|
|
decoded.get().asSeq()[0].altairData == updateList[0].altairData
|
|
|
|
decoded.get().asSeq()[1].altairData == updateList[1].altairData
|
2022-11-03 08:12:32 +00:00
|
|
|
|
2023-02-26 18:18:03 +00:00
|
|
|
test "LightClientFinalityUpdate":
|
2022-11-03 08:12:32 +00:00
|
|
|
let
|
2023-02-26 18:18:03 +00:00
|
|
|
altairData = SSZ.decode(
|
|
|
|
lightClientFinalityUpdateBytes, altair.LightClientFinalityUpdate)
|
|
|
|
update = ForkedLightClientFinalityUpdate(
|
|
|
|
kind: LightClientDataFork.Altair, altairData: altairData)
|
|
|
|
|
|
|
|
encoded = encodeForkedLightClientObject(update, forkDigests.altair)
|
|
|
|
decoded = decodeLightClientFinalityUpdateForked(forkDigests, encoded)
|
2022-11-03 08:12:32 +00:00
|
|
|
|
|
|
|
check:
|
2023-02-26 18:18:03 +00:00
|
|
|
decoded.isOk()
|
|
|
|
decoded.get().kind == LightClientDataFork.Altair
|
|
|
|
decoded.get().altairData == altairData
|
2022-11-03 08:12:32 +00:00
|
|
|
|
2023-02-26 18:18:03 +00:00
|
|
|
test "LightClientOptimisticUpdate":
|
2022-11-03 08:12:32 +00:00
|
|
|
let
|
2023-02-26 18:18:03 +00:00
|
|
|
altairData = SSZ.decode(
|
|
|
|
lightClientOptimisticUpdateBytes, altair.LightClientOptimisticUpdate)
|
|
|
|
update = ForkedLightClientOptimisticUpdate(
|
|
|
|
kind: LightClientDataFork.Altair, altairData: altairData)
|
|
|
|
|
|
|
|
encoded = encodeForkedLightClientObject(update, forkDigests.altair)
|
|
|
|
decoded = decodeLightClientOptimisticUpdateForked(forkDigests, encoded)
|
2022-11-03 08:12:32 +00:00
|
|
|
|
|
|
|
check:
|
2023-02-26 18:18:03 +00:00
|
|
|
decoded.isOk()
|
|
|
|
decoded.get().kind == LightClientDataFork.Altair
|
|
|
|
decoded.get().altairData == altairData
|
2022-11-03 08:12:32 +00:00
|
|
|
|
2023-02-26 18:18:03 +00:00
|
|
|
test "Invalid LightClientBootstrap":
|
2022-10-24 12:16:40 +00:00
|
|
|
let
|
2023-02-26 18:18:03 +00:00
|
|
|
altairData = SSZ.decode(bootstrapBytes, altair.LightClientBootstrap)
|
|
|
|
# TODO: This doesn't make much sense with current API
|
|
|
|
bootstrap = ForkedLightClientBootstrap(
|
|
|
|
kind: LightClientDataFork.Altair, altairData: altairData)
|
|
|
|
|
|
|
|
encodedTooEarlyFork = encodeForkedLightClientObject(
|
|
|
|
bootstrap, forkDigests.phase0)
|
|
|
|
encodedUnknownFork = encodeForkedLightClientObject(
|
|
|
|
bootstrap, ForkDigest([0'u8, 0, 0, 6]))
|
2022-10-24 12:16:40 +00:00
|
|
|
|
|
|
|
check:
|
2023-02-26 18:18:03 +00:00
|
|
|
decodeLightClientBootstrapForked(forkDigests, @[]).isErr()
|
|
|
|
decodeLightClientBootstrapForked(forkDigests, encodedTooEarlyFork).isErr()
|
|
|
|
decodeLightClientBootstrapForked(forkDigests, encodedUnknownFork).isErr()
|