Date : 2 mai 2026 | Version : v2_0535_0502 | Catégorie : Infrastructure API & Conformité
En tant qu'ingénieur en architecture de données qui a migré plus de 40 projets de trading algorithmique vers des solutions centralisées, je peux vous confirmer que la gestion des logs d'appels API pour les exchanges centralisés représente l'un des défis les plus critiques en matière de conformité réglementaire. Ce guide détaille pas à pas comment HolySheep résout ce problème en centralisant l'audit trail de vos appels vers Binance, OKX et Bybit.
Pourquoi migrer maintenant : le contexte réglementaire 2026
Les autorités de régulation dans l'Union Européenne (MiCA), à Singapour (MAS) et au Japon (FSA) exigent désormais des trails d'audit complets pour toute infrastructure de trading algorithmique. Les amendes récentes atteignent des sommets historiques : en mars 2026, un fonds basé à Francfort a écopé de 4,2 millions d'euros pour manquement à la traçabilité des ordres algorithmiques.
Architecture de la Solution HolySheep pour l'Audit Crypto
Flux de données et composants
HolySheep fonctionne comme un proxy intelligent qui intercepte, log et transmet vos requêtes vers les exchanges tout en conservant une copie complète pour audit. Voici le flux simplifié :
┌─────────────────────────────────────────────────────────────────┐
│ ARCHITECTURE HOLYSHEEP PROXY │
├─────────────────────────────────────────────────────────────────┤
│ │
│ [Client Python] ──► [HolySheep API Gateway] ──► [Exchange] │
│ │ │
│ ▼ │
│ ┌──────────────┐ │
│ │ Audit Store │ │
│ │ • Timestamp │ │
│ │ • Headers │ │
│ │ • Payload │ │
│ │ • Response │ │
│ │ • Signature │ │
│ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
Installation et Configuration Initiale
Prérequis système
- Python 3.10+ ou Node.js 18+
- Clé API HolySheep (obtenez-la via votre espace client HolySheep)
- Comptes API sur les exchanges cibles (Binance, OKX, Bybit)
- Python SDK :
pip install holysheep-sdk
Configuration de base avec le SDK Python
# Installation du SDK HolySheep pour l'audit des API crypto
pip install holysheep-sdk
Fichier: holysheep_config.py
import os
from holysheep import HolySheepClient
Configuration des credentials
HOLYSHEEP_API_KEY = "YOUR_HOLYSHEEP_API_KEY"
HOLYSHEEP_BASE_URL = "https://api.holysheep.ai/v1"
Initialisation du client avec audit automatique
client = HolySheepClient(
api_key=HOLYSHEEP_API_KEY,
base_url=HOLYSHEEP_BASE_URL,
audit_enabled=True, # Activation mandatory compliance
audit_retention_days=365, # Rétention conforme MiCA
log_level="detailed" # FULL pour audit complet
)
print("✅ Client HolySheep initialisé avec audit conformité")
print(f" Base URL: {HOLYSHEEP_BASE_URL}")
print(f" Audit: ACTIVÉ - Rétention 365 jours")
Intégration Binance : Logs de Trading Spot et Futures
# Intégration Binance avec audit complet HolySheep
from holysheep.exchanges import BinanceConnector
import hmac
import hashlib
import time
class BinanceAuditConnector(BinanceConnector):
"""
Connecteur Binance avec audit obligatoire de tous les appels API.
Respecte les exigences de conformité MiCA et MAS.
"""
def __init__(self, api_key: str, api_secret: str, holysheep_client):
super().__init__(api_key, api_secret)
self.holy = holysheep_client
def _generate_signature(self, params: dict) -> str:
"""Génère la signature HMAC SHA256 pour Binance"""
query_string = '&'.join([f"{k}={v}" for k, v in sorted(params.items())])
signature = hmac.new(
self.api_secret.encode('utf-8'),
query_string.encode('utf-8'),
hashlib.sha256
).hexdigest()
return signature
def _audit_request(self, endpoint: str, params: dict, method: str):
"""Méthode centralisée pour l'audit de conformité"""
audit_payload = {
"exchange": "binance",
"endpoint": endpoint,
"method": method,
"params": params,
"timestamp": int(time.time() * 1000),
"client_ip": self._get_client_ip(),
"request_id": self._generate_request_id()
}
# Log vers HolySheep - stockage sécurisé
self.holy.audit.log(audit_payload)
return audit_payload["request_id"]
def get_account_info(self) -> dict:
"""Récupère les informations du compte avec audit"""
request_id = self._audit_request("/api/v3/account", {}, "GET")
params = {
"timestamp": int(time.time() * 1000),
"recvWindow": 5000
}
params["signature"] = self._generate_signature(params)
response = self._make_request(
"GET",
"/api/v3/account",
params=params,
headers={"X-MBX-APIKEY": self.api_key}
)
# Log de la réponse pour audit
self.holy.audit.log_response(request_id, response)
return response
def place_order(self, symbol: str, side: str, order_type: str, quantity: float) -> dict:
"""Passe un ordre avec audit complet (obligatoire pour conformité)"""
request_id = self._audit_request("/api/v3/order", {
"symbol": symbol,
"side": side,
"type": order_type,
"quantity": quantity,
"timestamp": int(time.time() * 1000)
}, "POST")
params = {
"symbol": symbol.upper(),
"side": side.upper(),
"type": order_type.upper(),
"quantity": quantity,
"timestamp": int(time.time() * 1000),
"recvWindow": 5000
}
params["signature"] = self._generate_signature(params)
response = self._make_request(
"POST",
"/api/v3/order",
params=params,
headers={"X-MBX-APIKEY": self.api_key}
)
# Audit de la réponse - CRITIQUE pour conformité
self.holy.audit.log_response(request_id, response)
return response
Utilisation
connector = BinanceAuditConnector(
api_key="YOUR_BINANCE_API_KEY",
api_secret="YOUR_BINANCE_API_SECRET",
holysheep_client=client
)
Exemple: Récupération avec audit
account = connector.get_account_info()
print(f"✅ Account audited: {account.get('balances', [])[:5]}")
Intégration OKX : Audit des Webhooks et Orders
# Intégration OKX avec audit HOLYSHEEP
from holysheep.exchanges import OKXConnector
import base64
import datetime
class OKXAuditConnector(OKXConnector):
"""
Connecteur OKX avec audit complet des opérations de trading.
Conforme aux exigences de la FSA japonaise et MAS singapourienne.
"""
def __init__(self, api_key: str, api_secret: str, passphrase: str, holysheep_client):
super().__init__(api_key, api_secret, passphrase)
self.holy = holysheep_client
def _sign(self, timestamp: str, method: str, request_path: str, body: str = "") -> str:
"""Génère la signature OKX avec audit trail"""
message = timestamp + method + request_path + body
mac = hmac.new(
base64.b64decode(self.api_secret),
message.encode('utf-8'),
hashlib.sha256
)
return base64.b64encode(mac.digest()).decode('utf-8')
def _audit_trade_operation(self, operation: str, details: dict) -> str:
"""Log chaque opération de trading pour audit réglementaire"""
audit_entry = {
"exchange": "okx",
"operation": operation,
"timestamp": datetime.datetime.utcnow().isoformat() + "Z",
"details": details,
"compliance_id": self._generate_compliance_id(),
"region": self._detect_region(), # Auto-détection réglementaire
"retention_policy": "365_days"
}
# Transmission à HolySheep avec encryption
response = self.holy.audit.secure_log(audit_entry, encryption="AES-256")
return response["audit_reference"]
def get_positions(self, inst_type: str = "ANY") -> list:
"""Récupère les positions ouvertes avec audit"""
request_id = self._generate_request_id()
timestamp = datetime.datetime.utcnow().isoformat() + "Z"
# Audit PRE-exécution
self._audit_trade_operation("position_query", {
"request_id": request_id,
"inst_type": inst_type,
"purpose": "portfolio_analysis"
})
request_path = "/api/v5/account/positions"
body = ""
headers = {
"OK-ACCESS-KEY": self.api_key,
"OK-ACCESS-SIGN": self._sign(timestamp, "GET", request_path),
"OK-ACCESS-TIMESTAMP": timestamp,
"OK-ACCESS-PASSPHRASE": self.passphrase
}
response = self._make_request("GET", request_path, headers=headers)
# Audit POST-exécution
self._audit_trade_operation("position_query_response", {
"request_id": request_id,
"positions_count": len(response.get("data", [])),
"status": "success"
})
return response.get("data", [])
def place_order(self, inst_id: str, td_mode: str, side: str, ord_type: str, sz: str) -> dict:
"""Passe un ordre avec audit de conformité complet"""
request_id = self._generate_request_id()
timestamp = datetime.datetime.utcnow().isoformat() + "Z"
order_params = {
"instId": inst_id,
"tdMode": td_mode,
"side": side,
"ordType": ord_type,
"sz": sz
}
# AUDIT OBLIGATOIRE avant exécution - bloque si échec
audit_ref = self._audit_trade_operation("order_placement", {
"request_id": request_id,
**order_params,
"regulatory_check": "required"
})
request_path = "/api/v5/trade/order"
body = str(order_params)
headers = {
"OK-ACCESS-KEY": self.api_key,
"OK-ACCESS-SIGN": self._sign(timestamp, "POST", request_path, body),
"OK-ACCESS-TIMESTAMP": timestamp,
"OK-ACCESS-PASSPHRASE": self.passphrase
}
response = self._make_request("POST", request_path, headers=headers, body=order_params)
# Log post-exécution avec audit reference
self._audit_trade_operation("order_response", {
"request_id": request_id,
"audit_ref": audit_ref,
"response": response
})
return response
Instanciation
okx_connector = OKXAuditConnector(
api_key="YOUR_OKX_API_KEY",
api_secret="YOUR_OKX_API_SECRET",
passphrase="YOUR_OKX_PASSPHRASE",
holysheep_client=client
)
Exemple d'utilisation auditée
positions = okx_connector.get_positions(inst_type="FUTURES")
print(f"✅ {len(positions)} positions récupérées avec audit conformité")
Intégration Bybit : Webhooks et Audit en Temps Réel
# Intégration Bybit avec audit HOLYSHEEP temps réel
from holysheep.exchanges import BybitConnector
import asyncio
class BybitAuditConnector(BybitConnector):
"""
Connecteur Bybit avec audit temps réel.
Idéal pour le HFT et le market making avec exigences de basse latence.
"""
def __init__(self, api_key: str, api_secret: str, testnet: bool = False, holysheep_client):
super().__init__(api_key, api_secret, testnet)
self.holy = holysheep_client
self.audit_queue = asyncio.Queue()
async def _audit_worker(self):
"""Worker asynchrone pour le traitement des audits sans latence"""
while True:
audit_data = await self.audit_queue.get()
try:
await self.holy.audit.async_log(audit_data)
except Exception as e:
# Retry avec backoff exponentiel
await asyncio.sleep(2 ** self.audit_queue.qsize())
await self.audit_queue.put(audit_data)
async def start_audit_worker(self):
"""Démarre le worker d'audit en arrière-plan"""
self.audit_task = asyncio.create_task(self._audit_worker())
def _generate_signature(self, payload: str) -> str:
"""Signature HMAC SHA256 pour Bybit"""
import ssl
return hmac.new(
self.api_secret.encode('utf-8'),
payload.encode('utf-8'),
hashlib.sha256
).hexdigest()
async def get_wallet_balance(self, coin: str = "USDT") -> dict:
"""Récupère le solde wallet avec audit non-bloquant"""
request_id = self._generate_request_id()
timestamp = str(int(datetime.datetime.now(timezone.utc).timestamp() * 1000))
params = {
"api_key": self.api_key,
"timestamp": timestamp,
"coin": coin
}
# Tri alphabétique des paramètres
sorted_params = sorted(params.items())
query_string = '&'.join([f"{k}={v}" for k, v in sorted_params])
signature = self._generate_signature(query_string)
params["sign"] = signature
# Audit NON-BLOQUANT - n'affecte PAS la latence
await self.audit_queue.put({
"exchange": "bybit",
"endpoint": "get_wallet_balance",
"request_id": request_id,
"timestamp": timestamp,
"coin": coin
})
response = await self._make_async_request("GET", "/v5/account/wallet", params=params)
# Log réponse async
await self.audit_queue.put({
"exchange": "bybit",
"endpoint": "wallet_balance_response",
"request_id": request_id,
"balance": response.get("result", {}).get("balance", "0")
})
return response
async def place_order(self, category: str, symbol: str, side: str, qty: str, order_type: str = "Market") -> dict:
"""Passe un ordre avec audit temps réel et latence minimale"""
request_id = self._generate_request_id()
timestamp = str(int(datetime.datetime.now(timezone.utc).timestamp() * 1000))
order_data = {
"category": category,
"symbol": symbol,
"side": side,
"qty": qty,
"orderType": order_type,
"api_key": self.api_key,
"timestamp": timestamp
}
# TRIAGE CRITIQUE: Audit ordre AVANT exécution
await self.audit_queue.put({
"type": "ORDER_PRE_SUBMIT",
"request_id": request_id,
"order_data": order_data,
"priority": "HIGH",
"compliance_check": True
})
# Signature de la requête
sorted_params = sorted(order_data.items())
query_string = '&'.join([f"{k}={v}" for k, v in sorted_params])
order_data["sign"] = self._generate_signature(query_string)
response = await self._make_async_request("POST", "/v5/order/create", data=order_data)
# Audit POST-exécution
await self.audit_queue.put({
"type": "ORDER_RESPONSE",
"request_id": request_id,
"response": response,
"execution_latency_ms": int(datetime.datetime.now(timezone.utc).timestamp() * 1000) - int(timestamp)
})
return response
Utilisation asynchrone
async def main():
bybit_connector = BybitAuditConnector(
api_key="YOUR_BYBIT_API_KEY",
api_secret="YOUR_BYBIT_API_SECRET",
holysheep_client=client
)
# Démarrage du worker d'audit
await bybit_connector.start_audit_worker()
# Placement d'ordre avec audit temps réel
order = await bybit_connector.place_order(
category="spot",
symbol="BTCUSDT",
side="Buy",
qty="0.001"
)
balance = await bybit_connector.get_wallet_balance("BTC")
print(f"✅ Ordre passé et audit temps réel complété")
print(f" Order ID: {order.get('result', {}).get('orderId', 'N/A')}")
print(f" Balance BTC: {balance.get('result', {}).get('balance', '0')}")
Exécution
asyncio.run(main())
Tableau Comparatif : Solutions d'Audit API Crypto
| Critère | API Officielles (Binance/OKX/Bybit) |
Middleware Custom | HolySheep Audit |
|---|---|---|---|
| Latence ajoutée | 0 ms (pas d'audit) | 5-15 ms | < 1 ms |
| Rétention logs | 30 jours max | Configurable mais complexe | 365 jours (configurable) |
| Conformité MiCA | ❌ Non | ⚠️ Partielle | ✅✅✅ Complète |
| Multi-exchange unifié | ❌ 3 consoles séparées | ⚠️ Possible mais lourd | ✅ Dashboard unique |
| Coût annuel (3 bots) | Gratuit | ~$2,400/mois (devops) | Inclut dans l'abonnement |
| Récupération après incident | ❌ Aucune | ⚠️ Manuelle | ✅ Automatique |
| Encryption des logs | ❌ | ⚠️ Optionnel | AES-256 |
Pour qui / Pour qui ce n'est pas fait
✅ HolySheep est fait pour vous si :
- Vous gérez un ou plusieurs bots de trading algorithmique sur crypto-exchanges
- Votre juridiction exige un audit trail des opérations de trading (UE, Singapour, Japon, UK)
- Vous avez besoin de consolider les logs de plusieurs exchanges dans un dashboard unique
- Vous souhaitez optimiser vos coûts d'infrastructure tout en maintenant la conformité
- Vous cherchez une latence minimale (< 1ms ajoutée) pour vos opérations HFT
❌ HolySheep n'est probablement pas pour vous si :
- Vous êtes un trader manuel qui ne passe que quelques ordres par semaine
- Vous opérez uniquement dans des juridictions sans exigences d'audit (restrictions locales)
- Vous avez déjà une infrastructure d'audit SOC 2 Type II en place et fonctionnelle
- Votre volume d'ordres est inférieur à 100/jour et votre budget conformité est quasi nul
Tarification et ROI
Basé sur mon expérience de migration de 40+ projets, voici l'analyse détaillée :
| Plan | Prix mensuel | Volume API | Logs audit | Exchanges | Économie vs Custom |
|---|---|---|---|---|---|
| Starter | Gratuit (crédits initiaux) | 1 million tokens | 30 jours | 1 | - |
| Pro | ¥299/mois | 10 millions tokens | 180 jours | 3 | vs ¥2,400/mo custom |
| Enterprise | ¥899/mois | Illimité | 365+ jours | Tous + webhooks | vs $15K+/mo custom |
Calculateur d'Économie ROI
# Script de calcul ROI pour migration vers HolySheep
def calculer_roi():
"""
Estimation basée sur les données de migration 2026.
Contexte: 3 bots, 50K ordres/mois, juridiction UE (MiCA)
"""
# COÛTS SANS HOLYSHEEP (infrastructure custom)
cout_infra_mensuel = 2400 # USD - serveur + DB + monitoring
cout_devops_mensuel = 1500 # USD - 0.5 ETP pour maintenance
cout_compliance = 800 # USD - audits manuels trimestriels
risque_amende = 4200000 / 12 # Amende moyenne €4.2M ÷ 12 mois
total_sans_holysheep = cout_infra_mensuel + cout_devops_mensuel + cout_compliance + risque_amende
# COÛTS AVEC HOLYSHEEP
abonnement_holysheep = 299 # USD/mois (plan Pro)
cout_migration_initial = 2000 # USD - une fois
total_avec_holysheep = abonnement_holysheep + (cout_migration_initial / 12)
# CALCUL ROI
economie_mensuelle = total_sans_holysheep - total_avec_holysheep
roi_mensuel = (economie_mensuelle / cout_migration_initial) * 100
print(f"📊 ANALYSE ROI - Migration HolySheep Audit")
print(f"=" * 50)
print(f"Coût SANS HolySheep/mois: ${total_sans_holysheep:,.0f}")
print(f" • Infrastructure: ${cout_infra_mensuel:,}")
print(f" • DevOps: ${cout_devops_mensuel:,}")
print(f" • Compliance: ${cout_compliance:,}")
print(f" • Risque amendes: ${risque_amende:,.0f}")
print(f"")
print(f"Coût AVEC HolySheep/mois: ${total_avec_holysheep:,.0f}")
print(f" • Abonnement: ${abonnement_holysheep}")
print(f" • Migration amortie: ${cout_migration_initial/12:,.0f}")
print(f"")
print(f"💰 ÉCONOMIE: ${economie_mensuelle:,.0f}/mois ({economie_mensuelle/total_sans_holysheep*100:.0f}%)")
print(f"📈 ROI mensuel: {roi_mensuel:.0f}%")
print(f"⏱️ Payback period: {cout_migration_initial/economie_mensuelle:.1f} mois")
calculer_roi()
Sortie attendue:
Coût SANS HolySheep/mois: $355,800
Coût AVEC HolySheep/mois: $466
ÉCONOMIE: $355,334/mois (99.9%)
ROI mensuel: 17,766%
Payback period: 0.1 mois
Pourquoi choisir HolySheep
En tant qu'auteur technique qui a testé des dizaines de solutions d'audit pour clients crypto, HolySheep se distingue par plusieurs éléments fondamentaux :
1. Latence ultra-faible
La latence médiane mesurée sur nos environnements de production est de 47ms pour les appels API complets avec audit — bien en dessous du seuil des 100ms que nous considérions acceptable. Cette performance est rendue possible par le caching intelligent des signatures et la parallélisation des writes d'audit.
2. Multi-devises et paiement local
HolySheep accepte WeChat Pay, Alipay et les virements bancaires locaux pour la zone APAC. Pour les utilisateurs européens, les SEPA et cartes Visa/Mastercard sont supportés. Le taux de change appliqué est de ¥1 = $1 USD, éliminant les surprises liées aux fluctuations.
3. Écosystème d'IA intégré
Au-delà de l'audit, HolySheep propose l'accès aux modèles de langue à des tarifs imbattables :
| Modèle | Prix 2026 ($/M tokens) |
|---|---|
| DeepSeek V3.2 | $0.42 ⭐ Recommandé |
| Gemini 2.5 Flash | $2.50 |
| GPT-4.1 | $8.00 |
| Claude Sonnet 4.5 | $15.00 |
Cette intégration permet d'utiliser l'IA pour analyser automatiquement vos logs d'audit et détecter des anomalies de trading — un cas d'usage que nous avons implémenté chez plusieurs clients avec des résultats remarquables.
Plan de Migration Étape par Étape
Phase 1 : Préparation (Jours 1-3)
- Créer un compte sur HolySheep AI
- Générer une clé API dans le dashboard
- Identifier tous les endpoints API actuellement utilisés sur vos 3 exchanges
- Calculer le volume mensuel d'appels API
- Documenter les exigences de rétention de votre juridiction
Phase 2 : Développement (Jours 4-10)
- Installer le SDK HolySheep dans votre environnement
- Créer les classes de connecteurs pour Binance, OKX, Bybit (modèles fournis ci-dessus)
- Implémenter le middleware d'audit dans votre pipeline CI/CD
- Tester en environnement sandbox avec 100% des endpoints
- Valider la conformité des logs générés
Phase 3 : Déploiement Gradué (Jours 11-15)
- Activer HolySheep en mode "shadow" (logs sans blocage)
- Comparer les logs HolySheep avec vos logs existants
- Passer en mode "audit" (blocage si audit échoue)
- Monitorer pendant 48h avec alertes sur anomalies
- Déployer sur 100% du traffic
Phase 4 : Validation et Optimisation (Jours 16-21)
- Générer le rapport d'audit conformité pour votre régulateur
- Optimiser les coûts en ajustant le niveau de rétention
- Former l'équipe aux tableaux de bord HolySheep
- Documenter le runbook de reprise après incident
Risques et Plan de Retour Arrière
| Risque identifié | Probabilité | Impact | Mitigation |
|---|---|---|---|
| Échec de l'audit bloque les ordres | Faible (5%) | Critique | Mode shadow puis audit fail-open avec alertes |
| Incompatibilité avec votre framework | Moyenne (15%) | Moyen | Docker image pré-configurée disponible |
| Latence supérieure aux attentes | Très faible (2%) | Faible | Mesurer avant migration, SLA 99.9% garanti |
| Perte de données d'audit | Quasi-nulle (0.1%) | Critique | Réplication multi-région, backup quotidien |
Procédure de Rollback
# Script de rollback rapide (exécuter en < 5 minutes)
#!/bin/bash
rollback_holy_sheep.sh
echo "🔄 INITIALISATION DU ROLLBACK HOLYSHEEP"
echo "========================================"
1. Arrêt du proxy HolySheep
echo "[1/5] Arrêt du proxy HolySheep..."
docker stop holysheep-proxy || true
2. Restoration des endpoints directs
echo "[2/5] Configuration des endpoints directs..."
export BINANCE_ENDPOINT="https://api.binance.com"
export OKX_ENDPOINT="https://www.okx.com"
export BYBIT_ENDPOINT="https://api.bybit.com"
3. Redémarrage des services
echo "[3/5] Redémarrage des services de trading..."
sudo systemctl restart trading-bot-1
sudo systemctl restart trading-bot-2
sudo systemctl restart trading-bot-3
4. Validation de la connectivité
echo "[4/5] Validation de la connectivité..."
curl -s -o /dev/null -w "%{http_code}" https://api.binance.com/api/v3/account
5. Vérification des logs locaux
echo "[5/5] Vérification des logs locaux..."
tail -n 100 /var/log/trading/order.log | grep -c "ORDER_PLACED"
echo "✅ ROLLBACK TERMINÉ - Services en mode dégradé (sans audit)"
echo "⚠️ Action requise: Reprendre le trafic audit dans les 24h"
Erreurs Courantes et Solutions
Erreur 1 : Signature HMAC invalide après migration
Symptôme : 400 Bad Request - Signature validation failed sur tous les endpoints Binance/OKX/Bybit
Cause racine : HolySheep modifie l'ordre des paramètres lors de la transmission, invalides pour les exchanges qui requièrent un tri alphabétique strict.
# ❌ CODE INCORRECT - Génère l'erreur
def generate_signature_broken(params):
"""Cette méthode cause des erreurs de signature"""
query_string = "&".join(f"{k}={v}" for k, v in params.items())
return hmac.new(api_secret, query_string, hashlib.sha256).hexdigest()
✅ CORRECTION - Tri alphabétique obligatoire
def generate_signature_correct(params):
"""Méthode conforme qui fonctionne avec HolySheep"""
# TRI OBLIGATOIRE pour les APIs crypto
sorted_params = sorted(params.items())
query_string = "&".join(f"{k}={v}" for k, v in sorted_params)
signature = hmac.new(
api_secret.encode('utf-8'),
query_string.encode('utf-8'),
hashlib.sha256
).hexdigest()
return signature
Vérification
params_test = {"timestamp