Skip to content

daboooooo/web3gateway

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

11 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐ŸŒ 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.

About

Web3 restfull gateway

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published