Revert "Add missing pieces of EIP-7702 (#2877)"

This reverts commit b87b255398.
This commit is contained in:
tersec 2024-11-27 09:50:52 +01:00 committed by GitHub
parent b87b255398
commit 3ee83c1715
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
20 changed files with 84 additions and 414 deletions

View File

@ -22,7 +22,7 @@ const
DelegationPrefix = [0xef.byte, 0x01, 0x00]
const
PER_AUTH_BASE_COST* = 12500
PER_AUTH_BASE_COST* = 2500
PER_EMPTY_ACCOUNT_COST* = 25000
func authority*(auth: Authorization): Opt[Address] =

View File

@ -42,7 +42,6 @@ proc commitOrRollbackDependingOnGasUsed(
tx: Transaction;
gasBurned: GasInt;
priorityFee: GasInt;
blobGasUsed: GasInt;
): Result[GasInt, string] =
# Make sure that the tx does not exceed the maximum cumulative limit as
# set in the block header. Again, the eip-1559 reference does not mention
@ -60,7 +59,6 @@ proc commitOrRollbackDependingOnGasUsed(
# Return remaining gas to the block gas counter so it is
# available for the next transaction.
vmState.gasPool += tx.gasLimit - gasBurned
vmState.blobGasUsed += blobGasUsed
ok(gasBurned)
proc processTransactionImpl(
@ -87,11 +85,11 @@ proc processTransactionImpl(
vmState.gasPool -= tx.gasLimit
# blobGasUsed will be added to vmState.blobGasUsed if the tx is ok.
let blobGasUsed = tx.getTotalBlobGas
if vmState.blobGasUsed + blobGasUsed > MAX_BLOB_GAS_PER_BLOCK:
return err("blobGasUsed " & $blobGasUsed &
" exceeds maximum allowance " & $MAX_BLOB_GAS_PER_BLOCK)
vmState.blobGasUsed += blobGasUsed
# Actually, the eip-1559 reference does not mention an early exit.
#
@ -112,7 +110,7 @@ proc processTransactionImpl(
gasBurned = tx.txCallEvm(sender, vmState, baseFee)
vmState.captureTxEnd(tx.gasLimit - gasBurned)
commitOrRollbackDependingOnGasUsed(vmState, accTx, header, tx, gasBurned, priorityFee, blobGasUsed)
commitOrRollbackDependingOnGasUsed(vmState, accTx, header, tx, gasBurned, priorityFee)
else:
err(txRes.error)

View File

@ -17,8 +17,9 @@ import
../transaction/call_types,
../transaction,
../utils/utils,
"."/[dao, eip4844, eip7702, gaslimit, withdrawals],
"."/[dao, eip4844, gaslimit, withdrawals],
./pow/[difficulty, header],
nimcrypto/utils as cryptoutils,
stew/objects,
results
@ -341,11 +342,9 @@ proc validateTransaction*(
# Clients might choose to disable this rule for RPC calls like
# `eth_call` and `eth_estimateGas`
# EOA = Externally Owned Account
let
code = roDB.getCode(sender)
delegated = code.parseDelegation()
if code.len > 0 and not delegated:
return err(&"invalid tx: sender is not an EOA. sender={sender.toHex}, codeLen={code.len}")
let codeHash = roDB.getCodeHash(sender)
if codeHash != EMPTY_CODE_HASH:
return err(&"invalid tx: sender is not an EOA. sender={sender.toHex}, codeHash={codeHash.data.toHex}")
if tx.txType == TxEip4844:
# ensure that the user was willing to at least pay the current data gasprice

View File

@ -22,7 +22,8 @@ import
../common/common,
eth/common/eth_types_rlp,
chronicles, chronos,
sets
sets,
stew/assign2
export
common
@ -248,7 +249,8 @@ template resolveCode*(c: Computation, address: Address): CodeBytesRef =
c.vmState.readOnlyStateDB.resolveCode(address)
proc newComputation*(vmState: BaseVMState, sysCall: bool, message: Message,
salt: ContractSalt = ZERO_CONTRACTSALT): Computation =
salt: ContractSalt = ZERO_CONTRACTSALT,
authorizationList: openArray[Authorization] = []): Computation =
new result
result.vmState = vmState
result.msg = message
@ -269,9 +271,11 @@ proc newComputation*(vmState: BaseVMState, sysCall: bool, message: Message,
else:
result.code = CodeStream.init(
vmState.readOnlyStateDB.getCode(message.codeAddress))
assign(result.authorizationList, authorizationList)
func newComputation*(vmState: BaseVMState, sysCall: bool,
message: Message, code: CodeBytesRef): Computation =
message: Message, code: CodeBytesRef,
authorizationList: openArray[Authorization] = []): Computation =
new result
result.vmState = vmState
result.msg = message
@ -281,6 +285,7 @@ func newComputation*(vmState: BaseVMState, sysCall: bool,
result.gasMeter.init(message.gas)
result.code = CodeStream.init(code)
result.sysCall = sysCall
assign(result.authorizationList, authorizationList)
template gasCosts*(c: Computation): untyped =
c.vmState.gasCosts

View File

@ -75,20 +75,6 @@ proc gasCallEIP2929(c: Computation, address: Address): GasInt =
# the form of a constant `gasCall`
return ColdAccountAccessCost - WarmStorageReadCost
proc delegateResolutionCost(c: Computation, address: Address): GasInt =
when evmc_enabled:
if c.host.accessAccount(address) == EVMC_ACCESS_COLD:
ColdAccountAccessCost
else:
WarmStorageReadCost
else:
c.vmState.mutateStateDB:
if not db.inAccessList(address):
db.accessList(address)
return ColdAccountAccessCost
else:
return WarmStorageReadCost
proc updateStackAndParams(q: var LocalParams; c: Computation) =
c.stack.lsTop(0)
@ -113,7 +99,7 @@ proc updateStackAndParams(q: var LocalParams; c: Computation) =
if FkPrague <= c.fork:
let delegateTo = parseDelegationAddress(c.getCode(q.codeAddress))
if delegateTo.isSome:
q.gasCallEIPs += delegateResolutionCost(c, delegateTo[])
q.gasCallEIPs += gasCallEIP2929(c, delegateTo[])
proc callParams(c: Computation): EvmResult[LocalParams] =
## Helper for callOp()

View File

@ -9,14 +9,58 @@
# according to those terms.
import
../core/eip7702,
../constants,
../db/ledger,
./computation,
./interpreter_dispatch,
./message,
./state,
./types
./types,
./interpreter/gas_meter
{.push raises: [].}
# Using `proc` as `incNonce()` might be `proc` in logging mode
proc preExecComputation(c: Computation) =
if not c.msg.isCreate:
c.vmState.mutateStateDB:
db.incNonce(c.msg.sender)
# EIP-7702
for auth in c.authorizationList:
# 1. Verify the chain id is either 0 or the chain's current ID.
if not(auth.chainId == 0.ChainId or auth.chainId == c.vmState.com.chainId):
continue
# 2. authority = ecrecover(keccak(MAGIC || rlp([chain_id, address, nonce])), y_parity, r, s]
let authority = authority(auth).valueOr:
continue
# 3. Add authority to accessed_addresses (as defined in EIP-2929.)
let ledger = c.vmState.stateDB
ledger.accessList(authority)
# 4. Verify the code of authority is either empty or already delegated.
let code = ledger.getCode(authority)
if code.len > 0:
if not parseDelegation(code):
continue
# 5. Verify the nonce of authority is equal to nonce.
if ledger.getNonce(authority) != auth.nonce:
continue
# 6. Add PER_EMPTY_ACCOUNT_COST - PER_AUTH_BASE_COST gas to the global refund counter if authority exists in the trie.
if ledger.accountExists(authority):
c.gasMeter.refundGas(PER_EMPTY_ACCOUNT_COST - PER_AUTH_BASE_COST)
# 7. Set the code of authority to be 0xef0100 || address. This is a delegation designation.
ledger.setCode(authority, @(addressToDelegation(authority)))
# 8. Increase the nonce of authority by one.
ledger.setNonce(authority, auth.nonce + 1)
proc postExecComputation(c: Computation) =
if c.isSuccess:
if c.fork < FkLondon:
@ -25,6 +69,7 @@ proc postExecComputation(c: Computation) =
c.vmState.status = c.isSuccess
proc execComputation*(c: Computation) =
c.preExecComputation()
c.execCallOrCreate()
c.postExecComputation()

View File

@ -93,6 +93,7 @@ type
parent*, child*: Computation
continuation*: proc(): EvmResultVoid {.gcsafe, raises: [].}
sysCall*: bool
authorizationList*: seq[Authorization]
Error* = ref object
evmcStatus*: evmc_status_code

View File

@ -18,7 +18,6 @@ import
../db/ledger,
../common/evmforks,
../core/eip4844,
../core/eip7702,
./host_types,
./call_types
@ -62,10 +61,6 @@ proc initialAccessListEIP2929(call: CallParams) =
# access list itself, after calculating the new contract address.
if not call.isCreate:
db.accessList(call.to)
# If the `call.to` has a delegation, also warm its target.
let target = parseDelegationAddress(db.getCode(call.to))
if target.isSome:
db.accessList(target[])
# EIP3651 adds coinbase to the list of addresses that should start warm.
if vmState.fork >= FkShanghai:
@ -81,57 +76,6 @@ proc initialAccessListEIP2929(call: CallParams) =
for key in account.storageKeys:
db.accessList(account.address, key.to(UInt256))
proc preExecComputation(vmState: BaseVMState, call: CallParams): int64 =
var gasRefund = 0
let ledger = vmState.stateDB
if not call.isCreate:
ledger.incNonce(call.sender)
# EIP-7702
for auth in call.authorizationList:
# 1. Verify the chain id is either 0 or the chain's current ID.
if not(auth.chainId == 0.ChainId or auth.chainId == vmState.com.chainId):
continue
# 2. authority = ecrecover(keccak(MAGIC || rlp([chain_id, address, nonce])), y_parity, r, s]
let authority = authority(auth).valueOr:
continue
# 3. Add authority to accessed_addresses (as defined in EIP-2929.)
ledger.accessList(authority)
# 4. Verify the code of authority is either empty or already delegated.
let code = ledger.getCode(authority)
if code.len > 0:
if not parseDelegation(code):
continue
# 5. Verify the nonce of authority is equal to nonce.
if ledger.getNonce(authority) != auth.nonce:
continue
# 6. Add PER_EMPTY_ACCOUNT_COST - PER_AUTH_BASE_COST gas to the global refund counter if authority exists in the trie.
if ledger.accountExists(authority):
gasRefund += PER_EMPTY_ACCOUNT_COST - PER_AUTH_BASE_COST
# 7. Set the code of authority to be 0xef0100 || address. This is a delegation designation.
if auth.address == default(eth_types.Address):
ledger.setCode(authority, @[])
else:
ledger.setCode(authority, @(addressToDelegation(auth.address)))
# 8. Increase the nonce of authority by one.
ledger.setNonce(authority, auth.nonce + 1)
# Usually the transaction destination and delegation target are added to
# the access list in initialAccessListEIP2929, however if the delegation is in
# the same transaction we need add here as to reduce calling slow ecrecover.
if call.to == authority:
ledger.accessList(auth.address)
gasRefund
proc setupHost(call: CallParams): TransactionHost =
let vmState = call.vmState
vmState.txCtx = TxContext(
@ -160,9 +104,6 @@ proc setupHost(call: CallParams): TransactionHost =
# All other defaults in `TransactionHost` are fine.
)
let gasRefund = if call.sysCall: 0
else: preExecComputation(vmState, call)
# Generate new contract address, prepare code, and update message `recipient`
# with the contract address. This differs from the previous Nimbus EVM API.
# Guarded under `evmc_enabled` for now so it doesn't break vm2.
@ -191,7 +132,9 @@ proc setupHost(call: CallParams): TransactionHost =
host.msg.input_data = host.input[0].addr
let cMsg = hostToComputationMessage(host.msg)
host.computation = newComputation(vmState, call.sysCall, cMsg, code)
host.computation = newComputation(vmState, call.sysCall, cMsg, code,
authorizationList = call.authorizationList)
host.code = code
else:
@ -203,9 +146,9 @@ proc setupHost(call: CallParams): TransactionHost =
host.msg.input_data = host.input[0].addr
let cMsg = hostToComputationMessage(host.msg)
host.computation = newComputation(vmState, call.sysCall, cMsg)
host.computation = newComputation(vmState, call.sysCall, cMsg,
authorizationList = call.authorizationList)
host.computation.gasMeter.refundGas(gasRefund)
vmState.captureStart(host.computation, call.sender, call.to,
call.isCreate, call.input,
call.gasLimit, call.value)

View File

@ -14,7 +14,6 @@ import
../common/evmforks,
../evm/types,
../evm/internals,
../core/eip7702,
./host_types
type
@ -81,7 +80,4 @@ func intrinsicGas*(call: CallParams | Transaction, fork: EVMFork): GasInt =
gas += ACCESS_LIST_ADDRESS_COST
gas += GasInt(account.storageKeys.len) * ACCESS_LIST_STORAGE_KEY_COST
if fork >= FkPrague:
gas += call.authorizationList.len * PER_EMPTY_ACCOUNT_COST
return gas.GasInt

View File

@ -50,9 +50,6 @@ template fromJson(T: type uint64, n: JsonNode): uint64 =
template fromJson(T: type EthTime, n: JsonNode): EthTime =
EthTime(fromHex[uint64](n.getStr))
template fromJson(T: type ChainId, n: JsonNode): ChainId =
ChainId(fromHex[uint64](n.getStr))
proc fromJson(T: type PrivateKey, n: JsonNode): PrivateKey =
var secretKey = n.getStr
removePrefix(secretKey, "0x")
@ -81,13 +78,13 @@ template required(T: type, nField: string): auto =
template required(T: type, nField: string, index: int): auto =
fromJson(T, n[nField][index])
template defaultZero(T: type, nField: string): auto =
template omitZero(T: type, nField: string): auto =
if n.hasKey(nField):
fromJson(T, n[nField])
else:
default(T)
template defaultZero(T: type, nField: string, index: int): auto =
template omitZero(T: type, nField: string, index: int): auto =
if n.hasKey(nField):
fromJson(T, n[nField][index])
else:
@ -99,23 +96,7 @@ template optional(T: type, nField: string): auto =
else:
Opt.none(T)
proc fromJson(T: type Authorization, n: JsonNode): Authorization =
Authorization(
chainId: required(ChainId, "chainId"),
address: required(Address, "address"),
nonce: required(AccountNonce, "nonce"),
v: required(uint64, "v"),
r: required(UInt256, "r"),
s: required(UInt256, "s"),
)
proc fromJson(T: type seq[Authorization], list: JsonNode): T =
for x in list:
result.add Authorization.fromJson(x)
proc txType(n: JsonNode): TxType =
if "authorizationList" in n:
return TxEip7702
if "blobVersionedHashes" in n:
return TxEip4844
if "gasPrice" notin n:
@ -132,7 +113,7 @@ proc parseHeader*(n: JsonNode): Header =
gasLimit : required(GasInt, "currentGasLimit"),
timestamp : required(EthTime, "currentTimestamp"),
stateRoot : emptyRoot,
mixHash : defaultZero(Bytes32, "currentRandom"),
mixHash : omitZero(Bytes32, "currentRandom"),
baseFeePerGas : optional(UInt256, "currentBaseFee"),
withdrawalsRoot: optional(Hash32, "currentWithdrawalsRoot"),
excessBlobGas : optional(uint64, "currentExcessBlobGas"),
@ -154,13 +135,12 @@ proc parseTx*(n: JsonNode, dataIndex, gasIndex, valueIndex: int): Transaction =
value : required(UInt256, "value", valueIndex),
payload : required(seq[byte], "data", dataIndex),
chainId : ChainId(1),
gasPrice: defaultZero(GasInt, "gasPrice"),
maxFeePerGas : defaultZero(GasInt, "maxFeePerGas"),
accessList : defaultZero(AccessList, "accessLists", dataIndex),
maxPriorityFeePerGas: defaultZero(GasInt, "maxPriorityFeePerGas"),
maxFeePerBlobGas : defaultZero(UInt256, "maxFeePerBlobGas"),
versionedHashes : defaultZero(seq[Hash32], "blobVersionedHashes"),
authorizationList : defaultZero(seq[Authorization], "authorizationList"),
gasPrice: omitZero(GasInt, "gasPrice"),
maxFeePerGas : omitZero(GasInt, "maxFeePerGas"),
accessList : omitZero(AccessList, "accessLists", dataIndex),
maxPriorityFeePerGas: omitZero(GasInt, "maxPriorityFeePerGas"),
maxFeePerBlobGas : omitZero(UInt256, "maxFeePerBlobGas"),
versionedHashes : omitZero(seq[Hash32], "blobVersionedHashes")
)
let rawTo = n["to"].getStr

View File

@ -646,24 +646,6 @@ const
output: T8nOutput(result: true),
expOut: "exp3.json",
),
TestSpec(
name: "More cancun test, plus example of rlp-transaction that cannot be decoded properly",
base: "testdata/30",
input: t8nInput(
"alloc.json", "txs_more.rlp", "env.json", "Cancun", "",
),
output: T8nOutput(alloc: true, result: true),
expOut: "exp.json",
),
TestSpec(
name: "Prague test, EIP-7702 transaction",
base: "testdata/33",
input: t8nInput(
"alloc.json", "txs.json", "env.json", "Prague", "",
),
output: T8nOutput(alloc: true, result: true),
expOut: "exp.json",
),
]
proc main() =

View File

@ -1,23 +0,0 @@
{
"0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
"balance" : "0x0de0b6b3a7640000",
"code" : "0x60004960005500",
"nonce" : "0x00",
"storage" : {
}
},
"0xd02d72e067e77158444ef2020ff2d325f929b363" : {
"balance": "0x01000000000000",
"code": "0x",
"nonce": "0x01",
"storage": {
}
},
"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
"balance" : "0x0de0b6b3a7640000",
"code" : "0x",
"nonce" : "0x00",
"storage" : {
}
}
}

