Metadata-Version: 2.2
Name: web3gateway
Version: 0.1.3
Summary: Web3Gateway - A Restful Web3 Gateway Service
Author-email: daboooooo <horsen666@gmail.com>
License: MIT License
Project-URL: Homepage, https://github.com/daboooooo/web3gateway
Project-URL: Documentation, https://github.com/daboooooo/web3gateway
Project-URL: Bug Tracker, https://github.com/daboooooo/web3gateway/issues
Keywords: web3,blockchain,ethereum,gateway,restful,api
Classifier: Environment :: Console
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Operating System :: MacOS
Classifier: Operating System :: Unix
Classifier: Topic :: Office/Business :: Financial :: Investment
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: fastapi
Requires-Dist: uvicorn
Requires-Dist: web3
Requires-Dist: pydantic
Requires-Dist: requests
Requires-Dist: redis
Requires-Dist: python-multipart
Provides-Extra: web3ai
Requires-Dist: scikit-learn; extra == "web3ai"
Requires-Dist: joblib; extra == "web3ai"
Requires-Dist: catboost; platform_machine != "aarch64" and extra == "web3ai"
Requires-Dist: lightgbm; extra == "web3ai"
Requires-Dist: xgboost; extra == "web3ai"
Requires-Dist: tensorboard; extra == "web3ai"
Requires-Dist: datasieve>=0.1.5; extra == "web3ai"
Provides-Extra: develop
Requires-Dist: coveralls; extra == "develop"
Requires-Dist: isort; extra == "develop"
Requires-Dist: mypy; extra == "develop"
Requires-Dist: pre-commit; extra == "develop"
Requires-Dist: pytest-asyncio; extra == "develop"
Requires-Dist: pytest-cov; extra == "develop"
Requires-Dist: pytest-mock; extra == "develop"
Requires-Dist: pytest-random-order; extra == "develop"
Requires-Dist: pytest-timeout; extra == "develop"
Requires-Dist: pytest-xdist; extra == "develop"
Requires-Dist: pytest; extra == "develop"
Requires-Dist: ruff; extra == "develop"
Requires-Dist: time-machine; extra == "develop"
Requires-Dist: types-cachetools; extra == "develop"
Requires-Dist: types-filelock; extra == "develop"
Requires-Dist: types-python-dateutil; extra == "develop"
Requires-Dist: types-requests; extra == "develop"
Requires-Dist: types-tabulate; extra == "develop"
Provides-Extra: jupyter
Requires-Dist: jupyter; extra == "jupyter"
Requires-Dist: nbstripout; extra == "jupyter"
Requires-Dist: ipykernel; extra == "jupyter"
Requires-Dist: nbconvert; extra == "jupyter"
Provides-Extra: all
Requires-Dist: freqtrade[jupyter,web3ai]; extra == "all"
Provides-Extra: dev
Requires-Dist: freqtrade[all,develop]; extra == "dev"

# 🌐 Web3 Restful Gateway

> A multi-chain Web3 gateway service that provides unified RESTful APIs for blockchain interaction.

