Skip to main content
En bref
L’API de Signature Blockradar vous permet de signer cryptographiquement des messages texte, des données structurées (données typées) et des transactions brutes à l’aide des clés privées de votre portefeuille. Signez des messages pour prouver la propriété du portefeuille. Signez des transactions construites en externe (par ex., des swaps Jupiter sur Solana) sans exposer vos clés privées, et diffusez-les optionnellement sur la chaîne.

Prérequis

Avant d’utiliser l’API de Signature, assurez-vous d’avoir :
1

Clé API

Obtenez votre clé API depuis le Tableau de bord Blockradar. Accédez à Developers pour en générer une.
2

Portefeuille créé

Créez un portefeuille principal depuis le Tableau de bord Blockradar. Accédez à Wallets et créez-en un pour la blockchain souhaitée. Vous aurez besoin du walletId pour les opérations de signature.
3

Environnement

Choisissez entre Testnet (pour le développement) ou Mainnet (pour la production). Les portefeuilles sont isolés par environnement.

Comment ça fonctionne

L’API de Signature produit une signature cryptographique qui prouve que vous contrôlez une adresse de portefeuille spécifique. Le résultat signé peut être vérifié par n’importe quel tiers sans accéder à vos clés privées.

Signature de message

Signez des messages texte pour prouver la propriété du portefeuille. Fonctionne sur toutes les blockchains prises en charge : EVM, Tron, Solana et Stellar.

Signature de données typées

Signez des données structurées selon le standard EIP-712. Utilisé pour les approbations sans gas (EIP-2612 Permit) et les transferts autorisés (EIP-3009). EVM uniquement.

Signature de transaction

Signez des transactions brutes construites en externe. Construisez un swap sur Jupiter, un appel de contrat via ethers.js ou un transfert TronWeb, puis envoyez la transaction non signée pour la faire signer sans exposer vos clés privées.

Broadcast de transaction

Signez et diffusez une transaction brute en une seule étape. Blockradar signe la transaction et la soumet sur la chaîne via une file d’attente fiable avec des tentatives automatiques.

Cas d’utilisation courants

  • Inscription auprès d’un fournisseur tiers : prouvez que vous possédez une adresse lors de l’intégration avec des services comme Iron, Circle ou d’autres protocoles DeFi
  • Approbations de tokens sans gas : signez des messages EIP-2612 Permit pour autoriser la dépense de tokens sans transaction on-chain
  • Transferts autorisés : signez des messages EIP-3009 TransferWithAuthorization pour des transferts délégués
  • Attestations hors chaîne : créez des preuves vérifiables d’intention ou d’accord liées à une adresse de portefeuille
  • Exécution de swaps externes : construisez un swap Jupiter sur Solana, signez-le avec Blockradar et diffusez-le sur la chaîne
  • Interactions personnalisées avec des contrats : construisez n’importe quelle transaction en externe et laissez Blockradar la signer et/ou la soumettre

Portefeuille principal vs Adresse enfant

L’API de Signature est disponible à deux niveaux :

Portefeuille principal

Signez avec les clés du portefeuille principal. Idéal pour les opérations de trésorerie et les intégrations avec des fournisseurs.

Adresse enfant

Signez avec les clés d’une adresse enfant spécifique. À utiliser lorsque le tiers exige une signature provenant d’une adresse de dépôt.

Points de terminaison


Signature de message

Signez un message texte avec la clé privée de votre portefeuille. L’API signe le message, vérifie que la signature correspond à l’adresse du portefeuille et renvoie à la fois la signature et un enregistrement de transaction.

Blockchains prises en charge

La signature de message Stellar suit SEP-53, le standard Stellar pour signer des messages arbitraires. La charge utile signée est SHA-256("Stellar Signed Message:\n" + message), signée avec la clé Ed25519 du compte, et la signature est encodée en base64. Pour la vérifier, appliquez le même préfixe et le même hachage avant de vérifier la signature par rapport à la clé publique du signataire. La commande stellar message de la CLI Stellar et les helpers SEP-53 du SDK Stellar font cela pour vous. Une signature Ed25519 brute sur le message sans préfixe ne sera pas validée.

Paramètres de la requête

Exemple de signature de message

Réponse EVM

Réponse Tron / Solana / Stellar

Pour Tron, Solana et Stellar, l’objet signedTransaction contient uniquement le champ signature (pas de composants r, s, v) :

Champs de la réponse


Signature de données typées (EVM uniquement)

Signez des données structurées selon le standard EIP-712. Ceci est utilisé pour les approbations sans gas, les transferts délégués et d’autres flux d’autorisation on-chain nécessitant une signature structurée.
La signature de données typées est uniquement disponible pour les blockchains compatibles EVM (Ethereum, Polygon, BSC, Base, Arbitrum, Optimism, Celo). Tron, Solana et Stellar ne prennent pas en charge EIP-712.

