Skip to content

core/vm: disable the value transfer in syscall#33741

Merged
rjl493456442 merged 2 commits intoethereum:masterfrom
rjl493456442:no-transfer-syscall
Feb 18, 2026
Merged

core/vm: disable the value transfer in syscall#33741
rjl493456442 merged 2 commits intoethereum:masterfrom
rjl493456442:no-transfer-syscall

Conversation

@rjl493456442
Copy link
Copy Markdown
Member

@rjl493456442 rjl493456442 commented Feb 3, 2026

In src/ethereum/forks/amsterdam/vm/interpreter.py:299-304, the caller address is
only tracked for block level accessList when there's a value transfer:

if message.should_transfer_value and message.value != 0:  
    # Track value transfer  
    sender_balance = get_account(state, message.caller).balance  
    recipient_balance = get_account(state, message.current_target).balance  

    track_address(message.state_changes, message.caller)  # Line 304

Since system transactions have should_transfer_value=False and value=0,
this condition is never met, so the caller (SYSTEM_ADDRESS) is not tracked.

This condition is applied for the syscall in the geth implementation, aligning with
the spec of EIP7928.

@fjl fjl added the amsterdam label Feb 4, 2026
@rjl493456442 rjl493456442 added this to the 1.17.1 milestone Feb 5, 2026
@rjl493456442 rjl493456442 merged commit 01fe1d7 into ethereum:master Feb 18, 2026
7 of 8 checks passed
github-merge-queue Bot pushed a commit to erigontech/erigon that referenced this pull request Apr 17, 2026
In [src/ethereum/forks/amsterdam/vm/interpreter.py (lines
299–304)](https://github.com/ethereum/execution-specs/blob/d22139bf438649d9dbc139ab685b9f9075980253/src/ethereum/forks/amsterdam/vm/interpreter.py#L299),
the caller’s address is currently added to the block-level access list
only when there is an actual ETH value transfer. This check depends on
`should_transfer_value` being true and value being `non-zero`. For
system transactions, both of these are set to false and zero
respectively, so this condition never passes. As a result, the caller
address (SYSTEM_ADDRESS) is not tracked in the access list during system
calls. This PR implements the same syscall behavior in Erigon, aligning
it with [Geth](ethereum/go-ethereum#33741) and
the EIP-7928 specification.

---------

Co-authored-by: Andrew Ashikhmin <34320705+yperbasis@users.noreply.github.com>
github-merge-queue Bot pushed a commit to erigontech/erigon that referenced this pull request Apr 17, 2026
In [src/ethereum/forks/amsterdam/vm/interpreter.py (lines
299–304)](https://github.com/ethereum/execution-specs/blob/d22139bf438649d9dbc139ab685b9f9075980253/src/ethereum/forks/amsterdam/vm/interpreter.py#L299),
the caller’s address is currently added to the block-level access list
only when there is an actual ETH value transfer. This check depends on
`should_transfer_value` being true and value being `non-zero`. For
system transactions, both of these are set to false and zero
respectively, so this condition never passes. As a result, the caller
address (SYSTEM_ADDRESS) is not tracked in the access list during system
calls. This PR implements the same syscall behavior in Erigon, aligning
it with [Geth](ethereum/go-ethereum#33741) and
the EIP-7928 specification.

---------

Co-authored-by: Andrew Ashikhmin <34320705+yperbasis@users.noreply.github.com>
github-merge-queue Bot pushed a commit to erigontech/erigon that referenced this pull request Apr 18, 2026
In [src/ethereum/forks/amsterdam/vm/interpreter.py (lines
299–304)](https://github.com/ethereum/execution-specs/blob/d22139bf438649d9dbc139ab685b9f9075980253/src/ethereum/forks/amsterdam/vm/interpreter.py#L299),
the caller’s address is currently added to the block-level access list
only when there is an actual ETH value transfer. This check depends on
`should_transfer_value` being true and value being `non-zero`. For
system transactions, both of these are set to false and zero
respectively, so this condition never passes. As a result, the caller
address (SYSTEM_ADDRESS) is not tracked in the access list during system
calls. This PR implements the same syscall behavior in Erigon, aligning
it with [Geth](ethereum/go-ethereum#33741) and
the EIP-7928 specification.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants