Skip to content

Commit da612c5

Browse files
committed
added check whether RPC supports state overwrites
1 parent 546a126 commit da612c5

File tree

3 files changed

+40
-0
lines changed

3 files changed

+40
-0
lines changed

IceCreamSwapWeb3/Web3Advanced.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ def __init__(
7676
self.revert_reason_available: bool = self._check_revert_reason_available()
7777
if not self.revert_reason_available:
7878
print(f"RPC {self.node_url} does not return revert reasons")
79+
self.overwrites_available: bool = self._check_overwrites_available()
7980

8081
self.middleware_onion.inject(BatchRetryMiddleware, layer=0, name="batch_retry") # split and retry batch requests
8182

@@ -142,3 +143,26 @@ def _check_revert_reason_available(self):
142143
if not isinstance(e, ContractLogicError):
143144
return False
144145
return e.message == "execution reverted: abc"
146+
147+
def _check_overwrites_available(self) -> bool:
148+
with files("IceCreamSwapWeb3").joinpath("./abi/OverwriteTester.abi").open('r') as f:
149+
overwrite_tester_abi = f.read()
150+
with files("IceCreamSwapWeb3").joinpath("./bytecode/OverwriteTesterRuntime.bytecode").open('r') as f:
151+
overwrite_tester_bytecode = f.read()
152+
153+
test_address = to_checksum_address("0x1234567800000000000000000000000000000001")
154+
test_value = 1234
155+
overwrite_tester_contract = self.eth.contract(abi=overwrite_tester_abi, address=test_address)
156+
try:
157+
response = overwrite_tester_contract.functions.getSlot0().call(state_override={
158+
test_address: {
159+
"code": overwrite_tester_bytecode,
160+
"stateDiff": {
161+
"0x" + "00" * 32: "0x" + hex(test_value)[2:].rjust(64, "0")
162+
}
163+
}
164+
})
165+
except Exception as e:
166+
print(f"RPC does not support state overwrites, got: {repr(e)}")
167+
return False
168+
return response == test_value
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
[
2+
{
3+
"inputs": [],
4+
"name": "getSlot0",
5+
"outputs": [
6+
{
7+
"internalType": "uint256",
8+
"name": "",
9+
"type": "uint256"
10+
}
11+
],
12+
"stateMutability": "view",
13+
"type": "function"
14+
}
15+
]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
0x6080604052348015600e575f80fd5b50600436106026575f3560e01c8063c9ae5e0c14602a575b5f80fd5b60306044565b604051603b91906062565b60405180910390f35b5f8054905090565b5f819050919050565b605c81604c565b82525050565b5f60208201905060735f8301846055565b9291505056fea2646970667358221220dc7c290802ba6d0d442ef59ce6a5d494b010188b015fe5eaba912a894e5b8f4c64736f6c634300081a0033

0 commit comments

Comments
 (0)