diff --git a/beacon_chain/libnimbus_lc/libnimbus_lc.nim b/beacon_chain/libnimbus_lc/libnimbus_lc.nim index 1018507d64..6da1790071 100644 --- a/beacon_chain/libnimbus_lc/libnimbus_lc.nim +++ b/beacon_chain/libnimbus_lc/libnimbus_lc.nim @@ -9,6 +9,7 @@ import std/[json, sequtils, times], + stew/objects, eth/common/eth_types_rlp, eth/common/keys, eth/p2p/discoveryv5/random2, @@ -957,7 +958,7 @@ proc ETHLightClientHeaderCopyExecutionHash( root.toUnmanagedPtr() type ExecutionPayloadHeader = - typeof(default(lcDataFork.LightClientHeader).execution) + typeof(declval(lcDataFork.LightClientHeader).execution) func ETHLightClientHeaderGetExecution( header: ptr lcDataFork.LightClientHeader diff --git a/beacon_chain/spec/datatypes/base.nim b/beacon_chain/spec/datatypes/base.nim index f2cd6d3faf..ea5b45a8f2 100644 --- a/beacon_chain/spec/datatypes/base.nim +++ b/beacon_chain/spec/datatypes/base.nim @@ -884,19 +884,22 @@ func getSizeofSig(x: auto, n: int = 0): seq[(string, int, int)] = template isomorphicCast*[T](x: auto): T = # Each of these pairs of types has ABI-compatible memory representations. type U = typeof(x) + static: doAssert (T is ref) == (U is ref) when T is ref: - type - TT = typeof default(typeof T)[] - UU = typeof default(typeof U)[] - static: - doAssert sizeof(TT) == sizeof(UU) - doAssert getSizeofSig(TT()) == getSizeofSig(UU()) + when defined(debug): + type + TT = pointerBase(T) + UU = pointerBase(U) + static: + doAssert sizeof(TT) == sizeof(UU) + doAssert getSizeofSig(TT()) == getSizeofSig(UU()) cast[T](x) else: - static: - doAssert getSizeofSig(T()) == getSizeofSig(U()) - doAssert sizeof(T) == sizeof(U) + when defined(debug): # 10s+ compile time due to `default(T)` and `replace`! + static: + doAssert sizeof(T) == sizeof(U) + doAssert getSizeofSig(T()) == getSizeofSig(U()) cast[ptr T](unsafeAddr x)[] func prune*(cache: var StateCache, epoch: Epoch) = diff --git a/beacon_chain/spec/state_transition.nim b/beacon_chain/spec/state_transition.nim index d53a0f6519..45f373b765 100644 --- a/beacon_chain/spec/state_transition.nim +++ b/beacon_chain/spec/state_transition.nim @@ -43,10 +43,12 @@ import chronicles, results, + stew/objects, ../extras, - "."/[ - beaconstate, eth2_merkleization, forks, helpers, signatures, - state_transition_block, state_transition_epoch, validator] + ./[ + beaconstate, eth2_merkleization, forks, helpers, signatures, state_transition_block, + state_transition_epoch, validator, + ] export results, extras, state_transition_block @@ -377,7 +379,7 @@ proc makeBeaconBlockWithRewards*( ## the block is to be created. type MaybeBlindedBeaconBlock = consensusFork.BeaconBlock(type(execution_payload)) - MaybeBlindedBlockBody = typeof(default(MaybeBlindedBeaconBlock).body) + MaybeBlindedBlockBody = typeof(declval(MaybeBlindedBeaconBlock).body) # https://github.com/ethereum/consensus-specs/blob/v1.5.0-beta.2/specs/phase0/validator.md#preparing-for-a-beaconblock var blck = MaybeBlindedBeaconBlock(