[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
[![FastAPI](https://img.shields.io/badge/FastAPI-0.68%2B-green.svg)](https://fastapi.tiangolo.com)
[![Web3.py](https://img.shields.io/badge/web3.py-6.0.0-orange.svg)](https://web3py.readthedocs.io/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

## 🚀 Features

- 🔗 **Multi-Chain Support**: Seamlessly interact with multiple EVM-compatible blockchains
- 🔄 **Real-time Data**: Live blockchain data through Infura and Etherscan V2 API
- 🛡️ **Battle-tested Security**: Basic auth + rate limiting
- 🎯 **High Performance**: Redis caching for frequently accessed data
- 📊 **Gas Optimization**: Smart gas estimation and transaction cost prediction

## 🛠️ Tech Stack

- **FastAPI**: High-performance async web framework
- **Web3.py**: Ethereum interaction library
- **Etherscan V2**: Multi-chain data queries
- **Redis**: Query result caching
- **Pydantic**: Data validation and settings management

## 🔧 Quick Start

### Step1: Install the package

```bash
pip install web3gateway
```

### Step2: Create a config file and edit it with your credentials

```bash
touch config.json
```

```json
{
    "auth_username": "test_user",
    "auth_password": "test_password",
    "infura_project_id": "your infura project id",
    "etherscan_api_key": "your etherscan api key",
    "redis_url": "redis://localhost:6379",
    "redis_host": "localhost",
    "redis_port": 6379,
    "redis_db": 0,
    "redis_password": "",
    "rate_limit_calls": 5,
    "rate_limit_period": 1,
    "cache_expiration": 10
}
```

### Step3: Make sure you have redis-server installed and running correctly

```bash
redis-server
```

### Step4: Start the server

```bash
web3gateway -c config.json
```

### Step5: Test the server

```bash
curl -X GET "http://localhost:8000/ping"
```

## 📦 Development Installation

```bash
# Clone the repo
git clone https://github.com/daboooooo/web3gateway.git

# Create virtual environment and install dependencies
cd web3gateway
./setup.sh -i
source .env/bin/activate

# Set up configuration
cp config.json.example config.json
# Edit config.json with your credentials

# Start the server
web3gateway

# Test the server
curl -X GET "http://localhost:8000/ping"
```

## 🔥 Core APIs

### Transaction Operations

```http
POST /transaction/assemble
POST /transaction/send
POST /transaction/get_receipt
```

### Account Operations

```http
POST /account/balance
POST /account/token_balance
POST /account/txlist
```

### System Operations

```http
GET /ping
```

## 🎮 API Examples

### Get Account Balance

```bash
curl -X POST "http://localhost:8000/account/balance" \
     -H "Content-Type: application/json" \
     -u "test_user:test_password" \
     -d '{
       "chain_id": 1,
       "address": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e"
     }'
```

Response:

```json
{
    "timestamp": 1677654321000,
    "data": {
        "balance": "1234567890000000000"
    }
}
```

### Get Token Balance

```bash
curl -X POST "http://localhost:8000/account/token_balance" \
     -H "Content-Type: application/json" \
     -u "test_user:test_password" \
     -d '{
       "chain_id": 1,
       "contractaddress": "0xdac17f958d2ee523a2206206994597c13d831ec7",
       "address": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e"
     }'
```

Response:

```json
{
    "timestamp": 1677654321000,
    "data": {
        "contract address": "0xdac17f958d2ee523a2206206994597c13d831ec7",
        "address": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
        "token balance": "150000000"
    }
}
```

### Assemble Transaction

```bash
curl -X POST "http://localhost:8000/transaction/assemble" \
     -H "Content-Type: application/json" \
     -u "test_user:test_password" \
     -d '{
       "chain_id": 1,
       "tx_params": {
         "from": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
         "to": "0x1234567890123456789012345678901234567890",
         "value": "1000000000000000000"
       },
       "gas_level": "normal"
     }'
```

Response:

```json
{
    "timestamp": 1677654321000,
    "data": {
        "chainId": 1,
        "nonce": 5,
        "gasPrice": "20000000000",
        "gas": 21000,
        "to": "0x1234567890123456789012345678901234567890",
        "value": 1000000000000000000,
        "data": "0x",
        "maxPriorityFeePerGas":492407668,"maxFeePerGas":1632172748
    }
}
```

You can then sign and send the transaction using the `send` API.

### Get Transaction List

```bash
curl -X POST "http://localhost:8000/account/txlist" \
     -H "Content-Type: application/json" \
     -u "test_user:test_password" \
     -d '{
       "chain_id": 1,
       "address": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e"
     }'
```

Response:

```json
{
    "timestamp": 1677654321000,
    "data": {
        "last transactions": [
            {
                "blockNumber": "17584321",
                "timeStamp": "1677654000",
                "hash": "0xabcd...",
                "from": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
                "to": "0x1234...",
                "value": "1000000000000000000",
                "gas": "21000",
                "gasPrice": "20000000000"
            }
        ]
    }
}
```

## 🔌 Supported Networks

- Ethereum Mainnet (ChainID: 1)
- Binance Smart Chain (ChainID: 56)
- Polygon (ChainID: 137)
- Arbitrum (ChainID: 42161)
- Optimism (ChainID: 10)
- And more...

## ⚡️ Performance

- Response Time: < 100ms (cached)
- Throughput: 1000+ TPS
- Cache Hit Ratio: ~80%

## 🔒 Security Features

- Basic Authentication
- Rate Limiting
- Input Validation
- Error Handling
- Response Sanitization

## 🤝 Contributing

PRs are welcome! Check out our [contribution guidelines](CONTRIBUTING.md).

## 📜 License

MIT License - fork, modify and use as you wish.

## ⚠️ Disclaimer

This is a production-ready gateway but use at your own risk. Always verify transactions before signing.
