🌐 Web3 Restful Gateway
A multi-chain Web3 gateway service that provides unified RESTful APIs for blockchain interaction.
🚀 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)
| 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)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| 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.