Files
smom-dbis-138/docs/api/BLOCKSCOUT_API.md

301 lines
5.3 KiB
Markdown
Raw Permalink Normal View History

# Blockscout API Documentation
API endpoints for Blockscout explorer on ChainID 138.
## Base URL
```
https://explorer.d-bis.org
```
## API Endpoints
### Token Metadata
#### Get Token Information
```
GET /api/v2/tokens/{address}
```
**Parameters**:
- `address` (path): Token contract address
**Response**:
```json
{
"address": "0x...",
"name": "Wrapped Ether",
"symbol": "WETH",
"decimals": 18,
"total_supply": "1000000000000000000000",
"holders_count": 100,
"transactions_count": 1000
}
```
#### Get Token Holders
```
GET /api/v2/tokens/{address}/holders
```
**Parameters**:
- `address` (path): Token contract address
- `page` (query): Page number (default: 1)
- `offset` (query): Items per page (default: 50)
**Response**:
```json
{
"items": [
{
"address": "0x...",
"value": "100000000000000000000",
"token": {
"address": "0x...",
"symbol": "WETH",
"decimals": 18
}
}
],
"next_page_path": "/api/v2/tokens/{address}/holders?page=2"
}
```
#### Get Token Transfers
```
GET /api/v2/tokens/{address}/transfers
```
**Parameters**:
- `address` (path): Token contract address
- `page` (query): Page number (default: 1)
- `offset` (query): Items per page (default: 50)
**Response**:
```json
{
"items": [
{
"from": {
"hash": "0x...",
"name": null
},
"to": {
"hash": "0x...",
"name": null
},
"total": {
"value": "100000000000000000000",
"token": {
"address": "0x...",
"symbol": "WETH",
"decimals": 18
}
},
"tx_hash": "0x...",
"timestamp": "2024-12-19T00:00:00Z"
}
],
"next_page_path": "/api/v2/tokens/{address}/transfers?page=2"
}
```
### Account Information
#### Get Account Balance
```
GET /api/v2/addresses/{address}
```
**Parameters**:
- `address` (path): Account address
**Response**:
```json
{
"hash": "0x...",
"balance": "1000000000000000000000",
"tx_count": 100,
"token_count": 10
}
```
#### Get Account Tokens
```
GET /api/v2/addresses/{address}/token-balances
```
**Parameters**:
- `address` (path): Account address
- `page` (query): Page number (default: 1)
- `offset` (query): Items per page (default: 50)
**Response**:
```json
{
"items": [
{
"address": "0x...",
"value": "100000000000000000000",
"token": {
"address": "0x...",
"name": "Wrapped Ether",
"symbol": "WETH",
"decimals": 18,
"logo_url": "https://explorer.d-bis.org/images/tokens/weth.png"
}
}
],
"next_page_path": "/api/v2/addresses/{address}/token-balances?page=2"
}
```
### Contract Verification
#### Get Contract Source Code
```
GET /api/v2/smart-contracts/{address}
```
**Parameters**:
- `address` (path): Contract address
**Response**:
```json
{
"address": "0x...",
"name": "WETH",
"compiler_version": "0.8.19",
"optimization": true,
"source_code": "// SPDX-License-Identifier: MIT\n...",
"abi": [...],
"verified": true
}
```
## CORS Configuration
Blockscout must allow CORS requests from:
- `https://portfolio.metamask.io` (MetaMask Portfolio)
- `https://metamask.io` (MetaMask website)
- `https://chainlist.org` (Chainlist)
### CORS Headers
```
Access-Control-Allow-Origin: https://portfolio.metamask.io
Access-Control-Allow-Methods: GET, OPTIONS
Access-Control-Allow-Headers: Content-Type
Access-Control-Max-Age: 3600
```
## Rate Limiting
### Limits
- **Default**: 120 requests/minute per IP
- **API Keys**: Higher limits for API key holders
- **Public**: Lower limits for public access
### Headers
```
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 100
X-RateLimit-Reset: 1638360000
```
## Token Logo Serving
### Logo URL Format
```
https://explorer.d-bis.org/images/tokens/{address}.png
```
### Fallback
If token logo is not found, use default token logo or logo from token list.
### Supported Formats
- PNG (preferred)
- SVG
- JPEG
### Size Requirements
- **Recommended**: 512x512 pixels
- **Minimum**: 128x128 pixels
- **Maximum**: 1024x1024 pixels
## MetaMask Portfolio Integration
### Required Endpoints
For MetaMask Portfolio to display tokens:
1. **Token Metadata**: `/api/v2/tokens/{address}`
2. **Token Holders**: `/api/v2/tokens/{address}/holders`
3. **Account Tokens**: `/api/v2/addresses/{address}/token-balances`
4. **Token Transfers**: `/api/v2/tokens/{address}/transfers`
### CORS Requirements
Blockscout must allow CORS from Portfolio domain.
### Token List Integration
Portfolio uses token lists for auto-detection. Ensure token metadata matches token list entries.
## Error Handling
### Error Responses
```json
{
"error": "Error message",
"status": 400
}
```
### Common Errors
- **400 Bad Request**: Invalid parameters
- **404 Not Found**: Resource not found
- **429 Too Many Requests**: Rate limit exceeded
- **500 Internal Server Error**: Server error
## Examples
### Get WETH Token Information
```bash
curl https://explorer.d-bis.org/api/v2/tokens/0xYourWETHAddress
```
### Get Account Token Balances
```bash
curl https://explorer.d-bis.org/api/v2/addresses/0xYourAddress/token-balances
```
### Get Token Holders
```bash
curl https://explorer.d-bis.org/api/v2/tokens/0xYourTokenAddress/holders
```
## References
- [Blockscout API Documentation](https://docs.blockscout.com/for-developers/api)
- [Blockscout GitHub](https://github.com/blockscout/blockscout)