chore: refactor logging module, update genesis timestamp, remove model relationships, and reorganize routers

- Rename logging.py to logger.py and update import paths in poa.py and main.py
- Update devnet genesis timestamp to 1766828620
- Remove SQLModel Relationship declarations from Block, Transaction, and Receipt models
- Add SessionDep type alias and get_session dependency in coordinator-api deps
- Reorganize coordinator-api routers: replace explorer/registry with exchange, users, marketplace
This commit is contained in:
oib
2025-12-28 21:05:53 +01:00
parent cdaf1122c3
commit ff5486fe08
146 changed files with 33301 additions and 219 deletions

477
docs/partner-integration.md Normal file
View File

@ -0,0 +1,477 @@
# Partner Integration Guide
This guide helps third-party services integrate with the AITBC platform for explorers, analytics, and other services.
## Overview
AITBC provides multiple integration points for partners:
- REST APIs for real-time data
- WebSocket streams for live updates
- Export endpoints for bulk data
- Webhook notifications for events
## Getting Started
### 1. Register Your Application
Register your service to get API credentials:
```bash
curl -X POST https://aitbc.bubuit.net/api/v1/partners/register \
-H "Content-Type: application/json" \
-d '{
"name": "Your Service Name",
"description": "Brief description of your service",
"website": "https://yourservice.com",
"contact": "contact@yourservice.com",
"integration_type": "explorer"
}'
```
**Response:**
```json
{
"partner_id": "partner-uuid",
"api_key": "aitbc_xxxxxxxxxxxx",
"api_secret": "secret_xxxxxxxxxxxx",
"rate_limit": {
"requests_per_minute": 1000,
"requests_per_hour": 50000
}
}
```
### 2. Authenticate Requests
Use your API credentials for authenticated requests:
```bash
curl -H "Authorization: Bearer aitbc_xxxxxxxxxxxx" \
https://aitbc.bubuit.net/api/explorer/blocks
```
## API Endpoints
### Blockchain Data
#### Get Latest Blocks
```http
GET /api/explorer/blocks?limit={limit}&offset={offset}
```
**Response:**
```json
{
"blocks": [
{
"hash": "0x123...",
"height": 1000000,
"timestamp": "2025-12-28T18:00:00Z",
"proposer": "0xabc...",
"transaction_count": 150,
"gas_used": "15000000",
"size": 1024000
}
],
"total": 1000000
}
```
#### Get Block Details
```http
GET /api/explorer/blocks/{block_hash}
```
#### Get Transaction
```http
GET /api/explorer/transactions/{tx_hash}
```
#### Get Address Details
```http
GET /api/explorer/addresses/{address}?transactions={true|false}
```
### Marketplace Data
#### Get Active Offers
```http
GET /api/v1/marketplace/offers?status=active&limit={limit}
```
#### Get Bid History
```http
GET /api/v1/marketplace/bids?offer_id={offer_id}
```
#### Get Service Categories
```http
GET /api/v1/marketplace/services/categories
```
### Analytics Data
#### Get Network Stats
```http
GET /api/v1/analytics/network/stats
```
**Response:**
```json
{
"total_blocks": 1000000,
"total_transactions": 50000000,
"active_addresses": 10000,
"network_hashrate": 1500000000000,
"average_block_time": 5.2,
"marketplace_volume": {
"24h": "1500000",
"7d": "10000000",
"30d": "40000000"
}
}
```
#### Get Historical Data
```http
GET /api/v1/analytics/historical?metric={metric}&period={period}&start={timestamp}&end={timestamp}
```
**Metrics:**
- `block_count`
- `transaction_count`
- `active_addresses`
- `marketplace_volume`
- `gas_price`
**Periods:**
- `1h`, `1d`, `1w`, `1m`
## WebSocket Streams
Connect to the WebSocket for real-time updates:
```javascript
const ws = new WebSocket('wss://aitbc.bubuit.net/ws');
// Authenticate
ws.send(JSON.stringify({
type: 'auth',
api_key: 'aitbc_xxxxxxxxxxxx'
}));
// Subscribe to blocks
ws.send(JSON.stringify({
type: 'subscribe',
channel: 'blocks'
}));
// Subscribe to transactions
ws.send(JSON.stringify({
type: 'subscribe',
channel: 'transactions',
filters: {
to_address: '0xabc...'
}
}));
// Handle messages
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log(data);
};
```
### Available Channels
- `blocks` - New blocks
- `transactions` - New transactions
- `marketplace_offers` - New marketplace offers
- `marketplace_bids` - New bids
- `governance` - Governance proposals and votes
## Bulk Data Export
### Export Blocks
```http
POST /api/v1/export/blocks
```
**Request:**
```json
{
"start_block": 900000,
"end_block": 1000000,
"format": "json",
"compression": "gzip"
}
```
**Response:**
```json
{
"export_id": "export-uuid",
"estimated_size": "500MB",
"download_url": "https://aitbc.bubuit.net/api/v1/export/download/export-uuid"
}
```
### Export Transactions
```http
POST /api/v1/export/transactions
```
## Webhooks
Configure webhooks to receive event notifications:
```bash
curl -X POST https://aitbc.bubuit.net/api/v1/webhooks \
-H "Authorization: Bearer aitbc_xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"url": "https://yourservice.com/webhook",
"events": ["block.created", "transaction.confirmed"],
"secret": "your_webhook_secret"
}'
```
**Webhook Payload:**
```json
{
"event": "block.created",
"timestamp": "2025-12-28T18:00:00Z",
"data": {
"block": {
"hash": "0x123...",
"height": 1000000,
"proposer": "0xabc..."
}
},
"signature": "sha256_signature"
}
```
Verify webhook signatures:
```javascript
const crypto = require('crypto');
function verifyWebhook(payload, signature, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}
```
## Rate Limits
API requests are rate-limited based on your partner tier:
| Tier | Requests/Minute | Requests/Hour | Features |
|------|----------------|--------------|----------|
| Basic | 100 | 5,000 | Public data |
| Pro | 1,000 | 50,000 | + WebSocket |
| Enterprise | 10,000 | 500,000 | + Bulk export |
Rate limit headers are included in responses:
```
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1640692800
```
## SDKs and Libraries
### Python SDK
```python
from aitbc_sdk import AITBCClient
client = AITBCClient(
api_key="aitbc_xxxxxxxxxxxx",
base_url="https://aitbc.bubuit.net/api/v1"
)
# Get latest block
block = client.blocks.get_latest()
print(f"Latest block: {block.height}")
# Stream transactions
for tx in client.stream.transactions():
print(f"New tx: {tx.hash}")
```
### JavaScript SDK
```javascript
import { AITBCClient } from 'aitbc-sdk-js';
const client = new AITBCClient({
apiKey: 'aitbc_xxxxxxxxxxxx',
baseUrl: 'https://aitbc.bubuit.net/api/v1'
});
// Get network stats
const stats = await client.analytics.getNetworkStats();
console.log('Network stats:', stats);
// Subscribe to blocks
client.subscribe('blocks', (block) => {
console.log('New block:', block);
});
```
## Explorer Integration Guide
### Display Blocks
```html
<div class="block-list">
{% for block in blocks %}
<div class="block-item">
<a href="/block/{{ block.hash }}">
Block #{{ block.height }}
</a>
<span class="timestamp">{{ block.timestamp }}</span>
<span class="proposer">{{ block.proposer }}</span>
</div>
{% endfor %}
</div>
```
### Transaction Details
```javascript
async function showTransaction(txHash) {
const tx = await client.transactions.get(txHash);
document.getElementById('tx-hash').textContent = tx.hash;
document.getElementById('tx-status').textContent = tx.status;
document.getElementById('tx-from').textContent = tx.from_address;
document.getElementById('tx-to').textContent = tx.to_address;
document.getElementById('tx-amount').textContent = tx.amount;
document.getElementById('tx-gas').textContent = tx.gas_used;
// Show events
const events = await client.transactions.getEvents(txHash);
renderEvents(events);
}
```
### Address Activity
```javascript
async function loadAddress(address) {
const [balance, transactions, tokens] = await Promise.all([
client.addresses.getBalance(address),
client.addresses.getTransactions(address),
client.addresses.getTokens(address)
]);
updateBalance(balance);
renderTransactions(transactions);
renderTokens(tokens);
}
```
## Analytics Integration
### Custom Dashboards
```python
import plotly.graph_objects as go
from aitbc_sdk import AITBCClient
client = AITBCClient(api_key="your_key")
# Get historical data
data = client.analytics.get_historical(
metric='transaction_count',
period='1d',
start='2025-01-01',
end='2025-12-28'
)
# Create chart
fig = go.Figure()
fig.add_trace(go.Scatter(
x=data.timestamps,
y=data.values,
mode='lines',
name='Transactions per Day'
))
fig.show()
```
### Real-time Monitoring
```javascript
const client = new AITBCClient({ apiKey: 'your_key' });
// Monitor network health
client.subscribe('blocks', (block) => {
const blockTime = calculateBlockTime(block);
updateBlockTimeMetric(blockTime);
if (blockTime > 10) {
alert('Block time is high!');
}
});
// Monitor marketplace activity
client.subscribe('marketplace_bids', (bid) => {
updateBidChart(bid);
checkForAnomalies(bid);
});
```
## Best Practices
1. **Caching**: Cache frequently accessed data
2. **Pagination**: Use pagination for large datasets
3. **Error Handling**: Implement proper error handling
4. **Rate Limiting**: Respect rate limits and implement backoff
5. **Security**: Keep API keys secure and use HTTPS
6. **Webhooks**: Verify webhook signatures
7. **Monitoring**: Monitor your API usage and performance
## Support
For integration support:
- Documentation: https://aitbc.bubuit.net/docs/
- API Reference: https://aitbc.bubuit.net/api/v1/docs
- Email: partners@aitbc.io
- Discord: https://discord.gg/aitbc
## Example Implementations
### Block Explorer
- GitHub: https://github.com/aitbc/explorer-example
- Demo: https://explorer.aitbc-example.com
### Analytics Platform
- GitHub: https://github.com/aitbc/analytics-example
- Demo: https://analytics.aitbc-example.com
### Mobile App
- GitHub: https://github.com/aitbc/mobile-example
- iOS: https://apps.apple.com/aitbc-wallet
- Android: https://play.google.com/aitbc-wallet
## Changelog
### v1.2.0 (2025-12-28)
- Added governance endpoints
- Improved WebSocket reliability
- New analytics metrics
### v1.1.0 (2025-12-15)
- Added bulk export API
- Webhook support
- Python SDK improvements
### v1.0.0 (2025-12-01)
- Initial release
- REST API v1
- WebSocket streams
- JavaScript SDK