Aller au contenu principal

Référence des smart contracts

Cette référence regroupe les adresses des contrats, les informations sur les jetons et les définitions des fonctions des paiements non dépositaires de Volet.com sur Ethereum, BNB Smart Chain et TRON.

Pour des instructions pas à pas, consultez Intégration Ethereum et BNB Smart Chain ou Intégration TRON.

Adresses des processeurs de paiement​

Chaque actif pris en charge utilise un smart contract processeur de paiement.

RéseauActifContrat processeur
Ethereum Mainnet (1)ETH0x2fceE245109Cf3c535489a6F52fe11b3BBd644FF
Ethereum Mainnet (1)USDT ERC-200xe4083ED0A1101615b9092E8cD2164e2f42B4571E
BNB Smart Chain (56)BNB0x2fceE245109Cf3c535489a6F52fe11b3BBd644FF
BNB Smart Chain (56)USDT BEP-200xe4083ED0A1101615b9092E8cD2164e2f42B4571E
TRON MainnetTRXTSK9sgBTjvZa6x2yW1bXNWqvQ57WsVUQ3W
TRON MainnetUSDT TRC-20TDuE6VueULx5oivQd4MsYr9DEhNMgXNfTm

Avant de traiter des paiements, confirmez auprès de Volet.com les adresses des contrats déployés et l’ABI. Les contrats d’autres réseaux, actifs ou parcours de paiement personnalisés peuvent utiliser des adresses et des interfaces différentes.

Adresses et décimales des jetons​

RéseauActifContrat du jetonDécimales
EthereumETH (natif)N/A18
EthereumUSDT ERC-200xdAC17F958D2ee523a2206206994597C13D831ec76
BNB Smart ChainBNB (natif)N/A18
BNB Smart ChainUSDT BEP-200x55d398326f99059fF775485246999027B319795518
TRONTRX (natif)N/A6 (SUN)
TRONUSDT TRC-20TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t6

Tous les montants transmis au smart contract doivent être exprimés dans les plus petites unités de l’actif.

  • ETH et BNB : utilisez ethers.parseEther() pour convertir les montants en wei.
  • USDT sur EVM : utilisez ethers.parseUnits(amount, tokenDecimals) avec la précision du jeton concerné.
  • TRX : utilisez le SUN, où 1 TRX = 1 000 000 SUN.
  • USDT sur TRON : utilisez des unités de base entières du jeton, où 1 USDT = 1 000 000 unités.

N’utilisez pas l’arithmétique à virgule flottante pour calculer les montants des paiements.

Interface du contrat de paiement​

Le processeur de paiement standard expose deux fonctions principales : previewPayment() et transfer().

interface IVoletPaymentProcessor {
function previewPayment(
uint256 amount,
bool buyerPaysCommission
) external view returns (
uint256 commission,
uint256 totalPay
);

function transfer(
address seller,
uint256 amount,
bool buyerPaysCommission,
address optionalCommissionWallet
) external payable;
}

Cette interface décrit les fonctions de paiement utilisées dans les guides d’intégration. Utilisez l’ABI vérifiée complète du contrat déployé pour décoder les événements ou gérer les erreurs propres au contrat.

previewPayment()​

Calcule les frais de traitement et le montant total que le client doit payer.

Paramètres

ParamètreTypeDescription
amountuint256Montant de paiement demandé dans les plus petites unités de l’actif
buyerPaysCommissionboolDétermine si les frais de traitement s’ajoutent au paiement du client ou sont déduits des recettes du marchand

Valeurs renvoyées

ParamètreTypeDescription
commissionuint256Frais de traitement dans les plus petites unités de l’actif
totalPayuint256Montant total que le client doit payer, dans les plus petites unités de l’actif

Pour les paiements en actif natif, transmettez totalPay comme value de la transaction sur EVM ou comme callValue sur TRON.

Pour les paiements en USDT, le solde de jetons du client et l’autorisation de dépense (allowance) accordée au processeur doivent être au moins égaux à totalPay.

Utilisez toujours les valeurs renvoyées par previewPayment(). Ne calculez pas les frais de traitement manuellement.

