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

refactor[test]: bypass eth-tester and interface with evm backend directly #3846

Merged
merged 109 commits into from
May 2, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
109 commits
Select commit Hold shift + click to select a range
5a70826
First tests with pyrevm
DanielSchiavini Mar 8, 2024
a80fe42
Merge branch 'master' of github.com:vyperlang/vyper into revm
DanielSchiavini Mar 8, 2024
f0d8b74
Fix some pyrevm tests
DanielSchiavini Mar 8, 2024
e81a5e2
Version specifier
DanielSchiavini Mar 8, 2024
c403845
Lint + DaniPopes branch
DanielSchiavini Mar 8, 2024
f5330d7
Get rid of w3
DanielSchiavini Mar 8, 2024
c68d505
Restore init files
DanielSchiavini Mar 11, 2024
9831088
Use gakonst fork again
DanielSchiavini Mar 11, 2024
99bc687
Investigate tests + lint
DanielSchiavini Mar 11, 2024
88d0296
Implement create from blueprint
DanielSchiavini Mar 19, 2024
ebd239b
Merge branch 'master' of github.com:vyperlang/vyper into revm
DanielSchiavini Mar 19, 2024
0e696f9
Update pyrevm
DanielSchiavini Mar 22, 2024
f5ce9be
Merge branch 'master' of github.com:vyperlang/vyper into revm
DanielSchiavini Mar 22, 2024
4e66d1c
Use fork
DanielSchiavini Mar 22, 2024
9b757c0
Fix tests, do not return tuples
DanielSchiavini Mar 22, 2024
c74d531
Expect lists
DanielSchiavini Mar 22, 2024
a1cbc01
Reformat
DanielSchiavini Mar 25, 2024
1308464
Merge branch 'master' of github.com:vyperlang/vyper into revm
DanielSchiavini Mar 25, 2024
fc1bcbe
Implement revm log parsing
DanielSchiavini Mar 25, 2024
5150c30
Convert more tests to revm
DanielSchiavini Mar 25, 2024
d162f5c
Convert functional tests to revm
DanielSchiavini Mar 26, 2024
32b557f
Merge branch 'master' of github.com:vyperlang/vyper into revm
DanielSchiavini Mar 26, 2024
3fee741
Linting
DanielSchiavini Mar 26, 2024
0b1a630
Fix tests
DanielSchiavini Mar 27, 2024
62f718d
Merge branch 'master' of github.com:vyperlang/vyper into revm
DanielSchiavini Mar 27, 2024
2e1f52e
Use default_chain_id
DanielSchiavini Mar 27, 2024
12ef64f
Convert unit tests, save bytecode
DanielSchiavini Mar 27, 2024
85affe6
Use evm-version
DanielSchiavini Mar 27, 2024
d083710
Lint and test args
DanielSchiavini Apr 2, 2024
ebfa8f9
Get rid of w3
DanielSchiavini Apr 2, 2024
60ba063
Update hexbytes version and tests
DanielSchiavini Apr 2, 2024
9e67463
Double dependency merge conflict
DanielSchiavini Apr 2, 2024
76c91aa
Use vyper.utils.keccak256
DanielSchiavini Apr 2, 2024
cf1ef52
hexbytes>=1.2
DanielSchiavini Apr 2, 2024
96eaadb
Update arg
DanielSchiavini Apr 2, 2024
5211b04
Merge branch 'hexbytes' into revm
DanielSchiavini Apr 3, 2024
6cd3819
Missing parameter
DanielSchiavini Apr 3, 2024
4d04bb7
Convert last test to pyrevm
DanielSchiavini Apr 3, 2024
933e66e
Rename revm_env to env, make _evm private
DanielSchiavini Apr 3, 2024
883e100
Rename package
DanielSchiavini Apr 3, 2024
3407336
Implement tests with py-evm
DanielSchiavini Apr 3, 2024
ac58bcd
Fix blueprint + InsufficientFunds
DanielSchiavini Apr 4, 2024
22a2629
Merge branch 'master' of github.com:vyperlang/vyper into revm
DanielSchiavini Apr 4, 2024
c145c93
Delete some xfail for passing tests
DanielSchiavini Apr 4, 2024
9a4c5ad
Cleanup conftest and eth_tester
DanielSchiavini Apr 4, 2024
1032609
Self-review
DanielSchiavini Apr 4, 2024
f02376a
Topic IDs as str
DanielSchiavini Apr 4, 2024
2a487b3
Pass evm_version to compiler
DanielSchiavini Apr 4, 2024
ceaf5e8
Extract compiler_settings fixture
DanielSchiavini Apr 4, 2024
6999d48
Merge branch 'master' of github.com:vyperlang/vyper into revm
DanielSchiavini Apr 4, 2024
6342422
Revert "Delete some xfail for passing tests"
DanielSchiavini Apr 4, 2024
19a2837
revm reset_transient_storage
DanielSchiavini Apr 4, 2024
44cadd8
Fix merge conflicts, reset transient for pyevm, optional evm-backend
DanielSchiavini Apr 4, 2024
b111943
Run all combinations of pyevm and revm
DanielSchiavini Apr 4, 2024
cbb07c3
Py-evm and experimental fixes
DanielSchiavini Apr 4, 2024
b909070
Merge branch 'master' of github.com:vyperlang/vyper into revm
DanielSchiavini Apr 5, 2024
a39a347
Review comments
DanielSchiavini Apr 5, 2024
dea863a
Unused parameters
DanielSchiavini Apr 5, 2024
b7e2a37
Self-review and exception type
DanielSchiavini Apr 5, 2024
95f3fe5
review
charles-cooper Apr 5, 2024
81b49da
Review comments
DanielSchiavini Apr 5, 2024
4a8ba2b
Remove last transact
DanielSchiavini Apr 5, 2024
5f77092
fix gas_price
DanielSchiavini Apr 5, 2024
7e78257
add some review comments
charles-cooper Apr 7, 2024
28ed360
Review comments
DanielSchiavini Apr 8, 2024
2612dc6
Merge branch 'master' of github.com:vyperlang/vyper into revm
DanielSchiavini Apr 8, 2024
3ab187f
Review comments
DanielSchiavini Apr 9, 2024
e01d1d4
Manual clear_transient_storage
DanielSchiavini Apr 9, 2024
65d5ab7
Merge branch 'master' of github.com:vyperlang/vyper into revm
DanielSchiavini Apr 10, 2024
cfa0d5a
Merge branch 'master' of github.com:vyperlang/vyper into revm
DanielSchiavini Apr 15, 2024
81fe354
New pyrevm repository
DanielSchiavini Apr 15, 2024
78ca467
Update new test
DanielSchiavini Apr 15, 2024
b0c3fa5
Test isolation
DanielSchiavini Apr 15, 2024
c0d84e9
Merge branch 'master' of github.com:vyperlang/vyper into revm
DanielSchiavini Apr 15, 2024
125b0b3
Merge branch 'master' into revm
DanielSchiavini Apr 16, 2024
4bd4bce
Update balance
DanielSchiavini Apr 16, 2024
4c05b28
Review comments
DanielSchiavini Apr 17, 2024
0acf8f5
Unused parameter
DanielSchiavini Apr 17, 2024
05bf9c6
Update pyrevm
DanielSchiavini Apr 19, 2024
baf0451
Merge branch 'master' of github.com:vyperlang/vyper into revm
DanielSchiavini Apr 22, 2024
2b42637
Review comments
DanielSchiavini Apr 22, 2024
07c0a27
Rename back to `time_travel`
DanielSchiavini Apr 22, 2024
49f42f2
Merge branch 'master' of github.com:vyperlang/vyper into revm
DanielSchiavini Apr 23, 2024
a59b2b2
Test blobbasefee without transaction
DanielSchiavini Apr 25, 2024
a07f6c4
Merge branch 'master' of github.com:vyperlang/vyper into revm
DanielSchiavini Apr 25, 2024
2733190
Review comments
DanielSchiavini Apr 26, 2024
b5bee3c
Fix tests
DanielSchiavini Apr 26, 2024
ba2a5b9
Cleanup dependencies
DanielSchiavini Apr 26, 2024
e89fc7e
Merge branch 'master' of github.com:vyperlang/vyper into revm
DanielSchiavini Apr 26, 2024
f35e90c
Missing dependency + settings mismatch
DanielSchiavini Apr 29, 2024
9cd1685
Use the global settings
DanielSchiavini Apr 29, 2024
984e585
Fix optimization level
DanielSchiavini Apr 29, 2024
e6f871e
Fix optimization level
DanielSchiavini Apr 29, 2024
a627a0f
Settings fixes
DanielSchiavini Apr 29, 2024
8cfbe16
Merge branch 'master' into revm
DanielSchiavini Apr 29, 2024
1680b62
More settings fixes
DanielSchiavini Apr 29, 2024
f817a0b
Merge branch 'master' of github.com:vyperlang/vyper into revm
DanielSchiavini May 1, 2024
7a8e193
Fix small review comments
DanielSchiavini May 1, 2024
ffc3a38
Update pyrevm, rename execute_code to message_call
DanielSchiavini May 1, 2024
3f60720
Inline kzg_hash and get_log_args, extra assert
DanielSchiavini May 1, 2024
d6f9333
Add empty data when calling default function
DanielSchiavini May 1, 2024
4c8e5d7
Remove anchors
DanielSchiavini May 1, 2024
789f5a4
Review comments
DanielSchiavini May 1, 2024
cdc65aa
Review comments
DanielSchiavini May 1, 2024
545317c
Review comments
DanielSchiavini May 1, 2024
c8aad5a
Review comments
DanielSchiavini May 1, 2024
40a47e5
Review comments
DanielSchiavini May 1, 2024
3bb3fbb
New exception type
DanielSchiavini May 1, 2024
791cde6
Merge branch 'master' into revm
DanielSchiavini May 2, 2024
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
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
"lark==1.1.2",
"hypothesis[lark]>=5.37.1,<6.0",
"eth-stdlib==0.2.6",
"pyrevm==0.2.1",
],
"lint": [
"black==23.12.0",
Expand Down
14 changes: 14 additions & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from web3.contract import Contract
from web3.providers.eth_tester import EthereumTesterProvider

from tests.revm.revm_env import RevmEnv
from tests.utils import working_directory
from vyper import compiler
from vyper.ast.grammar import parse_vyper_source
Expand Down Expand Up @@ -157,6 +158,11 @@ def tester():
return EthereumTester(backend=backend)


@pytest.fixture(scope="module")
def revm_env():
return RevmEnv()


def zero_gas_price_strategy(web3, transaction_params=None):
return 0 # zero gas price makes testing simpler.

Expand Down Expand Up @@ -340,6 +346,14 @@ def fn(source_code, *args, **kwargs):
return fn


@pytest.fixture(scope="module")
def get_revm_contract(revm_env, optimize, output_formats):
def fn(source_code, *args, **kwargs):
return revm_env.deploy_source(source_code, optimize, output_formats, *args, **kwargs)

return fn


@pytest.fixture
def get_contract_with_gas_estimation(tester, w3, optimize, output_formats):
def get_contract_with_gas_estimation(source_code, *args, **kwargs):
Expand Down
6 changes: 6 additions & 0 deletions tests/functional/builtins/folding/conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import pytest


@pytest.fixture(scope="module")
def get_contract(get_revm_contract):
return get_revm_contract
File renamed without changes.
47 changes: 47 additions & 0 deletions tests/revm/abi.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# wrapper module around whatever encoder we are using
from typing import Any

from eth.codecs.abi.decoder import Decoder
from eth.codecs.abi.encoder import Encoder
from eth.codecs.abi.exceptions import ABIError
from eth.codecs.abi.nodes import ABITypeNode, BytesNode
from eth.codecs.abi.parser import Parser

_parsers: dict[str, ABITypeNode] = {}


class _Encoder(Encoder):
"""
Custom encoder that parses bytes from hex to bytes
"""

@classmethod
def visit_BytesNode(cls, node: BytesNode, value: bytes | str) -> bytes:
if isinstance(value, str):
assert value.startswith("0x"), "Sanity check failed: expected hex string"
value = bytes.fromhex(value[2:])
return super().visit_BytesNode(node, value)


def _get_parser(schema: str):
try:
return _parsers[schema]
except KeyError:
_parsers[schema] = (ret := Parser.parse(schema))
return ret


def abi_encode(schema: str, data: Any) -> bytes:
return _Encoder.encode(_get_parser(schema), data)


def abi_decode(schema: str, data: bytes) -> Any:
return Decoder.decode(_get_parser(schema), data)


def is_abi_encodable(abi_type: str, data: Any) -> bool:
try:
abi_encode(abi_type, data)
return True
except ABIError:
return False
Loading
Loading