View File

@ -1,23 +0,0 @@
{
"currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
"currentNumber" : "0x01",
"currentTimestamp" : "0x03e8",
"currentGasLimit" : "0x1000000000",
"previousHash" : "0xe4e2a30b340bec696242b67584264f878600dce98354ae0b6328740fd4ff18da",
"currentDataGasUsed" : "0x2000",
"parentTimestamp" : "0x00",
"parentDifficulty" : "0x00",
"parentUncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"parentBeaconBlockRoot" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"currentRandom" : "0x0000000000000000000000000000000000000000000000000000000000020000",
"withdrawals" : [
],
"parentBaseFee" : "0x08",
"parentGasUsed" : "0x00",
"parentGasLimit" : "0x1000000000",
"parentExcessBlobGas" : "0x1000",
"parentBlobGasUsed" : "0x2000",
"blockHashes" : {
"0" : "0xe4e2a30b340bec696242b67584264f878600dce98354ae0b6328740fd4ff18da"
}
}

View File

@ -1,64 +0,0 @@
{
"alloc": {
"0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {
"code": "0x60004960005500",
"balance": "0xde0b6b3a7640000"
},
"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
"balance": "0xde0b6b3a7640000"
},
"0xd02d72e067e77158444ef2020ff2d325f929b363": {
"balance": "0xfffffffb8390",
"nonce": "0x3"
}
},
"result": {
"stateRoot": "0x3483124b6710486c9fb3e07975669c66924697c88cccdcc166af5e1218915c93",
"txRoot": "0x013509c8563d41c0ae4bf38f2d6d19fc6512a1d0d6be045079c8c9f68bf45f9d",
"receiptsRoot": "0x75308898d571eafb5cd8cde8278bf5b3d13c5f6ec074926de3bb895b519264e1",
"logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"receipts": [
{
"type": "0x2",
"root": "0x",
"status": "0x1",
"cumulativeGasUsed": "0x5208",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"logs": null,
"transactionHash": "0xa98a24882ea90916c6a86da650fbc6b14238e46f0af04a131ce92be897507476",
"contractAddress": "0x0000000000000000000000000000000000000000",
"gasUsed": "0x5208",
"effectiveGasPrice": null,
"blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"transactionIndex": "0x0"
},
{
"type": "0x2",
"root": "0x",
"status": "0x1",
"cumulativeGasUsed": "0xa410",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"logs": null,
"transactionHash": "0x36bad80acce7040c45fd32764b5c2b2d2e6f778669fb41791f73f546d56e739a",
"contractAddress": "0x0000000000000000000000000000000000000000",
"gasUsed": "0x5208",
"effectiveGasPrice": null,
"blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"transactionIndex": "0x2"
}
],
"rejected": [
{
"index": 1,
"error": "rlp: input string too short for common.Address, decoding into (types.Transaction)(types.BlobTx).To"
}
],
"currentDifficulty": null,
"gasUsed": "0xa410",
"currentBaseFee": "0x7",
"withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"currentExcessBlobGas": "0x0",
"blobGasUsed": "0x0"
}
}

