Compare commits
215 Commits
guide
...
generalize
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cdd97edad0 | ||
|
|
e6f5ece46f | ||
|
|
8f0b295956 | ||
|
|
9f1e6c12fa | ||
|
|
f0526c1012 | ||
|
|
ebc161aa51 | ||
|
|
f2ce697175 | ||
|
|
58a7409568 | ||
|
|
e56458c908 | ||
|
|
3bba682c58 | ||
|
|
54cd815514 | ||
|
|
9c170a3f00 | ||
|
|
0f23046733 | ||
|
|
e5e4f6ef1b | ||
|
|
18e45ee437 | ||
|
|
747dc5dfe1 | ||
|
|
576f7dc507 | ||
|
|
86fdeddfaa | ||
|
|
00c97ffe72 | ||
|
|
7b036cc620 | ||
|
|
0afc1494f1 | ||
|
|
52679cd3cc | ||
|
|
37cf615c75 | ||
|
|
4d5c8977c1 | ||
|
|
036228036d | ||
|
|
663a97e84f | ||
|
|
be9ae86d5c | ||
|
|
5682c2ce4e | ||
|
|
5756a7c405 | ||
|
|
1027a3ecbc | ||
|
|
f5ce06b008 | ||
|
|
8686166276 | ||
|
|
2b7c8532f2 | ||
|
|
d37bf8f6e2 | ||
|
|
f395e9758f | ||
|
|
516664e6ab | ||
|
|
3ff4af2970 | ||
|
|
f7ffbfadb1 | ||
|
|
ed63b6bb38 | ||
|
|
266a66be03 | ||
|
|
b8280f8464 | ||
|
|
a9cbe106ad | ||
|
|
50d04a0b42 | ||
|
|
e6793ee053 | ||
|
|
0db24349fd | ||
|
|
7a53816d74 | ||
|
|
e92c36d30a | ||
|
|
66c22682e8 | ||
|
|
768de19b60 | ||
|
|
e365a2c0c0 | ||
|
|
4993bbc8e0 | ||
|
|
bff71b01c3 | ||
|
|
aed8310cb1 | ||
|
|
c51d907655 | ||
|
|
1b0e05ec2f | ||
|
|
fbb0ebaffe | ||
|
|
7e7bd5bc07 | ||
|
|
230a07f47d | ||
|
|
cc9f3e993d | ||
|
|
034b72c463 | ||
|
|
71b7c99c17 | ||
|
|
170ab07e2f | ||
|
|
f204620fea | ||
|
|
bf79c7e0be | ||
|
|
dd7088912a | ||
|
|
3795336fd8 | ||
|
|
5a4308e562 | ||
|
|
8281d123ab | ||
|
|
e7d918f514 | ||
|
|
b2d2c7dbeb | ||
|
|
23d03b990d | ||
|
|
fe6cd4dcdb | ||
|
|
014b80312c | ||
|
|
947d2a0064 | ||
|
|
0ae93db617 | ||
|
|
144ed63381 | ||
|
|
bc25cf1eba | ||
|
|
bed1fd77d7 | ||
|
|
36c6734afa | ||
|
|
a77e2d7671 | ||
|
|
fbd84fddd0 | ||
|
|
3e90b94e50 | ||
|
|
2e97193efd | ||
|
|
f9ecea9d86 | ||
|
|
70d0502ac4 | ||
|
|
f5f4e75f7d | ||
|
|
0f3070a08a | ||
|
|
9846b9f16c | ||
|
|
1aa5c5b465 | ||
|
|
9769498c9d | ||
|
|
f5222c1902 | ||
|
|
c22cab0b68 | ||
|
|
acb68dfcff | ||
|
|
acdb463bcc | ||
|
|
b0bb2b3dd7 | ||
|
|
fcdfad7963 | ||
|
|
1aabb12105 | ||
|
|
ae2c9886db | ||
|
|
9d364b5804 | ||
|
|
0e6cd420ec | ||
|
|
a960d5e4cf | ||
|
|
919bdeb7a2 | ||
|
|
4a35a07a1c | ||
|
|
c48031e190 | ||
|
|
e7c1799fd7 | ||
|
|
f4bba7c885 | ||
|
|
0b74331235 | ||
|
|
54ebe78460 | ||
|
|
909ed21a54 | ||
|
|
f35a727b36 | ||
|
|
bf6d5d2861 | ||
|
|
0d10b10338 | ||
|
|
c7054aa447 | ||
|
|
7af5762f3b | ||
|
|
2db5794cde | ||
|
|
95862d2f6b | ||
|
|
3587d0bd42 | ||
|
|
98af6aa5f9 | ||
|
|
af9233c5bc | ||
|
|
1c9abd0801 | ||
|
|
77f58e342a | ||
|
|
ef60c09771 | ||
|
|
6e4ebbf814 | ||
|
|
3306ee2f1b | ||
|
|
6ceedbf9af | ||
|
|
cdf8265de9 | ||
|
|
24e682c9d7 | ||
|
|
2da691c686 | ||
|
|
d677e0b6ed | ||
|
|
a9d8979151 | ||
|
|
ea41fe04c3 | ||
|
|
92dbddec2c | ||
|
|
aacaf88ed8 | ||
|
|
e4f47c0e42 | ||
|
|
4e4427b059 | ||
|
|
0748a5f988 | ||
|
|
886813b935 | ||
|
|
8ab68606fb | ||
|
|
ca8ce87e5c | ||
|
|
01fdc17b11 | ||
|
|
cb29c8a9dc | ||
|
|
b5fb695578 | ||
|
|
d4d2fb0359 | ||
|
|
8f554d90da | ||
|
|
8df633880f | ||
|
|
e3728251f8 | ||
|
|
d34683cf4b | ||
|
|
1ee3203231 | ||
|
|
596ba0c062 | ||
|
|
388f780f68 | ||
|
|
68f5144959 | ||
|
|
28081de807 | ||
|
|
6c727fb1f6 | ||
|
|
c5dc3aa0f9 | ||
|
|
002ef76ecc | ||
|
|
f9b3c82d2d | ||
|
|
04767d72f1 | ||
|
|
fa8da08889 | ||
|
|
3c3868ef6f | ||
|
|
c994e41f34 | ||
|
|
eb2530de45 | ||
|
|
04ce01eb6b | ||
|
|
96ead6cc92 | ||
|
|
3ece6d1829 | ||
|
|
d2bf2340a1 | ||
|
|
0f12b78e1e | ||
|
|
eab6164c16 | ||
|
|
c52edaa609 | ||
|
|
7e831faa39 | ||
|
|
f73a34a5ba | ||
|
|
f59b2b2b82 | ||
|
|
ee7659b044 | ||
|
|
08a0784105 | ||
|
|
70514df025 | ||
|
|
8a0d16e754 | ||
|
|
1061bc3db3 | ||
|
|
4c42407faf | ||
|
|
162443efd8 | ||
|
|
deea9e28ea | ||
|
|
374b1dd2b8 | ||
|
|
972b4490bb | ||
|
|
a1fc445c01 | ||
|
|
d53acded79 | ||
|
|
e8c534927c | ||
|
|
85feee55bc | ||
|
|
f903fff3c9 | ||
|
|
1a5524e6f3 | ||
|
|
0d2d651f60 | ||
|
|
127debab18 | ||
|
|
369570affc | ||
|
|
0a09fd4efa | ||
|
|
40529a34bf | ||
|
|
4a1b69fbc9 | ||
|
|
c64bc3e2c2 | ||
|
|
d4621182cf | ||
|
|
1ccd076881 | ||
|
|
654b416336 | ||
|
|
598c2bf313 | ||
|
|
7f26c600dc | ||
|
|
b557031358 | ||
|
|
5586e8ff76 | ||
|
|
6632130c9a | ||
|
|
43beb13d93 | ||
|
|
f72049a4df | ||
|
|
e38f1384ef | ||
|
|
d7f2d120dd | ||
|
|
6ca00ff3ba | ||
|
|
49e047e9b6 | ||
|
|
f060039f95 | ||
|
|
4945a2e025 | ||
|
|
0e5ba9c323 | ||
|
|
148e0a82c2 | ||
|
|
5abb478f16 | ||
|
|
3425ea7507 | ||
|
|
fea05e16c7 |
1
.dockerignore
Normal file
1
.dockerignore
Normal file
@@ -0,0 +1 @@
|
|||||||
|
cache
|
||||||
10
.env
10
.env
@@ -1,10 +0,0 @@
|
|||||||
# Postgres
|
|
||||||
POSTGRES_SERVER=db
|
|
||||||
POSTGRES_USER=postgres
|
|
||||||
POSTGRES_PASSWORD=password
|
|
||||||
POSTGRES_DB=mev_inspect
|
|
||||||
|
|
||||||
# PgAdmin
|
|
||||||
PGADMIN_LISTEN_PORT=5050
|
|
||||||
PGADMIN_DEFAULT_EMAIL=admin@example.com
|
|
||||||
PGADMIN_DEFAULT_PASSWORD=password
|
|
||||||
2
.github/workflows/github-actions.yml
vendored
2
.github/workflows/github-actions.yml
vendored
@@ -55,4 +55,4 @@ jobs:
|
|||||||
|
|
||||||
- name: Test with pytest
|
- name: Test with pytest
|
||||||
shell: bash
|
shell: bash
|
||||||
run: poetry run test
|
run: poetry run pytest --cov=mev_inspect tests
|
||||||
|
|||||||
6
.gitignore
vendored
6
.gitignore
vendored
@@ -13,3 +13,9 @@ __pycache__
|
|||||||
# coverage
|
# coverage
|
||||||
htmlcov
|
htmlcov
|
||||||
.coverage*
|
.coverage*
|
||||||
|
|
||||||
|
# don't commit cache
|
||||||
|
cache
|
||||||
|
|
||||||
|
# k8s
|
||||||
|
.helm
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ repos:
|
|||||||
hooks:
|
hooks:
|
||||||
- id: pylint
|
- id: pylint
|
||||||
name: pylint
|
name: pylint
|
||||||
entry: python -m pylint.__main__
|
entry: poetry run pylint
|
||||||
args: ['--rcfile=.pylintrc', --disable=redefined-builtin]
|
args: ['--rcfile=.pylintrc', --disable=redefined-builtin]
|
||||||
language: system
|
language: system
|
||||||
types: [python]
|
types: [python]
|
||||||
@@ -18,3 +18,4 @@ repos:
|
|||||||
- id: 'mypy'
|
- id: 'mypy'
|
||||||
additional_dependencies:
|
additional_dependencies:
|
||||||
- 'pydantic'
|
- 'pydantic'
|
||||||
|
- 'types-requests'
|
||||||
|
|||||||
@@ -6,14 +6,16 @@ RUN pip install -U pip \
|
|||||||
|
|
||||||
ENV PATH="${PATH}:/root/.poetry/bin"
|
ENV PATH="${PATH}:/root/.poetry/bin"
|
||||||
|
|
||||||
COPY . /app
|
COPY ./pyproject.toml /app/pyproject.toml
|
||||||
|
COPY ./poetry.lock /app/poetry.lock
|
||||||
WORKDIR /app/
|
WORKDIR /app/
|
||||||
|
|
||||||
# poetry uses virtual env by default, turn this off inside container
|
|
||||||
RUN poetry config virtualenvs.create false && \
|
RUN poetry config virtualenvs.create false && \
|
||||||
poetry install
|
poetry install
|
||||||
|
|
||||||
|
COPY . /app
|
||||||
|
|
||||||
# easter eggs 😝
|
# easter eggs 😝
|
||||||
RUN echo "PS1='🕵️:\[\033[1;36m\]\h \[\033[1;34m\]\W\[\033[0;35m\]\[\033[1;36m\]$ \[\033[0m\]'" >> ~/.bashrc
|
RUN echo "PS1='🕵️:\[\033[1;36m\]\h \[\033[1;34m\]\W\[\033[0;35m\]\[\033[1;36m\]$ \[\033[0m\]'" >> ~/.bashrc
|
||||||
|
|
||||||
CMD /bin/bash
|
ENTRYPOINT [ "/app/entrypoint.sh"]
|
||||||
|
|||||||
225
README.md
225
README.md
@@ -1,109 +1,194 @@
|
|||||||
# mev-inspect
|
# mev-inspect-py
|
||||||
A [WIP] Ethereum MEV Inspector in Python managed by Poetry
|
> illuminating the dark forest 🌲💡
|
||||||
|
|
||||||
## Containers
|
**mev-inspect-py** is an MEV inspector for Ethereum
|
||||||
mev-inspect's local setup is built on [Docker Compose](https://docs.docker.com/compose/)
|
|
||||||
|
|
||||||
By default it starts up:
|
Given a block, mev-inspect finds:
|
||||||
- `mev-insepct` - a container with the code in this repo used for running scripts
|
- miner payments (gas + coinbase)
|
||||||
- `db` - a postgres database instance
|
- tokens transfers and profit
|
||||||
- `pgadmin` - a postgres DB UI for querying and more (avaiable at localhost:5050)
|
- swaps and [arbitrages](https://twitter.com/bertcmiller/status/1427632028263059462)
|
||||||
|
- ...and more
|
||||||
|
|
||||||
|
Data is stored in Postgres for analysis
|
||||||
|
|
||||||
## Running locally
|
## Running locally
|
||||||
Setup [Docker](https://www.docker.com/products/docker-desktop)
|
mev-inspect-py is built to run on kubernetes locally and in production
|
||||||
|
|
||||||
Start the services (optionally as background processes)
|
### Install dependencies
|
||||||
|
|
||||||
|
First, setup a local kubernetes deployment - we use [Docker](https://www.docker.com/products/docker-desktop) and [kind](https://kind.sigs.k8s.io/docs/user/quick-start)
|
||||||
|
|
||||||
|
If using kind, create a new cluster with:
|
||||||
```
|
```
|
||||||
poetry run start [-b]
|
kind create cluster
|
||||||
```
|
```
|
||||||
|
|
||||||
To stop the services (if running in the background, otherwise just ctrl+c)
|
Next, install the kubernetes CLI [`kubectl`](https://kubernetes.io/docs/tasks/tools/)
|
||||||
|
|
||||||
|
Then, install [helm](https://helm.sh/docs/intro/install/) - helm is a package manager for kubernetes
|
||||||
|
|
||||||
|
Lastly, setup [Tilt](https://docs.tilt.dev/install.html) which manages running and updating kubernetes resources locally
|
||||||
|
|
||||||
|
### Start up
|
||||||
|
|
||||||
|
Set an environment variable `RPC_URL` to an RPC for fetching blocks
|
||||||
|
Example:
|
||||||
```
|
```
|
||||||
poetry run stop
|
export RPC_URL="http://111.111.111.111:8546"
|
||||||
```
|
```
|
||||||
|
|
||||||
MEV container can be attached via
|
**Note: mev-inspect-py currently requires and RPC with support for OpenEthereum / Erigon traces (not geth 😔)**
|
||||||
|
|
||||||
|
Next, start all servcies with:
|
||||||
```
|
```
|
||||||
poetry run attach
|
tilt up
|
||||||
```
|
```
|
||||||
|
|
||||||
Running additional compose commands are possible through standard `docker
|
Press "space" to see a browser of the services starting up
|
||||||
compose ...` calls. Check `docker compose help` for more tools available
|
|
||||||
|
|
||||||
## Executing scripts
|
On first startup, you'll need to apply database migrations. Apply with:
|
||||||
Inspection is the only simplified api available through poetry at the moment
|
|
||||||
with a more generalized api on the horizon.
|
|
||||||
|
|
||||||
Inspect scripts must have `-script`, `-block_number` and `-rpc` arguments.
|
|
||||||
Using the uniswap inspect from `./examples`
|
|
||||||
```
|
```
|
||||||
poetry run inspect -script ./examples/uniswap_inspect.py -block_number 11931271 \
|
kubectl exec deploy/mev-inspect-deployment -- alembic upgrade head
|
||||||
-rpc 'http://111.11.11.111:8545'
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Generalized user defined scripts can still be run through the docker interface as
|
## Inspecting
|
||||||
|
|
||||||
|
### Inspect a single block
|
||||||
|
|
||||||
|
Inspecting block [12914944](https://twitter.com/mevalphaleak/status/1420416437575901185)
|
||||||
```
|
```
|
||||||
docker compose exec mev-inspect python testing_file.py \
|
kubectl exec deploy/mev-inspect-deployment -- poetry run inspect-block 12914944
|
||||||
-block_number 11931271 \
|
|
||||||
-rpc 'http://111.11.11.111:8545'
|
|
||||||
```
|
|
||||||
### Poetry Scripts
|
|
||||||
```bash
|
|
||||||
# code check
|
|
||||||
poetry run lint # linting via Pylint
|
|
||||||
poetry run test # testing and code coverage with Pytest
|
|
||||||
poetry run isort # fixing imports
|
|
||||||
poetry run mypy # type checking
|
|
||||||
poetry run black # style guide
|
|
||||||
poetry run pre-commit # runs Black, PyLint and MyPy
|
|
||||||
# docker management
|
|
||||||
poetry run start [-b] # starts all services, optionally in the background
|
|
||||||
poetry run stop # shutsdown all services or just ctrl + c if foreground
|
|
||||||
poetry run build # rebuilds containers
|
|
||||||
poetry run attach # enters the mev-inspect container in interactive mode
|
|
||||||
# launches inspection script
|
|
||||||
poetry run inspect -script ... -block_number ... -rpc ...
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Inspect many blocks
|
||||||
|
|
||||||
## Rebuilding containers
|
Inspecting blocks 12914944 to 12914954
|
||||||
After changes to the app's Dockerfile, rebuild with
|
|
||||||
```
|
```
|
||||||
poetry run build
|
kubectl exec deploy/mev-inspect-deployment -- poetry run inspect-many-blocks 12914944 12914954
|
||||||
```
|
```
|
||||||
|
|
||||||
## Using PGAdmin
|
### Inspect all incoming blocks
|
||||||
|
|
||||||
1. Go to [localhost:5050](localhost:5050)
|
Start a block listener with
|
||||||
|
```
|
||||||
|
kubectl exec deploy/mev-inspect-deployment -- /app/listener start
|
||||||
|
```
|
||||||
|
|
||||||
2. Login with the PGAdmin username and password in `.env`
|
By default, it will pick up wherever you left off.
|
||||||
|
If running for the first time, listener starts at the latest block
|
||||||
|
|
||||||
3. Add a new engine for mev_inspect with
|
See logs for the listener with
|
||||||
- host: db
|
```
|
||||||
- user / password: see `.env`
|
kubectl exec deploy/mev-inspect-deployment -- tail -f listener.log
|
||||||
|
```
|
||||||
|
|
||||||
|
And stop the listener with
|
||||||
|
```
|
||||||
|
kubectl exec deploy/mev-inspect-deployment -- /app/listener stop
|
||||||
|
```
|
||||||
|
|
||||||
|
## Exploring
|
||||||
|
|
||||||
|
All inspect output data is stored in Postgres.
|
||||||
|
|
||||||
|
To connect to the local Postgres database for querying, launch a client container with:
|
||||||
|
```
|
||||||
|
kubectl run -i --rm --tty postgres-client --env="PGPASSWORD=password" --image=jbergknoff/postgresql-client -- mev_inspect --host=postgresql --user=postgres
|
||||||
|
```
|
||||||
|
|
||||||
|
When you see the prompt
|
||||||
|
```
|
||||||
|
mev_inspect=#
|
||||||
|
```
|
||||||
|
|
||||||
|
You're ready to query!
|
||||||
|
|
||||||
|
Try finding the total number of swaps decoded with UniswapV3Pool
|
||||||
|
```
|
||||||
|
SELECT COUNT(*) FROM swaps WHERE abi_name='UniswapV3Pool';
|
||||||
|
```
|
||||||
|
|
||||||
|
or top 10 arbs by gross profit that took profit in WETH
|
||||||
|
```
|
||||||
|
SELECT *
|
||||||
|
FROM arbitrages
|
||||||
|
WHERE profit_token_address = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'
|
||||||
|
ORDER BY profit_amount DESC
|
||||||
|
LIMIT 10;
|
||||||
|
```
|
||||||
|
|
||||||
|
Postgres tip: Enter `\x` to enter "Explanded display" mode which looks nicer for results with many columns
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
Development can be done locally or in the docker container. Use local if
|
|
||||||
contributions can be fully tested without invoking the database related
|
|
||||||
services.
|
|
||||||
|
|
||||||
1. Install dependencies and build python environment
|
### Guide
|
||||||
|
|
||||||
|
✨ Coming soon
|
||||||
|
|
||||||
|
### Pre-commit
|
||||||
|
|
||||||
|
We use pre-commit to maintain a consistent style, prevent errors, and ensure test coverage.
|
||||||
|
|
||||||
|
To set up, install dependencies through poetry
|
||||||
```
|
```
|
||||||
poetry install
|
poetry install
|
||||||
```
|
```
|
||||||
or with docker
|
|
||||||
|
Then install pre-commit hooks with
|
||||||
```
|
```
|
||||||
poetry run build
|
poetry run pre-commit install
|
||||||
```
|
|
||||||
2. Pre-commit is used to maintain a consistent style, prevent errors and ensure
|
|
||||||
test coverage. Make sure to fix any errors presented via Black, Pylint and
|
|
||||||
MyPy pre-commit hooks
|
|
||||||
```
|
|
||||||
poetry run pre-commit
|
|
||||||
```
|
```
|
||||||
|
|
||||||
or within docker
|
### Tests
|
||||||
|
|
||||||
|
Run tests with
|
||||||
```
|
```
|
||||||
pre-commit run --all-files
|
kubectl exec deploy/mev-inspect-deployment -- poetry run pytest --cov=mev_inspect tests
|
||||||
```
|
```
|
||||||
3. Update README if needed
|
|
||||||
|
## FAQ
|
||||||
|
|
||||||
|
### How do I delete / reset my local postgres data?
|
||||||
|
|
||||||
|
Stop the system if running
|
||||||
|
```
|
||||||
|
tilt down
|
||||||
|
```
|
||||||
|
|
||||||
|
Delete it with
|
||||||
|
```
|
||||||
|
kubectl delete pvc data-postgresql-postgresql-0
|
||||||
|
```
|
||||||
|
|
||||||
|
Start back up again
|
||||||
|
```
|
||||||
|
tilt up
|
||||||
|
```
|
||||||
|
|
||||||
|
And rerun migrations to create the tables again
|
||||||
|
```
|
||||||
|
kubectl exec deploy/mev-inspect-deployment -- alembic upgrade head
|
||||||
|
```
|
||||||
|
|
||||||
|
### I was using the docker-compose setup and want to switch to kube, now what?
|
||||||
|
|
||||||
|
Re-add the old `docker-compose.yml` file to your mev-inspect-py directory
|
||||||
|
|
||||||
|
A copy can be found [here](https://github.com/flashbots/mev-inspect-py/blob/ef60c097719629a7d2dc56c6e6c9a100fb706f76/docker-compose.yml)
|
||||||
|
|
||||||
|
Tear down docker-compose resources
|
||||||
|
```
|
||||||
|
docker compose down
|
||||||
|
```
|
||||||
|
|
||||||
|
Then go through the steps in the current README for kube setup
|
||||||
|
|
||||||
|
### Error from server (AlreadyExists): pods "postgres-client" already exists
|
||||||
|
This means the postgres client container didn't shut down correctly
|
||||||
|
|
||||||
|
Delete this one with
|
||||||
|
```
|
||||||
|
kubectl delete pod/postgres-client
|
||||||
|
```
|
||||||
|
|
||||||
|
Then start it back up again
|
||||||
|
|||||||
30
Tiltfile
Normal file
30
Tiltfile
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
load("ext://helm_remote", "helm_remote")
|
||||||
|
load("ext://restart_process", "docker_build_with_restart")
|
||||||
|
load("ext://secret", "secret_from_dict")
|
||||||
|
load("ext://configmap", "configmap_from_dict")
|
||||||
|
|
||||||
|
helm_remote("postgresql",
|
||||||
|
repo_name="bitnami",
|
||||||
|
repo_url="https://charts.bitnami.com/bitnami",
|
||||||
|
set=["postgresqlPassword=password", "postgresqlDatabase=mev_inspect"],
|
||||||
|
)
|
||||||
|
|
||||||
|
k8s_yaml(configmap_from_dict("mev-inspect-rpc", inputs = {
|
||||||
|
"url" : os.environ["RPC_URL"],
|
||||||
|
}))
|
||||||
|
|
||||||
|
k8s_yaml(secret_from_dict("mev-inspect-db-credentials", inputs = {
|
||||||
|
"username" : "postgres",
|
||||||
|
"password": "password",
|
||||||
|
}))
|
||||||
|
|
||||||
|
docker_build_with_restart("mev-inspect-py", ".",
|
||||||
|
entrypoint="/app/entrypoint.sh",
|
||||||
|
live_update=[
|
||||||
|
sync(".", "/app"),
|
||||||
|
run("cd /app && poetry install",
|
||||||
|
trigger="./pyproject.toml"),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
k8s_yaml("k8s/app.yaml")
|
||||||
|
k8s_resource(workload="mev-inspect-deployment", resource_deps=["postgresql-postgresql"])
|
||||||
89
alembic.ini
Normal file
89
alembic.ini
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
# A generic, single database configuration.
|
||||||
|
|
||||||
|
[alembic]
|
||||||
|
# path to migration scripts
|
||||||
|
script_location = alembic
|
||||||
|
|
||||||
|
# template used to generate migration files
|
||||||
|
# file_template = %%(rev)s_%%(slug)s
|
||||||
|
|
||||||
|
# sys.path path, will be prepended to sys.path if present.
|
||||||
|
# defaults to the current working directory.
|
||||||
|
prepend_sys_path = .
|
||||||
|
|
||||||
|
# timezone to use when rendering the date
|
||||||
|
# within the migration file as well as the filename.
|
||||||
|
# string value is passed to dateutil.tz.gettz()
|
||||||
|
# leave blank for localtime
|
||||||
|
# timezone =
|
||||||
|
|
||||||
|
# max length of characters to apply to the
|
||||||
|
# "slug" field
|
||||||
|
# truncate_slug_length = 40
|
||||||
|
|
||||||
|
# set to 'true' to run the environment during
|
||||||
|
# the 'revision' command, regardless of autogenerate
|
||||||
|
# revision_environment = false
|
||||||
|
|
||||||
|
# set to 'true' to allow .pyc and .pyo files without
|
||||||
|
# a source .py file to be detected as revisions in the
|
||||||
|
# versions/ directory
|
||||||
|
# sourceless = false
|
||||||
|
|
||||||
|
# version location specification; this defaults
|
||||||
|
# to alembic/versions. When using multiple version
|
||||||
|
# directories, initial revisions must be specified with --version-path
|
||||||
|
# version_locations = %(here)s/bar %(here)s/bat alembic/versions
|
||||||
|
|
||||||
|
# the output encoding used when revision files
|
||||||
|
# are written from script.py.mako
|
||||||
|
# output_encoding = utf-8
|
||||||
|
|
||||||
|
# sqlalchemy.url = postgresql://postgres:password@db/mev_inspect
|
||||||
|
|
||||||
|
|
||||||
|
[post_write_hooks]
|
||||||
|
# post_write_hooks defines scripts or Python functions that are run
|
||||||
|
# on newly generated revision scripts. See the documentation for further
|
||||||
|
# detail and examples
|
||||||
|
|
||||||
|
# format using "black" - use the console_scripts runner, against the "black" entrypoint
|
||||||
|
# hooks = black
|
||||||
|
# black.type = console_scripts
|
||||||
|
# black.entrypoint = black
|
||||||
|
# black.options = -l 79 REVISION_SCRIPT_FILENAME
|
||||||
|
|
||||||
|
# Logging configuration
|
||||||
|
[loggers]
|
||||||
|
keys = root,sqlalchemy,alembic
|
||||||
|
|
||||||
|
[handlers]
|
||||||
|
keys = console
|
||||||
|
|
||||||
|
[formatters]
|
||||||
|
keys = generic
|
||||||
|
|
||||||
|
[logger_root]
|
||||||
|
level = WARN
|
||||||
|
handlers = console
|
||||||
|
qualname =
|
||||||
|
|
||||||
|
[logger_sqlalchemy]
|
||||||
|
level = WARN
|
||||||
|
handlers =
|
||||||
|
qualname = sqlalchemy.engine
|
||||||
|
|
||||||
|
[logger_alembic]
|
||||||
|
level = INFO
|
||||||
|
handlers =
|
||||||
|
qualname = alembic
|
||||||
|
|
||||||
|
[handler_console]
|
||||||
|
class = StreamHandler
|
||||||
|
args = (sys.stderr,)
|
||||||
|
level = NOTSET
|
||||||
|
formatter = generic
|
||||||
|
|
||||||
|
[formatter_generic]
|
||||||
|
format = %(levelname)-5.5s [%(name)s] %(message)s
|
||||||
|
datefmt = %H:%M:%S
|
||||||
1
alembic/README
Normal file
1
alembic/README
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Generic single-database configuration.
|
||||||
78
alembic/env.py
Normal file
78
alembic/env.py
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
from logging.config import fileConfig
|
||||||
|
|
||||||
|
from sqlalchemy import engine_from_config
|
||||||
|
from sqlalchemy import pool
|
||||||
|
|
||||||
|
from alembic import context
|
||||||
|
|
||||||
|
from mev_inspect.db import get_sqlalchemy_database_uri
|
||||||
|
|
||||||
|
# this is the Alembic Config object, which provides
|
||||||
|
# access to the values within the .ini file in use.
|
||||||
|
config = context.config
|
||||||
|
config.set_main_option("sqlalchemy.url", get_sqlalchemy_database_uri())
|
||||||
|
|
||||||
|
# Interpret the config file for Python logging.
|
||||||
|
# This line sets up loggers basically.
|
||||||
|
fileConfig(config.config_file_name)
|
||||||
|
|
||||||
|
# add your model's MetaData object here
|
||||||
|
# for 'autogenerate' support
|
||||||
|
# from myapp import mymodel
|
||||||
|
# target_metadata = mymodel.Base.metadata
|
||||||
|
target_metadata = None
|
||||||
|
|
||||||
|
# other values from the config, defined by the needs of env.py,
|
||||||
|
# can be acquired:
|
||||||
|
# my_important_option = config.get_main_option("my_important_option")
|
||||||
|
# ... etc.
|
||||||
|
|
||||||
|
|
||||||
|
def run_migrations_offline():
|
||||||
|
"""Run migrations in 'offline' mode.
|
||||||
|
|
||||||
|
This configures the context with just a URL
|
||||||
|
and not an Engine, though an Engine is acceptable
|
||||||
|
here as well. By skipping the Engine creation
|
||||||
|
we don't even need a DBAPI to be available.
|
||||||
|
|
||||||
|
Calls to context.execute() here emit the given string to the
|
||||||
|
script output.
|
||||||
|
|
||||||
|
"""
|
||||||
|
url = config.get_main_option("sqlalchemy.url")
|
||||||
|
context.configure(
|
||||||
|
url=url,
|
||||||
|
target_metadata=target_metadata,
|
||||||
|
literal_binds=True,
|
||||||
|
dialect_opts={"paramstyle": "named"},
|
||||||
|
)
|
||||||
|
|
||||||
|
with context.begin_transaction():
|
||||||
|
context.run_migrations()
|
||||||
|
|
||||||
|
|
||||||
|
def run_migrations_online():
|
||||||
|
"""Run migrations in 'online' mode.
|
||||||
|
|
||||||
|
In this scenario we need to create an Engine
|
||||||
|
and associate a connection with the context.
|
||||||
|
|
||||||
|
"""
|
||||||
|
connectable = engine_from_config(
|
||||||
|
config.get_section(config.config_ini_section),
|
||||||
|
prefix="sqlalchemy.",
|
||||||
|
poolclass=pool.NullPool,
|
||||||
|
)
|
||||||
|
|
||||||
|
with connectable.connect() as connection:
|
||||||
|
context.configure(connection=connection, target_metadata=target_metadata)
|
||||||
|
|
||||||
|
with context.begin_transaction():
|
||||||
|
context.run_migrations()
|
||||||
|
|
||||||
|
|
||||||
|
if context.is_offline_mode():
|
||||||
|
run_migrations_offline()
|
||||||
|
else:
|
||||||
|
run_migrations_online()
|
||||||
24
alembic/script.py.mako
Normal file
24
alembic/script.py.mako
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
"""${message}
|
||||||
|
|
||||||
|
Revision ID: ${up_revision}
|
||||||
|
Revises: ${down_revision | comma,n}
|
||||||
|
Create Date: ${create_date}
|
||||||
|
|
||||||
|
"""
|
||||||
|
from alembic import op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
${imports if imports else ""}
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = ${repr(up_revision)}
|
||||||
|
down_revision = ${repr(down_revision)}
|
||||||
|
branch_labels = ${repr(branch_labels)}
|
||||||
|
depends_on = ${repr(depends_on)}
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
${upgrades if upgrades else "pass"}
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
${downgrades if downgrades else "pass"}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
"""Create classifications table
|
||||||
|
|
||||||
|
Revision ID: 0660432b9840
|
||||||
|
Revises:
|
||||||
|
Create Date: 2021-07-23 20:08:42.016711
|
||||||
|
|
||||||
|
"""
|
||||||
|
import sqlalchemy as sa
|
||||||
|
from alembic import op
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = "0660432b9840"
|
||||||
|
down_revision = None
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
op.create_table(
|
||||||
|
"classified_traces",
|
||||||
|
sa.Column("classified_at", sa.TIMESTAMP, server_default=sa.func.now()),
|
||||||
|
sa.Column("transaction_hash", sa.String(66), nullable=False),
|
||||||
|
sa.Column("block_number", sa.Numeric, nullable=False),
|
||||||
|
sa.Column(
|
||||||
|
"classification",
|
||||||
|
sa.String(256),
|
||||||
|
nullable=False,
|
||||||
|
),
|
||||||
|
sa.Column("trace_type", sa.String(256), nullable=False),
|
||||||
|
sa.Column("trace_address", sa.String(256), nullable=False),
|
||||||
|
sa.Column("protocol", sa.String(256), nullable=True),
|
||||||
|
sa.Column("abi_name", sa.String(1024), nullable=True),
|
||||||
|
sa.Column("function_name", sa.String(2048), nullable=True),
|
||||||
|
sa.Column("function_signature", sa.String(2048), nullable=True),
|
||||||
|
sa.Column("inputs", sa.JSON, nullable=True),
|
||||||
|
sa.Column("from_address", sa.String(256), nullable=True),
|
||||||
|
sa.Column("to_address", sa.String(256), nullable=True),
|
||||||
|
sa.Column("gas", sa.Numeric, nullable=True),
|
||||||
|
sa.Column("value", sa.Numeric, nullable=True),
|
||||||
|
sa.Column("gas_used", sa.Numeric, nullable=True),
|
||||||
|
sa.Column("error", sa.String(256), nullable=True),
|
||||||
|
sa.PrimaryKeyConstraint("transaction_hash", "trace_address"),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
op.drop_table("classified_traces")
|
||||||
36
alembic/versions/083978d6e455_create_miner_payments_table.py
Normal file
36
alembic/versions/083978d6e455_create_miner_payments_table.py
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
"""Create miner_payments table
|
||||||
|
|
||||||
|
Revision ID: 083978d6e455
|
||||||
|
Revises: 92f28a2b4f52
|
||||||
|
Create Date: 2021-08-30 17:42:25.548130
|
||||||
|
|
||||||
|
"""
|
||||||
|
import sqlalchemy as sa
|
||||||
|
from alembic import op
|
||||||
|
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = "083978d6e455"
|
||||||
|
down_revision = "92f28a2b4f52"
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
op.create_table(
|
||||||
|
"miner_payments",
|
||||||
|
sa.Column("created_at", sa.TIMESTAMP, server_default=sa.func.now()),
|
||||||
|
sa.Column("block_number", sa.Numeric, nullable=False),
|
||||||
|
sa.Column("transaction_hash", sa.String(66), primary_key=True),
|
||||||
|
sa.Column("transaction_index", sa.Numeric, nullable=False),
|
||||||
|
sa.Column("miner_address", sa.String(256), nullable=False),
|
||||||
|
sa.Column("coinbase_transfer", sa.Numeric, nullable=False),
|
||||||
|
sa.Column("base_fee_per_gas", sa.Numeric, nullable=False),
|
||||||
|
sa.Column("gas_price", sa.Numeric, nullable=False),
|
||||||
|
sa.Column("gas_price_with_coinbase_transfer", sa.Numeric, nullable=False),
|
||||||
|
sa.Column("gas_used", sa.Numeric, nullable=False),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
op.drop_table("miner_payments")
|
||||||
39
alembic/versions/2116e2f36a19_create_swaps_table.py
Normal file
39
alembic/versions/2116e2f36a19_create_swaps_table.py
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
"""Create swaps table
|
||||||
|
|
||||||
|
Revision ID: 2116e2f36a19
|
||||||
|
Revises: c5da44eb072c
|
||||||
|
Create Date: 2021-08-05 21:06:33.340456
|
||||||
|
|
||||||
|
"""
|
||||||
|
import sqlalchemy as sa
|
||||||
|
from alembic import op
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = "2116e2f36a19"
|
||||||
|
down_revision = "c5da44eb072c"
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
op.create_table(
|
||||||
|
"swaps",
|
||||||
|
sa.Column("created_at", sa.TIMESTAMP, server_default=sa.func.now()),
|
||||||
|
sa.Column("abi_name", sa.String(1024), nullable=False),
|
||||||
|
sa.Column("transaction_hash", sa.String(66), nullable=False),
|
||||||
|
sa.Column("block_number", sa.Numeric, nullable=False),
|
||||||
|
sa.Column("trace_address", sa.String(256), nullable=False),
|
||||||
|
sa.Column("protocol", sa.String(256), nullable=True),
|
||||||
|
sa.Column("pool_address", sa.String(256), nullable=False),
|
||||||
|
sa.Column("from_address", sa.String(256), nullable=False),
|
||||||
|
sa.Column("to_address", sa.String(256), nullable=False),
|
||||||
|
sa.Column("token_in_address", sa.String(256), nullable=False),
|
||||||
|
sa.Column("token_in_amount", sa.Numeric, nullable=False),
|
||||||
|
sa.Column("token_out_address", sa.String(256), nullable=False),
|
||||||
|
sa.Column("token_out_amount", sa.Numeric, nullable=False),
|
||||||
|
sa.PrimaryKeyConstraint("transaction_hash", "trace_address"),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
op.drop_table("swaps")
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
"""Add index on block_number for miner_payments
|
||||||
|
|
||||||
|
Revision ID: 320e56b0a99f
|
||||||
|
Revises: a02f3f2c469f
|
||||||
|
Create Date: 2021-09-14 11:11:41.559137
|
||||||
|
|
||||||
|
"""
|
||||||
|
from alembic import op
|
||||||
|
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = "320e56b0a99f"
|
||||||
|
down_revision = "a02f3f2c469f"
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
op.create_index("ix_block_number", "miner_payments", ["block_number"])
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
op.drop_index("ix_block_number", "miner_payments")
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
"""Change trace addresses to array types
|
||||||
|
|
||||||
|
Revision ID: 7eec417a4f3e
|
||||||
|
Revises: 9d8c69b3dccb
|
||||||
|
Create Date: 2021-08-06 15:58:04.556762
|
||||||
|
|
||||||
|
"""
|
||||||
|
import sqlalchemy as sa
|
||||||
|
from alembic import op
|
||||||
|
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = "7eec417a4f3e"
|
||||||
|
down_revision = "9d8c69b3dccb"
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
op.drop_constraint("swaps_pkey", "swaps")
|
||||||
|
op.drop_column("swaps", "trace_address")
|
||||||
|
op.add_column("swaps", sa.Column("trace_address", sa.ARRAY(sa.Integer)))
|
||||||
|
op.create_primary_key("swaps_pkey", "swaps", ["transaction_hash", "trace_address"])
|
||||||
|
|
||||||
|
op.drop_constraint("classified_traces_pkey", "classified_traces")
|
||||||
|
op.drop_column("classified_traces", "trace_address")
|
||||||
|
op.add_column("classified_traces", sa.Column("trace_address", sa.ARRAY(sa.Integer)))
|
||||||
|
op.create_primary_key(
|
||||||
|
"classified_traces_pkey",
|
||||||
|
"classified_traces",
|
||||||
|
["transaction_hash", "trace_address"],
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
op.drop_constraint("swaps_pkey", "swaps")
|
||||||
|
op.drop_column("swaps", "trace_address")
|
||||||
|
op.add_column("swaps", sa.Column("trace_address", sa.String))
|
||||||
|
|
||||||
|
op.create_primary_key("swaps_pkey", "swaps", ["transaction_hash", "trace_address"])
|
||||||
|
|
||||||
|
op.drop_constraint("classified_traces_pkey", "classified_traces")
|
||||||
|
op.drop_column("classified_traces", "trace_address")
|
||||||
|
op.add_column("classified_traces", sa.Column("trace_address", sa.String))
|
||||||
|
|
||||||
|
op.create_primary_key(
|
||||||
|
"classified_traces_pkey",
|
||||||
|
"classified_traces",
|
||||||
|
["transaction_hash", "trace_address"],
|
||||||
|
)
|
||||||
24
alembic/versions/92f28a2b4f52_add_error_column_to_swaps.py
Normal file
24
alembic/versions/92f28a2b4f52_add_error_column_to_swaps.py
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
"""Add error column to swaps
|
||||||
|
|
||||||
|
Revision ID: 92f28a2b4f52
|
||||||
|
Revises: 9b8ae51c5d56
|
||||||
|
Create Date: 2021-08-17 03:46:21.498821
|
||||||
|
|
||||||
|
"""
|
||||||
|
import sqlalchemy as sa
|
||||||
|
from alembic import op
|
||||||
|
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = "92f28a2b4f52"
|
||||||
|
down_revision = "9b8ae51c5d56"
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
op.add_column("swaps", sa.Column("error", sa.String(256), nullable=True))
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
op.drop_column("swaps", "error")
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
"""Add swap arbitrage join table
|
||||||
|
|
||||||
|
Revision ID: 9b8ae51c5d56
|
||||||
|
Revises: 7eec417a4f3e
|
||||||
|
Create Date: 2021-08-06 17:06:55.364516
|
||||||
|
|
||||||
|
"""
|
||||||
|
import sqlalchemy as sa
|
||||||
|
from alembic import op
|
||||||
|
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = "9b8ae51c5d56"
|
||||||
|
down_revision = "7eec417a4f3e"
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
op.create_table(
|
||||||
|
"arbitrage_swaps",
|
||||||
|
sa.Column("created_at", sa.TIMESTAMP, server_default=sa.func.now()),
|
||||||
|
sa.Column("arbitrage_id", sa.String(1024), primary_key=True),
|
||||||
|
sa.Column("swap_transaction_hash", sa.String(66), primary_key=True),
|
||||||
|
sa.Column("swap_trace_address", sa.ARRAY(sa.Integer), primary_key=True),
|
||||||
|
sa.ForeignKeyConstraint(
|
||||||
|
["arbitrage_id"], ["arbitrages.id"], ondelete="CASCADE"
|
||||||
|
),
|
||||||
|
sa.ForeignKeyConstraint(
|
||||||
|
["swap_transaction_hash", "swap_trace_address"],
|
||||||
|
["swaps.transaction_hash", "swaps.trace_address"],
|
||||||
|
ondelete="CASCADE",
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
op.drop_table("arbitrage_swaps")
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
"""Add arbitrages and swap join table
|
||||||
|
|
||||||
|
Revision ID: 9d8c69b3dccb
|
||||||
|
Revises: 2116e2f36a19
|
||||||
|
Create Date: 2021-08-05 21:46:35.209199
|
||||||
|
|
||||||
|
"""
|
||||||
|
import sqlalchemy as sa
|
||||||
|
from alembic import op
|
||||||
|
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = "9d8c69b3dccb"
|
||||||
|
down_revision = "2116e2f36a19"
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
op.create_table(
|
||||||
|
"arbitrages",
|
||||||
|
sa.Column("id", sa.String(256), primary_key=True),
|
||||||
|
sa.Column("created_at", sa.TIMESTAMP, server_default=sa.func.now()),
|
||||||
|
sa.Column("account_address", sa.String(256), nullable=False),
|
||||||
|
sa.Column("profit_token_address", sa.String(256), nullable=False),
|
||||||
|
sa.Column("block_number", sa.Numeric, nullable=False),
|
||||||
|
sa.Column("transaction_hash", sa.String(256), nullable=False),
|
||||||
|
sa.Column("start_amount", sa.Numeric, nullable=False),
|
||||||
|
sa.Column("end_amount", sa.Numeric, nullable=False),
|
||||||
|
sa.Column("profit_amount", sa.Numeric, nullable=False),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
op.drop_table("arbitrages")
|
||||||
28
alembic/versions/a02f3f2c469f_create_latest_block_table.py
Normal file
28
alembic/versions/a02f3f2c469f_create_latest_block_table.py
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
"""Create latest block table
|
||||||
|
|
||||||
|
Revision ID: a02f3f2c469f
|
||||||
|
Revises: d70c08b4db6f
|
||||||
|
Create Date: 2021-09-13 21:32:27.181344
|
||||||
|
|
||||||
|
"""
|
||||||
|
import sqlalchemy as sa
|
||||||
|
from alembic import op
|
||||||
|
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = "a02f3f2c469f"
|
||||||
|
down_revision = "d70c08b4db6f"
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
op.create_table(
|
||||||
|
"latest_block_update",
|
||||||
|
sa.Column("block_number", sa.Numeric, primary_key=True),
|
||||||
|
sa.Column("updated_at", sa.TIMESTAMP, server_default=sa.func.now()),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
op.drop_table("latest_block_update")
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
"""Add index for classified_traces.block_number
|
||||||
|
|
||||||
|
Revision ID: c5da44eb072c
|
||||||
|
Revises: 0660432b9840
|
||||||
|
Create Date: 2021-07-30 17:37:27.335475
|
||||||
|
|
||||||
|
"""
|
||||||
|
from alembic import op
|
||||||
|
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = "c5da44eb072c"
|
||||||
|
down_revision = "0660432b9840"
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
op.create_index("i_block_number", "classified_traces", ["block_number"])
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
op.drop_index("i_block_number", "classified_traces")
|
||||||
39
alembic/versions/cd96af55108e_add_transfers_table.py
Normal file
39
alembic/versions/cd96af55108e_add_transfers_table.py
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
"""Add transfers table
|
||||||
|
|
||||||
|
Revision ID: cd96af55108e
|
||||||
|
Revises: 5437dc68f4df
|
||||||
|
Create Date: 2021-09-17 12:44:45.245137
|
||||||
|
|
||||||
|
"""
|
||||||
|
import sqlalchemy as sa
|
||||||
|
from alembic import op
|
||||||
|
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = "cd96af55108e"
|
||||||
|
down_revision = "320e56b0a99f"
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
op.create_table(
|
||||||
|
"transfers",
|
||||||
|
sa.Column("created_at", sa.TIMESTAMP, server_default=sa.func.now()),
|
||||||
|
sa.Column("block_number", sa.Numeric, nullable=False),
|
||||||
|
sa.Column("transaction_hash", sa.String(66), nullable=False),
|
||||||
|
sa.Column("trace_address", sa.String(256), nullable=False),
|
||||||
|
sa.Column("protocol", sa.String(256), nullable=True),
|
||||||
|
sa.Column("from_address", sa.String(256), nullable=False),
|
||||||
|
sa.Column("to_address", sa.String(256), nullable=False),
|
||||||
|
sa.Column("token_address", sa.String(256), nullable=False),
|
||||||
|
sa.Column("amount", sa.Numeric, nullable=False),
|
||||||
|
sa.Column("error", sa.String(256), nullable=True),
|
||||||
|
sa.PrimaryKeyConstraint("transaction_hash", "trace_address"),
|
||||||
|
)
|
||||||
|
op.create_index("ix_transfers_block_number", "transfers", ["block_number"])
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
op.drop_index("ix_transfers_block_number", "transfers")
|
||||||
|
op.drop_table("transfers")
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
"""Add to_address and from_address to miner_payments table
|
||||||
|
|
||||||
|
Revision ID: d70c08b4db6f
|
||||||
|
Revises: 083978d6e455
|
||||||
|
Create Date: 2021-08-30 22:10:04.186251
|
||||||
|
|
||||||
|
"""
|
||||||
|
import sqlalchemy as sa
|
||||||
|
from alembic import op
|
||||||
|
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = "d70c08b4db6f"
|
||||||
|
down_revision = "083978d6e455"
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
op.add_column(
|
||||||
|
"miner_payments",
|
||||||
|
sa.Column("transaction_to_address", sa.String(256), nullable=True),
|
||||||
|
)
|
||||||
|
op.add_column(
|
||||||
|
"miner_payments",
|
||||||
|
sa.Column("transaction_from_address", sa.String(256), nullable=True),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
op.drop_column("miner_payments", "transaction_to_address")
|
||||||
|
op.drop_column("miner_payments", "transaction_from_address")
|
||||||
79
cli.py
Normal file
79
cli.py
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
import os
|
||||||
|
import logging
|
||||||
|
import sys
|
||||||
|
|
||||||
|
import click
|
||||||
|
from web3 import Web3
|
||||||
|
|
||||||
|
from mev_inspect.db import get_session
|
||||||
|
from mev_inspect.inspect_block import inspect_block
|
||||||
|
from mev_inspect.provider import get_base_provider
|
||||||
|
|
||||||
|
|
||||||
|
RPC_URL_ENV = "RPC_URL"
|
||||||
|
|
||||||
|
logging.basicConfig(stream=sys.stdout, level=logging.INFO)
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
@click.group()
|
||||||
|
def cli():
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@cli.command()
|
||||||
|
@click.argument("block_number", type=int)
|
||||||
|
@click.option("--rpc", default=lambda: os.environ.get(RPC_URL_ENV, ""))
|
||||||
|
@click.option("--cache/--no-cache", default=True)
|
||||||
|
def inspect_block_command(block_number: int, rpc: str, cache: bool):
|
||||||
|
db_session = get_session()
|
||||||
|
base_provider = get_base_provider(rpc)
|
||||||
|
w3 = Web3(base_provider)
|
||||||
|
|
||||||
|
if not cache:
|
||||||
|
logger.info("Skipping cache")
|
||||||
|
|
||||||
|
inspect_block(db_session, base_provider, w3, block_number, should_cache=cache)
|
||||||
|
|
||||||
|
|
||||||
|
@cli.command()
|
||||||
|
@click.argument("after_block", type=int)
|
||||||
|
@click.argument("before_block", type=int)
|
||||||
|
@click.option("--rpc", default=lambda: os.environ.get(RPC_URL_ENV, ""))
|
||||||
|
@click.option("--cache/--no-cache", default=True)
|
||||||
|
def inspect_many_blocks_command(
|
||||||
|
after_block: int, before_block: int, rpc: str, cache: bool
|
||||||
|
):
|
||||||
|
|
||||||
|
db_session = get_session()
|
||||||
|
base_provider = get_base_provider(rpc)
|
||||||
|
w3 = Web3(base_provider)
|
||||||
|
|
||||||
|
if not cache:
|
||||||
|
logger.info("Skipping cache")
|
||||||
|
|
||||||
|
for i, block_number in enumerate(range(after_block, before_block)):
|
||||||
|
block_message = (
|
||||||
|
f"Running for {block_number} ({i+1}/{before_block - after_block})"
|
||||||
|
)
|
||||||
|
dashes = "-" * len(block_message)
|
||||||
|
logger.info(dashes)
|
||||||
|
logger.info(block_message)
|
||||||
|
logger.info(dashes)
|
||||||
|
|
||||||
|
inspect_block(
|
||||||
|
db_session,
|
||||||
|
base_provider,
|
||||||
|
w3,
|
||||||
|
block_number,
|
||||||
|
should_write_classified_traces=False,
|
||||||
|
should_cache=cache,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def get_rpc_url() -> str:
|
||||||
|
return os.environ["RPC_URL"]
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
cli()
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
services:
|
|
||||||
mev-inspect:
|
|
||||||
build: .
|
|
||||||
depends_on:
|
|
||||||
- db
|
|
||||||
env_file:
|
|
||||||
- .env
|
|
||||||
volumes:
|
|
||||||
- .:/app
|
|
||||||
tty: true
|
|
||||||
|
|
||||||
db:
|
|
||||||
image: postgres:12
|
|
||||||
volumes:
|
|
||||||
- mev-inspect-db-data:/var/lib/postgresql/data/pgdata
|
|
||||||
env_file:
|
|
||||||
- .env
|
|
||||||
environment:
|
|
||||||
- PGDATA=/var/lib/postgresql/data/pgdata
|
|
||||||
|
|
||||||
pgadmin:
|
|
||||||
image: dpage/pgadmin4
|
|
||||||
networks:
|
|
||||||
- default
|
|
||||||
depends_on:
|
|
||||||
- db
|
|
||||||
env_file:
|
|
||||||
- .env
|
|
||||||
ports:
|
|
||||||
- "5050:5050"
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
mev-inspect-db-data:
|
|
||||||
3
entrypoint.sh
Executable file
3
entrypoint.sh
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
python loop.py
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
import argparse
|
|
||||||
|
|
||||||
from web3 import Web3
|
|
||||||
|
|
||||||
from mev_inspect import block
|
|
||||||
from mev_inspect.inspectors.uniswap import UniswapInspector
|
|
||||||
from mev_inspect.processor import Processor
|
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(description="Inspect some blocks.")
|
|
||||||
parser.add_argument(
|
|
||||||
"-block_number",
|
|
||||||
metavar="b",
|
|
||||||
type=int,
|
|
||||||
nargs="+",
|
|
||||||
help="the block number you are targetting, eventually this will need to be changed",
|
|
||||||
)
|
|
||||||
parser.add_argument(
|
|
||||||
"-rpc", metavar="r", help="rpc endpoint, this needs to have parity style traces"
|
|
||||||
)
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
## Set up the base provider, but don't wrap it in web3 so we can make requests to it with make_request()
|
|
||||||
base_provider = Web3.HTTPProvider(args.rpc)
|
|
||||||
|
|
||||||
## Get block data that we need
|
|
||||||
block_data = block.create_from_block_number(args.block_number[0], base_provider)
|
|
||||||
print(f"Total traces: {len(block_data.traces)}")
|
|
||||||
|
|
||||||
total_transactions = len(
|
|
||||||
set(t.transaction_hash for t in block_data.traces if t.transaction_hash is not None)
|
|
||||||
)
|
|
||||||
print(f"Total transactions: {total_transactions}")
|
|
||||||
|
|
||||||
## Build a Uniswap inspector
|
|
||||||
uniswap_inspector = UniswapInspector(base_provider)
|
|
||||||
|
|
||||||
## Create a processor, pass in an ARRAY of inspects
|
|
||||||
processor = Processor([uniswap_inspector, uniswap_inspector])
|
|
||||||
|
|
||||||
classifications = processor.get_transaction_evaluations(block_data)
|
|
||||||
print(f"Returned {len(classifications)} classifications")
|
|
||||||
45
k8s/app.yaml
Normal file
45
k8s/app.yaml
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: mev-inspect-deployment
|
||||||
|
labels:
|
||||||
|
app: mev-inspect
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: mev-inspect
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: mev-inspect
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: mev-inspect
|
||||||
|
image: mev-inspect-py
|
||||||
|
command: [ "/app/entrypoint.sh" ]
|
||||||
|
env:
|
||||||
|
- name: POSTGRES_USER
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: mev-inspect-db-credentials
|
||||||
|
key: username
|
||||||
|
- name: POSTGRES_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: mev-inspect-db-credentials
|
||||||
|
key: password
|
||||||
|
- name: POSTGRES_HOST
|
||||||
|
value: postgresql
|
||||||
|
- name: RPC_URL
|
||||||
|
valueFrom:
|
||||||
|
configMapKeyRef:
|
||||||
|
name: mev-inspect-rpc
|
||||||
|
key: url
|
||||||
|
livenessProbe:
|
||||||
|
exec:
|
||||||
|
command:
|
||||||
|
- ls
|
||||||
|
- /
|
||||||
|
initialDelaySeconds: 20
|
||||||
|
periodSeconds: 5
|
||||||
47
listener
Executable file
47
listener
Executable file
@@ -0,0 +1,47 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
NAME=listener
|
||||||
|
PIDFILE=/var/run/$NAME.pid
|
||||||
|
DAEMON=/root/.poetry/bin/poetry
|
||||||
|
DAEMON_OPTS="run python listener.py"
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
start)
|
||||||
|
echo -n "Starting daemon: "$NAME
|
||||||
|
start-stop-daemon \
|
||||||
|
--background \
|
||||||
|
--chdir /app \
|
||||||
|
--start \
|
||||||
|
--quiet \
|
||||||
|
--pidfile $PIDFILE \
|
||||||
|
--make-pidfile \
|
||||||
|
--startas $DAEMON -- $DAEMON_OPTS
|
||||||
|
echo "."
|
||||||
|
;;
|
||||||
|
stop)
|
||||||
|
echo -n "Stopping daemon: "$NAME
|
||||||
|
start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE
|
||||||
|
echo "."
|
||||||
|
;;
|
||||||
|
restart)
|
||||||
|
echo -n "Restarting daemon: "$NAME
|
||||||
|
start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $PIDFILE
|
||||||
|
start-stop-daemon \
|
||||||
|
--background \
|
||||||
|
--chdir /app \
|
||||||
|
--start \
|
||||||
|
--quiet \
|
||||||
|
--pidfile $PIDFILE \
|
||||||
|
--make-pidfile \
|
||||||
|
--startas $DAEMON -- $DAEMON_OPTS
|
||||||
|
echo "."
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo "Usage: "$1" {start|stop|restart}"
|
||||||
|
exit 1
|
||||||
|
esac
|
||||||
|
|
||||||
|
exit 0
|
||||||
68
listener.py
Normal file
68
listener.py
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import time
|
||||||
|
|
||||||
|
from web3 import Web3
|
||||||
|
|
||||||
|
from mev_inspect.block import get_latest_block_number
|
||||||
|
from mev_inspect.crud.latest_block_update import (
|
||||||
|
find_latest_block_update,
|
||||||
|
update_latest_block,
|
||||||
|
)
|
||||||
|
from mev_inspect.db import get_session
|
||||||
|
from mev_inspect.inspect_block import inspect_block
|
||||||
|
from mev_inspect.provider import get_base_provider
|
||||||
|
from mev_inspect.signal_handler import GracefulKiller
|
||||||
|
|
||||||
|
|
||||||
|
logging.basicConfig(filename="listener.log", level=logging.INFO)
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def run():
|
||||||
|
rpc = os.getenv("RPC_URL")
|
||||||
|
if rpc is None:
|
||||||
|
raise RuntimeError("Missing environment variable RPC_URL")
|
||||||
|
|
||||||
|
logger.info("Starting...")
|
||||||
|
|
||||||
|
killer = GracefulKiller()
|
||||||
|
|
||||||
|
db_session = get_session()
|
||||||
|
base_provider = get_base_provider(rpc)
|
||||||
|
w3 = Web3(base_provider)
|
||||||
|
|
||||||
|
latest_block_number = get_latest_block_number(w3)
|
||||||
|
|
||||||
|
while not killer.kill_now:
|
||||||
|
last_written_block = find_latest_block_update(db_session)
|
||||||
|
logger.info(f"Latest block: {latest_block_number}")
|
||||||
|
logger.info(f"Last written block: {last_written_block}")
|
||||||
|
|
||||||
|
if last_written_block is None or last_written_block < latest_block_number:
|
||||||
|
block_number = (
|
||||||
|
latest_block_number
|
||||||
|
if last_written_block is None
|
||||||
|
else last_written_block + 1
|
||||||
|
)
|
||||||
|
|
||||||
|
logger.info(f"Writing block: {block_number}")
|
||||||
|
|
||||||
|
inspect_block(
|
||||||
|
db_session,
|
||||||
|
base_provider,
|
||||||
|
w3,
|
||||||
|
block_number,
|
||||||
|
should_write_classified_traces=False,
|
||||||
|
should_cache=False,
|
||||||
|
)
|
||||||
|
update_latest_block(db_session, block_number)
|
||||||
|
else:
|
||||||
|
time.sleep(5)
|
||||||
|
latest_block_number = get_latest_block_number(w3)
|
||||||
|
|
||||||
|
logger.info("Stopping...")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
run()
|
||||||
22
loop.py
Normal file
22
loop.py
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import logging
|
||||||
|
import time
|
||||||
|
|
||||||
|
from mev_inspect.signal_handler import GracefulKiller
|
||||||
|
|
||||||
|
|
||||||
|
logging.basicConfig(filename="loop.log", level=logging.INFO)
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def run():
|
||||||
|
logger.info("Starting...")
|
||||||
|
|
||||||
|
killer = GracefulKiller()
|
||||||
|
while not killer.kill_now:
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
|
logger.info("Stopping...")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
run()
|
||||||
@@ -1,20 +1,28 @@
|
|||||||
import json
|
import json
|
||||||
|
from pathlib import Path
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from pydantic import parse_obj_as
|
from pydantic import parse_obj_as
|
||||||
|
|
||||||
from mev_inspect.config import load_config
|
|
||||||
from mev_inspect.schemas import ABI
|
from mev_inspect.schemas import ABI
|
||||||
|
from mev_inspect.schemas.classified_traces import Protocol
|
||||||
|
|
||||||
|
|
||||||
ABI_CONFIG_KEY = "ABI"
|
THIS_FILE_DIRECTORY = Path(__file__).parents[0]
|
||||||
|
ABI_DIRECTORY_PATH = THIS_FILE_DIRECTORY / "abis"
|
||||||
config = load_config()
|
|
||||||
|
|
||||||
|
|
||||||
def get_abi(abi_name: str) -> Optional[ABI]:
|
def get_abi(abi_name: str, protocol: Optional[Protocol]) -> Optional[ABI]:
|
||||||
if abi_name in config[ABI_CONFIG_KEY]:
|
abi_filename = f"{abi_name}.json"
|
||||||
abi_json = json.loads(config[ABI_CONFIG_KEY][abi_name])
|
abi_path = (
|
||||||
return parse_obj_as(ABI, abi_json)
|
ABI_DIRECTORY_PATH / abi_filename
|
||||||
|
if protocol is None
|
||||||
|
else ABI_DIRECTORY_PATH / protocol.value / abi_filename
|
||||||
|
)
|
||||||
|
|
||||||
|
if abi_path.is_file():
|
||||||
|
with abi_path.open() as abi_file:
|
||||||
|
abi_json = json.load(abi_file)
|
||||||
|
return parse_obj_as(ABI, abi_json)
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|||||||
1
mev_inspect/abis/0x/IBatchFillNativeOrdersFeature.json
Normal file
1
mev_inspect/abis/0x/IBatchFillNativeOrdersFeature.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"inputs":[{"components":[{"internalType":"contract IERC20TokenV06","name":"makerToken","type":"address"},{"internalType":"contract IERC20TokenV06","name":"takerToken","type":"address"},{"internalType":"uint128","name":"makerAmount","type":"uint128"},{"internalType":"uint128","name":"takerAmount","type":"uint128"},{"internalType":"uint128","name":"takerTokenFeeAmount","type":"uint128"},{"internalType":"address","name":"maker","type":"address"},{"internalType":"address","name":"taker","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"feeRecipient","type":"address"},{"internalType":"bytes32","name":"pool","type":"bytes32"},{"internalType":"uint64","name":"expiry","type":"uint64"},{"internalType":"uint256","name":"salt","type":"uint256"}],"internalType":"struct LibNativeOrder.LimitOrder[]","name":"orders","type":"tuple[]"},{"components":[{"internalType":"enum LibSignature.SignatureType","name":"signatureType","type":"uint8"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct LibSignature.Signature[]","name":"signatures","type":"tuple[]"},{"internalType":"uint128[]","name":"takerTokenFillAmounts","type":"uint128[]"},{"internalType":"bool","name":"revertIfIncomplete","type":"bool"}],"name":"batchFillLimitOrders","outputs":[{"internalType":"uint128[]","name":"takerTokenFilledAmounts","type":"uint128[]"},{"internalType":"uint128[]","name":"makerTokenFilledAmounts","type":"uint128[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"contract IERC20TokenV06","name":"makerToken","type":"address"},{"internalType":"contract IERC20TokenV06","name":"takerToken","type":"address"},{"internalType":"uint128","name":"makerAmount","type":"uint128"},{"internalType":"uint128","name":"takerAmount","type":"uint128"},{"internalType":"address","name":"maker","type":"address"},{"internalType":"address","name":"taker","type":"address"},{"internalType":"address","name":"txOrigin","type":"address"},{"internalType":"bytes32","name":"pool","type":"bytes32"},{"internalType":"uint64","name":"expiry","type":"uint64"},{"internalType":"uint256","name":"salt","type":"uint256"}],"internalType":"struct LibNativeOrder.RfqOrder[]","name":"orders","type":"tuple[]"},{"components":[{"internalType":"enum LibSignature.SignatureType","name":"signatureType","type":"uint8"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct LibSignature.Signature[]","name":"signatures","type":"tuple[]"},{"internalType":"uint128[]","name":"takerTokenFillAmounts","type":"uint128[]"},{"internalType":"bool","name":"revertIfIncomplete","type":"bool"}],"name":"batchFillRfqOrders","outputs":[{"internalType":"uint128[]","name":"takerTokenFilledAmounts","type":"uint128[]"},{"internalType":"uint128[]","name":"makerTokenFilledAmounts","type":"uint128[]"}],"stateMutability":"nonpayable","type":"function"}]
|
||||||
1
mev_inspect/abis/0x/IBootstrapFeature.json
Normal file
1
mev_inspect/abis/0x/IBootstrapFeature.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"callData","type":"bytes"}],"name":"bootstrap","outputs":[],"stateMutability":"nonpayable","type":"function"}]
|
||||||
1
mev_inspect/abis/0x/IFeature.json
Normal file
1
mev_inspect/abis/0x/IFeature.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"inputs":[],"name":"FEATURE_NAME","outputs":[{"internalType":"string","name":"name","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEATURE_VERSION","outputs":[{"internalType":"uint256","name":"version","type":"uint256"}],"stateMutability":"view","type":"function"}]
|
||||||
1
mev_inspect/abis/0x/IFundRecoveryFeature.json
Normal file
1
mev_inspect/abis/0x/IFundRecoveryFeature.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"inputs":[{"internalType":"contract IERC20TokenV06","name":"erc20","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address payable","name":"recipientWallet","type":"address"}],"name":"transferTrappedTokensTo","outputs":[],"stateMutability":"nonpayable","type":"function"}]
|
||||||
1
mev_inspect/abis/0x/ILiquidityProviderFeature.json
Normal file
1
mev_inspect/abis/0x/ILiquidityProviderFeature.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20TokenV06","name":"inputToken","type":"address"},{"indexed":false,"internalType":"contract IERC20TokenV06","name":"outputToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"inputTokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"outputTokenAmount","type":"uint256"},{"indexed":false,"internalType":"contract ILiquidityProvider","name":"provider","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"LiquidityProviderSwap","type":"event"},{"inputs":[{"internalType":"contract IERC20TokenV06","name":"inputToken","type":"address"},{"internalType":"contract IERC20TokenV06","name":"outputToken","type":"address"},{"internalType":"contract ILiquidityProvider","name":"provider","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"minBuyAmount","type":"uint256"},{"internalType":"bytes","name":"auxiliaryData","type":"bytes"}],"name":"sellToLiquidityProvider","outputs":[{"internalType":"uint256","name":"boughtAmount","type":"uint256"}],"stateMutability":"payable","type":"function"}]
|
||||||
1
mev_inspect/abis/0x/IMetaTransactionsFeature.json
Normal file
1
mev_inspect/abis/0x/IMetaTransactionsFeature.json
Normal file
File diff suppressed because one or more lines are too long
1
mev_inspect/abis/0x/IMultiplexFeature.json
Normal file
1
mev_inspect/abis/0x/IMultiplexFeature.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"inputs":[{"internalType":"contract IERC20TokenV06","name":"outputToken","type":"address"},{"components":[{"internalType":"enum IMultiplexFeature.MultiplexSubcall","name":"id","type":"uint8"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct IMultiplexFeature.BatchSellSubcall[]","name":"calls","type":"tuple[]"},{"internalType":"uint256","name":"minBuyAmount","type":"uint256"}],"name":"multiplexBatchSellEthForToken","outputs":[{"internalType":"uint256","name":"boughtAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"contract IERC20TokenV06","name":"inputToken","type":"address"},{"components":[{"internalType":"enum IMultiplexFeature.MultiplexSubcall","name":"id","type":"uint8"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct IMultiplexFeature.BatchSellSubcall[]","name":"calls","type":"tuple[]"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"minBuyAmount","type":"uint256"}],"name":"multiplexBatchSellTokenForEth","outputs":[{"internalType":"uint256","name":"boughtAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20TokenV06","name":"inputToken","type":"address"},{"internalType":"contract IERC20TokenV06","name":"outputToken","type":"address"},{"components":[{"internalType":"enum IMultiplexFeature.MultiplexSubcall","name":"id","type":"uint8"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct IMultiplexFeature.BatchSellSubcall[]","name":"calls","type":"tuple[]"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"minBuyAmount","type":"uint256"}],"name":"multiplexBatchSellTokenForToken","outputs":[{"internalType":"uint256","name":"boughtAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum IMultiplexFeature.MultiplexSubcall","name":"id","type":"uint8"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct IMultiplexFeature.MultiHopSellSubcall[]","name":"calls","type":"tuple[]"},{"internalType":"uint256","name":"minBuyAmount","type":"uint256"}],"name":"multiplexMultiHopSellEthForToken","outputs":[{"internalType":"uint256","name":"boughtAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum IMultiplexFeature.MultiplexSubcall","name":"id","type":"uint8"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct IMultiplexFeature.MultiHopSellSubcall[]","name":"calls","type":"tuple[]"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"minBuyAmount","type":"uint256"}],"name":"multiplexMultiHopSellTokenForEth","outputs":[{"internalType":"uint256","name":"boughtAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum IMultiplexFeature.MultiplexSubcall","name":"id","type":"uint8"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct IMultiplexFeature.MultiHopSellSubcall[]","name":"calls","type":"tuple[]"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"minBuyAmount","type":"uint256"}],"name":"multiplexMultiHopSellTokenForToken","outputs":[{"internalType":"uint256","name":"boughtAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]
|
||||||
1
mev_inspect/abis/0x/INativeOrdersFeature.json
Normal file
1
mev_inspect/abis/0x/INativeOrdersFeature.json
Normal file
File diff suppressed because one or more lines are too long
1
mev_inspect/abis/0x/IOtcOrdersFeature.json
Normal file
1
mev_inspect/abis/0x/IOtcOrdersFeature.json
Normal file
File diff suppressed because one or more lines are too long
1
mev_inspect/abis/0x/IOwnableFeature.json
Normal file
1
mev_inspect/abis/0x/IOwnableFeature.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"address","name":"migrator","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"Migrated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"address","name":"newOwner","type":"address"}],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"ownerAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
|
||||||
1
mev_inspect/abis/0x/IPancakeSwapFeature.json
Normal file
1
mev_inspect/abis/0x/IPancakeSwapFeature.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"inputs":[{"internalType":"contract IERC20TokenV06[]","name":"tokens","type":"address[]"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"minBuyAmount","type":"uint256"},{"internalType":"enum IPancakeSwapFeature.ProtocolFork","name":"fork","type":"uint8"}],"name":"sellToPancakeSwap","outputs":[{"internalType":"uint256","name":"buyAmount","type":"uint256"}],"stateMutability":"payable","type":"function"}]
|
||||||
1
mev_inspect/abis/0x/ISimpleFunctionRegistryFeature.json
Normal file
1
mev_inspect/abis/0x/ISimpleFunctionRegistryFeature.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes4","name":"selector","type":"bytes4"},{"indexed":false,"internalType":"address","name":"oldImpl","type":"address"},{"indexed":false,"internalType":"address","name":"newImpl","type":"address"}],"name":"ProxyFunctionUpdated","type":"event"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"},{"internalType":"address","name":"impl","type":"address"}],"name":"extend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"},{"internalType":"uint256","name":"idx","type":"uint256"}],"name":"getRollbackEntryAtIndex","outputs":[{"internalType":"address","name":"impl","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getRollbackLength","outputs":[{"internalType":"uint256","name":"rollbackLength","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"},{"internalType":"address","name":"targetImpl","type":"address"}],"name":"rollback","outputs":[],"stateMutability":"nonpayable","type":"function"}]
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
[{"inputs":[],"name":"testFn","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function"}]
|
||||||
1
mev_inspect/abis/0x/ITokenSpenderFeature.json
Normal file
1
mev_inspect/abis/0x/ITokenSpenderFeature.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"inputs":[{"internalType":"contract IERC20TokenV06","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_spendERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllowanceTarget","outputs":[{"internalType":"address","name":"target","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20TokenV06","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"getSpendableERC20BalanceOf","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"}]
|
||||||
1
mev_inspect/abis/0x/ITransformERC20Feature.json
Normal file
1
mev_inspect/abis/0x/ITransformERC20Feature.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"quoteSigner","type":"address"}],"name":"QuoteSignerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"taker","type":"address"},{"indexed":false,"internalType":"address","name":"inputToken","type":"address"},{"indexed":false,"internalType":"address","name":"outputToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"inputTokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"outputTokenAmount","type":"uint256"}],"name":"TransformedERC20","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"transformerDeployer","type":"address"}],"name":"TransformerDeployerUpdated","type":"event"},{"inputs":[{"components":[{"internalType":"address payable","name":"taker","type":"address"},{"internalType":"contract IERC20TokenV06","name":"inputToken","type":"address"},{"internalType":"contract IERC20TokenV06","name":"outputToken","type":"address"},{"internalType":"uint256","name":"inputTokenAmount","type":"uint256"},{"internalType":"uint256","name":"minOutputTokenAmount","type":"uint256"},{"components":[{"internalType":"uint32","name":"deploymentNonce","type":"uint32"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct ITransformERC20Feature.Transformation[]","name":"transformations","type":"tuple[]"},{"internalType":"bool","name":"useSelfBalance","type":"bool"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ITransformERC20Feature.TransformERC20Args","name":"args","type":"tuple"}],"name":"_transformERC20","outputs":[{"internalType":"uint256","name":"outputTokenAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"createTransformWallet","outputs":[{"internalType":"contract IFlashWallet","name":"wallet","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getQuoteSigner","outputs":[{"internalType":"address","name":"signer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTransformWallet","outputs":[{"internalType":"contract IFlashWallet","name":"wallet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTransformerDeployer","outputs":[{"internalType":"address","name":"deployer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"quoteSigner","type":"address"}],"name":"setQuoteSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"transformerDeployer","type":"address"}],"name":"setTransformerDeployer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20TokenV06","name":"inputToken","type":"address"},{"internalType":"contract IERC20TokenV06","name":"outputToken","type":"address"},{"internalType":"uint256","name":"inputTokenAmount","type":"uint256"},{"internalType":"uint256","name":"minOutputTokenAmount","type":"uint256"},{"components":[{"internalType":"uint32","name":"deploymentNonce","type":"uint32"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct ITransformERC20Feature.Transformation[]","name":"transformations","type":"tuple[]"}],"name":"transformERC20","outputs":[{"internalType":"uint256","name":"outputTokenAmount","type":"uint256"}],"stateMutability":"payable","type":"function"}]
|
||||||
1
mev_inspect/abis/0x/IUniswapFeature.json
Normal file
1
mev_inspect/abis/0x/IUniswapFeature.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"inputs":[{"internalType":"contract IERC20TokenV06[]","name":"tokens","type":"address[]"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"minBuyAmount","type":"uint256"},{"internalType":"bool","name":"isSushi","type":"bool"}],"name":"sellToUniswap","outputs":[{"internalType":"uint256","name":"buyAmount","type":"uint256"}],"stateMutability":"payable","type":"function"}]
|
||||||
1
mev_inspect/abis/0x/IUniswapV3Feature.json
Normal file
1
mev_inspect/abis/0x/IUniswapV3Feature.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"inputs":[{"internalType":"bytes","name":"encodedPath","type":"bytes"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"minBuyAmount","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"_sellHeldTokenForTokenToUniswapV3","outputs":[{"internalType":"uint256","name":"buyAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"encodedPath","type":"bytes"},{"internalType":"uint256","name":"minBuyAmount","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"sellEthForTokenToUniswapV3","outputs":[{"internalType":"uint256","name":"buyAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"encodedPath","type":"bytes"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"minBuyAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"name":"sellTokenForEthToUniswapV3","outputs":[{"internalType":"uint256","name":"buyAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"encodedPath","type":"bytes"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"minBuyAmount","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"sellTokenForTokenToUniswapV3","outputs":[{"internalType":"uint256","name":"buyAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"amount0Delta","type":"int256"},{"internalType":"int256","name":"amount1Delta","type":"int256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"uniswapV3SwapCallback","outputs":[],"stateMutability":"nonpayable","type":"function"}]
|
||||||
1
mev_inspect/abis/0x/affiliateFeeTransformer.json
Normal file
1
mev_inspect/abis/0x/affiliateFeeTransformer.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"inputs":[],"name":"deployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"ethRecipient","type":"address"}],"name":"die","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address payable","name":"sender","type":"address"},{"internalType":"address payable","name":"taker","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct IERC20Transformer.TransformContext","name":"context","type":"tuple"}],"name":"transform","outputs":[{"internalType":"bytes4","name":"success","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"}]
|
||||||
1
mev_inspect/abis/0x/devUtils.json
Normal file
1
mev_inspect/abis/0x/devUtils.json
Normal file
File diff suppressed because one or more lines are too long
1
mev_inspect/abis/0x/erc20BridgeSampler.json
Normal file
1
mev_inspect/abis/0x/erc20BridgeSampler.json
Normal file
File diff suppressed because one or more lines are too long
1
mev_inspect/abis/0x/etherToken.json
Normal file
1
mev_inspect/abis/0x/etherToken.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"guy","type":"address"},{"name":"wad","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"src","type":"address"},{"name":"dst","type":"address"},{"name":"wad","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"wad","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"dst","type":"address"},{"name":"wad","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"src","type":"address"},{"indexed":true,"name":"guy","type":"address"},{"indexed":false,"name":"wad","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"src","type":"address"},{"indexed":true,"name":"dst","type":"address"},{"indexed":false,"name":"wad","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"dst","type":"address"},{"indexed":false,"name":"wad","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"src","type":"address"},{"indexed":false,"name":"wad","type":"uint256"}],"name":"Withdrawal","type":"event"}]
|
||||||
1
mev_inspect/abis/0x/exchangeProxy.json
Normal file
1
mev_inspect/abis/0x/exchangeProxy.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getFunctionImplementation","outputs":[{"internalType":"address","name":"impl","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
|
||||||
1
mev_inspect/abis/0x/exchangeProxyAllowanceTarget.json
Normal file
1
mev_inspect/abis/0x/exchangeProxyAllowanceTarget.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"AuthorizedAddressAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"AuthorizedAddressRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"addAuthorizedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"authorities","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"target","type":"address"},{"internalType":"bytes","name":"callData","type":"bytes"}],"name":"executeCall","outputs":[{"internalType":"bytes","name":"resultData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAuthorizedAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"removeAuthorizedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"removeAuthorizedAddressAtIndex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
|
||||||
1
mev_inspect/abis/0x/exchangeProxyFlashWallet.json
Normal file
1
mev_inspect/abis/0x/exchangeProxyFlashWallet.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address payable","name":"target","type":"address"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"executeCall","outputs":[{"internalType":"bytes","name":"resultData","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"target","type":"address"},{"internalType":"bytes","name":"callData","type":"bytes"}],"name":"executeDelegateCall","outputs":[{"internalType":"bytes","name":"resultData","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"success","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"success","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"hasSupport","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"tokenFallback","outputs":[],"stateMutability":"pure","type":"function"},{"stateMutability":"payable","type":"receive"}]
|
||||||
1
mev_inspect/abis/0x/exchangeProxyGovernor.json
Normal file
1
mev_inspect/abis/0x/exchangeProxyGovernor.json
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
|||||||
|
[{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"provider","type":"address"},{"internalType":"address","name":"outputToken","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"minBuyAmount","type":"uint256"},{"internalType":"bytes","name":"auxiliaryData","type":"bytes"}],"name":"executeSellEthForToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"provider","type":"address"},{"internalType":"address","name":"inputToken","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"minBuyAmount","type":"uint256"},{"internalType":"bytes","name":"auxiliaryData","type":"bytes"}],"name":"executeSellTokenForEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"provider","type":"address"},{"internalType":"address","name":"inputToken","type":"address"},{"internalType":"address","name":"outputToken","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"minBuyAmount","type":"uint256"},{"internalType":"bytes","name":"auxiliaryData","type":"bytes"}],"name":"executeSellTokenForToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
[{"inputs":[{"internalType":"address[]","name":"initialAuthorities","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"AuthorizedAddressAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"AuthorizedAddressRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"deployedAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"Deployed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"Killed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"addAuthorizedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"authorities","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"bytecode","type":"bytes"}],"name":"deploy","outputs":[{"internalType":"address","name":"deployedAddress","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getAuthorizedAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IKillable","name":"target","type":"address"},{"internalType":"address payable","name":"ethRecipient","type":"address"}],"name":"kill","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"removeAuthorizedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"removeAuthorizedAddressAtIndex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"toDeploymentNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
|
||||||
1
mev_inspect/abis/0x/fillQuoteTransformer.json
Normal file
1
mev_inspect/abis/0x/fillQuoteTransformer.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"inputs":[{"internalType":"contract IExchange","name":"exchange_","type":"address"},{"internalType":"contract IBridgeAdapter","name":"bridgeAdapter_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"ProtocolFeeUnfunded","type":"event"},{"inputs":[],"name":"bridgeAdapter","outputs":[{"internalType":"contract IBridgeAdapter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"ethRecipient","type":"address"}],"name":"die","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"erc20Proxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exchange","outputs":[{"internalType":"contract IExchange","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address payable","name":"sender","type":"address"},{"internalType":"address payable","name":"taker","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct IERC20Transformer.TransformContext","name":"context","type":"tuple"}],"name":"transform","outputs":[{"internalType":"bytes4","name":"success","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"}]
|
||||||
1
mev_inspect/abis/0x/payTakerTransformer.json
Normal file
1
mev_inspect/abis/0x/payTakerTransformer.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"deployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"ethRecipient","type":"address"}],"name":"die","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address payable","name":"sender","type":"address"},{"internalType":"address payable","name":"taker","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct IERC20Transformer.TransformContext","name":"context","type":"tuple"}],"name":"transform","outputs":[{"internalType":"bytes4","name":"success","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"}]
|
||||||
1
mev_inspect/abis/0x/staking.json
Normal file
1
mev_inspect/abis/0x/staking.json
Normal file
File diff suppressed because one or more lines are too long
1
mev_inspect/abis/0x/stakingProxy.json
Normal file
1
mev_inspect/abis/0x/stakingProxy.json
Normal file
File diff suppressed because one or more lines are too long
1
mev_inspect/abis/0x/wethTransformer.json
Normal file
1
mev_inspect/abis/0x/wethTransformer.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"inputs":[{"internalType":"contract IEtherTokenV06","name":"weth_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"deployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"ethRecipient","type":"address"}],"name":"die","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address payable","name":"sender","type":"address"},{"internalType":"address payable","name":"taker","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct IERC20Transformer.TransformContext","name":"context","type":"tuple"}],"name":"transform","outputs":[{"internalType":"bytes4","name":"success","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"contract IEtherTokenV06","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
|
||||||
1
mev_inspect/abis/0x/zrxToken.json
Normal file
1
mev_inspect/abis/0x/zrxToken.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Approval","type":"event"}]
|
||||||
1
mev_inspect/abis/0x/zrxVault.json
Normal file
1
mev_inspect/abis/0x/zrxVault.json
Normal file
File diff suppressed because one or more lines are too long
1
mev_inspect/abis/ERC20.json
Normal file
1
mev_inspect/abis/ERC20.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
|
||||||
25
mev_inspect/abis/IUniswapV3FlashCallback.json
Normal file
25
mev_inspect/abis/IUniswapV3FlashCallback.json
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "fee0",
|
||||||
|
"type": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "fee1",
|
||||||
|
"type": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"internalType": "bytes",
|
||||||
|
"name": "data",
|
||||||
|
"type": "bytes"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "uniswapV3FlashCallback",
|
||||||
|
"outputs": [],
|
||||||
|
"stateMutability": "nonpayable",
|
||||||
|
"type": "function"
|
||||||
|
}
|
||||||
|
]
|
||||||
1
mev_inspect/abis/IUniswapV3MintCallback.json
Normal file
1
mev_inspect/abis/IUniswapV3MintCallback.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"inputs":[{"internalType":"uint256","name":"amount0Owed","type":"uint256"},{"internalType":"uint256","name":"amount1Owed","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"uniswapV3MintCallback","outputs":[],"stateMutability":"nonpayable","type":"function"}]
|
||||||
1
mev_inspect/abis/IUniswapV3SwapCallback.json
Normal file
1
mev_inspect/abis/IUniswapV3SwapCallback.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"inputs":[{"internalType":"int256","name":"amount0Delta","type":"int256"},{"internalType":"int256","name":"amount1Delta","type":"int256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"uniswapV3SwapCallback","outputs":[],"stateMutability":"nonpayable","type":"function"}]
|
||||||
1
mev_inspect/abis/UniswapV2Pair.json
Normal file
1
mev_inspect/abis/UniswapV2Pair.json
Normal file
File diff suppressed because one or more lines are too long
1
mev_inspect/abis/UniswapV3Pool.json
Normal file
1
mev_inspect/abis/UniswapV3Pool.json
Normal file
File diff suppressed because one or more lines are too long
1
mev_inspect/abis/aave/AaveLendingPool.json
Normal file
1
mev_inspect/abis/aave/AaveLendingPool.json
Normal file
File diff suppressed because one or more lines are too long
1
mev_inspect/abis/balancer_v1/BPool.json
Normal file
1
mev_inspect/abis/balancer_v1/BPool.json
Normal file
File diff suppressed because one or more lines are too long
1
mev_inspect/abis/balancer_v1/ExchangeProxy.json
Normal file
1
mev_inspect/abis/balancer_v1/ExchangeProxy.json
Normal file
File diff suppressed because one or more lines are too long
1
mev_inspect/abis/curve/CurveTokenV1.json
Normal file
1
mev_inspect/abis/curve/CurveTokenV1.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"name":"Transfer","inputs":[{"type":"address","name":"_from","indexed":true},{"type":"address","name":"_to","indexed":true},{"type":"uint256","name":"_value","indexed":false}],"anonymous":false,"type":"event"},{"name":"Approval","inputs":[{"type":"address","name":"_owner","indexed":true},{"type":"address","name":"_spender","indexed":true},{"type":"uint256","name":"_value","indexed":false}],"anonymous":false,"type":"event"},{"outputs":[],"inputs":[{"type":"string","name":"_name"},{"type":"string","name":"_symbol"},{"type":"uint256","name":"_decimals"},{"type":"uint256","name":"_supply"}],"constant":false,"payable":false,"type":"constructor"},{"name":"set_minter","outputs":[],"inputs":[{"type":"address","name":"_minter"}],"constant":false,"payable":false,"type":"function","gas":36247},{"name":"totalSupply","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1181},{"name":"allowance","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"address","name":"_owner"},{"type":"address","name":"_spender"}],"constant":true,"payable":false,"type":"function","gas":1519},{"name":"transfer","outputs":[{"type":"bool","name":"out"}],"inputs":[{"type":"address","name":"_to"},{"type":"uint256","name":"_value"}],"constant":false,"payable":false,"type":"function","gas":74802},{"name":"transferFrom","outputs":[{"type":"bool","name":"out"}],"inputs":[{"type":"address","name":"_from"},{"type":"address","name":"_to"},{"type":"uint256","name":"_value"}],"constant":false,"payable":false,"type":"function","gas":111953},{"name":"approve","outputs":[{"type":"bool","name":"out"}],"inputs":[{"type":"address","name":"_spender"},{"type":"uint256","name":"_value"}],"constant":false,"payable":false,"type":"function","gas":39012},{"name":"mint","outputs":[],"inputs":[{"type":"address","name":"_to"},{"type":"uint256","name":"_value"}],"constant":false,"payable":false,"type":"function","gas":75733},{"name":"burn","outputs":[],"inputs":[{"type":"uint256","name":"_value"}],"constant":false,"payable":false,"type":"function","gas":76623},{"name":"burnFrom","outputs":[],"inputs":[{"type":"address","name":"_to"},{"type":"uint256","name":"_value"}],"constant":false,"payable":false,"type":"function","gas":76696},{"name":"name","outputs":[{"type":"string","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":7853},{"name":"symbol","outputs":[{"type":"string","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":6906},{"name":"decimals","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1511},{"name":"balanceOf","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"address","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":1695}]
|
||||||
1
mev_inspect/abis/curve/CurveTokenV2.json
Normal file
1
mev_inspect/abis/curve/CurveTokenV2.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"name":"Transfer","inputs":[{"type":"address","name":"_from","indexed":true},{"type":"address","name":"_to","indexed":true},{"type":"uint256","name":"_value","indexed":false}],"anonymous":false,"type":"event"},{"name":"Approval","inputs":[{"type":"address","name":"_owner","indexed":true},{"type":"address","name":"_spender","indexed":true},{"type":"uint256","name":"_value","indexed":false}],"anonymous":false,"type":"event"},{"outputs":[],"inputs":[{"type":"string","name":"_name"},{"type":"string","name":"_symbol"},{"type":"uint256","name":"_decimals"},{"type":"uint256","name":"_supply"}],"stateMutability":"nonpayable","type":"constructor"},{"name":"set_minter","outputs":[],"inputs":[{"type":"address","name":"_minter"}],"stateMutability":"nonpayable","type":"function","gas":36247},{"name":"set_name","outputs":[],"inputs":[{"type":"string","name":"_name"},{"type":"string","name":"_symbol"}],"stateMutability":"nonpayable","type":"function","gas":178069},{"name":"totalSupply","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1211},{"name":"allowance","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"_owner"},{"type":"address","name":"_spender"}],"stateMutability":"view","type":"function","gas":1549},{"name":"transfer","outputs":[{"type":"bool","name":""}],"inputs":[{"type":"address","name":"_to"},{"type":"uint256","name":"_value"}],"stateMutability":"nonpayable","type":"function","gas":74832},{"name":"transferFrom","outputs":[{"type":"bool","name":""}],"inputs":[{"type":"address","name":"_from"},{"type":"address","name":"_to"},{"type":"uint256","name":"_value"}],"stateMutability":"nonpayable","type":"function","gas":111983},{"name":"approve","outputs":[{"type":"bool","name":""}],"inputs":[{"type":"address","name":"_spender"},{"type":"uint256","name":"_value"}],"stateMutability":"nonpayable","type":"function","gas":39078},{"name":"mint","outputs":[{"type":"bool","name":""}],"inputs":[{"type":"address","name":"_to"},{"type":"uint256","name":"_value"}],"stateMutability":"nonpayable","type":"function","gas":75808},{"name":"burnFrom","outputs":[{"type":"bool","name":""}],"inputs":[{"type":"address","name":"_to"},{"type":"uint256","name":"_value"}],"stateMutability":"nonpayable","type":"function","gas":75826},{"name":"name","outputs":[{"type":"string","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":7823},{"name":"symbol","outputs":[{"type":"string","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":6876},{"name":"decimals","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1481},{"name":"balanceOf","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":1665}]
|
||||||
1
mev_inspect/abis/curve/CurveTokenV3.json
Normal file
1
mev_inspect/abis/curve/CurveTokenV3.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"name":"Transfer","inputs":[{"type":"address","name":"_from","indexed":true},{"type":"address","name":"_to","indexed":true},{"type":"uint256","name":"_value","indexed":false}],"anonymous":false,"type":"event"},{"name":"Approval","inputs":[{"type":"address","name":"_owner","indexed":true},{"type":"address","name":"_spender","indexed":true},{"type":"uint256","name":"_value","indexed":false}],"anonymous":false,"type":"event"},{"outputs":[],"inputs":[{"type":"string","name":"_name"},{"type":"string","name":"_symbol"},{"type":"uint256","name":"_decimals"},{"type":"uint256","name":"_supply"}],"constant":false,"payable":false,"type":"constructor"},{"name":"set_minter","outputs":[],"inputs":[{"type":"address","name":"_minter"}],"constant":false,"payable":false,"type":"function","gas":36247},{"name":"totalSupply","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1181},{"name":"allowance","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"address","name":"_owner"},{"type":"address","name":"_spender"}],"constant":true,"payable":false,"type":"function","gas":1519},{"name":"transfer","outputs":[{"type":"bool","name":"out"}],"inputs":[{"type":"address","name":"_to"},{"type":"uint256","name":"_value"}],"constant":false,"payable":false,"type":"function","gas":74802},{"name":"transferFrom","outputs":[{"type":"bool","name":"out"}],"inputs":[{"type":"address","name":"_from"},{"type":"address","name":"_to"},{"type":"uint256","name":"_value"}],"constant":false,"payable":false,"type":"function","gas":111953},{"name":"approve","outputs":[{"type":"bool","name":"out"}],"inputs":[{"type":"address","name":"_spender"},{"type":"uint256","name":"_value"}],"constant":false,"payable":false,"type":"function","gas":39012},{"name":"mint","outputs":[],"inputs":[{"type":"address","name":"_to"},{"type":"uint256","name":"_value"}],"constant":false,"payable":false,"type":"function","gas":75733},{"name":"burn","outputs":[],"inputs":[{"type":"uint256","name":"_value"}],"constant":false,"payable":false,"type":"function","gas":76623},{"name":"burnFrom","outputs":[],"inputs":[{"type":"address","name":"_to"},{"type":"uint256","name":"_value"}],"constant":false,"payable":false,"type":"function","gas":76696},{"name":"name","outputs":[{"type":"string","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":7853},{"name":"symbol","outputs":[{"type":"string","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":6906},{"name":"decimals","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1511},{"name":"balanceOf","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"address","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":1695}]
|
||||||
1
mev_inspect/abis/curve/CurveTokenV4.json
Normal file
1
mev_inspect/abis/curve/CurveTokenV4.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"name":"Transfer","inputs":[{"name":"_from","type":"address","indexed":true},{"name":"_to","type":"address","indexed":true},{"name":"_value","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Approval","inputs":[{"name":"_owner","type":"address","indexed":true},{"name":"_spender","type":"address","indexed":true},{"name":"_value","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetName","inputs":[{"name":"old_name","type":"string","indexed":false},{"name":"old_symbol","type":"string","indexed":false},{"name":"name","type":"string","indexed":false},{"name":"symbol","type":"string","indexed":false},{"name":"owner","type":"address","indexed":false},{"name":"time","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":288},{"stateMutability":"nonpayable","type":"function","name":"transfer","inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}],"gas":77340},{"stateMutability":"nonpayable","type":"function","name":"transferFrom","inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}],"gas":115282},{"stateMutability":"nonpayable","type":"function","name":"approve","inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}],"gas":37821},{"stateMutability":"nonpayable","type":"function","name":"increaseAllowance","inputs":[{"name":"_spender","type":"address"},{"name":"_added_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}],"gas":40365},{"stateMutability":"nonpayable","type":"function","name":"decreaseAllowance","inputs":[{"name":"_spender","type":"address"},{"name":"_subtracted_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}],"gas":40389},{"stateMutability":"nonpayable","type":"function","name":"mint","inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}],"gas":79579},{"stateMutability":"nonpayable","type":"function","name":"mint_relative","inputs":[{"name":"_to","type":"address"},{"name":"frac","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":79983},{"stateMutability":"nonpayable","type":"function","name":"burnFrom","inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}],"gas":79627},{"stateMutability":"nonpayable","type":"function","name":"set_minter","inputs":[{"name":"_minter","type":"address"}],"outputs":[],"gas":37815},{"stateMutability":"nonpayable","type":"function","name":"set_name","inputs":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"}],"outputs":[],"gas":226002},{"stateMutability":"view","type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string"}],"gas":13020},{"stateMutability":"view","type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string"}],"gas":10773},{"stateMutability":"view","type":"function","name":"balanceOf","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":2993},{"stateMutability":"view","type":"function","name":"allowance","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3238},{"stateMutability":"view","type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":2838},{"stateMutability":"view","type":"function","name":"minter","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":2868}]
|
||||||
1
mev_inspect/abis/curve/DepositBUSD.json
Normal file
1
mev_inspect/abis/curve/DepositBUSD.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"outputs":[],"inputs":[{"type":"address[4]","name":"_coins"},{"type":"address[4]","name":"_underlying_coins"},{"type":"address","name":"_curve"},{"type":"address","name":"_token"}],"constant":false,"payable":false,"type":"constructor"},{"name":"add_liquidity","outputs":[],"inputs":[{"type":"uint256[4]","name":"uamounts"},{"type":"uint256","name":"min_mint_amount"}],"constant":false,"payable":false,"type":"function","gas":164560},{"name":"remove_liquidity","outputs":[],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[4]","name":"min_uamounts"}],"constant":false,"payable":false,"type":"function","gas":99521},{"name":"remove_liquidity_imbalance","outputs":[],"inputs":[{"type":"uint256[4]","name":"uamounts"},{"type":"uint256","name":"max_burn_amount"}],"constant":false,"payable":false,"type":"function","gas":120148},{"name":"calc_withdraw_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"}],"constant":true,"payable":false,"type":"function","gas":3881601},{"name":"remove_liquidity_one_coin","outputs":[],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"min_uamount"}],"constant":false,"payable":false,"type":"function"},{"name":"remove_liquidity_one_coin","outputs":[],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"min_uamount"},{"type":"bool","name":"donate_dust"}],"constant":false,"payable":false,"type":"function"},{"name":"withdraw_donated_dust","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":63973},{"name":"coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":1680},{"name":"underlying_coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":1710},{"name":"curve","outputs":[{"type":"address","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1541},{"name":"token","outputs":[{"type":"address","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1571}]
|
||||||
1
mev_inspect/abis/curve/DepositCompound.json
Normal file
1
mev_inspect/abis/curve/DepositCompound.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"outputs":[],"inputs":[{"type":"address[2]","name":"_coins"},{"type":"address[2]","name":"_underlying_coins"},{"type":"address","name":"_curve"},{"type":"address","name":"_token"}],"constant":false,"payable":false,"type":"constructor"},{"name":"add_liquidity","outputs":[],"inputs":[{"type":"uint256[2]","name":"uamounts"},{"type":"uint256","name":"min_mint_amount"}],"constant":false,"payable":false,"type":"function","gas":117283},{"name":"remove_liquidity","outputs":[],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[2]","name":"min_uamounts"}],"constant":false,"payable":false,"type":"function","gas":83606},{"name":"remove_liquidity_imbalance","outputs":[],"inputs":[{"type":"uint256[2]","name":"uamounts"},{"type":"uint256","name":"max_burn_amount"}],"constant":false,"payable":false,"type":"function","gas":96829},{"name":"calc_withdraw_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"}],"constant":true,"payable":false,"type":"function","gas":2945630},{"name":"remove_liquidity_one_coin","outputs":[],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"min_uamount"}],"constant":false,"payable":false,"type":"function"},{"name":"remove_liquidity_one_coin","outputs":[],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"min_uamount"},{"type":"bool","name":"donate_dust"}],"constant":false,"payable":false,"type":"function"},{"name":"withdraw_donated_dust","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":63973},{"name":"coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":1680},{"name":"underlying_coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":1710},{"name":"curve","outputs":[{"type":"address","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1541},{"name":"token","outputs":[{"type":"address","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1571}]
|
||||||
1
mev_inspect/abis/curve/DepositDUSD.json
Normal file
1
mev_inspect/abis/curve/DepositDUSD.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"outputs":[],"inputs":[{"type":"address","name":"_pool"},{"type":"address","name":"_token"}],"stateMutability":"nonpayable","type":"constructor"},{"name":"add_liquidity","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"min_mint_amount"}],"stateMutability":"nonpayable","type":"function","gas":34073},{"name":"remove_liquidity","outputs":[{"type":"uint256[4]","name":""}],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[4]","name":"min_amounts"}],"stateMutability":"nonpayable","type":"function","gas":32919},{"name":"remove_liquidity_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"_min_amount"}],"stateMutability":"nonpayable","type":"function","gas":14467},{"name":"remove_liquidity_imbalance","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"max_burn_amount"}],"stateMutability":"nonpayable","type":"function","gas":38200},{"name":"calc_withdraw_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"}],"stateMutability":"view","type":"function","gas":3147},{"name":"calc_token_amount","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"bool","name":"is_deposit"}],"stateMutability":"view","type":"function","gas":4414},{"name":"pool","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1241},{"name":"token","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1271},{"name":"base_pool","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1301},{"name":"coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1440},{"name":"base_coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1470}]
|
||||||
1
mev_inspect/abis/curve/DepositGUSD.json
Normal file
1
mev_inspect/abis/curve/DepositGUSD.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"outputs":[],"inputs":[{"type":"address","name":"_pool"},{"type":"address","name":"_token"}],"stateMutability":"nonpayable","type":"constructor"},{"name":"add_liquidity","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"min_mint_amount"}],"stateMutability":"nonpayable","type":"function","gas":34073},{"name":"remove_liquidity","outputs":[{"type":"uint256[4]","name":""}],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[4]","name":"min_amounts"}],"stateMutability":"nonpayable","type":"function","gas":32919},{"name":"remove_liquidity_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"_min_amount"}],"stateMutability":"nonpayable","type":"function","gas":14467},{"name":"remove_liquidity_imbalance","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"max_burn_amount"}],"stateMutability":"nonpayable","type":"function","gas":38200},{"name":"calc_withdraw_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"}],"stateMutability":"view","type":"function","gas":3147},{"name":"calc_token_amount","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"bool","name":"is_deposit"}],"stateMutability":"view","type":"function","gas":4414},{"name":"pool","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1241},{"name":"token","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1271},{"name":"base_pool","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1301},{"name":"coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1440},{"name":"base_coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1470}]
|
||||||
1
mev_inspect/abis/curve/DepositHUSD.json
Normal file
1
mev_inspect/abis/curve/DepositHUSD.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"outputs":[],"inputs":[{"type":"address","name":"_pool"},{"type":"address","name":"_token"}],"stateMutability":"nonpayable","type":"constructor"},{"name":"add_liquidity","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"min_mint_amount"}],"stateMutability":"nonpayable","type":"function","gas":34073},{"name":"remove_liquidity","outputs":[{"type":"uint256[4]","name":""}],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[4]","name":"min_amounts"}],"stateMutability":"nonpayable","type":"function","gas":32919},{"name":"remove_liquidity_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"_min_amount"}],"stateMutability":"nonpayable","type":"function","gas":14467},{"name":"remove_liquidity_imbalance","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"max_burn_amount"}],"stateMutability":"nonpayable","type":"function","gas":38200},{"name":"calc_withdraw_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"}],"stateMutability":"view","type":"function","gas":3147},{"name":"calc_token_amount","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"bool","name":"is_deposit"}],"stateMutability":"view","type":"function","gas":4414},{"name":"pool","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1241},{"name":"token","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1271},{"name":"base_pool","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1301},{"name":"coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1440},{"name":"base_coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1470}]
|
||||||
1
mev_inspect/abis/curve/DepositLinkUSD.json
Normal file
1
mev_inspect/abis/curve/DepositLinkUSD.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"outputs":[],"inputs":[{"type":"address","name":"_pool"},{"type":"address","name":"_token"}],"stateMutability":"nonpayable","type":"constructor"},{"name":"add_liquidity","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"min_mint_amount"}],"stateMutability":"nonpayable","type":"function","gas":34073},{"name":"remove_liquidity","outputs":[{"type":"uint256[4]","name":""}],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[4]","name":"min_amounts"}],"stateMutability":"nonpayable","type":"function","gas":32919},{"name":"remove_liquidity_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"_min_amount"}],"stateMutability":"nonpayable","type":"function","gas":14467},{"name":"remove_liquidity_imbalance","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"max_burn_amount"}],"stateMutability":"nonpayable","type":"function","gas":38200},{"name":"calc_withdraw_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"}],"stateMutability":"view","type":"function","gas":3147},{"name":"calc_token_amount","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"bool","name":"is_deposit"}],"stateMutability":"view","type":"function","gas":4414},{"name":"pool","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1241},{"name":"token","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1271},{"name":"base_pool","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1301},{"name":"coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1440},{"name":"base_coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1470}]
|
||||||
1
mev_inspect/abis/curve/DepositMUSD.json
Normal file
1
mev_inspect/abis/curve/DepositMUSD.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"outputs":[],"inputs":[{"type":"address","name":"_pool"},{"type":"address","name":"_token"}],"stateMutability":"nonpayable","type":"constructor"},{"name":"add_liquidity","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"min_mint_amount"}],"stateMutability":"nonpayable","type":"function","gas":34073},{"name":"remove_liquidity","outputs":[{"type":"uint256[4]","name":""}],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[4]","name":"min_amounts"}],"stateMutability":"nonpayable","type":"function","gas":32919},{"name":"remove_liquidity_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"_min_amount"}],"stateMutability":"nonpayable","type":"function","gas":14467},{"name":"remove_liquidity_imbalance","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"max_burn_amount"}],"stateMutability":"nonpayable","type":"function","gas":38200},{"name":"calc_withdraw_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"}],"stateMutability":"view","type":"function","gas":3147},{"name":"calc_token_amount","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"bool","name":"is_deposit"}],"stateMutability":"view","type":"function","gas":4414},{"name":"pool","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1241},{"name":"token","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1271},{"name":"base_pool","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1301},{"name":"coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1440},{"name":"base_coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1470}]
|
||||||
1
mev_inspect/abis/curve/DepositPAX.json
Normal file
1
mev_inspect/abis/curve/DepositPAX.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"outputs":[],"inputs":[{"type":"address[4]","name":"_coins"},{"type":"address[4]","name":"_underlying_coins"},{"type":"address","name":"_curve"},{"type":"address","name":"_token"}],"constant":false,"payable":false,"type":"constructor"},{"name":"add_liquidity","outputs":[],"inputs":[{"type":"uint256[4]","name":"uamounts"},{"type":"uint256","name":"min_mint_amount"}],"constant":false,"payable":false,"type":"function","gas":165036},{"name":"remove_liquidity","outputs":[],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[4]","name":"min_uamounts"}],"constant":false,"payable":false,"type":"function","gas":100343},{"name":"remove_liquidity_imbalance","outputs":[],"inputs":[{"type":"uint256[4]","name":"uamounts"},{"type":"uint256","name":"max_burn_amount"}],"constant":false,"payable":false,"type":"function","gas":121298},{"name":"calc_withdraw_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"}],"constant":true,"payable":false,"type":"function","gas":3881771},{"name":"remove_liquidity_one_coin","outputs":[],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"min_uamount"}],"constant":false,"payable":false,"type":"function"},{"name":"remove_liquidity_one_coin","outputs":[],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"min_uamount"},{"type":"bool","name":"donate_dust"}],"constant":false,"payable":false,"type":"function"},{"name":"withdraw_donated_dust","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":63973},{"name":"coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":1680},{"name":"underlying_coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":1710},{"name":"curve","outputs":[{"type":"address","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1541},{"name":"token","outputs":[{"type":"address","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1571}]
|
||||||
1
mev_inspect/abis/curve/DepositRSV.json
Normal file
1
mev_inspect/abis/curve/DepositRSV.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"outputs":[],"inputs":[{"type":"address","name":"_pool"},{"type":"address","name":"_token"}],"stateMutability":"nonpayable","type":"constructor"},{"name":"add_liquidity","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"min_mint_amount"}],"stateMutability":"nonpayable","type":"function","gas":34073},{"name":"remove_liquidity","outputs":[{"type":"uint256[4]","name":""}],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[4]","name":"min_amounts"}],"stateMutability":"nonpayable","type":"function","gas":32919},{"name":"remove_liquidity_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"_min_amount"}],"stateMutability":"nonpayable","type":"function","gas":14467},{"name":"remove_liquidity_imbalance","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"max_burn_amount"}],"stateMutability":"nonpayable","type":"function","gas":38200},{"name":"calc_withdraw_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"}],"stateMutability":"view","type":"function","gas":3147},{"name":"calc_token_amount","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"bool","name":"is_deposit"}],"stateMutability":"view","type":"function","gas":4414},{"name":"pool","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1241},{"name":"token","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1271},{"name":"base_pool","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1301},{"name":"coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1440},{"name":"base_coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1470}]
|
||||||
1
mev_inspect/abis/curve/DepositTriCrypto.json
Normal file
1
mev_inspect/abis/curve/DepositTriCrypto.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"outputs":[],"inputs":[{"type":"address[4]","name":"_coins"},{"type":"address[4]","name":"_underlying_coins"},{"type":"address","name":"_curve"},{"type":"address","name":"_token"}],"constant":false,"payable":false,"type":"constructor"},{"name":"add_liquidity","outputs":[],"inputs":[{"type":"uint256[4]","name":"uamounts"},{"type":"uint256","name":"min_mint_amount"}],"constant":false,"payable":false,"type":"function","gas":166032},{"name":"remove_liquidity","outputs":[],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[4]","name":"min_uamounts"}],"constant":false,"payable":false,"type":"function","gas":101481},{"name":"remove_liquidity_imbalance","outputs":[],"inputs":[{"type":"uint256[4]","name":"uamounts"},{"type":"uint256","name":"max_burn_amount"}],"constant":false,"payable":false,"type":"function","gas":125088},{"name":"calc_withdraw_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"}],"constant":true,"payable":false,"type":"function","gas":3881771},{"name":"remove_liquidity_one_coin","outputs":[],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"min_uamount"}],"constant":false,"payable":false,"type":"function"},{"name":"remove_liquidity_one_coin","outputs":[],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"min_uamount"},{"type":"bool","name":"donate_dust"}],"constant":false,"payable":false,"type":"function"},{"name":"withdraw_donated_dust","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":63973},{"name":"coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":1680},{"name":"underlying_coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":1710},{"name":"curve","outputs":[{"type":"address","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1541},{"name":"token","outputs":[{"type":"address","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1571}]
|
||||||
1
mev_inspect/abis/curve/DepositUSD.json
Normal file
1
mev_inspect/abis/curve/DepositUSD.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"outputs":[],"inputs":[{"type":"address","name":"_pool"},{"type":"address","name":"_token"}],"stateMutability":"nonpayable","type":"constructor"},{"name":"add_liquidity","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"min_mint_amount"}],"stateMutability":"nonpayable","type":"function","gas":34073},{"name":"remove_liquidity","outputs":[{"type":"uint256[4]","name":""}],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[4]","name":"min_amounts"}],"stateMutability":"nonpayable","type":"function","gas":32919},{"name":"remove_liquidity_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"_min_amount"}],"stateMutability":"nonpayable","type":"function","gas":14467},{"name":"remove_liquidity_imbalance","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"max_burn_mount"}],"stateMutability":"nonpayable","type":"function","gas":38200},{"name":"calc_withdraw_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"}],"stateMutability":"view","type":"function","gas":3147},{"name":"calc_token_amount","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"bool","name":"is_deposit"}],"stateMutability":"view","type":"function","gas":4414},{"name":"pool","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1241},{"name":"token","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1271},{"name":"base_pool","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1301},{"name":"coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1440},{"name":"base_coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1470}]
|
||||||
1
mev_inspect/abis/curve/DepositUSDT.json
Normal file
1
mev_inspect/abis/curve/DepositUSDT.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"outputs":[],"inputs":[{"type":"address[3]","name":"_coins"},{"type":"address[3]","name":"_underlying_coins"},{"type":"address","name":"_curve"},{"type":"address","name":"_token"}],"constant":false,"payable":false,"type":"constructor"},{"name":"add_liquidity","outputs":[],"inputs":[{"type":"uint256[3]","name":"uamounts"},{"type":"uint256","name":"min_mint_amount"}],"constant":false,"payable":false,"type":"function","gas":141657},{"name":"remove_liquidity","outputs":[],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[3]","name":"min_uamounts"}],"constant":false,"payable":false,"type":"function","gas":92544},{"name":"remove_liquidity_imbalance","outputs":[],"inputs":[{"type":"uint256[3]","name":"uamounts"},{"type":"uint256","name":"max_burn_amount"}],"constant":false,"payable":false,"type":"function","gas":110959},{"name":"calc_withdraw_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"}],"constant":true,"payable":false,"type":"function","gas":3413700},{"name":"remove_liquidity_one_coin","outputs":[],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"min_uamount"}],"constant":false,"payable":false,"type":"function"},{"name":"remove_liquidity_one_coin","outputs":[],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"min_uamount"},{"type":"bool","name":"donate_dust"}],"constant":false,"payable":false,"type":"function"},{"name":"withdraw_donated_dust","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":63973},{"name":"coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":1680},{"name":"underlying_coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":1710},{"name":"curve","outputs":[{"type":"address","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1541},{"name":"token","outputs":[{"type":"address","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1571}]
|
||||||
1
mev_inspect/abis/curve/DepositUST.json
Normal file
1
mev_inspect/abis/curve/DepositUST.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"outputs":[],"inputs":[{"type":"address","name":"_pool"},{"type":"address","name":"_token"}],"stateMutability":"nonpayable","type":"constructor"},{"name":"add_liquidity","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"min_mint_amount"}],"stateMutability":"nonpayable","type":"function","gas":34073},{"name":"remove_liquidity","outputs":[{"type":"uint256[4]","name":""}],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[4]","name":"min_amounts"}],"stateMutability":"nonpayable","type":"function","gas":32919},{"name":"remove_liquidity_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"_min_amount"}],"stateMutability":"nonpayable","type":"function","gas":14467},{"name":"remove_liquidity_imbalance","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"max_burn_amount"}],"stateMutability":"nonpayable","type":"function","gas":38200},{"name":"calc_withdraw_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"}],"stateMutability":"view","type":"function","gas":3147},{"name":"calc_token_amount","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"bool","name":"is_deposit"}],"stateMutability":"view","type":"function","gas":4414},{"name":"pool","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1241},{"name":"token","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1271},{"name":"base_pool","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1301},{"name":"coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1440},{"name":"base_coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1470}]
|
||||||
1
mev_inspect/abis/curve/DepositY.json
Normal file
1
mev_inspect/abis/curve/DepositY.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"outputs":[],"inputs":[{"type":"address[4]","name":"_coins"},{"type":"address[4]","name":"_underlying_coins"},{"type":"address","name":"_curve"},{"type":"address","name":"_token"}],"constant":false,"payable":false,"type":"constructor"},{"name":"add_liquidity","outputs":[],"inputs":[{"type":"uint256[4]","name":"uamounts"},{"type":"uint256","name":"min_mint_amount"}],"constant":false,"payable":false,"type":"function","gas":164560},{"name":"remove_liquidity","outputs":[],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[4]","name":"min_uamounts"}],"constant":false,"payable":false,"type":"function","gas":99521},{"name":"remove_liquidity_imbalance","outputs":[],"inputs":[{"type":"uint256[4]","name":"uamounts"},{"type":"uint256","name":"max_burn_amount"}],"constant":false,"payable":false,"type":"function","gas":120148},{"name":"calc_withdraw_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"}],"constant":true,"payable":false,"type":"function","gas":3881601},{"name":"remove_liquidity_one_coin","outputs":[],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"min_uamount"}],"constant":false,"payable":false,"type":"function"},{"name":"remove_liquidity_one_coin","outputs":[],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"min_uamount"},{"type":"bool","name":"donate_dust"}],"constant":false,"payable":false,"type":"function"},{"name":"withdraw_donated_dust","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":63973},{"name":"coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":1680},{"name":"underlying_coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":1710},{"name":"curve","outputs":[{"type":"address","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1541},{"name":"token","outputs":[{"type":"address","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1571}]
|
||||||
1
mev_inspect/abis/curve/DepositbBTC.json
Normal file
1
mev_inspect/abis/curve/DepositbBTC.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"outputs":[],"inputs":[{"type":"address","name":"_pool"},{"type":"address","name":"_token"}],"stateMutability":"nonpayable","type":"constructor"},{"name":"add_liquidity","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"min_mint_amount"}],"stateMutability":"nonpayable","type":"function","gas":31141},{"name":"remove_liquidity","outputs":[{"type":"uint256[4]","name":""}],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[4]","name":"min_amounts"}],"stateMutability":"nonpayable","type":"function","gas":32919},{"name":"remove_liquidity_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"_min_amount"}],"stateMutability":"nonpayable","type":"function","gas":14467},{"name":"remove_liquidity_imbalance","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"max_burn_amount"}],"stateMutability":"nonpayable","type":"function","gas":38200},{"name":"calc_withdraw_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"}],"stateMutability":"view","type":"function","gas":3147},{"name":"calc_token_amount","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"bool","name":"is_deposit"}],"stateMutability":"view","type":"function","gas":4414},{"name":"pool","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1241},{"name":"token","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1271},{"name":"base_pool","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1301},{"name":"coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1440},{"name":"base_coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1470}]
|
||||||
1
mev_inspect/abis/curve/DepositoBTC.json
Normal file
1
mev_inspect/abis/curve/DepositoBTC.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"outputs":[],"inputs":[{"type":"address","name":"_pool"},{"type":"address","name":"_token"}],"stateMutability":"nonpayable","type":"constructor"},{"name":"add_liquidity","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"min_mint_amount"}],"stateMutability":"nonpayable","type":"function","gas":31141},{"name":"remove_liquidity","outputs":[{"type":"uint256[4]","name":""}],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[4]","name":"min_amounts"}],"stateMutability":"nonpayable","type":"function","gas":32919},{"name":"remove_liquidity_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"_min_amount"}],"stateMutability":"nonpayable","type":"function","gas":14467},{"name":"remove_liquidity_imbalance","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"max_burn_amount"}],"stateMutability":"nonpayable","type":"function","gas":38200},{"name":"calc_withdraw_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"}],"stateMutability":"view","type":"function","gas":3147},{"name":"calc_token_amount","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"bool","name":"is_deposit"}],"stateMutability":"view","type":"function","gas":4414},{"name":"pool","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1241},{"name":"token","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1271},{"name":"base_pool","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1301},{"name":"coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1440},{"name":"base_coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1470}]
|
||||||
1
mev_inspect/abis/curve/DepositpBTC.json
Normal file
1
mev_inspect/abis/curve/DepositpBTC.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"outputs":[],"inputs":[{"type":"address","name":"_pool"},{"type":"address","name":"_token"}],"stateMutability":"nonpayable","type":"constructor"},{"name":"add_liquidity","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"min_mint_amount"}],"stateMutability":"nonpayable","type":"function","gas":31141},{"name":"remove_liquidity","outputs":[{"type":"uint256[4]","name":""}],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[4]","name":"min_amounts"}],"stateMutability":"nonpayable","type":"function","gas":32919},{"name":"remove_liquidity_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"_min_amount"}],"stateMutability":"nonpayable","type":"function","gas":14467},{"name":"remove_liquidity_imbalance","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"max_burn_amount"}],"stateMutability":"nonpayable","type":"function","gas":38200},{"name":"calc_withdraw_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"}],"stateMutability":"view","type":"function","gas":3147},{"name":"calc_token_amount","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"bool","name":"is_deposit"}],"stateMutability":"view","type":"function","gas":4414},{"name":"pool","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1241},{"name":"token","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1271},{"name":"base_pool","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1301},{"name":"coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1440},{"name":"base_coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1470}]
|
||||||
1
mev_inspect/abis/curve/DepositsUSD.json
Normal file
1
mev_inspect/abis/curve/DepositsUSD.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"outputs":[],"inputs":[{"type":"address[4]","name":"_coins"},{"type":"address[4]","name":"_underlying_coins"},{"type":"address","name":"_curve"},{"type":"address","name":"_token"}],"constant":false,"payable":false,"type":"constructor"},{"name":"add_liquidity","outputs":[],"inputs":[{"type":"uint256[4]","name":"uamounts"},{"type":"uint256","name":"min_mint_amount"}],"constant":false,"payable":false,"type":"function","gas":166032},{"name":"remove_liquidity","outputs":[],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[4]","name":"min_uamounts"}],"constant":false,"payable":false,"type":"function","gas":101481},{"name":"remove_liquidity_imbalance","outputs":[],"inputs":[{"type":"uint256[4]","name":"uamounts"},{"type":"uint256","name":"max_burn_amount"}],"constant":false,"payable":false,"type":"function","gas":125088},{"name":"calc_withdraw_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"}],"constant":true,"payable":false,"type":"function","gas":3881771},{"name":"remove_liquidity_one_coin","outputs":[],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"min_uamount"}],"constant":false,"payable":false,"type":"function"},{"name":"remove_liquidity_one_coin","outputs":[],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"min_uamount"},{"type":"bool","name":"donate_dust"}],"constant":false,"payable":false,"type":"function"},{"name":"withdraw_donated_dust","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":63973},{"name":"coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":1680},{"name":"underlying_coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":1710},{"name":"curve","outputs":[{"type":"address","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1541},{"name":"token","outputs":[{"type":"address","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1571}]
|
||||||
1
mev_inspect/abis/curve/DeposittBTC.json
Normal file
1
mev_inspect/abis/curve/DeposittBTC.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"outputs":[],"inputs":[{"type":"address","name":"_pool"},{"type":"address","name":"_token"}],"stateMutability":"nonpayable","type":"constructor"},{"name":"add_liquidity","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"min_mint_amount"}],"stateMutability":"nonpayable","type":"function","gas":31141},{"name":"remove_liquidity","outputs":[{"type":"uint256[4]","name":""}],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[4]","name":"min_amounts"}],"stateMutability":"nonpayable","type":"function","gas":32919},{"name":"remove_liquidity_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"_min_amount"}],"stateMutability":"nonpayable","type":"function","gas":14467},{"name":"remove_liquidity_imbalance","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"max_burn_amount"}],"stateMutability":"nonpayable","type":"function","gas":38200},{"name":"calc_withdraw_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"}],"stateMutability":"view","type":"function","gas":3147},{"name":"calc_token_amount","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"bool","name":"is_deposit"}],"stateMutability":"view","type":"function","gas":4414},{"name":"pool","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1241},{"name":"token","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1271},{"name":"base_pool","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1301},{"name":"coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1440},{"name":"base_coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1470}]
|
||||||
1
mev_inspect/abis/curve/StableSwap3Pool.json
Normal file
1
mev_inspect/abis/curve/StableSwap3Pool.json
Normal file
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user