Use UV for better package management

This commit is contained in:
warproxxx
2025-11-03 09:26:42 -08:00
parent 7c7ef82c80
commit 0a8ff4cefd
6 changed files with 2968 additions and 42 deletions
+47 -7
View File
@@ -24,22 +24,62 @@ The repository consists of several interconnected modules:
## Requirements
- Python 3.9 with latest setuptools
- Python 3.9.10 or higher
- Node.js (for poly_merger)
- Google Sheets API credentials
- Polymarket account and API credentials
## Installation
1. **Clone the repository**:
This project uses UV for fast, reliable package management.
### Install UV
```bash
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
# Or with pip
pip install uv
```
### Install Dependencies
```bash
# Install all dependencies
uv sync
# Install with development dependencies (black, pytest)
uv sync --extra dev
```
### Quick Start
```bash
# Run the market maker (recommended)
uv run python main.py
# Update market data
uv run python update_markets.py
# Update statistics
uv run python update_stats.py
```
### Setup Steps
1. **Clone the repository**:
```bash
git clone https://github.com/yourusername/poly-maker.git
cd poly-maker
```
2. **Install Python dependencies**:
```
pip install -r requirements.txt
```bash
uv sync
```
3. **Install Node.js dependencies for the merger**:
@@ -67,14 +107,14 @@ Make sure your wallet has done at least one trade thru the UI so that the permis
- Update `SPREADSHEET_URL` in your `.env` file
7. **Update market data**:
- Run `python update_markets.py` to fetch all available markets
- Run `uv run python update_markets.py` to fetch all available markets
- This should run continuously in the background (preferably on a different IP than your trading bot)
- Add markets you want to trade to the "Selected Markets" sheet. You'd wanna select markets from the "Volatility Markets" sheet.
- Configure corresponding parameters in the "Hyperparameters" sheet. Default parameters that worked well in November are there.
8. **Start the market making bot**:
```
python main.py
```bash
uv run python main.py
```
## Configuration
+12 -12
View File
@@ -4,7 +4,7 @@ from py_clob_client.clob_types import OrderArgs, BalanceAllowanceParams, AssetTy
from py_clob_client.order_builder.constants import BUY
from web3 import Web3
from web3.middleware import geth_poa_middleware
from web3.middleware import ExtraDataToPOAMiddleware
import json
@@ -41,8 +41,8 @@ def get_clob_client():
def approveContracts():
web3 = Web3(Web3.HTTPProvider("https://polygon-rpc.com"))
web3.middleware_onion.inject(geth_poa_middleware, layer=0)
wallet = web3.eth.account.privateKeyToAccount(os.getenv("PK"))
web3.middleware_onion.inject(ExtraDataToPOAMiddleware, layer=0)
wallet = web3.eth.account.from_key(os.getenv("PK"))
with open('erc20ABI.json', 'r') as file:
@@ -56,7 +56,7 @@ def approveContracts():
for address in ['0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E', '0xC5d563A36AE78145C45a50134d48A1215220f80a', '0xd91E80cF2E7be2e162c6513ceD06f1dD0dA35296']:
usdc_nonce = web3.eth.getTransactionCount( wallet.address )
usdc_nonce = web3.eth.get_transaction_count( wallet.address )
raw_usdc_txn = usdc_contract.functions.approve(address, int(MAX_INT, 0)).build_transaction({
"chainId": 137,
"from": wallet.address,
@@ -69,41 +69,41 @@ def approveContracts():
print(f'USDC Transaction for {address} returned {usdc_tx_receipt}')
time.sleep(1)
ctf_nonce = web3.eth.getTransactionCount( wallet.address )
ctf_nonce = web3.eth.get_transaction_count( wallet.address )
raw_ctf_approval_txn = ctf_contract.functions.setApprovalForAll(address, True).buildTransaction({
raw_ctf_approval_txn = ctf_contract.functions.setApprovalForAll(address, True).build_transaction({
"chainId": 137,
"from": wallet.address,
"nonce": ctf_nonce
})
signed_ctf_approval_tx = web3.eth.account.sign_transaction(raw_ctf_approval_txn, private_key=os.getenv("PK"))
send_ctf_approval_tx = web3.eth.send_raw_transaction(signed_ctf_approval_tx.rawTransaction)
send_ctf_approval_tx = web3.eth.send_raw_transaction(signed_ctf_approval_tx.raw_transaction)
ctf_approval_tx_receipt = web3.eth.wait_for_transaction_receipt(send_ctf_approval_tx, 600)
print(f'CTF Transaction for {address} returned {ctf_approval_tx_receipt}')
time.sleep(1)
nonce = web3.eth.getTransactionCount( wallet.address )
nonce = web3.eth.get_transaction_count( wallet.address )
raw_txn_2 = usdc_contract.functions.approve("0xC5d563A36AE78145C45a50134d48A1215220f80a", int(MAX_INT, 0)).build_transaction({
"chainId": 137,
"from": wallet.address,
"nonce": nonce
})
signed_txn_2 = web3.eth.account.sign_transaction(raw_txn_2, private_key=os.getenv("PK"))
send_txn_2 = web3.eth.send_raw_transaction(signed_txn_2.rawTransaction)
send_txn_2 = web3.eth.send_raw_transaction(signed_txn_2.raw_transaction)
nonce = web3.eth.getTransactionCount( wallet.address )
nonce = web3.eth.get_transaction_count( wallet.address )
raw_txn_3 = usdc_contract.functions.approve("0xd91E80cF2E7be2e162c6513ceD06f1dD0dA35296", int(MAX_INT, 0)).build_transaction({
"chainId": 137,
"from": wallet.address,
"nonce": nonce
})
signed_txn_3 = web3.eth.account.sign_transaction(raw_txn_3, private_key=os.getenv("PK"))
send_txn_3 = web3.eth.send_raw_transaction(signed_txn_3.rawTransaction)
send_txn_3 = web3.eth.send_raw_transaction(signed_txn_3.raw_transaction)
def market_action( marketId, action, price, size ):
+3 -3
View File
@@ -8,7 +8,7 @@ from py_clob_client.constants import POLYGON
# Web3 libraries for blockchain interaction
from web3 import Web3
from web3.middleware import geth_poa_middleware
from web3.middleware import ExtraDataToPOAMiddleware
from eth_account import Account
import requests # HTTP requests
@@ -54,7 +54,7 @@ class PolymarketClient:
# Don't print sensitive wallet information
print("Initializing Polymarket client...")
chain_id=POLYGON
self.browser_wallet=Web3.toChecksumAddress(browser_address)
self.browser_wallet=Web3.to_checksum_address(browser_address)
# Initialize the Polymarket API client
self.client = ClobClient(
@@ -71,7 +71,7 @@ class PolymarketClient:
# Initialize Web3 connection to Polygon
web3 = Web3(Web3.HTTPProvider("https://polygon-rpc.com"))
web3.middleware_onion.inject(geth_poa_middleware, layer=0)
web3.middleware_onion.inject(ExtraDataToPOAMiddleware, layer=0)
# Set up USDC contract for balance checks
self.usdc_contract = web3.eth.contract(
+42
View File
@@ -0,0 +1,42 @@
[project]
name = "poly-maker"
version = "0.1.0"
description = "A market making bot for Polymarket prediction markets"
readme = "README.md"
requires-python = ">=3.9.10"
license = { text = "MIT" }
dependencies = [
"py-clob-client==0.28.0",
"python-dotenv==1.2.1",
"pandas==2.3.3",
"gspread==6.2.1",
"gspread-dataframe==4.0.0",
"sortedcontainers==2.4.0",
"eth-account==0.13.7",
"eth-utils==5.3.1",
"poly_eip712_structs==0.0.1",
"py_order_utils==0.3.2",
"requests==2.32.5",
"websockets==15.0.1",
"cryptography==46.0.3",
"google-auth==2.42.1",
"web3==7.14.0",
]
[project.optional-dependencies]
dev = [
"black==24.4.2",
"pytest==8.2.2",
]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel]
packages = ["poly_data", "poly_stats", "poly_utils", "data_updater"]
[tool.black]
line-length = 100
target-version = ["py39"]
-20
View File
@@ -1,20 +0,0 @@
py-clob-client==0.20.0
python-dotenv
pandas
gspread
gspread-dataframe
sortedcontainers
black==24.4.2
eth-account===0.13.0
eth-utils===4.1.1
poly_eip712_structs==0.0.1
py_order_utils==0.3.2
pytest==8.2.2
python-dotenv==0.19.2
requests==2.32.3
websockets==12.0
cryptography==42.0.8
asyncio
requests
google-auth
web3==5.3.1
Generated
+2864
View File
File diff suppressed because it is too large Load Diff