A multi-chain Web3 gateway service that provides unified RESTful APIs for blockchain interaction.
- ๐ 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
- 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
pip install web3gateway
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
}
redis-server
web3gateway -c config.json
curl -X GET "http://localhost:8000/ping"
# 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"
POST /transaction/assemble
POST /transaction/send
POST /transaction/get_receipt
POST /account/balance
POST /account/token_balance
POST /account/txlist
GET /ping
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"
}
}
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"
}
}
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.
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"
}
]
}
}
- Ethereum Mainnet (ChainID: 1)
- Binance Smart Chain (ChainID: 56)
- Polygon (ChainID: 137)
- Arbitrum (ChainID: 42161)
- Optimism (ChainID: 10)
- And more...
- Response Time: < 100ms (cached)
- Throughput: 1000+ TPS
- Cache Hit Ratio: ~80%
- Basic Authentication
- Rate Limiting
- Input Validation
- Error Handling
- Response Sanitization
PRs are welcome! Check out our contribution guidelines.
MIT License - fork, modify and use as you wish.
This is a production-ready gateway but use at your own risk. Always verify transactions before signing.