View File

@ -1 +0,0 @@
"0xf901adb86702f864010180820fa08284d09411111111111111111111111111111111111111118080c001a0b7dfab36232379bb3d1497a4f91c1966b1f932eae3ade107bf5d723b9cb474e0a06261c359a10f2132f126d250485b90cf20f30340801244a08ef6142ab33d1904b8d903f8d601800285012a05f200833d090080830186a000f85bf85994095e7baea6a6c7c4c2dfeb977efac326af552d87f842a00000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010ae1a001a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d880a0fc12b67159a3567f8bdbc49e0be369a2e20e09d57a51c41310543a4128409464a02de0cfe5495c4f58ff60645ceda0afd67a4c90a70bc89fe207269435b35e5b67b86702f864010280820fa08284d09411111111111111111111111111111111111111118080c080a0d4ec563b6568cd42d998fc4134b36933c6568d01533b5adf08769270243c6c7fa072bf7c21eac6bbeae5143371eef26d5e279637f3bd73482b55979d76d935b1e9"

View File

@ -1,30 +0,0 @@
{
"0x8a0a19589531694250d570040a0c4b74576919b8": {
"nonce": "0x00",
"balance": "0x0de0b6b3a7640000",
"code": "0x600060006000600060007310000000000000000000000000000000000000015af1600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355",
"storage": {
"0x01": "0x0100",
"0x02": "0x0100",
"0x03": "0x0100"
}
},
"0x000000000000000000000000000000000000aaaa": {
"nonce": "0x00",
"balance": "0x4563918244f40000",
"code": "0x58808080600173703c4b2bd70c169f5717101caee543299fc946c75af100",
"storage": {}
},
"0x000000000000000000000000000000000000bbbb": {
"nonce": "0x00",
"balance": "0x29a2241af62c0000",
"code": "0x6042805500",
"storage": {}
},
"0x71562b71999873DB5b286dF957af199Ec94617F7": {
"nonce": "0x00",
"balance": "0x6124fee993bc0000",
"code": "0x",
"storage": {}
}
}