Standards pris en charge

Paramètres de la requête

Exemple EIP-2612 Permit

Réponse des données typées

Champs de l’objet domaine

Validation du Chain ID
Le chainId dans votre objet domaine doit correspondre à l’identifiant de chaîne du réseau blockchain du portefeuille. S’ils ne correspondent pas, l’API renvoie une erreur 400 Chain ID mismatch.

Signature avec une adresse enfant

Signez des messages, des données typées, des transactions ou effectuez un broadcast en utilisant une adresse enfant spécifique au lieu du portefeuille principal. Les quatre opérations de signature sont disponibles pour les adresses enfant :
La signature avec une adresse enfant suit le même format de requête et de réponse que la signature avec le portefeuille principal. La seule différence est l’URL du point de terminaison, qui inclut le addressId.

Événements webhook

Les opérations de signature déclenchent un webhook avec l’enregistrement de transaction :

Contenu du webhook (Signature de message ou données typées)

Contenu du webhook (Signature de transaction)

Pour la signature de transaction, le champ signedTransaction est une chaîne (et non un objet). Le format dépend de la blockchain.

Contenu du webhook (Broadcast réussi)

Après que la file de broadcast confirme la transaction sur la chaîne, vous recevez ce webhook. Le champ hash est mis à jour avec le hash de transaction on-chain et confirmed passe à true.

Contenu du webhook (Broadcast échoué)

Si le broadcast échoue définitivement après toutes les tentatives, vous recevez ce webhook. Le status est FAILED et confirmed reste à false.

Signature de transaction

Signez une transaction brute non signée construite en externe. Vous construisez la transaction à l’aide de n’importe quel SDK (ethers.js, TronWeb, Solana web3.js, Jupiter API), puis vous envoyez la transaction non signée sérialisée à Blockradar pour signature et/ou diffusion, sans avoir besoin de construire ou gérer votre propre infrastructure ou nœuds blockchain.

Blockchains et formats pris en charge

Paramètres de la requête

Exemple de signature de transaction (Solana + Jupiter)

Exemple de signature de transaction (EVM)

Réponse signature seule (EVM)

Réponse signature seule (Solana)

Réponse signature seule (Tron)

Pour la signature de transaction, signedTransaction est une chaîne, et non un objet. Ceci diffère de la signature de message qui renvoie un objet avec les composants de signature comme r, s, v.

Format de signedTransaction par chaîne

Champ hash par chaîne


Broadcast de transaction

Signez et diffusez une transaction brute en une seule étape. Blockradar signe la transaction, puis la soumet sur la chaîne via une file d’attente fiable avec des tentatives automatiques. L’API renvoie immédiatement un statut PENDING. Vous recevrez un webhook signed.success ou signed.failed lorsque le résultat on-chain sera confirmé.
Le broadcast nécessite des fonds testnet/mainnet dans le portefeuille pour payer les frais de gas. La transaction doit être valide et non expirée (les blockhashes Solana expirent en environ 90 secondes).

Transactions Soroban sur Stellar

Les endpoints de signature acceptent les transactions Soroban sur Stellar — un transfert via le Stellar Asset Contract ou une invocation de contrat personnalisée — en plus des transactions classiques. Passez le même format d’enveloppe de transaction XDR encodée en base64 ; Blockradar détecte automatiquement les transactions Soroban et les soumet via Soroban RPC au lieu d’Horizon. Deux règles Stellar à respecter :
  1. Simulez et assemblez avant la signature. Une transaction Soroban doit être simulée auprès de Soroban RPC et assemblée avec les résultats de la simulation (empreinte de ressources et frais) avant d’être signée. Soumettre une transaction non assemblée échoue on-chain.
  2. Reconstruisez en cas de séquence obsolète. Si le numéro de séquence du portefeuille a évolué au moment de la soumission, l’API renvoie une erreur indiquant que la transaction est obsolète (tx_bad_seq) et doit être reconstruite et re-signée. Construisez une nouvelle transaction avec le numéro de séquence actuel et réessayez.
JavaScript
Si une transaction Soroban est soumise on-chain mais que le polling de confirmation expire, la réponse inclut le hash de la transaction avec le message Soroban transaction submitted but not yet confirmed. Réconciliez le résultat en recherchant ce hash — ne reconstruisez pas et ne soumettez pas à nouveau la transaction, car la transaction d’origine peut encore être confirmée et provoquer une double dépense.

Requête

Mêmes paramètres que la signature de transaction :

Exemple de broadcast

Réponse du broadcast (exemple Solana, immédiate)

Cycle de vie du broadcast

