add some electra support to REST JSON decoding; rm unused code (#6549)
This commit is contained in:
parent
bd47f62f07
commit
72b5c2bd6e
|
@ -15,15 +15,11 @@ import results, stew/[assign2, base10, byteutils, endians2], presto/common,
|
|||
stint, chronicles
|
||||
import ".."/[eth2_ssz_serialization, forks, keystore],
|
||||
".."/../consensus_object_pools/block_pools_types,
|
||||
".."/datatypes/[phase0, altair, bellatrix],
|
||||
".."/mev/[bellatrix_mev, capella_mev],
|
||||
".."/../validators/slashing_protection_common,
|
||||
"."/[rest_types, rest_keymanager_types]
|
||||
import nimcrypto/utils as ncrutils
|
||||
|
||||
from ".."/datatypes/capella import SignedBeaconBlock
|
||||
from ".."/datatypes/deneb import BeaconState
|
||||
|
||||
export
|
||||
eth2_ssz_serialization, results, peerid, common, serialization, chronicles,
|
||||
json_serialization, net, sets, rest_types, slashing_protection_common,
|
||||
|
@ -311,7 +307,7 @@ template writeValue*(w: JsonWriter[RestJson], value: tuple) =
|
|||
## TODO nim-json-serializations should allow setting up this policy per format
|
||||
##
|
||||
## This also means that when new fields are introduced to the object definitions
|
||||
## below, one must use the `Option[T]` type.
|
||||
## below, one must use the `Opt[T]` type.
|
||||
|
||||
const
|
||||
DecimalSet = {'0' .. '9'}
|
||||
|
@ -1516,20 +1512,8 @@ proc readValue*[BlockType: ForkedBlindedBeaconBlock](
|
|||
exc.formatMsg("BlindedBlock") & "]")
|
||||
value = ForkedBlindedBeaconBlock(kind: ConsensusFork.Altair,
|
||||
altairData: res)
|
||||
of ConsensusFork.Bellatrix:
|
||||
reader.raiseUnexpectedValue("Bellatrix blinded block format unsupported")
|
||||
of ConsensusFork.Capella:
|
||||
let res =
|
||||
try:
|
||||
RestJson.decode(string(data.get()),
|
||||
capella_mev.BlindedBeaconBlock,
|
||||
requireAllFields = true,
|
||||
allowUnknownFields = true)
|
||||
except SerializationError as exc:
|
||||
reader.raiseUnexpectedValue("Incorrect capella block format, [" &
|
||||
exc.formatMsg("BlindedBlock") & "]")
|
||||
value = ForkedBlindedBeaconBlock(kind: ConsensusFork.Capella,
|
||||
capellaData: res)
|
||||
of ConsensusFork.Bellatrix .. ConsensusFork.Capella:
|
||||
reader.raiseUnexpectedValue("pre-Deneb blinded block formats unsupported")
|
||||
of ConsensusFork.Deneb:
|
||||
let res =
|
||||
try:
|
||||
|
@ -1592,34 +1576,6 @@ proc writeValue*[BlockType: Web3SignerForkedBeaconBlock](
|
|||
writer.writeField("block_header", value.data)
|
||||
writer.endRecord()
|
||||
|
||||
proc writeValue*[BlockType: ForkedBeaconBlock](
|
||||
writer: var JsonWriter[RestJson], value: BlockType) {.raises: [IOError].} =
|
||||
|
||||
template forkIdentifier(id: string): auto =
|
||||
when BlockType is ForkedBeaconBlock:
|
||||
id
|
||||
else:
|
||||
(static toUpperAscii id)
|
||||
|
||||
writer.beginRecord()
|
||||
case value.kind
|
||||
of ConsensusFork.Phase0:
|
||||
writer.writeField("version", forkIdentifier "phase0")
|
||||
writer.writeField("data", value.phase0Data)
|
||||
of ConsensusFork.Altair:
|
||||
writer.writeField("version", forkIdentifier "altair")
|
||||
writer.writeField("data", value.altairData)
|
||||
of ConsensusFork.Bellatrix:
|
||||
writer.writeField("version", forkIdentifier "bellatrix")
|
||||
writer.writeField("data", value.bellatrixData)
|
||||
of ConsensusFork.Capella:
|
||||
writer.writeField("version", forkIdentifier "capella")
|
||||
writer.writeField("data", value.capellaData)
|
||||
of ConsensusFork.Deneb:
|
||||
writer.writeField("version", forkIdentifier "deneb")
|
||||
writer.writeField("data", value.denebData)
|
||||
writer.endRecord()
|
||||
|
||||
## RestPublishedBeaconBlockBody
|
||||
proc readValue*(reader: var JsonReader[RestJson],
|
||||
value: var RestPublishedBeaconBlockBody) {.
|
||||
|
@ -2161,6 +2117,7 @@ proc readValue*(reader: var JsonReader[RestJson],
|
|||
reader.raiseUnexpectedField("Multiple version fields found",
|
||||
"ForkedSignedBeaconBlock")
|
||||
let vres = reader.readValue(string)
|
||||
static: doAssert ConsensusFork.high == ConsensusFork.Electra
|
||||
case vres
|
||||
of "phase0":
|
||||
version = Opt.some(ConsensusFork.Phase0)
|
||||
|
@ -2172,6 +2129,8 @@ proc readValue*(reader: var JsonReader[RestJson],
|
|||
version = Opt.some(ConsensusFork.Capella)
|
||||
of "deneb":
|
||||
version = Opt.some(ConsensusFork.Deneb)
|
||||
of "electra":
|
||||
version = Opt.some(ConsensusFork.Electra)
|
||||
else:
|
||||
reader.raiseUnexpectedValue("Incorrect version field value")
|
||||
of "data":
|
||||
|
@ -3908,10 +3867,10 @@ proc decodeBytes*[T: DecodeTypes](
|
|||
else:
|
||||
err("Content-Type not supported")
|
||||
|
||||
proc encodeString*(value: string): RestResult[string] =
|
||||
func encodeString*(value: string): RestResult[string] =
|
||||
ok(value)
|
||||
|
||||
proc encodeString*(
|
||||
func encodeString*(
|
||||
value:
|
||||
uint64 |
|
||||
SyncCommitteePeriod |
|
||||
|
@ -3921,26 +3880,26 @@ proc encodeString*(
|
|||
SyncSubcommitteeIndex): RestResult[string] =
|
||||
ok(Base10.toString(uint64(value)))
|
||||
|
||||
proc encodeString*(value: ValidatorSig): RestResult[string] =
|
||||
func encodeString*(value: ValidatorSig): RestResult[string] =
|
||||
ok(hexOriginal(toRaw(value)))
|
||||
|
||||
proc encodeString*(value: GraffitiBytes): RestResult[string] =
|
||||
func encodeString*(value: GraffitiBytes): RestResult[string] =
|
||||
ok(hexOriginal(distinctBase(value)))
|
||||
|
||||
proc encodeString*(value: Eth2Digest): RestResult[string] =
|
||||
func encodeString*(value: Eth2Digest): RestResult[string] =
|
||||
ok(hexOriginal(value.data))
|
||||
|
||||
proc encodeString*(value: ValidatorIdent): RestResult[string] =
|
||||
func encodeString*(value: ValidatorIdent): RestResult[string] =
|
||||
case value.kind
|
||||
of ValidatorQueryKind.Index:
|
||||
ok(Base10.toString(uint64(value.index)))
|
||||
of ValidatorQueryKind.Key:
|
||||
ok(hexOriginal(toRaw(value.key)))
|
||||
|
||||
proc encodeString*(value: ValidatorPubKey): RestResult[string] =
|
||||
func encodeString*(value: ValidatorPubKey): RestResult[string] =
|
||||
ok(hexOriginal(toRaw(value)))
|
||||
|
||||
proc encodeString*(value: StateIdent): RestResult[string] =
|
||||
func encodeString*(value: StateIdent): RestResult[string] =
|
||||
case value.kind
|
||||
of StateQueryKind.Slot:
|
||||
ok(Base10.toString(uint64(value.slot)))
|
||||
|
@ -3957,7 +3916,7 @@ proc encodeString*(value: StateIdent): RestResult[string] =
|
|||
of StateIdentType.Justified:
|
||||
ok("justified")
|
||||
|
||||
proc encodeString*(value: BroadcastValidationType): RestResult[string] =
|
||||
func encodeString*(value: BroadcastValidationType): RestResult[string] =
|
||||
case value
|
||||
of BroadcastValidationType.Gossip:
|
||||
ok("gossip")
|
||||
|
@ -3966,7 +3925,7 @@ proc encodeString*(value: BroadcastValidationType): RestResult[string] =
|
|||
of BroadcastValidationType.ConsensusAndEquivocation:
|
||||
ok("consensus_and_equivocation")
|
||||
|
||||
proc encodeString*(value: BlockIdent): RestResult[string] =
|
||||
func encodeString*(value: BlockIdent): RestResult[string] =
|
||||
case value.kind
|
||||
of BlockQueryKind.Slot:
|
||||
ok(Base10.toString(uint64(value.slot)))
|
||||
|
@ -3981,7 +3940,7 @@ proc encodeString*(value: BlockIdent): RestResult[string] =
|
|||
of BlockIdentType.Finalized:
|
||||
ok("finalized")
|
||||
|
||||
proc decodeString*(t: typedesc[PeerStateKind],
|
||||
func decodeString*(t: typedesc[PeerStateKind],
|
||||
value: string): Result[PeerStateKind, cstring] =
|
||||
case value
|
||||
of "disconnected":
|
||||
|
@ -3993,9 +3952,9 @@ proc decodeString*(t: typedesc[PeerStateKind],
|
|||
of "disconnecting":
|
||||
ok(PeerStateKind.Disconnecting)
|
||||
else:
|
||||
err("Incorrect peer's state value")
|
||||
err("Incorrect peer state value")
|
||||
|
||||
proc encodeString*(value: PeerStateKind): Result[string, cstring] =
|
||||
func encodeString*(value: PeerStateKind): Result[string, cstring] =
|
||||
case value
|
||||
of PeerStateKind.Disconnected:
|
||||
ok("disconnected")
|
||||
|
@ -4006,7 +3965,7 @@ proc encodeString*(value: PeerStateKind): Result[string, cstring] =
|
|||
of PeerStateKind.Disconnecting:
|
||||
ok("disconnecting")
|
||||
|
||||
proc decodeString*(t: typedesc[PeerDirectKind],
|
||||
func decodeString*(t: typedesc[PeerDirectKind],
|
||||
value: string): Result[PeerDirectKind, cstring] =
|
||||
case value
|
||||
of "inbound":
|
||||
|
@ -4014,19 +3973,19 @@ proc decodeString*(t: typedesc[PeerDirectKind],
|
|||
of "outbound":
|
||||
ok(PeerDirectKind.Outbound)
|
||||
else:
|
||||
err("Incorrect peer's direction value")
|
||||
err("Incorrect peer direction value")
|
||||
|
||||
proc encodeString*(value: PeerDirectKind): Result[string, cstring] =
|
||||
func encodeString*(value: PeerDirectKind): Result[string, cstring] =
|
||||
case value
|
||||
of PeerDirectKind.Inbound:
|
||||
ok("inbound")
|
||||
of PeerDirectKind.Outbound:
|
||||
ok("outbound")
|
||||
|
||||
proc encodeString*(peerid: PeerId): Result[string, cstring] =
|
||||
func encodeString*(peerid: PeerId): Result[string, cstring] =
|
||||
ok($peerid)
|
||||
|
||||
proc decodeString*(t: typedesc[EventTopic],
|
||||
func decodeString*(t: typedesc[EventTopic],
|
||||
value: string): Result[EventTopic, cstring] =
|
||||
case value
|
||||
of "head":
|
||||
|
@ -4058,7 +4017,7 @@ proc decodeString*(t: typedesc[EventTopic],
|
|||
else:
|
||||
err("Incorrect event's topic value")
|
||||
|
||||
proc encodeString*(value: set[EventTopic]): Result[string, cstring] =
|
||||
func encodeString*(value: set[EventTopic]): Result[string, cstring] =
|
||||
var res: string
|
||||
if EventTopic.Head in value:
|
||||
res.add("head,")
|
||||
|
@ -4091,7 +4050,7 @@ proc encodeString*(value: set[EventTopic]): Result[string, cstring] =
|
|||
res.setLen(len(res) - 1)
|
||||
ok(res)
|
||||
|
||||
proc toList*(value: set[ValidatorFilterKind]): seq[string] =
|
||||
func toList*(value: set[ValidatorFilterKind]): seq[string] =
|
||||
const
|
||||
pendingSet = {ValidatorFilterKind.PendingInitialized,
|
||||
ValidatorFilterKind.PendingQueued}
|
||||
|
@ -4130,7 +4089,7 @@ proc toList*(value: set[ValidatorFilterKind]): seq[string] =
|
|||
processSingle(ValidatorFilterKind.WithdrawalDone, "withdrawal_done")
|
||||
res
|
||||
|
||||
proc decodeString*(t: typedesc[ValidatorSig],
|
||||
func decodeString*(t: typedesc[ValidatorSig],
|
||||
value: string): Result[ValidatorSig, cstring] =
|
||||
if len(value) != ValidatorSigSize + 2:
|
||||
return err("Incorrect validator signature value length")
|
||||
|
@ -4138,7 +4097,7 @@ proc decodeString*(t: typedesc[ValidatorSig],
|
|||
return err("Incorrect validator signature encoding")
|
||||
ValidatorSig.fromHex(value)
|
||||
|
||||
proc decodeString*(t: typedesc[ValidatorPubKey],
|
||||
func decodeString*(t: typedesc[ValidatorPubKey],
|
||||
value: string): Result[ValidatorPubKey, cstring] =
|
||||
if len(value) != ValidatorKeySize + 2:
|
||||
return err("Incorrect validator's key value length")
|
||||
|
@ -4147,35 +4106,35 @@ proc decodeString*(t: typedesc[ValidatorPubKey],
|
|||
else:
|
||||
ValidatorPubKey.fromHex(value)
|
||||
|
||||
proc decodeString*(t: typedesc[GraffitiBytes],
|
||||
func decodeString*(t: typedesc[GraffitiBytes],
|
||||
value: string): Result[GraffitiBytes, cstring] =
|
||||
try:
|
||||
ok(GraffitiBytes.init(value))
|
||||
except ValueError:
|
||||
err("Unable to decode graffiti value")
|
||||
|
||||
proc decodeString*(t: typedesc[string],
|
||||
func decodeString*(t: typedesc[string],
|
||||
value: string): Result[string, cstring] =
|
||||
ok(value)
|
||||
|
||||
proc decodeString*(t: typedesc[Slot], value: string): Result[Slot, cstring] =
|
||||
func decodeString*(t: typedesc[Slot], value: string): Result[Slot, cstring] =
|
||||
let res = ? Base10.decode(uint64, value)
|
||||
ok(Slot(res))
|
||||
|
||||
proc decodeString*(t: typedesc[Epoch], value: string): Result[Epoch, cstring] =
|
||||
func decodeString*(t: typedesc[Epoch], value: string): Result[Epoch, cstring] =
|
||||
let res = ? Base10.decode(uint64, value)
|
||||
ok(Epoch(res))
|
||||
|
||||
proc decodeString*(t: typedesc[SyncCommitteePeriod],
|
||||
func decodeString*(t: typedesc[SyncCommitteePeriod],
|
||||
value: string): Result[SyncCommitteePeriod, cstring] =
|
||||
let res = ? Base10.decode(uint64, value)
|
||||
ok(SyncCommitteePeriod(res))
|
||||
|
||||
proc decodeString*(t: typedesc[uint64],
|
||||
func decodeString*(t: typedesc[uint64],
|
||||
value: string): Result[uint64, cstring] =
|
||||
Base10.decode(uint64, value)
|
||||
|
||||
proc decodeString*(t: typedesc[StateIdent],
|
||||
func decodeString*(t: typedesc[StateIdent],
|
||||
value: string): Result[StateIdent, cstring] =
|
||||
if len(value) > 2:
|
||||
if (value[0] == '0') and (value[1] == 'x'):
|
||||
|
@ -4207,7 +4166,7 @@ proc decodeString*(t: typedesc[StateIdent],
|
|||
let res = ? Base10.decode(uint64, value)
|
||||
ok(StateIdent(kind: StateQueryKind.Slot, slot: Slot(res)))
|
||||
|
||||
proc decodeString*(t: typedesc[BlockIdent],
|
||||
func decodeString*(t: typedesc[BlockIdent],
|
||||
value: string): Result[BlockIdent, cstring] =
|
||||
if len(value) > 2:
|
||||
if (value[0] == '0') and (value[1] == 'x'):
|
||||
|
@ -4236,7 +4195,7 @@ proc decodeString*(t: typedesc[BlockIdent],
|
|||
let res = ? Base10.decode(uint64, value)
|
||||
ok(BlockIdent(kind: BlockQueryKind.Slot, slot: Slot(res)))
|
||||
|
||||
proc decodeString*(t: typedesc[BroadcastValidationType],
|
||||
func decodeString*(t: typedesc[BroadcastValidationType],
|
||||
value: string): Result[BroadcastValidationType, cstring] =
|
||||
case value
|
||||
of "gossip":
|
||||
|
@ -4248,7 +4207,7 @@ proc decodeString*(t: typedesc[BroadcastValidationType],
|
|||
else:
|
||||
err("Incorrect broadcast validation type value")
|
||||
|
||||
proc decodeString*(t: typedesc[ValidatorIdent],
|
||||
func decodeString*(t: typedesc[ValidatorIdent],
|
||||
value: string): Result[ValidatorIdent, cstring] =
|
||||
if len(value) > 2:
|
||||
if (value[0] == '0') and (value[1] == 'x'):
|
||||
|
@ -4269,21 +4228,21 @@ proc decodeString*(t: typedesc[ValidatorIdent],
|
|||
ok(ValidatorIdent(kind: ValidatorQueryKind.Index,
|
||||
index: RestValidatorIndex(res)))
|
||||
|
||||
proc decodeString*(t: typedesc[PeerId],
|
||||
func decodeString*(t: typedesc[PeerId],
|
||||
value: string): Result[PeerId, cstring] =
|
||||
PeerId.init(value)
|
||||
|
||||
proc decodeString*(t: typedesc[CommitteeIndex],
|
||||
func decodeString*(t: typedesc[CommitteeIndex],
|
||||
value: string): Result[CommitteeIndex, cstring] =
|
||||
let res = ? Base10.decode(uint64, value)
|
||||
CommitteeIndex.init(res)
|
||||
|
||||
proc decodeString*(t: typedesc[SyncSubcommitteeIndex],
|
||||
func decodeString*(t: typedesc[SyncSubcommitteeIndex],
|
||||
value: string): Result[SyncSubcommitteeIndex, cstring] =
|
||||
let res = ? Base10.decode(uint64, value)
|
||||
SyncSubcommitteeIndex.init(res)
|
||||
|
||||
proc decodeString*(t: typedesc[Eth2Digest],
|
||||
func decodeString*(t: typedesc[Eth2Digest],
|
||||
value: string): Result[Eth2Digest, cstring] =
|
||||
if len(value) != RootHashSize + 2:
|
||||
return err("Incorrect root value length")
|
||||
|
@ -4291,7 +4250,7 @@ proc decodeString*(t: typedesc[Eth2Digest],
|
|||
return err("Incorrect root value encoding")
|
||||
parseRoot(value)
|
||||
|
||||
proc decodeString*(t: typedesc[ValidatorFilter],
|
||||
func decodeString*(t: typedesc[ValidatorFilter],
|
||||
value: string): Result[ValidatorFilter, cstring] =
|
||||
case value
|
||||
of "pending_initialized":
|
||||
|
@ -4336,14 +4295,16 @@ proc decodeString*(t: typedesc[ValidatorFilter],
|
|||
else:
|
||||
err("Incorrect validator state identifier value")
|
||||
|
||||
proc decodeString*(t: typedesc[ConsensusFork],
|
||||
func decodeString*(t: typedesc[ConsensusFork],
|
||||
value: string): Result[ConsensusFork, cstring] =
|
||||
static: doAssert ConsensusFork.high == ConsensusFork.Electra
|
||||
case toLowerAscii(value)
|
||||
of "phase0": ok(ConsensusFork.Phase0)
|
||||
of "altair": ok(ConsensusFork.Altair)
|
||||
of "bellatrix": ok(ConsensusFork.Bellatrix)
|
||||
of "capella": ok(ConsensusFork.Capella)
|
||||
of "deneb": ok(ConsensusFork.Deneb)
|
||||
of "electra": ok(ConsensusFork.Electra)
|
||||
else: err("Unsupported or invalid beacon block fork version")
|
||||
|
||||
proc decodeString*(t: typedesc[EventBeaconBlockObject],
|
||||
|
|
Loading…
Reference in New Issue