Skip to main content

🌐 Web3 Restful Gateway

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

Python 3.10+ FastAPI Web3.py License: 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

pip install web3gateway

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

touch config.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

redis-server

Step4: Start the server

web3gateway -c config.json

Step5: Test the server

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

📦 Development Installation

# 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

POST /transaction/assemble
POST /transaction/send
POST /transaction/get_receipt

Account Operations

POST /account/balance
POST /account/token_balance
POST /account/txlist

System Operations

GET /ping

🎮 API Examples

Get Account Balance

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:

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

Get Token Balance

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:

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

Assemble Transaction

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:

{
    "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

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:

{
    "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.

📜 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.

Metadata

Release files for web3gateway 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for web3gateway 0.1.3
File Size Uploaded Provenance Actions
web3gateway-0.1.3.tar.gz 31.4 kB Without provenance Details for web3gateway-0.1.3.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for web3gateway 0.1.3
File Interpreter ABI Platform Actions
web3gateway-0.1.3-py3-none-any.whl Python 3 none any Details for web3gateway-0.1.3-py3-none-any.whl

Total release size: 64.9 kB

Release files / web3gateway-0.1.3.tar.gz

Download URL web3gateway-0.1.3.tar.gz
Size 31.4 kB
Tags Source
SHA-256 checksum
How to use checksums
2229b787616328e984c7215885c0f60e18bc65574f2f1e50edb5130c26a63f6b
BLAKE2b-256 checksum
How to use checksums
1c5b9ae5309936740477a5f7f11840f4eeed18b9e118f9eeb218d6eccd2243fc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.7

Release files / web3gateway-0.1.3-py3-none-any.whl

Download URL web3gateway-0.1.3-py3-none-any.whl
Size 33.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4df5e67f8f6c1646faf706856c7e8110c36880e52cd6f2920df98ba448c20866
BLAKE2b-256 checksum
How to use checksums
e84e35f6bdb0c88573c4cd7e48396e436d73f2d40d5bc46da19634144fd78bf6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.7

Security for web3gateway 0.1.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page