La transaction passe par les états suivants :
La file de broadcast effectue jusqu’à 10 tentatives avec des intervalles de 5 minutes. Pour Solana, si le blockhash expire, les tentatives supplémentaires ne seront pas efficaces. Vous devrez reconstruire la transaction avec un blockhash récent. Pour Stellar, un numéro de séquence obsolète (tx_bad_seq) nécessite de même de reconstruire et de re-signer la transaction.

Exemple de flux complet

Voici une implémentation complète pour signer un message et soumettre la signature à un fournisseur tiers :

Réponses d’erreur

Le walletId n’existe pas ou n’appartient pas à votre entreprise.
Le addressId n’existe pas ou n’est pas associé au portefeuille spécifié.
La signature de données typées (EIP-712) est uniquement disponible sur les chaînes compatibles EVM. Utilisez la signature de message pour Tron, Solana et Stellar.
Le chainId dans votre objet domaine de données typées ne correspond pas au réseau blockchain du portefeuille.
La vérification aller-retour interne a échoué. Cela indique une erreur système. Veuillez contacter le support.
Le champ transaction n’est pas un base64 valide, ou les octets décodés ne constituent pas une VersionedTransaction Solana valide.
Le champ transaction n’est pas un JSON valide. Les transactions EVM et Tron doivent être des objets sérialisés en JSON.
Le champ transaction n’est pas une enveloppe de transaction Stellar XDR encodée en base64 valide. Construisez la transaction avec @stellar/stellar-sdk et passez transaction.toXDR().

Bonnes pratiques

Sécurité

  • Utilisez des références : suivez les opérations de signature avec des identifiants de référence uniques pour les pistes d’audit et l’idempotence
  • Vérifiez le message : avant de signer, confirmez que le contenu du message correspond à ce que le service tiers attend
  • Limitez la longueur du message : les messages sont limités à 4 096 caractères. Gardez les messages concis et spécifiques

Intégration

  • Pas de frais de gas : les opérations de signature sont hors chaîne et ne nécessitent pas de solde en tokens natifs
  • Réponse immédiate : les signatures sont générées de manière synchrone. Aucun polling ou attente de webhook n’est nécessaire pour la signature elle-même
  • Écoutez les webhooks : utilisez les webhooks pour maintenir une piste d’audit de tous les événements de signature

Données typées

  • Faites correspondre les Chain IDs : le chainId dans votre domaine doit correspondre au réseau du portefeuille. Utilisez les Chain IDs sandbox (testnet) pour les tests et les Chain IDs de production (mainnet) pour les opérations en direct
  • Vérifiez le contrat : le verifyingContract doit être le contrat qui vérifiera la signature on-chain

Signature de transaction

  • Construisez la transaction avec le bon expéditeur : la transaction non signée doit utiliser la clé publique du portefeuille ou de l’adresse enfant comme payeur de frais (Solana) ou expéditeur (EVM/Tron). Si la clé ne correspond pas, la signature échouera.
  • Les blockhashes Solana expirent rapidement : les blockhashes Solana sont valides pendant environ 60 à 90 secondes. Construisez la transaction et appelez le endpoint de signature rapidement. En cas de broadcast, les tentatives de la file d’attente ne seront pas efficaces une fois le blockhash expiré.
  • Gestion du nonce EVM : définissez le nonce correctement. Si le nonce est déjà utilisé, le broadcast échouera. Interrogez le nonce depuis la chaîne juste avant de construire la transaction.
  • Expiration Tron : les transactions Tron ont une fenêtre d’expiration de 24 heures définie lors de la construction. Cela laisse amplement le temps pour la signature et le broadcast.
  • Séquence et bornes temporelles Stellar : construisez la transaction avec le numéro de séquence actuel du compte du portefeuille et des bornes temporelles valides. Une séquence obsolète (tx_bad_seq) ou des bornes temporelles expirées font échouer la soumission. Construisez et signez rapidement, et définissez des bornes temporelles généreuses si vous prévoyez de diffuser plus tard.
  • Transactions Soroban sur Stellar : simulez et assemblez la transaction avant de la soumettre pour signature — une transaction Soroban non assemblée échoue on-chain. Si une erreur de séquence obsolète est renvoyée, reconstruisez avec une séquence à jour et soumettez à nouveau. Si un broadcast expire en attendant la confirmation, réconciliez à l’aide du hash de transaction renvoyé au lieu de reconstruire, afin d’éviter une double dépense.
  • Signature seule vs broadcast : utilisez /signing/transaction lorsque vous souhaitez diffuser la transaction vous-même ou via un autre service. Utilisez /signing/broadcast lorsque vous souhaitez que Blockradar gère la soumission avec des tentatives automatiques.

Référence API

Points de terminaison du portefeuille principal

Points de terminaison de l’adresse enfant