transfer()​

Exécute le paiement et répartit les fonds selon le paramétrage des frais du contrat.

Paramètres

ParamètreTypeDescription
selleraddressPortefeuille de réception du marchand
amountuint256Montant de paiement demandé dans les plus petites unités de l’actif
buyerPaysCommissionboolDétermine qui prend en charge les frais de traitement
optionalCommissionWalletaddressPortefeuille de commission du partenaire, ou l’adresse zéro du réseau s’il n’y en a pas

Adresses zéro

RéseauAdresse zéro
Ethereum / BNB Smart Chain0x0000000000000000000000000000000000000000
TRON (Base58)T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb

La fonction transfer() n’accepte pas de paramètre orderId. Votre backend doit associer le hash de chaque transaction de paiement (txid) à la commande correspondante.

Consultez Vérification des paiements et suivi des commandes pour le rapprochement des transactions et la prévention des paiements en double.

Événement de paiement​

Les processeurs de paiement émettent un événement PaymentProcessed après avoir versé le paiement au marchand.

event PaymentProcessed(
address indexed buyer,
address indexed seller,
uint256 commission,
uint256 totalPay
);
ParamètreTypeDescription
buyeraddressPortefeuille à l’origine du paiement
selleraddressPortefeuille de réception du marchand
commissionuint256Frais de traitement dans les plus petites unités de l’actif
totalPayuint256Montant total payé par l’acheteur dans les plus petites unités de l’actif

Le montant reçu par le marchand est :

receivedAmount = totalPay - commission

Cette formule s’applique quelle que soit la valeur de buyerPaysCommission.

Pour les paiements en ETH, BNB et TRX natifs, une transaction réussie et finalisée accompagnée d’un événement PaymentProcessed authentique et concordant confirme le paiement au marchand dans le cadre de l’implémentation documentée du processeur.

Pour les paiements en USDT, vérifiez en plus l’événement Transfer du jeton, du processeur de paiement vers le marchand, pour le montant attendu.

Vérifiez toujours que l’adresse du contrat qui émet l’événement correspond à l’adresse approuvée du processeur.

Consultez Vérification des paiements et suivi des commandes pour des exemples d’implémentation.

Frais de traitement​

Le paramètre buyerPaysCommission détermine la façon dont les frais de traitement s’appliquent.

ValeurLe client paieLe marchand reçoit
trueMontant demandé + frais de traitementMontant demandé
falseMontant demandéMontant demandé − frais de traitement

Les frais de traitement réels et le montant total du paiement sont calculés par previewPayment() selon le contrat déployé.

Les frais de réseau de la blockchain s’ajoutent séparément aux frais de traitement :

  • Ethereum / BNB Smart Chain : frais de gas payés en ETH ou en BNB.
  • TRON : coûts d’Energy et de Bandwidth, éventuellement payés en TRX.

Règlement​

Avec les paiements non dépositaires, le smart contract transfère les fonds directement vers le portefeuille de réception du marchand.

Les fonds ne sont pas crédités sur un compte Volet.com, et la conversion automatique en fiat ne fait pas partie de ce parcours de paiement.

Erreurs du contrat​

Le processeur de paiement peut renvoyer les erreurs suivantes :

ErreurDescription
SellerZeroAddressL’adresse de réception du marchand est nulle
SellerIsBuyerLes adresses du portefeuille de l’acheteur et du marchand sont identiques
AmountIsZeroLe montant du paiement est nul
InvalidTotalAmountValidationLa value ou la callValue de l’actif natif ne correspond pas au total attendu
CommissionExceedsAmountLes frais de traitement dépassent le montant dont ils peuvent être déduits
SellerNotWhitelistedLe contrat déployé n’autorise peut-être pas le portefeuille du marchand
EnforcedPauseLe traitement des paiements a été suspendu

Les erreurs disponibles et leur comportement exact dépendent du contrat déployé. Utilisez son ABI vérifiée pour décoder les erreurs personnalisées.

Pour les causes et les actions recommandées, consultez Dépannage des paiements par smart contract.