View File

@ -1,14 +0,0 @@
{
"currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
"currentGasLimit": "71794957647893862",
"currentNumber": "1",
"currentTimestamp": "1000",
"currentRandom": "0",
"currentDifficulty": "0",
"blockHashes": {},
"ommers": [],
"currentBaseFee": "7",
"parentUncleHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"withdrawals": [],
"parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}

View File

@ -1,70 +0,0 @@
{
"alloc": {
"0x000000000000000000000000000000000000aaaa": {
"code": "0x58808080600173703c4b2bd70c169f5717101caee543299fc946c75af100",
"balance": "0x4563918244f40000"
},
"0x000000000000000000000000000000000000bbbb": {
"code": "0x6042805500",
"balance": "0x29a2241af62c0000"
},
"0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": {
"balance": "0x2bf52"
},
"0x703c4b2bd70c169f5717101caee543299fc946c7": {
"code": "0xef0100000000000000000000000000000000000000bbbb",
"storage": {
"0x0000000000000000000000000000000000000000000000000000000000000042": "0x0000000000000000000000000000000000000000000000000000000000000042"
},
"balance": "0x1",
"nonce": "0x1"
},
"0x71562b71999873db5b286df957af199ec94617f7": {
"code": "0xef0100000000000000000000000000000000000000aaaa",
"balance": "0x6124fee993afa30e",
"nonce": "0x2"
},
"0x8a0a19589531694250d570040a0c4b74576919b8": {
"code": "0x600060006000600060007310000000000000000000000000000000000000015af1600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355",
"storage": {
"0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000100",
"0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000000000100",
"0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
"balance": "0xde0b6b3a7640000"
}
},
"result": {
"stateRoot": "0x9fdcacd4510e93c4488e537dc51578b5c6d505771db64a2610036eeb4be7b26f",
"txRoot": "0x5d13a0b074e80388dc754da92b22922313a63417b3e25a10f324935e09697a53",
"receiptsRoot": "0x504c5d86c34391f70d210e6c482615b391db4bdb9f43479366399d9c5599850a",
"logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"receipts": [
{
"type": "0x4",
"root": "0x",
"status": "0x1",
"cumulativeGasUsed": "0x15fa9",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"logs": null,
"transactionHash": "0x0417aab7c1d8a3989190c3167c132876ce9b8afd99262c5a0f9d06802de3d7ef",
"contractAddress": "0x0000000000000000000000000000000000000000",
"gasUsed": "0x15fa9",
"effectiveGasPrice": null,
"blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"transactionIndex": "0x0"
}
],
"currentDifficulty": null,
"gasUsed": "0x15fa9",
"currentBaseFee": "0x7",
"withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"requestsHash": "0x6036c41849da9c076ed79654d434017387a88fb833c2856b32e18218b3341c5f",
"requests": [
"0x",
"0x",
"0x"
]
}
}

View File

@ -1,37 +0,0 @@
[
{
"type": "0x4",
"chainId": "0x1",
"nonce": "0x0",
"to": "0x71562b71999873db5b286df957af199ec94617f7",
"gas": "0x7a120",
"gasPrice": null,
"maxPriorityFeePerGas": "0x2",
"maxFeePerGas": "0x12a05f200",
"value": "0x0",
"input": "0x",
"accessList": [],
"authorizationList": [
{
"chainId": "0x1",
"address": "0x000000000000000000000000000000000000aaaa",
"nonce": "0x1",
"v": "0x1",
"r": "0xf7e3e597fc097e71ed6c26b14b25e5395bc8510d58b9136af439e12715f2d721",
"s": "0x6cf7c3d7939bfdb784373effc0ebb0bd7549691a513f395e3cdabf8602724987"
},
{
"chainId": "0x0",
"address": "0x000000000000000000000000000000000000bbbb",
"nonce": "0x0",
"v": "0x1",
"r": "0x5011890f198f0356a887b0779bde5afa1ed04e6acb1e3f37f8f18c7b6f521b98",
"s": "0x56c3fa3456b103f3ef4a0acb4b647b9cab9ec4bc68fbcdf1e10b49fb2bcbcf61"
}
],
"secretKey": "0xb71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291",
"v": "0x0",
"r": "0x0",
"s": "0x0"
}
]

View File

@ -344,16 +344,13 @@ proc exec(ctx: TransContext,
withdrawalsRoot : header.withdrawalsRoot
)
var excessBlobGas = Opt.none(GasInt)
if ctx.env.currentExcessBlobGas.isSome:
excessBlobGas = ctx.env.currentExcessBlobGas
elif ctx.env.parentExcessBlobGas.isSome and ctx.env.parentBlobGasUsed.isSome:
excessBlobGas = Opt.some calcExcessBlobGas(vmState.parent)
if excessBlobGas.isSome:
if vmState.com.isCancunOrLater(ctx.env.currentTimestamp):
result.result.blobGasUsed = Opt.some vmState.blobGasUsed
result.result.currentExcessBlobGas = excessBlobGas
if ctx.env.currentExcessBlobGas.isSome:
result.result.currentExcessBlobGas = ctx.env.currentExcessBlobGas
elif ctx.env.parentExcessBlobGas.isSome and ctx.env.parentBlobGasUsed.isSome:
result.result.currentExcessBlobGas = Opt.some calcExcessBlobGas(vmState.parent)
if vmState.com.isPragueOrLater(ctx.env.currentTimestamp):
var allLogs: seq[Log]
for rec in result.result.receipts: