Skip to content

Commit

Permalink
Update nim-eth types (#6583)
Browse files Browse the repository at this point in the history
Minimal changes needed for compatiblity with
status-im/nim-eth#733 which aligns core types
with execution spec.
  • Loading branch information
arnetheduck authored Sep 29, 2024
1 parent 2e64fdf commit b20f1ba
Show file tree
Hide file tree
Showing 7 changed files with 82 additions and 75 deletions.
2 changes: 2 additions & 0 deletions beacon_chain/conf.nim
Original file line number Diff line number Diff line change
Expand Up @@ -1133,6 +1133,8 @@ type

AnyConf* = BeaconNodeConf | ValidatorClientConf | SigningNodeConf

Address = primitives.Address

proc defaultDataDir*[Conf](config: Conf): string =
let dataDir = when defined(windows):
"AppData" / "Roaming" / "Nimbus"
Expand Down
2 changes: 2 additions & 0 deletions beacon_chain/el/el_manager.nim
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,13 @@ logScope:
topics = "elman"

type
FixedBytes[N: static int] = web3.FixedBytes[N]
PubKeyBytes = DynamicBytes[48, 48]
WithdrawalCredentialsBytes = DynamicBytes[32, 32]
SignatureBytes = DynamicBytes[96, 96]
Int64LeBytes = DynamicBytes[8, 8]
WithoutTimeout* = distinct int
Address = web3.Address

SomeEnginePayloadWithValue =
BellatrixExecutionPayloadWithValue |
Expand Down
106 changes: 52 additions & 54 deletions beacon_chain/libnimbus_lc/libnimbus_lc.nim
Original file line number Diff line number Diff line change
Expand Up @@ -1282,25 +1282,25 @@ proc ETHExecutionBlockHeaderCreateFromJson(
if data.nonce.isNone:
return nil
let blockHeader = ExecutionBlockHeader(
parentHash: data.parentHash.asEth2Digest,
ommersHash: data.sha3Uncles.asEth2Digest,
coinbase: distinctBase(data.miner),
stateRoot: data.stateRoot.asEth2Digest,
txRoot: data.transactionsRoot.asEth2Digest,
receiptsRoot: data.receiptsRoot.asEth2Digest,
logsBloom: distinctBase(data.logsBloom),
parentHash: data.parentHash.asEth2Digest.to(Hash32),
ommersHash: data.sha3Uncles.asEth2Digest.to(Hash32),
coinbase: distinctBase(data.miner).to(EthAddress),
stateRoot: data.stateRoot.asEth2Digest.to(Hash32),
transactionsRoot: data.transactionsRoot.asEth2Digest.to(Hash32),
receiptsRoot: data.receiptsRoot.asEth2Digest.to(Hash32),
logsBloom: distinctBase(data.logsBloom).to(Bloom),
difficulty: data.difficulty,
number: distinctBase(data.number),
gasLimit: distinctBase(data.gasLimit),
gasUsed: distinctBase(data.gasUsed),
timestamp: EthTime(distinctBase(data.timestamp)),
extraData: distinctBase(data.extraData),
mixHash: data.mixHash.asEth2Digest,
nonce: distinctBase(data.nonce.get),
mixHash: data.mixHash.asEth2Digest.to(Hash32),
nonce: distinctBase(data.nonce.get).to(Bytes8),
baseFeePerGas: data.baseFeePerGas,
withdrawalsRoot:
if data.withdrawalsRoot.isSome:
Opt.some(data.withdrawalsRoot.get.asEth2Digest)
Opt.some(data.withdrawalsRoot.get.asEth2Digest.to(Hash32))
else:
Opt.none(ExecutionHash256),
blobGasUsed:
Expand All @@ -1315,12 +1315,12 @@ proc ETHExecutionBlockHeaderCreateFromJson(
Opt.none(uint64),
parentBeaconBlockRoot:
if data.parentBeaconBlockRoot.isSome:
Opt.some distinctBase(data.parentBeaconBlockRoot.get.asEth2Digest)
Opt.some data.parentBeaconBlockRoot.get.asEth2Digest.to(Hash32)
else:
Opt.none(ExecutionHash256),
requestsRoot:
if data.requestsRoot.isSome:
Opt.some(data.requestsRoot.get.asEth2Digest)
Opt.some(data.requestsRoot.get.asEth2Digest.to(Hash32))
else:
Opt.none(ExecutionHash256))
if rlpHash(blockHeader) != executionHash[]:
Expand All @@ -1342,7 +1342,7 @@ proc ETHExecutionBlockHeaderCreateFromJson(
wd = ExecutionWithdrawal(
index: distinctBase(data.index),
validatorIndex: distinctBase(data.validatorIndex),
address: distinctBase(data.address),
address: distinctBase(data.address).to(EthAddress),
amount: distinctBase(data.amount))
rlpBytes =
try:
Expand All @@ -1353,7 +1353,7 @@ proc ETHExecutionBlockHeaderCreateFromJson(
wds.add ETHWithdrawal(
index: wd.index,
validatorIndex: wd.validatorIndex,
address: ExecutionAddress(data: wd.address),
address: ExecutionAddress(data: wd.address.data),
amount: wd.amount,
bytes: rlpBytes)

Expand All @@ -1379,10 +1379,10 @@ proc ETHExecutionBlockHeaderCreateFromJson(
# Construct deposit request
let
req = ExecutionDepositRequest(
pubkey: distinctBase(data.pubkey),
withdrawalCredentials: distinctBase(data.withdrawalCredentials),
pubkey: distinctBase(data.pubkey).to(Bytes48),
withdrawalCredentials: distinctBase(data.withdrawalCredentials).to(Bytes32),
amount: distinctBase(data.amount),
signature: distinctBase(data.signature),
signature: distinctBase(data.signature).to(Bytes96),
index: distinctBase(data.index))
rlpBytes =
try:
Expand All @@ -1391,10 +1391,10 @@ proc ETHExecutionBlockHeaderCreateFromJson(
raiseAssert "Unreachable"

depositRequests.add ETHDepositRequest(
pubkey: ValidatorPubKey(blob: req.pubkey),
withdrawalCredentials: req.withdrawalCredentials,
pubkey: ValidatorPubKey(blob: req.pubkey.data),
withdrawalCredentials: req.withdrawalCredentials.data,
amount: req.amount,
signature: ValidatorSig(blob: req.signature),
signature: ValidatorSig(blob: req.signature.data),
index: req.index,
bytes: rlpBytes)

Expand All @@ -1411,8 +1411,8 @@ proc ETHExecutionBlockHeaderCreateFromJson(
# Construct withdrawal request
let
req = ExecutionWithdrawalRequest(
sourceAddress: distinctBase(data.sourceAddress),
validatorPubkey: distinctBase(data.validatorPubkey),
sourceAddress: distinctBase(data.sourceAddress).to(EthAddress),
validatorPubkey: distinctBase(data.validatorPubkey).to(Bytes48),
amount: distinctBase(data.amount))
rlpBytes =
try:
Expand All @@ -1421,8 +1421,8 @@ proc ETHExecutionBlockHeaderCreateFromJson(
raiseAssert "Unreachable"

withdrawalRequests.add ETHWithdrawalRequest(
sourceAddress: ExecutionAddress(data: req.sourceAddress),
validatorPubkey: ValidatorPubKey(blob: req.validatorPubkey),
sourceAddress: ExecutionAddress(data: req.sourceAddress.data),
validatorPubkey: ValidatorPubKey(blob: req.validatorPubkey.data),
amount: req.amount,
bytes: rlpBytes)

Expand All @@ -1439,19 +1439,19 @@ proc ETHExecutionBlockHeaderCreateFromJson(
# Construct consolidation request
let
req = ExecutionConsolidationRequest(
sourceAddress: distinctBase(data.sourceAddress),
sourcePubkey: distinctBase(data.sourcePubkey),
targetPubkey: distinctBase(data.targetPubkey))
sourceAddress: distinctBase(data.sourceAddress).to(EthAddress),
sourcePubkey: distinctBase(data.sourcePubkey).to(Bytes48),
targetPubkey: distinctBase(data.targetPubkey).to(Bytes48))
rlpBytes =
try:
rlp.encode(req)
except RlpError:
raiseAssert "Unreachable"

consolidationRequests.add ETHConsolidationRequest(
sourceAddress: ExecutionAddress(data: req.sourceAddress),
sourcePubkey: ValidatorPubKey(blob: req.sourcePubkey),
targetPubkey: ValidatorPubKey(blob: req.targetPubkey),
sourceAddress: ExecutionAddress(data: req.sourceAddress.data),
sourcePubkey: ValidatorPubKey(blob: req.sourcePubkey.data),
targetPubkey: ValidatorPubKey(blob: req.targetPubkey.data),
bytes: rlpBytes)

# Verify requests root
Expand Down Expand Up @@ -1487,9 +1487,9 @@ proc ETHExecutionBlockHeaderCreateFromJson(
let executionBlockHeader = ETHExecutionBlockHeader.new()
executionBlockHeader[] = ETHExecutionBlockHeader(
transactionsRoot: blockHeader.txRoot,
withdrawalsRoot: blockHeader.withdrawalsRoot.get(ZERO_HASH),
withdrawalsRoot: blockHeader.withdrawalsRoot.get(zeroHash32),
withdrawals: wds,
requestsRoot: blockHeader.requestsRoot.get(ZERO_HASH),
requestsRoot: blockHeader.requestsRoot.get(zeroHash32),
depositRequests: depositRequests,
withdrawalRequests: withdrawalRequests,
consolidationRequests: consolidationRequests)
Expand Down Expand Up @@ -1776,31 +1776,31 @@ proc ETHTransactionsCreateFromJson(
gasLimit: distinctBase(data.gas).GasInt,
to:
if data.to.isSome:
Opt.some(distinctBase(data.to.get))
Opt.some(distinctBase(data.to.get).to(EthAddress))
else:
Opt.none(EthAddress),
value: data.value,
payload: data.input,
accessList:
if data.accessList.isSome:
data.accessList.get.mapIt(AccessPair(
address: distinctBase(it.address),
storageKeys: it.storageKeys.mapIt(distinctBase(it))))
address: distinctBase(it.address).to(EthAddress),
storageKeys: it.storageKeys.mapIt(distinctBase(it).to(Bytes32))))
else:
@[],
maxFeePerBlobGas:
data.maxFeePerBlobGas.get(0.u256),
versionedHashes:
if data.blobVersionedHashes.isSome:
data.blobVersionedHashes.get.mapIt(
ExecutionHash256(data: distinctBase(it)))
Bytes32(distinctBase(it)))
else:
@[],
authorizationList:
if data.authorizationList.isSome:
data.authorizationList.get.mapIt(Authorization(
chainId: it.chainId.ChainId,
address: distinctBase(it.address),
address: distinctBase(it.address).to(EthAddress),
nonce: distinctBase(it.nonce),
yParity: distinctBase(it.yParity),
R: it.R,
Expand Down Expand Up @@ -1834,7 +1834,7 @@ proc ETHTransactionsCreateFromJson(
return Opt.none(array[20, byte])
pubkey = sig.recover(sigHash).valueOr:
return Opt.none(array[20, byte])
Opt.some keys.PublicKey(pubkey).toCanonicalAddress()
Opt.some keys.PublicKey(pubkey).toCanonicalAddress().data

# Compute from execution address
let
Expand All @@ -1861,10 +1861,8 @@ proc ETHTransactionsCreateFromJson(
of DestinationType.Regular:
tx.to.get
of DestinationType.Create:
var res {.noinit.}: array[20, byte]
res[0 ..< 20] = keccakHash(rlp.encodeList(fromAddress, tx.nonce))
.data.toOpenArray(12, 31)
res
let hash = keccakHash(rlp.encodeList(fromAddress, tx.nonce))
hash.to(EthAddress)

# Compute authorizations
var authorizationList = newSeqOfCap[ETHAuthorizationTuple](
Expand All @@ -1876,7 +1874,7 @@ proc ETHTransactionsCreateFromJson(
return nil
authorizationList.add ETHAuthorizationTuple(
chainId: distinctBase(auth.chainId).u256,
address: ExecutionAddress(data: auth.address),
address: ExecutionAddress(data: auth.address.data),
nonce: auth.nonce,
authority: ExecutionAddress(data: authority),
signature: @signature)
Expand All @@ -1890,14 +1888,14 @@ proc ETHTransactionsCreateFromJson(
maxFeePerGas: tx.maxFeePerGas.uint64,
gas: tx.gasLimit.uint64,
destinationType: destinationType,
to: ExecutionAddress(data: toAddress),
to: ExecutionAddress(data: toAddress.data),
value: tx.value,
input: tx.payload,
accessList: tx.accessList.mapIt(ETHAccessTuple(
address: ExecutionAddress(data: it.address),
storageKeys: it.storageKeys.mapIt(Eth2Digest(data: it)))),
address: ExecutionAddress(data: it.address.data),
storageKeys: it.storageKeys.mapIt(Eth2Digest(data: it.data)))),
maxFeePerBlobGas: tx.maxFeePerBlobGas,
blobVersionedHashes: tx.versionedHashes,
blobVersionedHashes: tx.versionedHashes.mapIt(Eth2Digest(data: it.data)),
authorizationList: authorizationList,
signature: @rawSig,
bytes: rlpBytes.TypedTransaction)
Expand Down Expand Up @@ -2581,14 +2579,14 @@ proc ETHReceiptsCreateFromJson(
status: distinctBase(data.status.get(1.Quantity)) != 0'u64,
hash:
if data.root.isSome:
ExecutionHash256(data: distinctBase(data.root.get))
ExecutionHash256(distinctBase(data.root.get))
else:
default(ExecutionHash256),
cumulativeGasUsed: distinctBase(data.cumulativeGasUsed).GasInt,
logsBloom: distinctBase(data.logsBloom),
logsBloom: distinctBase(data.logsBloom).to(Bloom),
logs: data.logs.mapIt(Log(
address: distinctBase(it.address),
topics: it.topics.mapIt(distinctBase(it)),
address: distinctBase(it.address).to(EthAddress),
topics: it.topics.mapIt(distinctBase(it).to(Bytes32)),
data: it.data)))
rlpBytes =
try:
Expand All @@ -2605,10 +2603,10 @@ proc ETHReceiptsCreateFromJson(
root: rec.hash,
status: rec.status,
gasUsed: distinctBase(data.gasUsed), # Validated during sanity checks.
logsBloom: BloomLogs(data: rec.logsBloom),
logsBloom: BloomLogs(data: rec.logsBloom.data),
logs: rec.logs.mapIt(ETHLog(
address: ExecutionAddress(data: it.address),
topics: it.topics.mapIt(Eth2Digest(data: it)),
address: ExecutionAddress(data: it.address.data),
topics: it.topics.mapIt(Eth2Digest(data: it.data)),
data: it.data)),
bytes: rlpBytes)

Expand Down
Loading

0 comments on commit b20f1ba

Please sign in to comment.