Last active
January 24, 2023 00:26
-
-
Save darkerego/0c6b044a7c20a123f2fb500a2fe107b7 to your computer and use it in GitHub Desktop.
Crash Aurora Node
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# from lib import multicalls | |
import asyncio | |
import nest_asyncio | |
tokens = [ | |
{ | |
"sym": "weth", | |
"address": "0xC9BdeEd33CD01541e1eeD10f90519d2C06Fe3feB", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "HAK", | |
"address": "0x5ac53f985ea80c6af769b9272f35f122201d0f56", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "AAVE", | |
"address": "0x4e834cdcc911605227eedddb89fad336ab9dc00a", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "ABR", | |
"address": "0x2BAe00C8BC1868a5F7a216E881Bae9e662630111", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "atLUNA", | |
"address": "0xC4bdd27c33ec7daa6fcfd8532ddB524Bf4038096", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "atUST", | |
"address": "0x5ce9F0B6AFb36135b5ddBF11705cEB65E634A9dC", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "abBUSD", | |
"address": "0x5C92A4A7f59A9484AFD79DbE251AD2380E589783", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "PAD", | |
"address": "0xBaE0d7DFcd03C90EBCe003C58332c1346A72836A", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "SOL", | |
"address": "0x0f00576d07B594Bdc1caf44b6014A6A02E5AFd48", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "agEUR", | |
"address": "0xdc7acde9ff18b4d189010a21a44ce51ec874ea7c", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "ANGLE", | |
"address": "0xb7e3617adb58dc34068522bd20cfe1660780b750", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "AURORA", | |
"address": "0x8bec47865ade3b172a928df8f990bc7f2a3b9f79", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "BAKED", | |
"address": "0x8973c9ec7b79fe880697cdbca744892682764c37", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "BAL", | |
"address": "0xb59d0fdaf498182ff19c4e80c00ecfc4470926e2", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "BAT", | |
"address": "0x2b9025aecc5ce7a8e6880d3e9c6e458927ecba04", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "bHOME", | |
"address": "0xe4baf0af161bf03434d1c5a53957981493c12c99", | |
"decimals": 6 | |
}, | |
{ | |
"sym": "COMP", | |
"address": "0xdeacf0faa2b80af41470003b5f6cd113d47b4dcd", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "CREAM", | |
"address": "0xabe9818c5fb5e751c4310be6f0f18c8d85f9bd7f", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "CRF", | |
"address": "0x026dda7f0f0a2e42163c9c80d2a5b6958e35fc49", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "DAI", | |
"address": "0xe3520349f477a5f6eb06107066048508498a291b", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "DODO", | |
"address": "0xe301ed8c7630c9678c39e4e45193d1e7dfb914f7", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "FLX", | |
"address": "0xea62791aa682d455614eaa2a12ba3d9a2fd197af", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "FRAX", | |
"address": "0xda2585430fef327ad8ee44af8f1f989a2a91a3d2", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "FXS", | |
"address": "0xc8fdd32e0bf33f0396a18209188bb8c6fb8747d2", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "JUMBO", | |
"address": "0x6454e4a4891c6b78a5a85304d34558dda5f3d6d8", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "KSW", | |
"address": "0xE4eB03598f4DCAB740331fa432f4b85FF58AA97E", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "LINK", | |
"address": "0x94190d8ef039c670c6d6b9990142e0ce2a1e3178", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "LUNA", | |
"address": "0xfca152a9916895bf564e3f26a611f9e1e6aa6e73", | |
"decimals": 0 | |
}, | |
{ | |
"sym": "MKR", | |
"address": "0x1d1f82d8b8fc72f29a8c268285347563cb6cd8b3", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "MNFT", | |
"address": "0xd126b48c072f4668e944a8895bc74044d5f2e85b", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "MODA", | |
"address": "0x74974575d2f1668c63036d51ff48dbaa68e52408", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "NDOL", | |
"address": "0xC86Ca2BB9C9c9c9F140d832dE00BfA9e153FA1e3", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "wNEAR", | |
"address": "0xC42C30aC6Cc15faC9bD938618BcaA1a1FaE8501d", | |
"decimals": 24 | |
}, | |
{ | |
"sym": "NECC", | |
"address": "0x6EBA841F1201fFDDe7DDC2ba995D3308f6C4aEa0", | |
"decimals": 9 | |
}, | |
{ | |
"sym": "NFD", | |
"address": "0x90eb16621274fb47a071001fbbf7550948874cb5", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "nNECC", | |
"address": "0x449f661c53aE0611a24c2883a910A563A7e42489", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "OCT", | |
"address": "0x951cfdc9544b726872a8faf56792ef6704731aae", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "OIN", | |
"address": "0x07b2055fbd17b601c780aeb3abf4c2b3a30c7aae", | |
"decimals": 8 | |
}, | |
{ | |
"sym": "PAD", | |
"address": "0x885f8CF6E45bdd3fdcDc644efdcd0AC93880c781", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "PICKLE", | |
"address": "0x291c8fceaca3342b29cc36171deb98106f712c66", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "PULSE", | |
"address": "0x8828a5047d093f6354e3fe29ffcb2761300dc994", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "REN", | |
"address": "0x18921f1e257038e538ba24d49fa6495c8b1617bc", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "SNX", | |
"address": "0xdc9be1ff012d3c6da818d136a3b2e5fdd4442f74", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "SUSHI", | |
"address": "0x7821c773a12485b12a2b5b7bc451c3eb200986b1", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "TRI", | |
"address": "0xFa94348467f64D5A457F75F8bc40495D33c65aBB", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "UMINT", | |
"address": "0x984c2505a14da732d7271416356f535953610340", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "UNI", | |
"address": "0x1bc741235ec0ee86ad488fa49b69bb6c823ee7b7", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "USDC", | |
"address": "0xb12bfca5a55806aaf64e99521918a4bf0fc40802", | |
"decimals": 6 | |
}, | |
{ | |
"sym": "USDT", | |
"address": "0x4988a896b1227218e4a686fde5eabdcabd91571f", | |
"decimals": 6 | |
}, | |
{ | |
"sym": "UST", | |
"address": "0x098d5b6a26bca1d71f2335805d71b244f94e8a5f", | |
"decimals": 0 | |
}, | |
{ | |
"sym": "WBTC", | |
"address": "0xf4eb217ba2454613b15dbdea6e5f22276410e89e", | |
"decimals": 8 | |
}, | |
{ | |
"sym": "WSTR", | |
"address": "0xf34d508bac379825255cc80f66cbc89dfeff92e4", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "XNL", | |
"address": "0x7ca1c28663b76cfde424a9494555b94846205585", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "YFI", | |
"address": "0xa64514a8af3ff7366ad3d5daa5a548eefcef85e0", | |
"decimals": 18 | |
}, | |
{ | |
"sym": "EMPYR", | |
"address": "0xE9F226a228Eb58d408FdB94c3ED5A18AF6968fE1", | |
"decimals": 9 | |
}] | |
import asyncio | |
import os | |
import dotenv | |
import web3 | |
from aiohttp import ClientResponseError | |
from web3.exceptions import ContractLogicError | |
from itertools import permutations | |
# from lib.modules import * | |
import multicall | |
class PoolPair: | |
# not needed for this | |
pass | |
class MultiCalls: | |
def __init__(self, w3, contract): | |
self.arb_contract = contract | |
self.w3 = w3 | |
self.calls = [] | |
self.param_dict = {} | |
def reset(self): | |
self.calls.clear() | |
def add_call_estimate_dual(self, trade: PoolPair): | |
call = multicall.Call(self.w3.toChecksumAddress(self.arb_contract), | |
['estimateDualDexTrade(address,address,address,address,uint256)((uint256))', | |
trade.pool1.pair.router, trade.pool2.pair.router, trade.pool1.pair.base, | |
trade.pool1.pair.quote, trade.order_qty], | |
[(trade.identifier, self.done_callback)]) | |
self.calls.append(call) | |
def add_call_estimate_dual_reverse(self, trade: PoolPair): | |
call = multicall.Call(self.w3.toChecksumAddress(self.arb_contract), | |
['estimateDualDexTrade(address,address,address,address,uint256)((uint256))', | |
trade.pool1.pair.router, trade.pool2.pair.router, trade.pool1.pair.quote, | |
trade.pool1.pair.base, trade.order_qty], | |
[(trade.identifier, self.done_callback)]) | |
self.calls.append(call) | |
def add_call_get_pair(self, factory, token1, token2): | |
call = multicall.Call(self.w3.toChecksumAddress(factory), | |
['getPair(address,address)((address))', token1, token2], | |
[(f'{factory}_{token1}_{token2}', self.done_callback)]) | |
self.calls.append(call) | |
def add_call_get_reserves(self, pair_address): | |
pair_address = self.w3.toChecksumAddress(pair_address) | |
call = multicall.Call(pair_address, ['getReserves()((uint112,uint112,uint32))'], | |
[(pair_address, self.done_callback)]) | |
self.calls.append(call) | |
def add_call_get_factory(self, router_address): | |
router_address = self.w3.toChecksumAddress(router_address) | |
call = multicall.Call(router_address, ['factory()((address))'], | |
[(router_address, self.done_callback)]) | |
self.calls.append(call) | |
@staticmethod | |
def done_callback(value): | |
return value | |
async def run(self): | |
ret = {} | |
sleeper = 1.5 | |
# print(self.calls) | |
for x in range(3): | |
m = multicall.Multicall(calls=self.calls, _w3=self.w3) | |
try: | |
ret = m() | |
except ClientResponseError as err: | |
print(err) | |
sleeper += sleeper | |
await asyncio.sleep(sleeper) | |
except ContractLogicError as err: | |
print(f'[!] Multicall Failed: {err}!') | |
sleeper += sleeper | |
await asyncio.sleep(sleeper) | |
else: | |
break | |
# self.reset() | |
return ret | |
async def reproduce_error(tokens): | |
""" To reproduce error on Aurora nodes, you can | |
run this: | |
""" | |
routers = ['0x2CB45Edb4517d5947aFdE3BEAbF95A582506858B', | |
'0xa3a1ef5ae6561572023363862e238afa84c72ef5', | |
'0xA1B1742e9c32C7cAa9726d8204bD5715e3419861', | |
'0xBaE0d7DFcd03C90EBCe003C58332c1346A72836A'] | |
aurora_ws_endpoint = None # Set endpoint here | |
if not aurora_ws_endpoint: | |
print('You need to set the endpoint URL in the code first') | |
exit(1) | |
dotenv.load_dotenv() | |
w3 = web3.Web3(web3.WebsocketProvider(aurora_ws_endpoint)) # input rpc endpoint | |
mc = MultiCalls(w3, None) | |
for router in routers: | |
mc.add_call_get_factory(router) | |
factories = ret = await mc.run() # This should work .. but, | |
mc.reset() | |
_pairs = permutations([x.get('address') for x in tokens], 2) | |
for k, factory in factories.items(): | |
for pair in _pairs: | |
print(pair) | |
pair = sorted(pair) | |
mc.add_call_get_pair(w3.toChecksumAddress(factory[0]), w3.toChecksumAddress(pair[0]), | |
w3.toChecksumAddress(pair[1])) | |
await mc.run() | |
"""After it crashes, further web3 calls will fail. this will fail. | |
The websocket should not be working , and web3 will start throwing 404 errors""" | |
print(w3.eth.gas_price) | |
if __name__ == '__main__': | |
nest_asyncio.apply() | |
asyncio.run(reproduce_error(tokens)) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment