├── docs ├── source │ ├── robots.txt │ ├── index.md │ ├── conf.py │ ├── lowlatencytxnfeed.md │ ├── lowlatencytxnsend.md │ └── legal.md ├── images │ ├── matrixtxnsv4.png │ ├── systemdiagramv2.png │ ├── Jitolabs_Logo_White.png │ └── Jitolabs_Logo_Green.svg ├── requirements.txt ├── Makefile └── make.bat ├── pyproject.toml ├── README.md ├── .github └── workflows │ └── readthedocs.yml ├── .readthedocs.yaml └── .gitignore /docs/source/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Allow: / 3 | 4 | Sitemap: https://docs.jito.wtf/sitemap.xml 5 | -------------------------------------------------------------------------------- /docs/images/matrixtxnsv4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jito-labs/jito-docs/HEAD/docs/images/matrixtxnsv4.png -------------------------------------------------------------------------------- /docs/images/systemdiagramv2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jito-labs/jito-docs/HEAD/docs/images/systemdiagramv2.png -------------------------------------------------------------------------------- /docs/images/Jitolabs_Logo_White.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jito-labs/jito-docs/HEAD/docs/images/Jitolabs_Logo_White.png -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["flit_core >=3.2,<4"] 3 | build-backend = "flit_core.buildapi" 4 | 5 | [project] 6 | name = "Jito Docs" 7 | authors = [{name = "mdr0id", email = "marshall@jito.wtf"}] 8 | dynamic = ["version", "description"] 9 | -------------------------------------------------------------------------------- /docs/requirements.txt: -------------------------------------------------------------------------------- 1 | # Core Sphinx packages 2 | sphinx>=8.1.3 3 | sphinx-rtd-theme>=3.0.1 4 | docutils>=0.20.1 5 | 6 | # Extensions used in conf.py 7 | myst-parser>=4.0.0 8 | sphinx-design>=0.6.1 9 | sphinx-copybutton>=0.5.2 10 | sphinx-tabs>=3.4.7 11 | sphinx-sitemap==2.5.1 12 | 13 | # Dependencies for themes/extensions 14 | Pygments>=2.18.0 15 | Jinja2>=3.1.3 16 | MarkupSafe>=2.1.5 17 | alabaster>=0.7.16 18 | snowballstemmer>=2.2.0 19 | babel>=2.16.0 20 | imagesize>=1.4.1 21 | requests>=2.32.3 22 | packaging>=24.1 23 | -------------------------------------------------------------------------------- /docs/Makefile: -------------------------------------------------------------------------------- 1 | # Minimal makefile for Sphinx documentation 2 | # 3 | 4 | # You can set these variables from the command line, and also 5 | # from the environment for the first two. 6 | SPHINXOPTS ?= 7 | SPHINXBUILD ?= sphinx-build 8 | SOURCEDIR = source 9 | BUILDDIR = build 10 | 11 | # Put it first so that "make" without argument is like "make help". 12 | help: 13 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 14 | 15 | .PHONY: help Makefile 16 | 17 | # Catch-all target: route all unknown targets to Sphinx using the new 18 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). 19 | %: Makefile 20 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Documentation Status](https://readthedocs.org/projects/jito-docs/badge/?version=latest)](https://jito-docs.readthedocs.io/) 2 | ![Version](https://img.shields.io/badge/version-0.1.0-blue) 3 | [![Discord](https://img.shields.io/discord/938287290806042626?label=Discord&logo=discord&style=flat&color=7289DA)](https://discord.gg/jTSmEzaR) 4 | 5 | 6 | 7 | Jito Docs 8 | ======================================= 9 | 10 | This repo contains Jito Labs documentation 11 | 12 | ## Installation 13 | 14 | ``` 15 | pip install sphinx 16 | pip install -r ./docs/requirements.txt 17 | ``` 18 | 19 | ## Build 20 | 21 | ``` 22 | cd ./jito-docs/docs 23 | make clean 24 | make html 25 | firefox build/html/index.html 26 | ``` 27 | 28 | ## CI 29 | This automatically triggers Read the Docs to update that domain every time main has a merge. 30 | 31 | -------------------------------------------------------------------------------- /docs/make.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | pushd %~dp0 4 | 5 | REM Command file for Sphinx documentation 6 | 7 | if "%SPHINXBUILD%" == "" ( 8 | set SPHINXBUILD=sphinx-build 9 | ) 10 | set SOURCEDIR=source 11 | set BUILDDIR=build 12 | 13 | if "%1" == "" goto help 14 | 15 | %SPHINXBUILD% >NUL 2>NUL 16 | if errorlevel 9009 ( 17 | echo. 18 | echo.The 'sphinx-build' command was not found. Make sure you have Sphinx 19 | echo.installed, then set the SPHINXBUILD environment variable to point 20 | echo.to the full path of the 'sphinx-build' executable. Alternatively you 21 | echo.may add the Sphinx directory to PATH. 22 | echo. 23 | echo.If you don't have Sphinx installed, grab it from 24 | echo.http://sphinx-doc.org/ 25 | exit /b 1 26 | ) 27 | 28 | %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% 29 | goto end 30 | 31 | :help 32 | %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% 33 | 34 | :end 35 | popd 36 | -------------------------------------------------------------------------------- /.github/workflows/readthedocs.yml: -------------------------------------------------------------------------------- 1 | name: Build and Deploy Docs 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - name: Checkout repository 14 | uses: actions/checkout@v3 15 | 16 | - name: Set up Python 17 | uses: actions/setup-python@v4 18 | with: 19 | python-version: '3.10' 20 | 21 | - name: Install dependencies 22 | run: | 23 | python -m pip install --upgrade pip 24 | pip install sphinx 25 | pip install -r ./docs/requirements.txt 26 | 27 | - name: Build documentation 28 | run: | 29 | cd docs && make html 30 | 31 | - name: Trigger Read the Docs build 32 | run: | 33 | curl -X POST \ 34 | -H "Authorization: Token ${{ secrets.READTHEDOCS_TOKEN }}" \ 35 | https://readthedocs.org/api/v2/webhook/jito-docs/276813/ 36 | env: 37 | READTHEDOCS_TOKEN: ${{ secrets.READTHEDOCS_TOKEN }} 38 | 39 | -------------------------------------------------------------------------------- /.readthedocs.yaml: -------------------------------------------------------------------------------- 1 | # .readthedocs.yaml 2 | # Read the Docs configuration file 3 | # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details 4 | 5 | # Required 6 | version: 2 7 | 8 | # Set the OS, Python version and other tools you might need 9 | build: 10 | os: ubuntu-22.04 11 | tools: 12 | python: "3.10" 13 | # You can also specify other tool versions: 14 | # nodejs: "19" 15 | # rust: "1.64" 16 | # golang: "1.19" 17 | 18 | # Build documentation in the "docs/" directory with Sphinx 19 | sphinx: 20 | configuration: docs/source/conf.py 21 | builder: dirhtml # Added to ensure HTML build 22 | fail_on_warning: false 23 | 24 | # Optionally build your docs in additional formats such as PDF and ePub 25 | #formats: 26 | # - pdf 27 | #Todo see what versions are breaking in default add on swtich from reat the docs 28 | 29 | # Optional but recommended, declare the Python requirements required 30 | # to build your documentation 31 | # See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html 32 | python: 33 | install: 34 | - requirements: docs/requirements.txt 35 | -------------------------------------------------------------------------------- /docs/source/index.md: -------------------------------------------------------------------------------- 1 | # What is Jito? 2 | Turbocharged Solana trading experience. 3 | 4 | # What does Jito offer? 5 | - **Low latency transaction sending** 6 | - **Low latency blockchain/shred data** 7 | - **Around the clock developer support** 8 | 9 | # Who should use Jito? 10 | - **Solana Validators** 11 | - **Telegram Bots** 12 | - **High Frequency Traders & Searchers** 13 | - **dApps** 14 | 15 | If your use case requires low-latency transaction sending and turbine streaming, MEV protection, and/or cross-transaction 16 | atomicity, then Jito is right for you. 17 | 18 | ## Jito's Products 19 | Jito provides specialized solutions tailored to the needs of Solana MEV users: 20 | - 🌪️ **Fast Transaction Sending:** Essential for any Solana MEV user requiring rapid and reliable transaction execution. 21 | - 💼 **Bundles:** Offers MEV protection, fast transaction landing, support for multiple transactions, and revert protection, making it ideal for developers of Telegram bots and automated trading systems. 22 | - 🧲 **Shredstream:** Ensures minimal latency for receiving shreds to any RPC or validator on the network, saving hundreds of milliseconds during trading on Solana. It also provides a redundant shred path for servers in remote locations, enhancing reliability. 23 | 24 | These use cases offer a competitive edge to traders, bot developers, and anyone seeking MEV protection. 25 | 26 | ```{toctree} 27 | :maxdepth: 6 28 | :hidden: 29 | 30 | ⚡ Low Latency Transaction Send 31 | ➤ Low Latency Block Updates (ShredStream) 32 | ⚖️ Legal 33 | ``` 34 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Created by https://www.toptal.com/developers/gitignore/api/python,jupyternotebooks 3 | # Edit at https://www.toptal.com/developers/gitignore?templates=python,jupyternotebooks 4 | 5 | ### JupyterNotebooks ### 6 | # gitignore template for Jupyter Notebooks 7 | # website: http://jupyter.org/ 8 | 9 | .ipynb_checkpoints 10 | */.ipynb_checkpoints/* 11 | 12 | # IPython 13 | profile_default/ 14 | ipython_config.py 15 | 16 | # Remove previous ipynb_checkpoints 17 | # git rm -r .ipynb_checkpoints/ 18 | 19 | ### Python ### 20 | # Byte-compiled / optimized / DLL files 21 | __pycache__/ 22 | *.py[cod] 23 | *$py.class 24 | 25 | # C extensions 26 | *.so 27 | 28 | # Distribution / packaging 29 | .Python 30 | build/ 31 | develop-eggs/ 32 | dist/ 33 | downloads/ 34 | eggs/ 35 | .eggs/ 36 | lib/ 37 | lib64/ 38 | parts/ 39 | sdist/ 40 | var/ 41 | wheels/ 42 | share/python-wheels/ 43 | *.egg-info/ 44 | .installed.cfg 45 | *.egg 46 | MANIFEST 47 | 48 | # PyInstaller 49 | # Usually these files are written by a python script from a template 50 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 51 | *.manifest 52 | *.spec 53 | 54 | # Installer logs 55 | pip-log.txt 56 | pip-delete-this-directory.txt 57 | 58 | # Unit test / coverage reports 59 | htmlcov/ 60 | .tox/ 61 | .nox/ 62 | .coverage 63 | .coverage.* 64 | .cache 65 | nosetests.xml 66 | coverage.xml 67 | *.cover 68 | *.py,cover 69 | .hypothesis/ 70 | .pytest_cache/ 71 | cover/ 72 | 73 | # Translations 74 | *.mo 75 | *.pot 76 | 77 | # Django stuff: 78 | *.log 79 | local_settings.py 80 | db.sqlite3 81 | db.sqlite3-journal 82 | 83 | # Flask stuff: 84 | instance/ 85 | .webassets-cache 86 | 87 | # Scrapy stuff: 88 | .scrapy 89 | 90 | # Sphinx documentation 91 | docs/_build/ 92 | 93 | # PyBuilder 94 | .pybuilder/ 95 | target/ 96 | 97 | # Jupyter Notebook 98 | 99 | # IPython 100 | 101 | # pyenv 102 | # For a library or package, you might want to ignore these files since the code is 103 | # intended to run in multiple environments; otherwise, check them in: 104 | # .python-version 105 | 106 | # pipenv 107 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 108 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 109 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 110 | # install all needed dependencies. 111 | #Pipfile.lock 112 | 113 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 114 | __pypackages__/ 115 | 116 | # Celery stuff 117 | celerybeat-schedule 118 | celerybeat.pid 119 | 120 | # SageMath parsed files 121 | *.sage.py 122 | 123 | # Environments 124 | .env 125 | .venv 126 | env/ 127 | venv/ 128 | ENV/ 129 | env.bak/ 130 | venv.bak/ 131 | 132 | # Spyder project settings 133 | .spyderproject 134 | .spyproject 135 | 136 | # Rope project settings 137 | .ropeproject 138 | 139 | # mkdocs documentation 140 | /site 141 | 142 | # mypy 143 | .mypy_cache/ 144 | .dmypy.json 145 | dmypy.json 146 | 147 | # Pyre type checker 148 | .pyre/ 149 | 150 | # pytype static type analyzer 151 | .pytype/ 152 | 153 | # Cython debug symbols 154 | cython_debug/ 155 | 156 | # End of https://www.toptal.com/developers/gitignore/api/python,jupyternotebooks 157 | 158 | 159 | .idea/ -------------------------------------------------------------------------------- /docs/source/conf.py: -------------------------------------------------------------------------------- 1 | # Configuration file for the Sphinx documentation builder. 2 | import os 3 | import sys 4 | 5 | # Add source directory to Python path 6 | sys.path.insert(0, os.path.abspath('.')) 7 | 8 | # -- Project information 9 | project = 'Jito Docs' 10 | copyright = '2024, Jito Labs' 11 | author = 'mdr0id' 12 | release = '0.1' 13 | version = '0.1.0' 14 | 15 | # URL settings 16 | set_url = 'https://docs.jito.wtf' 17 | 18 | # -- General configuration 19 | extensions = [ 20 | 'sphinx.ext.duration', 21 | 'sphinx.ext.doctest', 22 | 'sphinx.ext.autodoc', 23 | 'sphinx.ext.autosummary', 24 | 'sphinx.ext.intersphinx', 25 | 'myst_parser', 26 | 'sphinx_design', 27 | 'sphinx_copybutton', 28 | 'sphinx_tabs.tabs', 29 | 'sphinx_sitemap', 30 | 'sphinx_rtd_theme', 31 | ] 32 | 33 | # MyST extensions 34 | myst_enable_extensions = [ 35 | "colon_fence", 36 | "deflist", 37 | "html_admonition", 38 | "html_image", 39 | "smartquotes", 40 | "substitution", 41 | "tasklist", 42 | "attrs_inline", 43 | ] 44 | 45 | # SEO: Enable heading anchors 46 | myst_heading_anchors = 3 47 | 48 | intersphinx_mapping = { 49 | 'python': ('https://docs.python.org/3/', None), 50 | 'sphinx': ('https://www.sphinx-doc.org/en/master/', None), 51 | } 52 | intersphinx_disabled_domains = ['std'] 53 | 54 | # Build settings 55 | exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] 56 | 57 | # Theme settings 58 | html_theme = "sphinx_rtd_theme" 59 | 60 | # Add this line 61 | toc_object_entries = True 62 | toc_object_entries_show_parents = "all" 63 | 64 | html_theme_options = { 65 | 'navigation_depth': 6, 66 | 'collapse_navigation': False, # Don't collapse 67 | 'sticky_navigation': True, 68 | 'titles_only': False, # Show full content 69 | 'includehidden': True, 70 | 'logo_only': True, 71 | 'style_nav_header_background': '#0a0a0a', 72 | } 73 | 74 | # Logo configuration 75 | html_logo = '../images/Jitolabs_Logo_White.png' 76 | html_favicon = '../images/Jitolabs_Logo_White.png' 77 | 78 | # Source configuration 79 | source_suffix = { 80 | '.rst': 'restructuredtext', 81 | '.md': 'markdown' 82 | } 83 | 84 | # Root document settings 85 | root_doc = 'index' 86 | master_doc = 'index' 87 | 88 | # Display settings 89 | html_show_sourcelink = False 90 | html_show_sphinx = False 91 | html_copy_source = False 92 | html_show_copyright = True 93 | 94 | # SEO settings 95 | html_title = "Jito Labs Documentation - High Performance Solana Infrastructure" 96 | html_short_title = "Jito Docs" 97 | html_baseurl = 'https://docs.jito.wtf' 98 | html_use_opensearch = 'https://docs.jito.wtf' 99 | sitemap_url_scheme = "{link}" 100 | 101 | html_context = { 102 | 'description': 'Official documentation for Jito Labs - Solana MEV, Block Engine, and high-performance infrastructure.', 103 | 'keywords': 'solana, jito, mev, block engine, blockchain, trading, infrastructure', 104 | 'og_description': 'Documentation for Jito Labs - High Performance Solana Infrastructure, Block Engine, and MEV Solutions', 105 | 'og_type': 'website', 106 | 'og_image': html_logo, 107 | 'canonical_url': set_url, 108 | } 109 | 110 | # Language settings 111 | language = 'en' 112 | locale_dirs = ['locale/'] 113 | gettext_compact = False 114 | 115 | # Code block settings 116 | pygments_style = 'monokai' 117 | html_codeblock_linenos_style = 'table' 118 | html_scaled_image_link = False 119 | html_last_updated_fmt = '' 120 | 121 | # Basic URL settings 122 | html_link_suffix = '.html' 123 | html_file_suffix = '.html' 124 | html_permalinks = True 125 | html_permalink_builder = True 126 | html_split_index = False 127 | html_absolute_url = True 128 | html_use_index = True 129 | html_domain_indices = True 130 | 131 | # SEO: Search engine directives 132 | html_robots = { 133 | 'index': True, 134 | 'follow': True, 135 | 'Archive': False, 136 | } 137 | 138 | # Important - add this 139 | html_sidebars = { 140 | '**': [ 141 | 'globaltoc.html', 142 | 'searchbox.html' 143 | ] 144 | } -------------------------------------------------------------------------------- /docs/images/Jitolabs_Logo_Green.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/source/lowlatencytxnfeed.md: -------------------------------------------------------------------------------- 1 | # ➤ Low Latency Block Updates (Shredstream) 2 | 3 | Jito's ShredStream service delivers the lowest latency shreds from leaders on the Solana network, optimizing performance for high-frequency trading, validation, and RPC operations. ShredStream ensures minimal latency for receiving shreds, which can save hundreds of milliseconds during trading on Solana—a critical advantage in high-frequency trading environments. Additionally, it provides a redundant shred path for servers in remote locations, enhancing reliability and performance for users operating in less connected regions. This makes ShredStream particularly valuable for traders, validators, and node operators who require the fastest and most reliable data to maintain a competitive edge. 4 | 5 | ## Shreds 6 | 7 | Shreds are fragments of data used in the Solana blockchain to represent parts of transactions before they are assembled into a full block. When a validator processes transactions, it breaks them down into smaller units called shreds. These shreds are distributed across the network to other validators and nodes, which then reassemble them to form complete blocks. 8 | 9 | Shreds help in fast and efficient data propagation, maintaining Solana's high throughput and low latency. They also provide redundancy and fault tolerance, ensuring that even if some data is lost or delayed during transmission, the network can still reconstruct the necessary information. Shreds are crucial for enabling Solana’s rapid block times and overall network performance. 10 | 11 | ## Setup 12 | 13 | ## Jito ShredStream Proxy 14 | 15 | The proxy client connects to the Jito Block Engine and authenticates using the provided keypair. It sends a heartbeat to keep shreds flowing. Received shreds are distributed to all `DEST_IP_PORTS`. We recommend running a proxy instance for each region where you have RPCs. 16 | 17 | ## Preparation 18 | 19 | 1. Get your Solana [public key approved](https://web.miniextensions.com/WV3gZjFwqNqITsMufIEp) 20 | 21 | 2. Ensure your firewall is open. 22 | - Default port for incoming unicast shreds is `20000/udp`. 23 | - NAT connections currently not supported. 24 | - If you use a firewall, see the firewall configuration section 25 | 26 | 3. Find your TVU port 27 | - Run get_tvu_port.sh to find your port 28 | - Example on machine with Solana RPC: 29 | ```bash 30 | export LEDGER_DIR=MY_LEDGER_DIR; bash -c "$(curl -fsSL https://raw.githubusercontent.com/jito-labs/shredstream-proxy/master/scripts/get_tvu_port.sh)" 31 | ``` 32 | - Example on remote machine (port may differ): 33 | ```bash 34 | export HOST=http://1.2.3.4:8899; bash -c "$(curl -fsSL https://raw.githubusercontent.com/jito-labs/shredstream-proxy/master/scripts/get_tvu_port.sh)" 35 | ``` 36 | 37 | 4. Run via docker or natively and set the following parameters 38 | - `BLOCK_ENGINE_URL`: https://mainnet.block-engine.jito.wtf 39 | - `DESIRED_REGIONS`: Comma-delimited regions you want to receive shreds from, maximum of 2 regions, anything in excess will be ignored. [Same regions as for Block Engine](#api) 40 | - `DEST_IP_PORTS`: Comma-delimited IP:Port combinations to receive shreds on 41 | - Note: these examples will receive shreds from `amsterdam` and `ny` regions 42 | 43 | 44 | ### 🦾 Running Natively 45 | 46 | ```bash 47 | git clone https://github.com/jito-labs/shredstream-proxy.git --recurse-submodules 48 | 49 | RUST_LOG=info cargo run --release --bin jito-shredstream-proxy -- shredstream \ 50 | --block-engine-url https://mainnet.block-engine.jito.wtf \ 51 | --auth-keypair my_keypair.json \ 52 | --desired-regions amsterdam,ny \ 53 | --dest-ip-ports 127.0.0.1:8001,10.0.0.1:8001 54 | ``` 55 | 56 | ## Running via Docker 57 | 58 | View logs with `docker logs -f jito-shredstream-proxy` 59 | 60 | ### 🐳 Host Networking (Recommended) 61 | 62 | This exposes all ports, bypassing Docker NAT. 63 | 64 | ```bash 65 | docker run -d \ 66 | --name jito-shredstream-proxy \ 67 | --rm \ 68 | --env RUST_LOG=info \ 69 | --env BLOCK_ENGINE_URL=https://mainnet.block-engine.jito.wtf \ 70 | --env AUTH_KEYPAIR=my_keypair.json \ 71 | --env DESIRED_REGIONS=amsterdam,ny \ 72 | --env DEST_IP_PORTS=127.0.0.1:8001,10.0.0.1:8001 \ 73 | --network host \ 74 | -v $(pwd)/my_keypair.json:/app/my_keypair.json \ 75 | jitolabs/jito-shredstream-proxy shredstream 76 | ``` 77 | 78 | ### 🚝 Bridge Networking 79 | 80 | Use bridge networking in environments where Docker host networking is unavailable. Note: This does **not** work with Multicast. This setup requires manual exposure of `SRC_BIND_PORT`. For shred listeners running locally on the Docker host, use Docker's bridge IP (typically `172.17.0.1`). For non-local endpoints, use their regular IP addresses. Note that Docker's bridge IP can vary, so confirm it by running: `ip -brief address show dev docker0`. 81 | 82 | ```bash 83 | docker run -d \ 84 | --name jito-shredstream-proxy \ 85 | --rm \ 86 | --env RUST_LOG=info \ 87 | --env BLOCK_ENGINE_URL=https://mainnet.block-engine.jito.wtf \ 88 | --env AUTH_KEYPAIR=my_keypair.json \ 89 | --env DESIRED_REGIONS=amsterdam,ny \ 90 | --env SRC_BIND_PORT=20000 \ 91 | --env DEST_IP_PORTS=172.17.0.1:8001,10.0.0.1:8001 \ 92 | --network bridge \ 93 | -p 20000:20000/udp \ 94 | -v $(pwd)/my_keypair.json:/app/my_keypair.json \ 95 | jitolabs/jito-shredstream-proxy shredstream 96 | ``` 97 | 98 | 99 | ### DoubleZero Multicast Setup (Coming Soon!) 100 | 101 | - Multicast shreds are sent over `20001/udp`. 102 | - Note: this does **not** work with Docker bridge networking 103 | 104 | 1. Install DoubleZero CLI: https://docs.malbeclabs.com/setup/#steps 105 | 2. Get authorization from DoubleZero (todo!) 106 | 3. Connect to Shredstream multicast group 107 | 108 | `doublezero connect multicast subscriber jito-shredstream-mainnet` 109 | 4. Verify shreds are being received 110 | 111 | ```bash 112 | IP=$(doublezero multicast group list --json | jq -r '.[] | select(.code|startswith("jito-shredstream-mainnet")) | .multicast_ip') 113 | socat UDP4-RECVFROM:20001,ip-add-membership=${IP}:doublezero1 - 114 | ``` 115 | 5. Start Shredstream Proxy using native or host networking mode (**not** bridge networking), grepping the logs for `Multicast` 116 | 117 | ### Decoding Shreds 118 | 119 | Decoding shreds lets you access transactions without running a full Solana node. Add `GRPC_SERVICE_PORT=` environment variable or `--grpc-service-port ` arg to start the gRPC server which streams out transactions to gRPC clients. See the [Entry type](https://github.com/jito-labs/mev-protos/blob/master/shredstream.proto#L48) of the protobuf for more details. A sample client implementation is available in the [deshred](https://github.com/jito-labs/shredstream-proxy/blob/master/examples/deshred.rs) example. 120 | 121 | ### 📛 Firewall Configuration 122 | 123 | If you use a firewall, allow access to the following IPs: 124 | 125 | | Location | IP Addresses | 126 | |---------------------|---------------------------------------------------------------------------------------------------------------------------------------| 127 | | 🇳🇱 Amsterdam | `74.118.140.240`, `202.8.8.174`, `64.130.42.228`, `64.130.43.92`, `64.130.55.26`, `64.130.42.227`, `64.130.43.19`, `64.130.55.28` | 128 | | 🇮🇪 Dublin | `64.130.61.138`, `64.130.61.139`, `64.130.61.140` | 129 | | 🇩🇪 Frankfurt | `64.130.50.14`, `64.130.57.46`, `64.130.40.25`, `64.130.57.99`, `64.130.57.171`, `64.130.40.23`, `64.130.40.22`, `64.130.40.21` | 130 | | 🇬🇧 London | `142.91.127.175`, `64.130.46.71`, `64.130.63.195`, `64.130.46.72`, `64.130.63.196`, `64.130.46.73` | 131 | | 🇺🇸 New York | `141.98.216.96`, `64.130.51.60`, `64.130.34.186`, `64.130.34.143`, `64.130.34.142`, `64.130.34.189`, `64.130.34.190`, `64.130.34.141` | 132 | | 🇺🇸 Salt Lake City | `64.130.53.8`, `64.130.53.57`, `64.130.53.81`, `64.130.53.90`, `64.130.53.82`, `64.130.33.181`, `64.130.33.88` | 133 | | 🇸🇬 Singapore | `202.8.11.224`, `202.8.11.173`, `202.8.11.102`, `202.8.11.103`, `202.8.11.104` | 134 | | 🇯🇵 Tokyo | `202.8.9.160`, `202.8.9.19`, `202.8.9.22`, `64.130.49.109`, `208.91.109.102` | 135 | 136 | ## Troubleshooting 137 | 1. Confirm shreds are reaching your server by inspecting packet flow (default `SRC_BIND_PORT` is `20000`, adjust accordingly): 138 | ```bash 139 | sudo tcpdump 'udp and dst port 20000' 140 | ``` 141 | You should see many shreds of ~1200 bytes being received. 142 | 143 | 2. Ensure your firewall allows UDP packets on your `SRC_BIND_PORT` 144 | 145 | 3. Ensure your RPC is receiving shreds by configuring the `SOLANA_METRICS_CONFIG` in your systemd unit/startup script. Refer to [Solana Clusters Documentation](https://docs.solana.com/clusters) for details. 146 | To verify, query the number of packets received by your RPC before and after configuring ShredStream in InfluxDB: 147 | ```sql 148 | SELECT shred_count FROM "shred_fetch" WHERE time > now() - 1h 149 | ``` 150 | -------------------------------------------------------------------------------- /docs/source/lowlatencytxnsend.md: -------------------------------------------------------------------------------- 1 | # ⚡ Low Latency Transaction Send 2 | 3 | Jito provides Solana MEV users with superior transaction execution through fast landing, MEV protection, and revert protection, available for both single transactions and multiple transactions(bundles) via gRPC and JSON-RPC services, ensuring optimal performance in the highly competitive Solana ecosystem." 4 | :::{figure} ../images/matrixtxnsv4.png 5 | :class: diagram 6 | ::: 7 | 8 | --- 9 | 10 | ## System Overview 11 | 12 | :::{figure} ../images/systemdiagramv2.png 13 | :class: diagram 14 | ::: 15 | 16 | ### 🌐 How does the system work? 17 | - Validators run a modified Agave validator client called Jito-Solana that enables higher value capture for them and their stakers 18 | - The validator then connects to the Jito Block-Engine 19 | - The Block-Engine submits profitable bundles to the validator 20 | - Searchers, dApps, Telegram bots and others connect to the Block-Engine and submit transactions & bundles. 21 | - Submissions can be over gRPC or JSON-RPC 22 | - Bundles have tips bids associated with them; these bids are then redistributed to the validators and their stakers 23 | 24 | ### 💼 What are bundles? 25 | - Bundles are groups of transactions (max 5) bundled together 26 | - The transactions are executed sequentially and atomically meaning all-or-nothing 27 | - Bundles enable complex MEV strategies like atomic arbitrage 28 | - Bundles compete against other bundles on tips to the validator 29 | 30 | ### 📬 How do Bundles work? 31 | - Traders submit bundle to block engines 32 | - Block engines simulate bundles to determine the most profitable combinations 33 | - Winning bundles are sent to validators to include in blocks 34 | - Validators execute bundles atomically and collect tips 35 | - MEV rewards from bundles are distributed to validators and stakers 36 | 37 | ### ⚖️ What is the auction? 38 | - Bundles submitted by traders are put through a priority auction 39 | - An auction is needed since opportunities and blockspace are scarce 40 | - The auction creates a stream of bundles that maximizes tips in a block. 41 | Parallelism in locking patterns is leveraged where possible to allow for local state auctions. 42 | - Parallel auctions are run at 50ms ticks 43 | - Bundles with intersecting locking patterns on a particular account [(w, w) or (r, w) or (w, r)] are run in a single auction. 44 | - Bundles that do not touch the same accounts are run in separate auctions, as well as bundles that have non-intersecting locking patterns (r, r) on accounts. 45 | - Bundle orderings within a single auction are prioritized in the auction based on requested tip/cus-requested efficiency. 46 | - Jito submits the highest paying combination of bundles to the validator up to some CU limit 47 | 48 | --- 49 | 50 | (api)= 51 | ## API 52 | You can send JSON-RPC requests to any Block Engine using the following URLs. To route to a specific region, specify the desired region: 53 | 54 | | Location | Block Engine URL | Shred Receiver | NTP Server | 55 | |-------------------------|---------------------------------------------------|-----------------------|--------------------------| 56 | | 🌍 🌎 🌏 **Mainnet** | `https://mainnet.block-engine.jito.wtf` | - | - | 57 | | 🇳🇱 **Amsterdam** | `https://amsterdam.mainnet.block-engine.jito.wtf` | `74.118.140.240:1002` | `ntp.amsterdam.jito.wtf` | 58 | | 🇮🇪 **Dublin** | `https://dublin.mainnet.block-engine.jito.wtf` | `64.130.61.8:1002` | `ntp.dublin.jito.wtf` | 59 | | 🇩🇪 **Frankfurt** | `https://frankfurt.mainnet.block-engine.jito.wtf` | `64.130.50.14:1002` | `ntp.frankfurt.jito.wtf` | 60 | | 🇬🇧 **London** | `https://london.mainnet.block-engine.jito.wtf` | `142.91.127.175:1002` | `ntp.london.jito.wtf` | 61 | | 🇺🇸 **New York** | `https://ny.mainnet.block-engine.jito.wtf` | `141.98.216.96:1002` | `ntp.dallas.jito.wtf` | 62 | | 🇺🇸 **Salt Lake City** | `https://slc.mainnet.block-engine.jito.wtf` | `64.130.53.8:1002` | `ntp.slc.jito.wtf` | 63 | | 🇸🇬 **Singapore** | `https://singapore.mainnet.block-engine.jito.wtf` | `202.8.11.224:1002` | `ntp.singapore.jito.wtf` | 64 | | 🇯🇵 **Tokyo** | `https://tokyo.mainnet.block-engine.jito.wtf` | `202.8.9.160:1002` | `ntp.tokyo.jito.wtf` | 65 | | | 66 | | 🌍 🌎 🌏 **Testnet** | `https://testnet.block-engine.jito.wtf` | - | - | 67 | | 🇺🇸 **Dallas** | `https://dallas.testnet.block-engine.jito.wtf` | `141.98.218.12:1002` | `ntp.dallas.jito.wtf` | 68 | | 🇺🇸 **New York** | `https://ny.testnet.block-engine.jito.wtf` | `64.130.35.224:1002` | `ntp.dallas.jito.wtf` | 69 | 70 | 71 | ### 📨 Transactions(`/api/v1/transactions`) 72 | 73 | For single transaction-related methods, use the URL path `/api/v1/transactions` 74 | 75 | For example: `https://mainnet.block-engine.jito.wtf/api/v1/transactions` 76 | 77 | #### sendTransaction 78 | 79 | This method acts as a direct proxy to the Solana sendTransaction RPC method, but forwards your transaction directly to the validator. By default, it submits the transaction with providing MEV protection. 80 | 81 | Please note that Jito enforces a minimum tip of 1000 lamports for bundles. During high-demand periods, this minimum tip might not be sufficient to successfully navigate the auction, so it’s crucial to set both a priority fee and an additional Jito tip to optimize your transaction's chances. Please see [Tip Amounts](#tip-amount) 82 | 83 | For cost efficiency, you can enable revert protection by setting the query parameter bundleOnly=true. With this setting, the transaction is sent exclusively as a single transaction bundle. 84 | 85 | Additionally, this method always sets skip_preflight=true, which means the transaction won't be simulated in the RPC before being sent to the leader. 86 | 87 | ##### Request 88 | 89 | | Parameter | Type | Description | 90 | |------------|--------|-------------------------------------------------------------------------------------------------------------------------------------------------| 91 | | `params` | string | **REQUIRED**: First Transaction Signature embedded in the transaction, as base64 (**recommended**) or base58 (slow, DEPRECATED) encoded string. | 92 | | `encoding` | string | **OPTIONAL**: Encoding used for the transaction data. Values: `base64` (**recommended**) or `base58` (slow, DEPRECATED). Default: `base58` | 93 | 94 | ##### Transaction Request Example base64 95 | ```bash 96 | curl https://mainnet.block-engine.jito.wtf/api/v1/transactions -X POST -H "Content-Type: application/json" -d ' 97 | { 98 | "id": 1, 99 | "jsonrpc": "2.0", 100 | "method": "sendTransaction", 101 | "params": [ 102 | "AVXo5X7UNzpuOmYzkZ+fqHDGiRLTSMlWlUCcZKzEV5CIKlrdvZa3/2GrJJfPrXgZqJbYDaGiOnP99tI/sRJfiwwBAAEDRQ/n5E5CLbMbHanUG3+iVvBAWZu0WFM6NoB5xfybQ7kNwwgfIhv6odn2qTUu/gOisDtaeCW1qlwW/gx3ccr/4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvsInicc+E3IZzLqeA+iM5cn9kSaeFzOuClz1Z2kZQy0BAgIAAQwCAAAAAPIFKgEAAAA=", 103 | { 104 | "encoding": "base64" 105 | } 106 | ] 107 | }' 108 | ``` 109 | 110 | ##### Transaction Request Example base58 111 | Note: base58 has been deprecated. 112 | ```bash 113 | curl https://mainnet.block-engine.jito.wtf/api/v1/transactions -X POST -H "Content-Type: application/json" -d ' 114 | { 115 | "jsonrpc": "2.0", 116 | "id": 1, 117 | "method": "sendTransaction", 118 | "params": [ 119 | "4hXTCkRzt9WyecNzV1XPgCDfGAZzQKNxLXgynz5QDuWWPSAZBZSHptvWRL3BjCvzUXRdKvHL2b7yGrRQcWyaqsaBCncVG7BFggS8w9snUts67BSh3EqKpXLUm5UMHfD7ZBe9GhARjbNQMLJ1QD3Spr6oMTBU6EhdB4RD8CP2xUxr2u3d6fos36PD98XS6oX8TQjLpsMwncs5DAMiD4nNnR8NBfyghGCWvCVifVwvA8B8TJxE1aiyiv2L429BCWfyzAme5sZW8rDb14NeCQHhZbtNqfXhcp2tAnaAT", 120 | { 121 | "encoding": "base58" 122 | } 123 | ] 124 | }' 125 | ``` 126 | 127 | 128 | ##### Response 129 | 130 | | Field | Type | Description | 131 | |----------|--------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| 132 | | `result` | string | The result will be the same as described in the [Solana RPC documentation](https://solana.com/docs/rpc/http/sendtransaction). If sending as a bundle was successful, you can get the `bundle_id` from the `x-bundle-id` HTTP header in the response. | 133 | 134 | ##### Response Example 135 | 136 | ```json 137 | { 138 | "jsonrpc": "2.0", 139 | "result": "2id3YC2jK9G5Wo2phDx4gJVAew8DcY5NAojnVuao8rkxwPYPe8cSwE5GzhEgJA2y8fVjDEo6iR6ykBvDxrTQrtpb", 140 | "id": 1 141 | } 142 | ``` 143 | 144 | #### JSON-RPC Authentication (UUID): 145 | 146 | Please include the following when authenticating with a URL using a UUID: 147 | 148 | Header Field: Include the API key in the x-jito-auth header. 149 | 150 | Example: x-jito-auth: 151 | 152 | Query Parameter: Include the API key as a query parameter. 153 | 154 | Example: api/v1/transactions?uuid= 155 | 156 | ### 💼 Bundles (`/api/v1`) 157 | 158 | Bundles are a list of up to 5 transactions that execute sequentially and atomically, ensuring an all-or-nothing outcome. Here’s what that means: 159 | 160 | - **Sequentially:** Transactions in a bundle are guaranteed to execute in the order they are listed. 161 | - **Atomically:** Bundles execute within the same slot(e.g. a bundle cannot cross slot boundaries). If the entire bundle executes successfully, all transactions are committed to the chain. 162 | - **All-or-Nothing:** Bundles can only contain successful transactions. If any transaction in a bundle fails, none of the transactions in the bundle will be committed to the chain. 163 | 164 | This guarantees that all transactions in a bundle are executed in sequence and either all succeed or none are executed. 165 | 166 | Below is the documentation to see the available JSON-RPC endpoints for bundles. 167 | 168 | #### sendBundle 169 | 170 | Submits a bundled list of signed transactions to the cluster for processing. The transactions are atomically processed in order, meaning if any transaction fails, the entire bundle is rejected (all or nothing). This method relays the bundle created by clients to the leader without any modifications. If the bundle is set to expire after the next Jito-Solana leader, this method immediately returns a success response with a `bundle_id`, indicating the bundle has been received. This does not guarantee the bundle will be processed or land on-chain. To check the bundle status, use `getBundleStatuses` with the `bundle_id`. 171 | 172 | A tip is necessary for the bundle to be considered. The tip can be any instruction, top-level or CPI, that transfers SOL to one of the 8 tip accounts. Clients should ensure they have sufficient balance and state assertions allowing the tip to go through conditionally, especially if tipping as a separate transaction. If the tip is too low, the bundle might not be selected during the auction. Use `getTipAccounts` to retrieve the tip accounts. Ideally, select one of the accounts at random to reduce contention. 173 | 174 | ##### Request 175 | 176 | | Parameter | Type | | Description | 177 | |------------|---------------|:--|-----------------------------------------------------------------------------------------------------------------------------------------------| 178 | | `params` | array[string] | | **REQUIRED**: Fully-signed transactions, as base64 (**recommended**) or base58 (slow, DEPRECATED) encoded strings. Maximum of 5 transactions. | 179 | | `encoding` | string | | **OPTIONAL**: Encoding used for the transaction data. Values: `base64` (**recommended**) or `base58` (slow, DEPRECATED). Default: `base58` | 180 | 181 | ##### Bundle Request Example base64 182 | 183 | ```bash 184 | curl https://mainnet.block-engine.jito.wtf:443/api/v1/bundles -X POST -H "Content-Type: application/json" -d ' 185 | { 186 | "jsonrpc": "2.0", 187 | "id": 1, 188 | "method": "sendBundle", 189 | "params": [ 190 | [ 191 | "AT2AqtlokikUWgGNnSX5xrmdvBjSaiIPxvFz6zc5Abn5Z0CPFW5GO+Y3rXceLnqLgQFnGw0yTk3NtJdFNsbrwwQBAAIEsXPDJ9cMVbpFQYClVM7PGLh8JOfCD6E2vz5VNmBCF+p4Uhyxec67hYm1VqLV7JTSSYaC/fm7KvWtZOSRzEFT2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUpTWpkpIQZNJOhxYNo4fHw1td28kruB5B+oQEEFRI1i3Wzl2VfewCI8oYXParnP78725sKFzYheTEn8v865YQIDABhqaXRvIGJ1bmRsZSAwOiBqaXRvIHRlc3QCAgABDAIAAACghgEAAAAAAA==", 192 | "AS6fOZuGDsmyYdd+RC0fiFUgNe1BYTOYT+1hkRXHAeroC8R60h3g34EPF5Ys8sGzVBMP9MDSTVgy1/SSTqpCtA4BAAIEsXPDJ9cMVbpFQYClVM7PGLh8JOfCD6E2vz5VNmBCF+p4Uhyxec67hYm1VqLV7JTSSYaC/fm7KvWtZOSRzEFT2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUpTWpkpIQZNJOhxYNo4fHw1td28kruB5B+oQEEFRI1i3Wzl2VfewCI8oYXParnP78725sKFzYheTEn8v865YQIDABhqaXRvIGJ1bmRsZSAxOiBqaXRvIHRlc3QCAgABDAIAAACghgEAAAAAAA==", 193 | "AZBed/TbhHt8WTUbfdT9Ibi8vr9ZpPCPtav8HIUrlDaqqKOLuJldEPpb899WvnfrCm4Qtq7i/MNLDTde1sHVYwEBAAIEsXPDJ9cMVbpFQYClVM7PGLh8JOfCD6E2vz5VNmBCF+p4Uhyxec67hYm1VqLV7JTSSYaC/fm7KvWtZOSRzEFT2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUpTWpkpIQZNJOhxYNo4fHw1td28kruB5B+oQEEFRI1i3Wzl2VfewCI8oYXParnP78725sKFzYheTEn8v865YQIDABhqaXRvIGJ1bmRsZSAyOiBqaXRvIHRlc3QCAgABDAIAAACghgEAAAAAAA==", 194 | "AbS0zOISjAjVgUqs+bBh8x93oNOBzVcBnwicjyXhKLJ6E0/EPi+HbLcBN1u/87Kf4nNS+PoK3lLmhHtLjTyyDw0BAAIEsXPDJ9cMVbpFQYClVM7PGLh8JOfCD6E2vz5VNmBCF+p4Uhyxec67hYm1VqLV7JTSSYaC/fm7KvWtZOSRzEFT2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUpTWpkpIQZNJOhxYNo4fHw1td28kruB5B+oQEEFRI1i3Wzl2VfewCI8oYXParnP78725sKFzYheTEn8v865YQIDABhqaXRvIGJ1bmRsZSAzOiBqaXRvIHRlc3QCAgABDAIAAACghgEAAAAAAA==", 195 | "AVfm3snz2ZU2xJlj4tBYLNKfuNUC57NgV+ci/2eL4vUJt+NfstiUY+m1kriNMtDXhiBf28wR6WKVuoLkuiegNQABAAIEsXPDJ9cMVbpFQYClVM7PGLh8JOfCD6E2vz5VNmBCF+p4Uhyxec67hYm1VqLV7JTSSYaC/fm7KvWtZOSRzEFT2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUpTWpkpIQZNJOhxYNo4fHw1td28kruB5B+oQEEFRI1i3Wzl2VfewCI8oYXParnP78725sKFzYheTEn8v865YQIDABhqaXRvIGJ1bmRsZSA0OiBqaXRvIHRlc3QCAgABDAIAAACghgEAAAAAAA==" 196 | ], 197 | { 198 | "encoding": "base64" 199 | } 200 | ] 201 | }' 202 | ``` 203 | 204 | ##### Bundle Request Example base58 205 | Note: base58 has been deprecated. 206 | ```bash 207 | curl https://mainnet.block-engine.jito.wtf:443/api/v1/bundles -X POST -H "Content-Type: application/json" -d '{ 208 | "id": 1, 209 | "jsonrpc": "2.0", 210 | "method": "sendBundle", 211 | "params": [ 212 | [ 213 | "cJYHEz2xsUFC9VmqzCRwyxkrDCC5Nqhvah9JsE8DgMCgv6ni962uUZXUtTXFFztZn84VL6fjzNgUi7TKVurCnRqsSUguapRZx1sA31s1WeZi6P5mPmXfWjcfsuznP7RgGvR9XZupBFiDkXsGDYzXPQAa2eFp3jeDKsoPv1xaoytYc4RbvGYBT5QL51hnEzMATM5p8iyPRoMdCQ3cevp3fJCMEjgCx2S8FqJK7kPYTnNQdcDtws1DUNbtopAqizWCEHsz3PjEPu2RpdjZ7YC54notbnYtKJPopxxxrVBQLWY5qvH2aC7RX7GFoA8VXLBphiNGvd1MajN4ZmEiqeAJ4qtuBgSF57E5U1jRzWFwXBCdEh3yexLby", 214 | "aeaPo2r9aVrAQkPNeirT8q4FztexTVdUmHFahkKVfHhskk2KktPQ8WSX11qHQY33RNNRf1bjLX8BinduWGwRLwYtiLyUmNKREhmnvaoWa9L4EAZTBJYX2kLAW2MUfzLKMY37XNGPTLep9MAQd6nhDYcCzWgjVdkNqsnWDTHwMJ6wwMAvKAk9PtqFFNzNgyYZfH1uXpmjhn2QdH6XLXkEjyQJRrzXczAqKt1ExCL1vbreoV4AbBnZ2A7iuLD1W885SzU4X1QbSj3jkFpufx4LooNPaiCbMYB2KgAkrvAMefGU3DjbiXPQoQ3ndaU4aZsg5nGGjn4fQEyhpcqxpDRjqpXJ4bgBHpjrdWR24rfxMU1AFLy6v6mPV", 215 | "mWwGZR3dp1HEXpaJV5JbGXtfG7nXVEvRNxWiEgMd87TM39WCG5EECUS8ziZSbUMQ1xj3sgA2En4eQybkNm5cvU2cW3uoZQis4CdgbiAsCCVsY9CVmJMbUZXR1xqLCYzxfbWVUDzdThAA2FuNTYc9w77HMb5hDJJe5oFvJhZUc6o9FCWEn8eeWqLePkXu8oQ6L1K2D5meSAwWQPebTBQ7MSugreyZ2aHzzdj89JDc9BgnEMRFkkAGc9cEphUTPnJ72HtHnrqEUpL9KF45ucKb5VpC6vSnKSzjtJS3dMP9jH7737zv5bu3eZuT9hBRfxrnamuChFrC52guv3dMZzi2mUd5jG86DZYzNcdWu8Kziv1zdgfUkb3So", 216 | "qZGgsJFUiVj8mdLBw9NPqsKvzmxGbZ4EP4dLx63hdL8bCWZ7sWQgtLKCYqzBsz4YUos2cxFVvMP2ApzgNzu5vHnJnovpoP4iv8CoehP7teJyfrZ9nfNALyx2aQwoSA7dwLtdSviAsTWhHpEd1gHw7XHPVAuRAdtZjNuJn1C2Ep3Fe5X6DWaa1wEwd83xFjJAkJZYFDZpeqv7k2c6Un3uxzbrBD4bJRyeU1J5Hja5DovpNR1bq8gcK7YEgP7Sub1mU8yfDuC7wYVS1zt9T3Z1uTHLt3zhMuobJ4Z1YMWfwGHwJPRvAUksMxpTYKq62JpRkyLB6ZmCRXToTuXTAPAQ5FHgEfMB9E7ZFFhCdU6Rm6tmdFZ7nAdE7", 217 | "fEnXrjSsBwCFkGZQbiZXMpY5pCKkdJocEU7iYtF6tkoHxi8Eeq9wi1qLxj6KiYPwR7HW8Wymx26i7Fz96M7Ss32T5HtuK4JqEzdCXsSrmWDUMaCmyKEdCVV5AvuixZpsAYARQp6ok2sGkdhKPPaLUQnvhsuCM3cbXsCACxy79V9eF3KzT6dPanjanr9N2K6z8AeAAC7q3jMRMqAr8z9spkcoqAhGYAKNBqTWQXPMGnmae5Jvc3KN6Wrdjw68bNzfhKAV5wR7SMGScdn8d4XQf9rWMXPA2W5dcQNCXgkk7jCDYdrjGMgx7f82fAifkfnWT3AtSmVf6KCP9CWCtMPvY2BRadctWBJ8rJV9qyMsUkxKQRZaRJBkK" 218 | ], 219 | { 220 | "encoding": "base58" 221 | } 222 | ] 223 | }' 224 | ``` 225 | 226 | ##### Response 227 | 228 | | Field | Type | Description | 229 | |----------|--------|------------------------------------------------------------------------------------------------------------| 230 | | `result` | string | A bundle ID, used to identify the bundle. This is the SHA-256 hash of the bundle's transaction signatures. | 231 | 232 | ##### Response Example 233 | 234 | ```json 235 | { 236 | "jsonrpc": "2.0", 237 | "result": "2id3YC2jK9G5Wo2phDx4gJVAew8DcY5NAojnVuao8rkxwPYPe8cSwE5GzhEgJA2y8fVjDEo6iR6ykBvDxrTQrtpb", 238 | "id": 1 239 | } 240 | ``` 241 | 242 | #### getBundleStatuses 243 | 244 | Returns the status of submitted bundle(s). This function operates similarly to the Solana RPC method `getSignatureStatuses`. If a `bundle_id` is not found or has not landed, it returns `null`. If found and processed, it returns context information including the slot at which the request was made and results with the `bundle_id(s)` and the transactions along with their slot and confirmation status. 245 | 246 | We use `getSignatureStatuses` with the default value of `searchTransactionHistory` set to `false` to check transaction statuses on-chain. This means the RPC call will search only its recent history, including all recent slots plus up to `MAX_RECENT_BLOCKHASHES` rooted slots for the transactions. Currently, `MAX_RECENT_BLOCKHASHES` is 300. 247 | 248 | ##### Request 249 | 250 | | Parameter | Type | Description | 251 | |-----------|---------------|----------------------------------------------------------------| 252 | | `params` | array[string] | **REQUIRED**: An array of bundle IDs to confirm. Maximum of 5. | 253 | 254 | ##### Request Example 255 | 256 | ```bash 257 | curl https://mainnet.block-engine.jito.wtf/api/v1/getBundleStatuses -X POST -H "Content-Type: application/json" -d ' 258 | { 259 | "jsonrpc": "2.0", 260 | "id": 1, 261 | "method": "getBundleStatuses", 262 | "params": [ 263 | [ 264 | "892b79ed49138bfb3aa5441f0df6e06ef34f9ee8f3976c15b323605bae0cf51d" 265 | ] 266 | ] 267 | } 268 | ' 269 | ``` 270 | 271 | ##### Response 272 | 273 | | Field | Type | Description | 274 | |----------|--------|------------------------------------------------------------------------| 275 | | `null` | null | If the bundle is not found. | 276 | | `object` | object | If the bundle is found, an array of objects with the following fields: | 277 | 278 | ###### Object Fields 279 | 280 | - **bundle_id**: `string` 281 | - Bundle ID 282 | 283 | - **transactions**: `array[string]` 284 | - A list of base-58 encoded signatures applied by the bundle. The list will not be empty. 285 | 286 | - **slot**: `u64` 287 | - The slot this bundle was processed in. 288 | 289 | - **confirmationStatus**: `string` 290 | - The bundle transaction's cluster confirmation status; either `processed`, `confirmed`, or `finalized`. See Commitment for more on optimistic confirmation. 291 | 292 | - **err**: `object` 293 | - This will show any retryable or non-retryable error encountered when getting the bundle status. If retryable, please query again. 294 | 295 | ##### Response Example 296 | 297 | ```json 298 | { 299 | "jsonrpc": "2.0", 300 | "result": { 301 | "context": { 302 | "slot": 242806119 303 | }, 304 | "value": [ 305 | { 306 | "bundle_id": "892b79ed49138bfb3aa5441f0df6e06ef34f9ee8f3976c15b323605bae0cf51d", 307 | "transactions": [ 308 | "3bC2M9fiACSjkTXZDgeNAuQ4ScTsdKGwR42ytFdhUvikqTmBheUxfsR1fDVsM5ADCMMspuwGkdm1uKbU246x5aE3", 309 | "8t9hKYEYNbLvNqiSzP96S13XF1C2f1ro271Kdf7bkZ6EpjPLuDff1ywRy4gfaGSTubsM2FeYGDoT64ZwPm1cQUt" 310 | ], 311 | "slot": 242804011, 312 | "confirmation_status": "finalized", 313 | "err": { 314 | "Ok": null 315 | } 316 | } 317 | ] 318 | }, 319 | "id": 1 320 | } 321 | ``` 322 | 323 | #### getTipAccounts 324 | 325 | Retrieves the tip accounts designated for tip payments for bundles. The tip accounts have remained constant and can also be found [here](#response-example-tips). 326 | 327 | ##### Request 328 | 329 | | Parameter | Type | Description | 330 | |-----------|------|-------------| 331 | | None | None | None | 332 | 333 | ##### Request Example 334 | 335 | ```bash 336 | curl https://mainnet.block-engine.jito.wtf/api/v1/getTipAccounts -X POST -H "Content-Type: application/json" -d ' 337 | { 338 | "jsonrpc": "2.0", 339 | "id": 1, 340 | "method": "getTipAccounts", 341 | "params": [] 342 | } 343 | ' 344 | ``` 345 | 346 | ##### Response 347 | 348 | | Field | Type | Description | 349 | |---------|-------|------------------------------------| 350 | | `result` | array | Tip accounts as a list of strings. | 351 | 352 | (response-example-tips)= 353 | ##### Response Example 354 | 355 | ```json 356 | { 357 | "jsonrpc": "2.0", 358 | "result": [ 359 | "96gYZGLnJYVFmbjzopPSU6QiEV5fGqZNyN9nmNhvrZU5", 360 | "HFqU5x63VTqvQss8hp11i4wVV8bD44PvwucfZ2bU7gRe", 361 | "Cw8CFyM9FkoMi7K7Crf6HNQqf4uEMzpKw6QNghXLvLkY", 362 | "ADaUMid9yfUytqMBgopwjb2DTLSokTSzL1zt6iGPaS49", 363 | "DfXygSm4jCyNCybVYYK6DwvWqjKee8pbDmJGcLWNDXjh", 364 | "ADuUkR4vqLUMWXxW9gh6D6L8pMSawimctcNZ5pGwDcEt", 365 | "DttWaMuVvTiduZRnguLF7jNxTgiMBZ1hyAumKUiL2KRL", 366 | "3AVi9Tg9Uo68tJfuvoKvqKNWKkC5wPdSSdeBnizKZ6jT" 367 | ], 368 | "id": 1 369 | } 370 | ``` 371 | 372 | 373 | #### getInflightBundleStatuses 374 | 375 | Returns the status of submitted bundles within the last five minutes, allowing up to five bundle IDs per request. 376 | 377 | - **Failed**: Indicates that all regions have marked the bundle as failed, and it has not been forwarded. 378 | - **Pending**: Indicates the bundle has not failed, landed, or been deemed invalid. 379 | - **Landed**: Signifies the bundle has successfully landed on-chain, verified through RPC or the `bundles_landed` table. 380 | - **Invalid**: Means the bundle is no longer in the system. 381 | 382 | ##### Request 383 | 384 | | Parameter | Type | Description | 385 | |-----------|---------------|-------------------------------------------------------------------------| 386 | | `params` | array[string] | **REQUIRED**: An array of bundle IDs to confirm (up to a maximum of 5). | 387 | 388 | ##### Request Example 389 | 390 | ```bash 391 | curl https://mainnet.block-engine.jito.wtf/api/v1/getInflightBundleStatuses -X POST -H "Content-Type: application/json" -d ' 392 | { 393 | "jsonrpc": "2.0", 394 | "id": 1, 395 | "method": "getInflightBundleStatuses", 396 | "params": [ 397 | [ 398 | "b31e5fae4923f345218403ac1ab242b46a72d4f2a38d131f474255ae88f1ec9a", 399 | "e3c4d7933cf3210489b17307a14afbab2e4ae3c67c9e7157156f191f047aa6e8", 400 | "a7abecabd9a165bc73fd92c809da4dc25474e1227e61339f02b35ce91c9965e2", 401 | "e3934d2f81edbc161c2b8bb352523cc5f74d49e8d4db81b222c553de60a66514", 402 | "2cd515429ae99487dfac24b170248f6929e4fd849aa7957cccc1daf75f666b54" 403 | ] 404 | ] 405 | } 406 | ' 407 | ``` 408 | 409 | ##### Response 410 | 411 | | Field | Type | Description | 412 | |----------|--------|------------------------------------------------------------------------| 413 | | `null` | null | If the bundle(s) is not found. | 414 | | `object` | object | If the bundle is found, an array of objects with the following fields: | 415 | 416 | ###### Object Fields 417 | 418 | - **bundle_id**: `string` 419 | - Bundle ID 420 | 421 | - **status**: `string` 422 | - `Invalid`: Bundle ID not in our system (5 minute look back). 423 | - `Pending`: Not failed, not landed, not invalid. 424 | - `Failed`: All regions that have received the bundle have marked it as failed and it hasn't been forwarded. 425 | - `Landed`: Landed on-chain (determined using RPC or `bundles_landed` table). 426 | 427 | - **landed_slot**: `u64` 428 | - The slot this bundle landed in, otherwise `null` if it is `Invalid`. 429 | 430 | ##### Response Example 431 | 432 | ```json 433 | { 434 | "jsonrpc": "2.0", 435 | "result": { 436 | "context": { 437 | "slot": 280999028 438 | }, 439 | "value": [ 440 | { 441 | "bundle_id": "b31e5fae4923f345218403ac1ab242b46a72d4f2a38d131f474255ae88f1ec9a", 442 | "status": "Invalid", 443 | "landed_slot": null 444 | }, 445 | { 446 | "bundle_id": "e3c4d7933cf3210489b17307a14afbab2e4ae3c67c9e7157156f191f047aa6e8", 447 | "status": "Invalid", 448 | "landed_slot": null 449 | }, 450 | { 451 | "bundle_id": "a7abecabd9a165bc73fd92c809da4dc25474e1227e61339f02b35ce91c9965e2", 452 | "status": "Invalid", 453 | "landed_slot": null 454 | }, 455 | { 456 | "bundle_id": "e3934d2f81edbc161c2b8bb352523cc5f74d49e8d4db81b222c553de60a66514", 457 | "status": "Invalid", 458 | "landed_slot": null 459 | }, 460 | { 461 | "bundle_id": "2cd515429ae99487dfac24b170248f6929e4fd849aa7957cccc1daf75f666b54", 462 | "status": "Invalid", 463 | "landed_slot": null 464 | } 465 | ] 466 | }, 467 | "id": 1 468 | } 469 | ``` 470 | 471 | ## Getting Started 472 | 473 | Welcome to the Jito MEV ecosystem! If you're looking to integrate Jito's advanced MEV solutions into your projects, we have a suite of developer tools designed to make your journey seamless, no matter your preferred language. 474 | 475 |
476 |
477 | 478 |
479 |
480 |

