Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

vm: update the system contract addresses for prague devnet4 #3706

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions packages/block/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import {
type CLRequest,
type CLRequestType,
} from '@ethereumjs/util'
import { keccak256 } from 'ethereum-cryptography/keccak.js'

const main = async () => {
const common = new Common({
Expand All @@ -42,7 +43,7 @@ const main = async () => {
}
const request = DepositRequest.fromRequestData(depositRequestData) as CLRequest<CLRequestType>
const requests = [request]
const requestsRoot = await Block.genRequestsTrieRoot(requests)
const requestsRoot = await Block.genRequestsRoot(requests, keccak256)

const block = Block.fromBlockData(
{
Expand Down Expand Up @@ -77,6 +78,7 @@ import {
type CLRequest,
type CLRequestType,
} from '@ethereumjs/util'
import { keccak256 } from 'ethereum-cryptography/keccak.js'

const main = async () => {
const common = new Common({
Expand All @@ -93,7 +95,7 @@ const main = async () => {
withdrawalRequestData,
) as CLRequest<CLRequestType>
const requests = [request]
const requestsRoot = await Block.genRequestsTrieRoot(requests)
const requestsRoot = await Block.genRequestsRoot(requests, keccak256)

const block = Block.fromBlockData(
{
Expand Down Expand Up @@ -130,6 +132,7 @@ import {
type CLRequest,
type CLRequestType,
} from '@ethereumjs/util'
import { keccak256 } from 'ethereum-cryptography/keccak.js'

const main = async () => {
const common = new Common({
Expand All @@ -146,7 +149,7 @@ const main = async () => {
consolidationRequestData,
) as CLRequest<CLRequestType>
const requests = [request]
const requestsRoot = await Block.genRequestsTrieRoot(requests)
const requestsRoot = await Block.genRequestsRoot(requests, keccak256)

const block = Block.fromBlockData(
{
Expand Down
19 changes: 11 additions & 8 deletions packages/block/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ Starting with v5.3.0 this library supports requests to the consensus layer which
```ts
// ./examples/6110Requests.ts

import { createBlock, genRequestsTrieRoot } from '@ethereumjs/block'
import { createBlock, genRequestsRoot } from '@ethereumjs/block'
import { Common, Hardfork, Mainnet } from '@ethereumjs/common'
import {
type CLRequest,
Expand All @@ -253,6 +253,7 @@ import {
createDepositRequest,
randomBytes,
} from '@ethereumjs/util'
import { keccak256 } from 'ethereum-cryptography/keccak.js'

const main = async () => {
const common = new Common({
Expand All @@ -263,13 +264,13 @@ const main = async () => {
const depositRequestData = {
pubkey: randomBytes(48),
withdrawalCredentials: randomBytes(32),
amount: bytesToBigInt(randomBytes(8)),
amount: (randomBytes(8)),
signature: randomBytes(96),
index: bytesToBigInt(randomBytes(8)),
index: (randomBytes(8)),
}
const request = createDepositRequest(depositRequestData) as CLRequest<CLRequestType>
const requests = [request]
const requestsRoot = await genRequestsTrieRoot(requests)
const requestsRoot = await genRequestsRoot(requests, keccak256)

const block = createBlock(
{
Expand Down Expand Up @@ -297,7 +298,7 @@ Have a look at the EIP for some guidance on how to use and fill in the various d
```ts
// ./examples/7002Requests.ts

import { createBlock, genRequestsTrieRoot } from '@ethereumjs/block'
import { createBlock, genRequestsRoot } from '@ethereumjs/block'
import { Common, Hardfork, Mainnet } from '@ethereumjs/common'
import {
type CLRequest,
Expand All @@ -306,6 +307,7 @@ import {
createWithdrawalRequest,
randomBytes,
} from '@ethereumjs/util'
import { keccak256 } from 'ethereum-cryptography/keccak.js'

const main = async () => {
const common = new Common({
Expand All @@ -320,7 +322,7 @@ const main = async () => {
}
const request = createWithdrawalRequest(withdrawalRequestData) as CLRequest<CLRequestType>
const requests = [request]
const requestsRoot = await genRequestsTrieRoot(requests)
const requestsRoot = await genRequestsRoot(requests, keecak256)

const block = createBlock(
{
Expand Down Expand Up @@ -348,14 +350,15 @@ Have a look at the EIP for some guidance on how to use and fill in the various w
```ts
// ./examples/7251Requests.ts

import { createBlock, genRequestsTrieRoot } from '@ethereumjs/block'
import { createBlock, genRequestsRoot } from '@ethereumjs/block'
import { Common, Hardfork, Mainnet } from '@ethereumjs/common'
import {
type CLRequest,
type CLRequestType,
createConsolidationRequest,
randomBytes,
} from '@ethereumjs/util'
import { keccak256 } from 'ethereum-cryptography/keccak.js'

const main = async () => {
const common = new Common({
Expand All @@ -370,7 +373,7 @@ const main = async () => {
}
const request = createConsolidationRequest(consolidationRequestData) as CLRequest<CLRequestType>
const requests = [request]
const requestsRoot = await genRequestsTrieRoot(requests)
const requestsRoot = await genRequestsRoot(requests, keccak256)

const block = createBlock(
{
Expand Down
9 changes: 5 additions & 4 deletions packages/block/examples/6110Requests.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { createBlock, genRequestsTrieRoot } from '@ethereumjs/block'
import { createBlock, genRequestsRoot } from '@ethereumjs/block'
import { Common, Hardfork, Mainnet } from '@ethereumjs/common'
import {
type CLRequest,
Expand All @@ -7,6 +7,7 @@ import {
createDepositRequest,
randomBytes,
} from '@ethereumjs/util'
import { keccak256 } from 'ethereum-cryptography/keccak.js'

const main = async () => {
const common = new Common({
Expand All @@ -17,13 +18,13 @@ const main = async () => {
const depositRequestData = {
pubkey: randomBytes(48),
withdrawalCredentials: randomBytes(32),
amount: bytesToBigInt(randomBytes(8)),
amount: randomBytes(8),
signature: randomBytes(96),
index: bytesToBigInt(randomBytes(8)),
index: randomBytes(8),
}
const request = createDepositRequest(depositRequestData) as CLRequest<CLRequestType>
const requests = [request]
const requestsRoot = await genRequestsTrieRoot(requests)
const requestsRoot = await genRequestsRoot(requests, keccak256)

const block = createBlock(
{
Expand Down
5 changes: 3 additions & 2 deletions packages/block/examples/7002Requests.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { createBlock, genRequestsTrieRoot } from '@ethereumjs/block'
import { createBlock, genRequestsRoot } from '@ethereumjs/block'
import { Common, Hardfork, Mainnet } from '@ethereumjs/common'
import {
type CLRequest,
Expand All @@ -7,6 +7,7 @@ import {
createWithdrawalRequest,
randomBytes,
} from '@ethereumjs/util'
import { keccak256 } from 'ethereum-cryptography/keccak.js'

const main = async () => {
const common = new Common({
Expand All @@ -21,7 +22,7 @@ const main = async () => {
}
const request = createWithdrawalRequest(withdrawalRequestData) as CLRequest<CLRequestType>
const requests = [request]
const requestsRoot = await genRequestsTrieRoot(requests)
const requestsRoot = await genRequestsRoot(requests, keccak256)

const block = createBlock(
{
Expand Down
5 changes: 3 additions & 2 deletions packages/block/examples/7251Requests.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import { createBlock, genRequestsTrieRoot } from '@ethereumjs/block'
import { createBlock, genRequestsRoot } from '@ethereumjs/block'
import { Common, Hardfork, Mainnet } from '@ethereumjs/common'
import {
type CLRequest,
type CLRequestType,
createConsolidationRequest,
randomBytes,
} from '@ethereumjs/util'
import { keccak256 } from 'ethereum-cryptography/keccak.js'

const main = async () => {
const common = new Common({
Expand All @@ -20,7 +21,7 @@ const main = async () => {
}
const request = createConsolidationRequest(consolidationRequestData) as CLRequest<CLRequestType>
const requests = [request]
const requestsRoot = await genRequestsTrieRoot(requests)
const requestsRoot = await genRequestsRoot(requests, keccak256)

const block = createBlock(
{
Expand Down
50 changes: 9 additions & 41 deletions packages/block/src/block/block.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import { Trie } from '@ethereumjs/trie'
import { Blob4844Tx, Capability } from '@ethereumjs/tx'
import {
BIGINT_0,
CLRequestType,
KECCAK256_RLP,
KECCAK256_RLP_ARRAY,
bytesToHex,
Expand All @@ -19,7 +18,7 @@ import { keccak256 } from 'ethereum-cryptography/keccak.js'
// See: https://github.com/microsoft/TypeScript/issues/47558
// (situation will eventually improve on Typescript and/or Eslint update)
import {
genRequestsTrieRoot,
genRequestsRoot,
genTransactionsTrieRoot,
genWithdrawalsTrieRoot,
BlockHeader,
Expand All @@ -35,14 +34,7 @@ import {
import type { BlockBytes, BlockOptions, ExecutionPayload, JSONBlock } from '../types.js'
import type { Common } from '@ethereumjs/common'
import type { FeeMarket1559Tx, LegacyTx, TypedTransaction } from '@ethereumjs/tx'
import type {
CLRequest,
ConsolidationRequest,
DepositRequest,
VerkleExecutionWitness,
Withdrawal,
WithdrawalRequest,
} from '@ethereumjs/util'
import type { CLRequest, CLRequestType, VerkleExecutionWitness, Withdrawal } from '@ethereumjs/util'

/**
* Class representing a block in the Ethereum network. The {@link BlockHeader} has its own
Expand Down Expand Up @@ -261,11 +253,11 @@ export class Block {

if (requestsInput === undefined) {
if (this.cache.requestsRoot === undefined) {
this.cache.requestsRoot = await genRequestsTrieRoot(this.requests!)
this.cache.requestsRoot = await genRequestsRoot(this.requests!, this.keccakFunction)
}
return equalsBytes(this.cache.requestsRoot, this.header.requestsRoot!)
} else {
const reportedRoot = await genRequestsTrieRoot(requests)
const reportedRoot = await genRequestsRoot(requests, this.keccakFunction)
return equalsBytes(reportedRoot, this.header.requestsRoot!)
}
}
Expand Down Expand Up @@ -545,6 +537,10 @@ export class Block {
const header = blockJSON.header!
const transactions = this.transactions.map((tx) => bytesToHex(tx.serialize())) ?? []
const withdrawalsArr = blockJSON.withdrawals ? { withdrawals: blockJSON.withdrawals } : {}
const executionRequestsArr =
this.requests !== undefined
? { executionRequests: this.requests.map((req) => bytesToHex(req.serialize())) }
: undefined

const executionPayload: ExecutionPayload = {
blockNumber: header.number!,
Expand All @@ -566,35 +562,7 @@ export class Block {
...withdrawalsArr,
parentBeaconBlockRoot: header.parentBeaconBlockRoot,
executionWitness: this.executionWitness,

// lets add the request fields first and then iterate over requests to fill them up
depositRequests: this.common.isActivatedEIP(6110) ? [] : undefined,
withdrawalRequests: this.common.isActivatedEIP(7002) ? [] : undefined,
consolidationRequests: this.common.isActivatedEIP(7251) ? [] : undefined,
}

if (this.requests !== undefined) {
for (const request of this.requests) {
switch (request.type) {
case CLRequestType.Deposit:
executionPayload.depositRequests!.push((request as DepositRequest).toJSON())
continue

case CLRequestType.Withdrawal:
executionPayload.withdrawalRequests!.push((request as WithdrawalRequest).toJSON())
continue

case CLRequestType.Consolidation:
executionPayload.consolidationRequests!.push((request as ConsolidationRequest).toJSON())
continue
}
}
} else if (
executionPayload.depositRequests !== undefined ||
executionPayload.withdrawalRequests !== undefined ||
executionPayload.consolidationRequests !== undefined
) {
throw Error(`Undefined requests for activated deposit or withdrawal requests`)
...executionRequestsArr,
}

return executionPayload
Expand Down
46 changes: 8 additions & 38 deletions packages/block/src/block/constructors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,20 +12,18 @@ import {
bigIntToHex,
bytesToHex,
bytesToUtf8,
createConsolidationRequestFromJSON,
createDepositRequestFromJSON,
createWithdrawal,
createWithdrawalRequestFromJSON,
equalsBytes,
fetchFromProvider,
getProvider,
hexToBytes,
intToHex,
isHexString,
} from '@ethereumjs/util'
import { keccak256 } from 'ethereum-cryptography/keccak.js'

import { generateCliqueBlockExtraData } from '../consensus/clique.js'
import { genRequestsTrieRoot, genTransactionsTrieRoot, genWithdrawalsTrieRoot } from '../helpers.js'
import { genRequestsRoot, genTransactionsTrieRoot, genWithdrawalsTrieRoot } from '../helpers.js'
import {
Block,
createBlockHeader,
Expand All @@ -48,8 +46,6 @@ import type {
} from '../types.js'
import type { TypedTransaction } from '@ethereumjs/tx'
import type {
CLRequest,
CLRequestType,
EthersProvider,
PrefixedHexString,
RequestBytes,
Expand Down Expand Up @@ -382,9 +378,7 @@ export async function createBlockFromExecutionPayload(
feeRecipient: coinbase,
transactions,
withdrawals: withdrawalsData,
depositRequests,
withdrawalRequests,
consolidationRequests,
executionRequests,
executionWitness,
} = payload

Expand All @@ -407,35 +401,11 @@ export async function createBlockFromExecutionPayload(
? await genWithdrawalsTrieRoot(withdrawals, new Trie({ common: opts?.common }))
: undefined

const hasDepositRequests = depositRequests !== undefined && depositRequests !== null
const hasWithdrawalRequests = withdrawalRequests !== undefined && withdrawalRequests !== null
const hasConsolidationRequests =
consolidationRequests !== undefined && consolidationRequests !== null

const requests =
hasDepositRequests || hasWithdrawalRequests || hasConsolidationRequests
? ([] as CLRequest<CLRequestType>[])
: undefined

if (depositRequests !== undefined && depositRequests !== null) {
for (const dJSON of depositRequests) {
requests!.push(createDepositRequestFromJSON(dJSON))
}
}
if (withdrawalRequests !== undefined && withdrawalRequests !== null) {
for (const wJSON of withdrawalRequests) {
requests!.push(createWithdrawalRequestFromJSON(wJSON))
}
}
if (consolidationRequests !== undefined && consolidationRequests !== null) {
for (const cJSON of consolidationRequests) {
requests!.push(createConsolidationRequestFromJSON(cJSON))
}
}

const requestsRoot = requests
? await genRequestsTrieRoot(requests, new Trie({ common: opts?.common }))
: undefined
const requests = executionRequests?.map((req) =>
CLRequestFactory.fromSerializedRequest(hexToBytes(req)),
)
const keccakFunction = opts?.common?.customCrypto.keccak256 ?? keccak256
const requestsRoot = requests ? await genRequestsRoot(requests, keccakFunction) : undefined

const header: HeaderData = {
...payload,
Expand Down
Loading
Loading