Python Developers

481 |

The Jito Py JSON-RPC library provides a robust SDK for interacting with Jito's Block Engine, allowing you to send transactions, bundles, and more directly from your Python applications.

482 |
483 |
484 | 485 |
486 |
487 | 488 |
489 |
490 |

JavaScript/TypeScript Developers

491 |

The Jito JS JSON-RPC library offers similar capabilities tailored for Node.js and browser environments, optimized for efficient MEV interactions.

492 |
493 |
494 | 495 |
496 |
497 | 498 |
499 |
500 |

Rust Developers

501 |

Explore the Jito Rust JSON-RPC, a performant SDK designed to leverage the power of Rust for interacting with Jito's infrastructure on Solana.

502 |
503 |
504 | 505 |
506 |
507 | 508 |
509 |
510 |

Go Developers

511 |

The Jito Go JSON-RPC library provides a Go-based SDK that brings the same low-latency, high-performance MEV solutions to your Go applications.

512 |
513 |
514 | 515 | ### Key Endpoints Supported by These Libraries: 516 | **Bundles** 517 | - `get_inflight_bundle_statuses`: Retrieve the status of in-flight bundles. 518 | - `get_bundle_statuses`: Fetch the statuses of submitted bundles. 519 | - `get_tip_accounts`: Get accounts eligible for tips. 520 | - `send_bundle`: Submit bundles to the Jito Block Engine. 521 | 522 | **Transactions** 523 | - `send_transaction`: Submit transactions with enhanced priority and speed. 524 | 525 | These endpoints are specifically designed to optimize your MEV strategies, offering precise control over bundle and transaction management on Solana. Dive into the repos to get started, explore detailed documentation, and discover how you can integrate these powerful tools into your MEV workflows. 526 | 527 | ## Sandwich Mitigation 528 | 529 | We're releasing a new feature that helps mitigate **sandwich attacks**—without needing to use the vote account method. (See disclaimer below) 530 | 531 | ### How It Works 532 | 533 | In your Solana transaction, add **any valid Solana public key** that starts with `jitodontfront` to any of the instructions. For example: `jitodontfront111111111111111111111111111111` or `jitodontfront111111111111111111111111111123` 534 | 535 | Any bundle containing a transaction with the `jitodontfront` account will be rejected by the block engine unless that transaction appears first (at index 0) in the bundle. Transactions and bundles that do not contain this account are not impacted by this change. 536 | 537 | The following are bundle patterns the block engine will allow: 538 | - [tx_with_dont_front, tip] 539 | - [tx_with_dont_front, arbitrage, tip] 540 | 541 | The following are bundle patterns the block engine will NOT allow: 542 | - [tip, tx_with_dont_front] 543 | - [txA_with_dont_front, txB_with_dont_front] 544 | - [txA_with_dont_front, txB_with_dont_front, tip] 545 | - [trade, tx_with_dont_front, arbitrage, tip] 546 | 547 | ### Important Points 548 | 549 | - The account **does not need to exist** on-chain but must be a valid pubkey 550 | - Mark the account as read-only to optimize landing speed 551 | - (Optional): Use a unique variation of `jitodontfront` for your application [note: use *your own* pubkey]`jitodontfront111111111114511111111111111123`, `jitodontfront111111111111234565432123456782`, etc. 552 | - This solution works with Jito’s sendBundle and sendTransaction endpoints (as opposed to the vote account method which was not compatible with those endpoints) 553 | - Supports AddressLookupTables 554 | 555 | ### Example 556 | 557 | Check out this example bundle using the protection: 558 | [jitodontfront bundle](https://explorer.jito.wtf/bundle/0748de4fd7a60c419da9fb09781157ab08e7b0adfbd664193c91f51e49af5491) 559 | 560 | _Disclaimer: This feature may help reduce sandwich attacks but is not guaranteed to do so and is not a solution for all variations in transaction ordering, including any ordering conducted by third parties. In addition, this feature applies only to the block engine and not to any other software._ 561 | 562 | 563 | ## Tips 564 | 565 | **Best Practices for Tipping:** 566 | 567 | 1. Integrate tip instructions within your main transaction alongside core logic. 568 | 2. If transaction space is constrained, implement post-transaction checks or add assertions in a separate tipping transaction to verify expected states. 569 | 3. Exercise caution when sending tips as standalone transactions in bundles, as this may increase vulnerability to uncle bandit scenarios. 570 | 571 | > ⚠️ **Warning** 572 | > When tipping make sure to not use Address Lookup Tables for the tip accounts. Tips do not prioritize transactions for validators that are not Jito-Solana leaders, so tipping in these cases will be ineffective and a waste of money 573 | 574 | (tip-amount)= 575 | ### 🪙 Tip Amount 576 | 577 | #### sendTransaction 578 | When using `sendTransaction`, it is recommended to use a 70/30 split between priority fee and jito tip(e.g.): 579 | 580 | ``` 581 | Priority Fee (70%): 0.7 SOL 582 | + 583 | Jito Tip (30%): 0.3 SOL 584 | =========================== 585 | Total Fee: 1.0 SOL 586 | ``` 587 | 588 | So, when using sendTransaction: 589 | 590 | You would allocate 0.7 SOL as the priority fee. 591 | And 0.3 SOL as the Jito tip. 592 | 593 | #### sendBundle 594 | When using `sendBundle`, only the Jito tip matters. 595 | 596 | (get-tip-information)= 597 | ### 💸 Get Tip Information 598 | #### REST API endpoint showing most recent tip amounts:
599 | ``` 600 | curl https://bundles.jito.wtf/api/v1/bundles/tip_floor 601 | ``` 602 | Response: 603 | ``` 604 | [ 605 | { 606 | "time": "2024-09-01T12:58:00Z", 607 | "landed_tips_25th_percentile": 6.001000000000001e-06, 608 | "landed_tips_50th_percentile": 1e-05, 609 | "landed_tips_75th_percentile": 3.6196500000000005e-05, 610 | "landed_tips_95th_percentile": 0.0014479055000000002, 611 | "landed_tips_99th_percentile": 0.010007999, 612 | "ema_landed_tips_50th_percentile": 9.836078125000002e-06 613 | } 614 | ] 615 | ``` 616 | 617 | #### WebSocket showing tip amounts: 618 | ``` 619 | wscat -c wss://bundles.jito.wtf/api/v1/bundles/tip_stream 620 | ``` 621 | 622 | #### Tip Dashboard 623 | To view dashboard please [click here](https://jito-labs.metabaseapp.com/public/dashboard/016d4d60-e168-4a8f-93c7-4cd5ec6c7c8d) . 624 | 625 | ## Rate Limits 626 | 627 | ### Default Limits 628 | **Q: What are the defaults?** 629 | 630 | 1 request per second per IP per region. 631 | 632 | ### Rate Limit Operation 633 | **Q: How do they work?** 634 | 635 | You no longer need an approved auth key for default sends. 636 | 637 | ### Exceeding Limits 638 | **Q: What happens if the rate limit is exceeded?** 639 | 640 | 429 or rate limit error indicating what you hit. 641 | 642 | ### Authorization Issues 643 | **Q: What happens if I see `The supplied pubkey is not authorized to generate a token`?** 644 | 645 | This indicates that you're either using the auth-key parameter or your keypair variable is being set to check for this key unnecessarily. In most cases, you can simply use Null or None for these fields. Many of the new SDKs will have this built-in by default, so you won't need to specify it manually. 646 | 647 | ## Rate Limits Form 648 | 649 | Please ensure to provide valid contact information so we can send you acknowledgment [submit form](https://forms.gle/8jZmKX1KZA71jXp38) 650 | 651 | 652 | ## Troubleshooting 653 | 654 | ### Priority Fee 655 | **Q: How to know how much to set priority fee?** 656 | 657 | Please see [Tip Amount for sendTransaction](#tip-amount) 658 | 659 | ### Tip Amount 660 | **Q: How to know how much to set a tip?** 661 | 662 | The minimum tips is 1000 lamports 663 | 664 | ### Bundle Landing 665 | **Q: My bundle/transaction is not landing, how do I check?** 666 | 667 | If this is your first time using bundles, please ensure you transaction are valid through `simulateTransaction`, and Jito-Solana RPC should support `simulateBundle` to verify bundles. 668 | 669 | If you have the `bundleID`, you can look over [Jito explorer](https://explorer.jito.wtf/), otherwise you can see basic inflight knowledge **within the last 5 minutes** through `getInflightBundleStatuses`. 670 | 671 | The minimum tip is 1000 lamports, but if you're targeting a highly competitive MEV opportunity, you'll need to be strategic with your tip. Consider adjusting your tip amount, based on the [current pricing](#get-tip-information) of tips in the system, and also take into account the latency to each component you're interacting with to maximize your chances of success. 672 | 673 | ### Failed Transactions 674 | **Q: Why is my transaction/bundle failing, but lands on explorers?** 675 | 676 | #### Uncled Blocks 677 | 678 | As more users have been starting to send bundles through Jito's block engine, we think it would be important to highlight uncled blocks on Solana and why some of you may be seeing your bundles landing as transactions that may fail. 679 | 680 | Solana has skipped slots, this is where a block is built by a leader and not accepted by the supermajority. These are known as uncled blocks. When this happens, any party that received these blocks may rebroadcast any of these transactions and get them landed/reverted on chain. It's important to note this has always been an issue on Solana and most other blockchains. 681 | 682 | So in the case of bundles, imagine transactions from a bundle end up on an uncled block and some party rebroadcasts some or all of the bundle transactions. Those transactions will hit the normal banking stage which does not respect the bundle atomicity and reversion protection rules. 683 | 684 | #### Mitigations 685 | 686 | We're working through some solutions; however, given the complexity of the network and this problem, it may take some time to fully get there. In the meantime it's extremely important that: 687 | 688 | 1. You protect yourself from bundles being 'unbundled'. This means having pre/post account checks and other safeguards that'll protect you in the case your bundle is rebroadcasted. 689 | 690 | 2. Make sure you minimize your bundles from being leaked; if you send to Jito you are never going to be explicitly leaked by Jito. However, be aware that during uncled block situations you are exposed to this. 691 | 692 | 3. Always make sure your Jito tip transaction is in the same transaction that is running the MEV strategy; this way if the transaction fails, you don't pay the Jito tip: 693 | 694 | - Ideally, include your tip instruction in the same transaction as your main logic, along with appropriate post-transaction checks. 695 | - If space is limited in your main transaction, consider adding assertions in your tipping transaction to verify the expected state (e.g., slot check, balance check). 696 | - Be aware that sending tips as standalone transactions in bundles may increase exposure to uncle bandit situations. 697 | -------------------------------------------------------------------------------- /docs/source/legal.md: -------------------------------------------------------------------------------- 1 | # ⚖️ Legal 2 | 3 | ## Terms of Use 4 | 5 | **Last Updated:** June 24, 2025 6 | 7 | ### 1. Introduction 8 | 9 | These Terms of Use provide the terms and conditions under which you, whether personally or on behalf of an entity ("you" or "your"), are permitted to use, interact with or otherwise access the tools and services available via docs.jito.wtf (the "Tooling Site") (the "Tools" and together with the Tooling Site, any other website, application programming interface ("API"), code repository or other attendant tooling, information, services or technology, the "Services") hosted by Jito Labs, Inc. ("Jito", "we," "us," or "our"). 10 | 11 | These Terms of Use, together with any documents and additional terms or policies that are appended hereto or that expressly incorporate these Terms of Use by reference as well as the Privacy Policy on the Tooling Site (collectively, the "Terms"), constitute a binding agreement between you and us. The term "user" as used in these Terms refers to someone who accesses or in any way uses or views the Services. 12 | 13 | By accessing any Services, you agree to these Terms and the Privacy Policy posted on the Tooling Site as well as the Terms of Service and Privacy Policy (the "Site Terms") posted to www.jito.wtf (the "Site") as governing your use of the Services. These Terms apply to use of the Tools and Services, regardless of where or how they are accessed (including outside of or other than via the Tooling Site), and regardless of which device is used for access. 14 | 15 | **NOTICE: PLEASE REVIEW THE TERMS CAREFULLY. BY ACCESSING, INTERACTING WITH OR USING ANY OF THE SERVICES, YOU AGREE THAT YOU ARE ABLE TO ENTER INTO A BINDING AGREEMENT AND, AS SUCH, HAVE READ, UNDERSTOOD, AND AGREE TO BE BOUND BY THE TERMS, INCLUDING THE BINDING ARBITRATION AGREEMENT AND CLASS ACTION WAIVER BELOW (SEE SECTION 9). IF YOU DO NOT AGREE TO BE BOUND BY EVERY PROVISION OF THE TERMS, YOU ARE NOT AUTHORIZED TO INTERACT WITH, ACCESS OR USE ANY OF THE SERVICES.** 16 | 17 | ### 2. The Tools & Services 18 | 19 | Jito provides the Tools and Services, as well as certain software as set forth in Jito's GitHub repository (collectively with the Tools and Services, the "Software Programs"), to Solana Network node operators, validators, wallet and application providers, block builders, searchers and other participants. 20 | 21 | The Software Programs are technology designed for low-latency transaction sending, low latency blockchain/shred data, efficient transaction ordering, and/or cross-transaction atomicity. 22 | 23 | Jito does not represent that any of the Tools, Services or Software Programs will be available without interruption or for any particular duration, and the Jito Parties shall not be responsible for any losses, damages, costs, expenses, lost opportunities or other harm suffered by you in connection with any interruption or termination of the Tools, Services or Software Programs. **YOU SHOULD READ AND REVIEW THE LIMITATION OF LIABILITY (SECTION 8(d)) WHICH ADDRESSES THIS MORE FULLY.** 24 | 25 | To the extent that we provide you with API authentication or similar credentials, such API authentication and credentials are for your use only and you will not sell, transfer, or sublicense them to any other entity or person, except that you may disclose your private key to your agents and subcontractors performing work on your behalf. 26 | 27 | ### 3. Modifications 28 | 29 | We reserve the right, in our sole discretion, to modify the Terms at any time or from time to time. The modified Terms will be posted on the Tooling Site and will provide the last updated date at the top of the Terms. Any modified Terms will become effective upon posting. By continuing to access, use or otherwise interact with any Services after the effective date of any modification to the Terms, you are providing your explicit agreement to be bound by the Terms as modified. If you do not agree to be bound by any updated Terms, you are prohibited from using, accessing, or otherwise interacting with the Services. It is your responsibility to check the Tooling Site for modifications to the Terms. 30 | 31 | We also reserve the right, in our sole discretion, to modify the Services at any time and from time to time, with or without notice to you. We may also eliminate or terminate any Tool or Service in full or in part, at our sole discretion, with or without notice, including deleting or otherwise materially modifying information, access points, APIs or other information in GitHub repositories or with the Software Programs. 32 | 33 | ### 4. Your Representations & Responsibilities 34 | 35 | #### a. Your Representations 36 | 37 | The Services are intended only for users who are 18 years of age or older and by using, accessing or interacting with the Tooling Site or the Services, you represent and warrant that you meet this requirement. If you are entering into or accepting these Terms on behalf of a legal entity, you represent and warrant that you have the right, authority and capacity to bind such entity and its affiliates to these Terms. If you do not meet these requirements, you are prohibited from accessing, using or otherwise interacting with the Services. 38 | 39 | You represent and warrant that you are not, and for the duration of time you use the Services will not be, (i) the subject of economic or trade sanctions administered or enforced by any governmental authority or otherwise designated on any list of prohibited or restricted parties; (ii) in contravention of any laws and regulations pertaining to anti-money laundering or terrorist financing; (iii) included on the List of Specially Designated Nationals and Blocked Persons maintained by the US Treasury Department's Office of Foreign Assets Control (OFAC) or on any list pursuant to European Union (EU) and/or United Kingdom (UK) regulations; or (iv) operationally based on domiciled in a country or territory in which sanctions imposed by the United Nations (whether through the Security Council or otherwise), OFAC, the EU and/or the UK apply, or otherwise pursuant to sanctions imposed by the U.N., OFAC, EU or the UK. If at any point the above is no longer true, then you must immediately cease using the Services. 40 | 41 | You acknowledge that you (A) are responsible for properly configuring and using the Services and for taking appropriate action to secure your data or the data of any third party for which you're responsible when doing so, (B) have the technical and financial know-how, experience and sophistication to properly use, access and interact with the Services, (C) understand the inherent risks of blockchain technology, cryptoassets/tokens and smart contracts, among other related technologies, and (D) are facile, adept and able to use and configure the sophisticated hardware and software required for use, access and interaction with the Services. 42 | 43 | You further acknowledge that (I) blockchains and their attendant technologies involved in using any Services are novel, technologically complex, and involve inherent risk, (II) protocol upgrades and other technological mechanisms may contain bugs or security vulnerabilities that may result in loss of functionality and ultimately of funds, and (III) the Services involve technological innovations such that the results of usage of or interaction with them depend on factors beyond our control, including but not limited to network health, congestion, latency, incentives, user configuration settings, operation of third party software or hardware, wallet or account compatibility, protocol upgrades or forks, the activities of searchers, block builders and others. You should also familiarize yourself with the risks associated with transacting on blockchain networks, including but not limited to smart contract vulnerabilities, front end vulnerabilities, hacks, phishing attacks, social engineering attacks, cryptoasset volatility and transaction irreversibility. 44 | 45 | You acknowledge and agree that you are using and accessing the Services on your own initiative and are responsible for compliance with all laws, including your local laws. 46 | 47 | #### b. Your Responsibilities 48 | 49 | You are responsible for all activities that occur with respect to your use of the Services, regardless of whether the activities are authorized by you or undertaken by you, your employees, your agents or a third party. 50 | 51 | You are solely responsible for configuring and using the Services and otherwise taking appropriate action to secure, protect, and backup your data and any other data for which you are responsible, as applicable in a manner that will provide appropriate security and protection. 52 | 53 | You agree to access, use or otherwise interact with the Services only in an authorized and appropriate manner and in accordance with these Terms and with all applicable laws. To that end, you are solely responsible for determining whether any taxes or similar governmental assessments may apply to any activity you undertake in connection with your use of the Services, and it is solely your responsibility to report and remit the relevant payments to the appropriate authorities. 54 | 55 | You agree that you will not: 56 | 57 | - violate any applicable laws or regulations through your access to or use of the Services; 58 | - violate the Terms or the Site Terms; 59 | - spam any API or otherwise make excessive API requests; 60 | - exploit the Services for any unauthorized purpose; 61 | - harvest or otherwise collect information from the Services for any unauthorized purpose; 62 | - use the Services in a way that could — on its own — disable, damage or impair them or otherwise interfere with the Services in any way; 63 | - sublicense, sell, or otherwise distribute the Services, or any portion thereof; 64 | - use any data mining tools, robots, crawlers, or similar data gathering and extraction tools to scrape or otherwise remove data from the Services for improper purposes; 65 | - use any manual process to monitor or copy any of the material on the Tooling Site or that is included in the Services or for any unauthorized purpose without our prior written consent; 66 | - introduce any viruses, trojan horses, worms, logic bombs, or other material which is malicious or technologically harmful to the Services; 67 | - attempt to gain unauthorized access to, interfere with, damage, or disrupt any parts of the Services; 68 | - abuse the Services in a fraudulent manner, including by providing false or misleading simulations or other information; or 69 | - attack the Services via a denial-of-service attack or a distributed denial-of-service attack or otherwise attempt to interfere with the proper working of the Services. 70 | 71 | You acknowledge and agree that (i) we have the right to investigate violations of these Terms or conduct that affects the Services; (ii) in the event that you use a Service in a prohibited manner or for any other reason, in our sole discretion, we may investigate or take any other action we deem necessary, including but not limited to bringing legal action against you if your use or access of the Services results in harm or damage to us, to rectify the prohibited conduct or any consequences resulting therefrom; and (iii) we may consult and cooperate with law enforcement where and when appropriate and/or necessary. 72 | 73 | We are not obligated to monitor access to or use of the Services, although we reserve the right to do so in our sole discretion. We reserve the right, but are not obligated, to terminate, suspend, remove or disable access to any Services, at any time and without notice, including, but not limited to, if we, in our sole discretion, consider it objectionable or in violation of these Terms. You acknowledge and agree that we may do so. 74 | 75 | ### 5. Intellectual Property Rights 76 | 77 | #### a. Ownership & License 78 | 79 | The Services and their entire contents, features, and functionality, other than third-party content, are owned by Jito, its licensors, or other providers of such material and are protected by United States and international copyright, trademark, patent, trade secret, and other intellectual property or proprietary rights laws. 80 | 81 | Subject to these Terms, we hereby grant you a personal/single, limited, revocable, non-exclusive, non-sublicensable, non-transferable license to use, copy, and distribute in connection with your use of the Services. This license is solely intended to allow you to access, use or otherwise interact with the Services. 82 | 83 | You acknowledge and agree that you do not receive any other rights to the Services other than those specified in the Terms. Certain Services may be provided to you under a separate license. Third party features or applications integrated into the Services may be subject to other or additional intellectual property licenses and thus, you must review any terms relevant to those third party features or applications to determine the relevant licenses applicable thereto. You agree you will not violate the terms of any such separate license. 84 | 85 | #### b. Reciprocal License 86 | 87 | By using the Services, you grant us a limited, non-exclusive, sublicensable, worldwide royalty free license to use, copy, modify and display any content or Feedback you provide to us or that you post on or through any of the Services solely for our business purposes, including but not limited to the purpose of providing the Services for so long as is necessary to do so. 88 | 89 | #### c. Jito Trademarks 90 | 91 | Jito's name, and all trademarks, logos, taglines, service names, designs, and slogans on the Services are trademarks of Jito or its affiliates or licensors. You must not use such marks without our prior written permission. 92 | 93 | All other trademarks not owned by us that appear on this Site are the property of their respective owners, who may or may not be affiliated with, connected to, or sponsored by us. 94 | 95 | #### d. Your Feedback 96 | 97 | We appreciate feedback, comments, ideas, proposals and suggestions for improvements to the Services ("Feedback"). If you choose to submit Feedback, you agree that we are free to use it without any restriction or compensation to you, and you grant us and our affiliates and service providers, and each of their and our respective licensees, successors, and assigns the right to use, reproduce, modify, perform, display, distribute, and otherwise disclose to third parties any such material for any purpose. 98 | 99 | You acknowledge and agree that we will own all right, title, and interest in and to all Feedback you submit. You represent and warrant that (i) you own all right, title, and interest in and to your Feedback; and (ii) you will not violate any intellectual property or other rights of third parties in providing Feedback to us. 100 | 101 | ### 6. Third Party Information or Services 102 | 103 | The Services may be integrated with or otherwise give access to applications, services, sites, tools, technology, data, operations, features or resources that are provided or otherwise made available by third parties ("Third Party Services"). 104 | 105 | If the Services contain links to such Third Party Services, they are provided for your convenience only. We have no control over those sites or resources and accept no responsibility for them or for any loss or damage that may arise from your use of them. If you decide to access a Third Party Service integrated with or linked to any Service, you do so entirely at your own risk and subject to the terms and conditions of use for such websites. Please review any applicable terms, policies or agreements of Third Party Services prior to engaging with them. We reserve the right to withdraw linking permission without notice. 106 | 107 | Your access and use of Third Party Services may be subject to additional terms and conditions, privacy policies, or other agreements with those third parties, which we do not control and otherwise may have no relationship with. We have no control over and are not responsible for such Third Party Services, including the accuracy, availability, reliability, verification or completeness of information or content shared by or available through Third Party Services, or the privacy practices of such services. 108 | 109 | Your use of Third Party Services is directly between you and that third party, and you acknowledge and agree that we are not responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with your use of or reliance on any Third Party Service. 110 | 111 | ### 7. Indemnification 112 | 113 | #### a. General 114 | 115 | You agree to defend, indemnify and hold harmless us and our licensors, and each of their respective employees, officers, directors, agents and representatives (collectively, the "Jito Parties") from and against all liability for monetary damages, contractual claims of any nature, economic loss (including direct, incidental or consequential damages), loss of income or profits, fines, penalties, exemplary or punitive damages, and any other injury, damage, or harm, including reasonable attorney's fees (collectively, "Damages") that relate in any way to any demand, claim, regulatory action, proceeding or lawsuit, regardless of the cause or alleged cause, whether the allegations are groundless, fraudulent, false or lack merit and regardless of the theory of recovery ("Claims" and each, a "Claim") arising out of or relating to: (i) your access to or use of the Services; (ii) violation or breach of the Terms or violation of applicable law by you, your customers, users, employees, agents and other associated persons; (iii) a dispute between you and any third party; (iv) your alleged or actual infringement or misappropriation of any third party's intellectual property or other rights; and (v) your Feedback. In the event we receive a third party subpoena or other compulsory legal order or process associated with Claims described in (i) through (v) above, then, in addition to the indemnification set forth above, you will reimburse us for the time, effort and expenditures we expended responding to such matters at our then-current hourly rates as well as our reasonable attorneys' fees. 116 | 117 | #### b. Process 118 | 119 | If you are obligated to indemnify us, then you agree that we will have the right in our sole discretion, to control any action or proceeding and to determine whether we wish to settle and if so, on what terms, and you agree to fully cooperate with us in the defense or settlement of such Claim. 120 | 121 | ### 8. Disclaimers and Limitations of Liability 122 | 123 | #### a. Tools & Services 124 | 125 | By accessing the Services, you hereby acknowledge and agree that we cannot and do not guarantee the functionality, security or availability of the Services. The technologies on which the Services rely may be subject to sudden changes and we cannot and do not guarantee that your access to or use of the Services will be uninterrupted or error free. You assume all risks related thereto. We make no claims that the Services or any of its content is accessible or appropriate in your country. 126 | 127 | You acknowledge that although we are constantly improving mechanisms and security as it relates to the Services, that certain security breaches might result in loss or corruption of data and that the Jito Parties shall not be liable to you or any other users for any damages caused by such breaches or corruption of data. 128 | 129 | The Jito Parties are not responsible for unauthorized access to the Services, including any access that occurred as a result of fraud, phishing or criminal activity perpetrated against you by third parties. 130 | 131 | The Jito Parties shall not be liable or responsible to you, nor be deemed to have defaulted or breached these Terms, for any failure or delay in the performance of the Services when and to what extent such failure or delay is caused by or results from acts or circumstances beyond our reasonable control and/or from the hardware used in the Services, including, without limitation, acts of God, cyberattack or ransomware, flood, fire, earthquake, explosion, governmental actions, war, invasion or hostilities (whether war is declared or not), terrorist threats or acts, riot or other civil unrest, national emergency revolution, insurrection, epidemic, pandemic, lockouts, strikes or other labor disputes (whether or not relating to our workforce), or restraints or delays affecting carriers or inability or delay in obtaining supplies of adequate or suitable materials, telecommunications or third party service provider breakdown, interruption or unavailability, electrical disruptions or power outages. 132 | 133 | You further acknowledge and agree that you bear all risk of loss associated with your use of the Services, and the Jito Parties shall have no liability whatsoever for fluctuations in the value of cryptocurrency, transaction, or any bundle of transactions. 134 | 135 | #### b. Other Disclaimers 136 | 137 | Nothing contained in the Services or any other content on the Site or otherwise constitutes a solicitation, recommendation, endorsement, or offer by Jito to buy or sell any cryptoasset or other financial instruments. 138 | 139 | #### c. No Representations or Warranties 140 | 141 | THE SERVICES ARE PROVIDED "AS IS," EXCEPT TO THE EXTENT PROHIBITED BY LAW, OR TO THE EXTENT ANY STATUTORY RIGHTS APPLY THAT CANNOT BE EXCLUDED, LIMITED OR WAIVED, NEITHER WE NOR ANY OTHER JITO PARTY MAKES ANY REPRESENTATION OR WARRANTIES OF ANY KIND, WHETHER EXPRESS, IMPLIED, STATUTORY OR OTHERWISE REGARDING THE SERVICES, AND THE JITO PARTIES EXPRESSLY DISCLAIM ALL WARRANTIES, INCLUDING ANY IMPLIED OR EXPRESS WARRANTIES (i) OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR QUIET ENJOYMENT; (ii) ARISING OUT OF ANY COURSE OF DEALING OR USAGE OR TRADE; (iii) THAT THE SERVICES WILL BE ACCURATE, UNINTERRUPTED, ERROR FREE OR FREE OF HARMFUL COMPONENTS; AND (iv) THAT ANY CONTENT OR FEEDBACK WILL BE SECURE OR NOT OTHERWISE LOST OR ALTERED. 142 | 143 | #### d. Limitations of Liability 144 | 145 | THE JITO PARTIES WILL NOT BE LIABLE TO YOU FOR ANY INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR EXEMPLARY DAMAGES (INCLUDING DAMAGES FOR LOSS OF PROFITS, REVENUES, CUSTOMERS OR USERS, OPPORTUNITIES, GOODWILL, USE, DATA, CONTENT OR OTHER ASSETS), EVEN IF ANY OF THE JITO PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. FURTHER, NONE OF THE JITO PARTIES WILL BE RESPONSIBLE FOR ANY COMPENSATION, REIMBURSEMENT, OR DAMAGES ARISING IN CONNECTION WITH (i) YOUR INABILITY TO USE, OR ANY DELAY IN THE USE OF, THE SERVICES, INCLUDING AS A RESULT OF ANY (A) TERMINATION OF THE TERMS OR YOUR USE OF OR ACCESS TO THE SERVICES, (B) OUR SUSPENSION OR DISCONTINUATION OF ANY OF THE SERVICES, OR (C) ANY UNANTICIPATED OR UNSCHEDULED DOWNTIME OF ALL OR A PORTION OF THE SERVICES FOR ANY REASON; (ii) COST OF PROCUREMENT OF SUBSTITUTE SERVICES; (iii) INVESTMENTS, EXPENDITURES, OR COMMITEMENTS BY YOU IN CONNECTION WITH THE TERMS OR YOUR USE OF OR ACCESS TO THE SERVICES; (iv) UNAUTHORIZED ACCESS TO, ALTERATION OF, OR THE DELETION, DESTRUCTION, DAMAGE, LOSS OR FAILURE TO STORE ANY OF YOUR DATA; OR (v) CHANGE IN VALUE OF ANY CRYPTOASSET. IN ANY CASE, THE JITO PARTIES' AGGREGATE LIABILITY UNDER THESE TERMS WILL NOT EXCEED $100. THE LIMITATIONS IN THIS SECTION APPLY ONLY TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW. 146 | 147 | ### 9. Governing Law, Dispute Resolution & Class Action Waiver 148 | 149 | #### a. Governing Law 150 | 151 | These Terms, and your use of, access to or interaction with the Services, are governed by the laws of the State of Delaware, without regard to conflict of laws rules. The exclusive jurisdiction for all Claims will be the courts located in the state of Delaware, and you acknowledge and agree that any Claims are subject to the jurisdiction of such courts, and waive any objection to the laying of such venue. 152 | 153 | #### b. Dispute Resolution 154 | 155 | Prior to commencing any legal proceeding of any kind against us, including an arbitration, you and we agree that we will attempt to resolve any Claim by engaging in good faith negotiations. Such negotiation requires that the aggrieved party provide written notice to the other party specifying the nature and details of the dispute (the "Initial Notice"). The party receiving the Initial Notice shall have 20 days to respond, and within 45 days after the Initial Notice was sent, the parties shall meet and confer in good faith to try and resolve the Claim. If the parties are unable to do so within 90 days of the Initial Notice, the parties may agree to mediate their dispute or either party may submit to arbitration according to these Terms. 156 | 157 | #### c. Mandatory Arbitration 158 | 159 | Any Claim arising out of or relating to these Terms or the Services, or the breach, termination, enforcement, interpretation or validity of the Terms, including the determination of the scope or applicability of this agreement to arbitrate, will be determined by arbitration in Delaware before a single arbitrator. This Section will not preclude parties from seeking provision remedies in aid of arbitration from a court of appropriate jurisdiction. 160 | 161 | Any arbitration will be conducted by JAMS pursuant to its rules then in effect, except as modified by these Terms. Disputes involving claims and counterclaims under $250,000, not inclusive of attorneys' fees and interest, shall be subject to JAMS's most current version of the Streamlined Arbitration Rules. All other claims shall be subject to JAMS's most current version of the Comprehensive Arbitration Rules and Procedures (collectively, the "JAMS Rules"). 162 | 163 | **YOU UNDERSTAND THAT BY AGREEING TO THE TERMS, THE PARTIES ARE EACH WAIVING THE RIGHT TO TRIAL BY JURY OR TO PARTICIPATE IN A CLASS ACTION OR CLASS ARBITRATION.** 164 | 165 | #### d. Class Action Waiver 166 | 167 | Any arbitration under the Terms shall take place on an individual basis – class arbitrations and class actions are not permitted. 168 | 169 | To the fullest extent permitted by applicable law, you agree that any proceedings to resolve any Claim will be brought and conducted only in your individual capacity and not as a party (plaintiff or otherwise) or member of any class (or purported class), consolidated proceeding, multi-plaintiff proceeding or representative action or proceeding. 170 | 171 | Any arbitration will not be permitted to be consolidated or aggregated with any other arbitration and the arbitrator will not have any authority to do so, and will not have the authority to make an award to any person or entity not a part of the individual arbitration in which you are a party. You further agree that any arbitrator may not preside over any form of class action involving you and us. 172 | 173 | ### 10. No Relationship 174 | 175 | Nothing in the Terms shall be construed to create any relationship between you and us other than as defined herein. Neither you nor we are an agent of each other under these Terms or otherwise, and you shall have no right to hold yourself out as in any way having a relationship with us other than as someone using, accessing or otherwise interfacing with the Services. 176 | 177 | ### 11. Assignments 178 | 179 | You agree you are not permitted to assign or otherwise transfer any of your rights and obligations under the Terms, but Jito may assign or transfer the Terms, in whole or in part, without restriction. Any assignment or transfer by you in violation of this Section will be void. Subject to the foregoing, the Terms will be binding upon, and inure to the benefit of, the parties and their respective permitted successors and assigns. 180 | 181 | ### 12. Entire Agreement 182 | 183 | The Terms, including any policies that expressly or impliedly incorporate the Terms by reference, constitute the entire agreement between you and us regarding the subject matter herein. The Terms supersede all prior or contemporaneous representations, understandings, agreements, or communications between you and us, if any, whether written or verbal, regarding the subject matter of the Terms. 184 | 185 | ### 13. No Waiver 186 | 187 | The failure by us to enforce any provision of the Terms will not constitute a present or future waiver of such provision nor limit our right to enforce such provision at a later time. All waivers by us must be in writing to be effective. 188 | 189 | ### 14. Severability 190 | 191 | If any portion of the Terms are held to be unenforceable or invalid, the remainder of the Terms will continue in full force and effect. Any invalid or unenforceable portions will be interpreted to effectuate the intent of the original portion. If such construction is not possible, the invalid or unenforceable portion will be severed from the Terms, but the rest of the Terms will remain in full force and effect. 192 | 193 | ### 15. Notice 194 | 195 | Any notices or other communications provided by us under these Terms will be given: (i) via email; or (ii) by posting to the Services. For notices made by email, the date of receipt will be deemed the date on which such notice is transmitted. 196 | 197 | ### 16. Contact Us 198 | 199 | If you have any questions about these Terms or the Services, you may contact us at support@jito.wtf. 200 | 201 | --- 202 | 203 | ## Privacy Policy 204 | 205 | **Last Updated:** June 24, 2025 206 | 207 | This Privacy Policy (the "Policy") explains how Jito Labs, Inc. ("Jito", "we", "us," or "our") may collect, use, process, and disclose information in connection with the tools and services available via docs.jito.wtf (the "Tooling Site") (the "Tools" and together with the Tooling Site, any other website, application programming interface ("API"), code repository or other attendant tooling, information, services or technology, the "Services") that we host. 208 | 209 | Your use of the Services is subject to this Policy, the Terms of Service for the Tooling Site (the "Tooling Terms") and the Terms of Service and Privacy Policy (collectively, the "Site Terms") for the website available at www.jito.wtf (the "Site") (collectively with this Policy and the Tooling Terms, the "Terms"). 210 | 211 | This Policy does not apply to any products, services, websites, or content offered or provided by third parties and we are not responsible in any way for those third party offerings; please review any separate privacy policies or terms made available by those third parties. 212 | 213 | We may update this Policy from time to time. If we make any changes, we will change the Last Updated date above. Any modifications to this Policy will be effective upon our posting of the updated Policy. In all cases, your continued use of the Services following the posting of any updated Policy indicates your acceptance of the updated Policy. 214 | 215 | ### 1. Data We Collect 216 | 217 | We may collect certain personal information when you use, access or otherwise interact with the Services, including: 218 | 219 | - Internet Protocol ("IP") addresses and other location information 220 | - API keys 221 | - Unique Universal Identifier ("UUID") keys 222 | - Publicly available blockchain data, including time stamps and number of packets sent 223 | - Blockchain account information or wallet addresses, including signer and auth pubkeys as well as transaction signatures 224 | - Device user agent, client library version 225 | - Analytics about aggregate numbers of users and usage types, and information such as how many users in the aggregate are using certain features, as well as aggregate location data across users including countries and regions from which users access the Services 226 | - Any information you voluntarily provide to us 227 | - Any information about you provided to us by third parties with whom we work (including contractors, service providers and analytics providers) 228 | 229 | All or any of this information may be combined with other information we collect or that you provide. We may also obtain information about you through our analysis of blockchain information. 230 | 231 | We may integrate technologies operated or controlled by other parties into parts of the Services. Please note that when you interact with these other parties, those parties may independently collect information about you and solicit information from you. You can learn more about how those parties collect and use your data by consulting their privacy policies and other terms. 232 | 233 | Note that you are responsible for all of your use of or access to the Services, including the security of your blockchain network addresses, cryptocurrency wallets, and their cryptographic keys. 234 | 235 | ### 2. Use of Information 236 | 237 | We use your information for various business and administrative purposes, such as: 238 | 239 | - Provide, maintain, support and improve the Services, communicate with you about and respond to inquiries regarding the Services and respond to your feedback about the Services; 240 | - Detect, investigate and prevent fraudulent, abusive or harmful activities, including detecting potential security incidents; 241 | - Analyze usage trends to permit access to the Services; 242 | - Ensure internal quality control and safety; 243 | - Take certain actions that you have asked us to and provided consent for us to take; 244 | - Enforce this Policy, the Terms and/or other policies or terms; 245 | - Comply with any legal or regulation obligations, including in the event we have a legal obligation to collect, use or retain information about you or comply with legal requests from government authorities or in private suits 246 | 247 | You agree and acknowledge that we may use information that does not identify you (including information that has been aggregated or de-identified) for any purpose except as prohibited by applicable law. 248 | 249 | We may use personal information for other purposes that are clearly disclosed to you at the time you provide personal information or with your consent. 250 | 251 | We may use personal information to create de-identified and/or aggregated information, such as demographic information, information about the device from which you access the Services, or other analyses we create. 252 | 253 | ### 3. Sharing Information 254 | 255 | We may share or disclose the data we collect, including your personal information: 256 | 257 | - To third parties as needed for the provision of the Services, including those third-party service providers and vendors that support the Services for functions such as IT support, hosting, and related services 258 | - Via APIs and/or software development kits ("SDKs") as part of the functionality of the Services 259 | - When we believe providing such information is necessary to comply with law, and other agreements with you, or protect the rights, property, or security of Jito, our agents and employees or users, including sharing information with other organizations for fraud prevention and detection purposes 260 | - With business partners if we are involved in a merger, acquisition, financing, reorganization, bankruptcy, receivership, purchase or sale of assets, or transition of service to another provider 261 | 262 | We do not share your information or other data about the Services for marketing purposes. 263 | 264 | ### 4. Location of Information 265 | 266 | Please be aware that data and information collected via the Services may be processed, stored, and used in the United States as well as any other jurisdiction in the world. Data protection laws in the United States may be different from those of your country of residence. Your use of the Services or provision of any information therefore constitutes your consent to the transfer to and from, processing, usage, sharing, and storage of information about you in the United States and other jurisdictions as set out in this Policy. 267 | 268 | Note that the data protection laws that apply to you in your jurisdiction may be different from the laws that govern your data as collected, stored, processed and transferred as part of your use of or access to the Services. 269 | 270 | ### 5. Retention of Information 271 | 272 | We store the data and information we collect as described in this Policy for different periods of time — in some instances, only for a matter of days and in others for as long as you use the Services, or as necessary to fulfill the purpose(s) for which it was collected, provide the Services, resolve disputes, establish legal defenses, conduct audits, pursue legitimate business purposes, enforce our agreements, and comply with applicable laws. 273 | 274 | To determine the appropriate retention period for personal information, we may consider applicable legal requirements, the amount, nature, and sensitivity of the personal information, certain risk factors, the purposes for which we process your personal information, and whether we can achieve those purposes through other means. 275 | 276 | ### 6. Access, Deletion, Choice 277 | 278 | If you need to update or delete certain information about you or your interactions with the Services, you can contact us for assistance at privacy@jito.wtf. 279 | 280 | You may have choices about the collection and use of information about you. You can choose not to provide certain information, but then you might not be able to use the Services. 281 | 282 | If you do not want to receive messages from us about the Services or other matters related to the Company and its technology, please adjust your communication preferences. 283 | 284 | In accordance with applicable law, you may have the right to: 285 | 286 | - Confirm whether we are processing your personal information; 287 | - Access and port your personal information, including: (i) obtaining access to or a copy of your personal information; and (ii) receiving an electronic copy of personal information that you have provided to us, or asking us to send that information to another company in a structured, commonly used, and machine readable format (also known as the "right of data portability"); 288 | - Request: 289 | - Correction of your personal information where it is inaccurate or incomplete; 290 | - Deletion of your personal information; 291 | - To opt-out of certain processing activities, including, as applicable, if we process your personal information for "targeted advertising" (as "targeted advertising" is defined by applicable privacy laws), if we "sell" your personal information (as "sell" is defined by applicable privacy laws), or if we engage in "profiling" in furtherance of certain "decisions that produce legal or similarly significant effects" concerning you (as such terms are defined by applicable privacy laws); 292 | - Restriction of or object to our processing of your personal information; 293 | - Withdraw your consent to our processing of your personal information. Please note that your withdrawal will only take effect for future processing, and will not affect the lawfulness of processing before the withdrawal; and 294 | - Appeal any decision to decline to process your request. 295 | 296 | For additional information related to choices on data privacy in certain jurisdictions, please see Section 9 below. 297 | 298 | If you would like to exercise any of these rights, please contact us as set forth in "Contact Us" below. We will process such requests in accordance with applicable laws. 299 | 300 | ### 7. Children's Information 301 | 302 | The Services are intended for general users who are 18 years of age or older, and are in no way directed at children. We do not knowingly collect personal information from children. If you believe such information has been collected in error, please email privacy@jito.wtf to notify us of this. 303 | 304 | ### 8. Notices 305 | 306 | If you have any questions about this Policy, please contact us at privacy@jito.wtf. 307 | 308 | If you interact with the Services on behalf of or through your organization, then your information may also be subject to your organization's privacy practices and you should direct privacy inquiries to your organization. 309 | 310 | ### 9. Additional Information for Certain Jurisdictions 311 | 312 | #### California 313 | 314 | If you are a California resident, you have certain additional rights with respect to personal information about you under the California Consumer Privacy Act of 2018 ("CCPA"). 315 | 316 | We are required to inform you of: 317 | 318 | - What categories of information we may collect about you, including during the preceding 12 months; 319 | - The purposes for which we may use your personal information, including during the preceding 12 months; 320 | - The purposes of which we may share your personal information, including during the preceding 12 months; 321 | - In the preceding 12 months, we have not sold any personal information of consumers. 322 | 323 | You have the right to request to know: (i) the categories of personal information we have collected about you in the last 12 months; (ii) the specific pieces of personal information we have about you; (iii) the categories of sources from which that personal information was collected; (iv) the categories of your personal information that we sold or disclosed in the last 12 months, if applicable; (v) the categories of third parties to whom your personal information was sold or disclosed in the last 12 months; and (vi) the purpose for collecting and selling your personal information, if applicable. These rights are subject to limitations as described in the relevant law. We may deny your request if we need to do so to comply with our legal rights or obligations. 324 | 325 | We will not discriminate against any user for exercising their CCPA rights. 326 | 327 | You may exercise these rights yourself or you may designate an authorized agent to make these requests on your behalf. To protect your information, we may need to verify your identity before processing your request, including by collecting additional information to verify your identity, such as government issued identification documents. We will not fulfill your request unless you have provided sufficient information for us to reasonably verify you are the individual about whom we collected personal information. We will only use the personal information provided in the verification process to verify your identity or authority to make a request and to track and document request responses, unless you initially provided the information for another purpose. When we verify your agent's request, we may verify your identity and request a signed document from your agent that authorizes your agent to make the request on your behalf. To protect your personal information, we reserve the right to deny a request from an agent who does not submit proof that they have been authorized by you to act on their behalf. 328 | 329 | If you would like to exercise any of these rights, please contact us at privacy@jito.wtf. 330 | 331 | #### European Economic Area, the United Kingdom, and Switzerland 332 | 333 | If you are a data subject in the European Economic Area, the United Kingdom, or Switzerland, you have certain rights with respect to your personal data pursuant to the General Data Protection Regulation of the European Union ("GDPR") and similar laws. This section applies to you. 334 | 335 | References to "personal information" in this Policy are equivalent to "personal data" as defined under GDPR. 336 | 337 | We process your personal data as necessary and in reliance on the legal bases below, in order to: 338 | 339 | - Provide access to and improve the Services; 340 | - Comply with applicable laws and our legal obligations, and prevent fraud; 341 | - Ensure safety and security of your data, the Services and the Company; 342 | - Send communications, or for research or analytics; and 343 | - Comply with your consent, which may be withdrawn at any time by communicating your withdrawal to us. 344 | 345 | You may: (a) ask whether we have any personal data about you and request a copy of such personal data; (b) request that we update or correct inaccuracies in your personal data; (c) request that we delete your personal data; (d) request a portable copy of your personal data; (e) request that we restrict the processing of your personal data if such processing is inappropriate; and (f) object to our processing of your personal data. These rights are subject to applicable law. 346 | 347 | If you would like to exercise any of these rights, please contact us. To protect your information, we may need to verify your identity before processing your request, including by collecting additional information about your identity, such as government issued identification documents. 348 | 349 | If your personal information is subject to the applicable data protection laws of the European Economic Area, Switzerland, or the United Kingdom, you have the right to lodge a complaint with the competent supervisory authority or attorney general if you believe our processing of your personal information violates applicable law. 350 | 351 | ### 10. Contact Us 352 | 353 | If you have any questions about this Policy or how we collect, use, or share your information, please contact us at privacy@jito.wtf. 354 | --------------------------------------------------------------------------------