Zum Hauptinhalt springen

Smart-Contract-Referenz

Diese Referenz enthält Contract-Adressen, Token-Informationen und Funktionsdefinitionen für Non-Custodial-Zahlungen von Volet.com auf Ethereum, BNB Smart Chain und TRON.

Schritt-für-Schritt-Anleitungen finden Sie unter Ethereum- und BNB-Smart-Chain-Integration und TRON-Integration.

Adressen der Zahlungsprozessoren​

Jedes unterstützte Asset nutzt einen eigenen Smart Contract als Zahlungsprozessor.

NetzwerkAssetProzessor-Contract
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

Bestätigen Sie die Adressen der bereitgestellten Contracts und die ABI mit Volet.com, bevor Sie Zahlungen abwickeln. Contracts für andere Netzwerke, Assets oder individuelle Zahlungsabläufe können andere Adressen und Schnittstellen verwenden.

Token-Adressen und Decimals​

NetzwerkAssetToken-ContractDecimals
EthereumETH (nativ)–18
EthereumUSDT ERC-200xdAC17F958D2ee523a2206206994597C13D831ec76
BNB Smart ChainBNB (nativ)–18
BNB Smart ChainUSDT BEP-200x55d398326f99059fF775485246999027B319795518
TRONTRX (nativ)–6 (SUN)
TRONUSDT TRC-20TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t6

Alle Beträge für den Smart Contract müssen in den kleinsten Einheiten des Assets angegeben werden.

  • ETH und BNB: Rechnen Sie Beträge mit ethers.parseEther() in Wei um.
  • USDT auf EVM: Verwenden Sie ethers.parseUnits(amount, tokenDecimals) mit der Genauigkeit des jeweiligen Tokens.
  • TRX: Verwenden Sie SUN, wobei 1 TRX = 1.000.000 SUN.
  • USDT auf TRON: Verwenden Sie ganzzahlige Basiseinheiten des Tokens, wobei 1 USDT = 1.000.000 Einheiten.

Berechnen Sie Zahlungsbeträge nicht mit Gleitkommaarithmetik.

Schnittstelle des Zahlungs-Contracts​

Der Standard-Zahlungsprozessor bietet zwei Hauptfunktionen: previewPayment() und 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;
}

Diese Schnittstelle beschreibt die Zahlungsfunktionen, die in den Integrationsanleitungen verwendet werden. Verwenden Sie zum Dekodieren von Events oder zur Behandlung Contract-spezifischer Fehler die vollständige verifizierte ABI des bereitgestellten Contracts.

previewPayment()​

Berechnet die Bearbeitungsgebühr und den Gesamtbetrag, den der Kunde zahlen muss.

Parameter

ParameterTypBeschreibung
amountuint256Angeforderter Zahlungsbetrag in den kleinsten Einheiten des Assets
buyerPaysCommissionboolLegt fest, ob die Bearbeitungsgebühr zur Zahlung des Kunden addiert oder vom Erlös des Händlers abgezogen wird

Rückgabewerte

ParameterTypBeschreibung
commissionuint256Bearbeitungsgebühr in den kleinsten Einheiten des Assets
totalPayuint256Gesamtbetrag, den der Kunde zahlen muss, in den kleinsten Einheiten des Assets

Übergeben Sie bei Zahlungen im nativen Asset totalPay als value der Transaktion auf EVM bzw. als callValue auf TRON.

Bei USDT-Zahlungen müssen das Token-Guthaben des Kunden und die Allowance für den Prozessor mindestens totalPay betragen.

Verwenden Sie immer die von previewPayment() zurückgegebenen Werte. Berechnen Sie die Bearbeitungsgebühr nicht selbst.

transfer()​

Führt die Zahlung aus und verteilt die Gelder gemäß den Gebühreneinstellungen des Contracts.

Parameter

ParameterTypBeschreibung
selleraddressEmpfangs-Wallet des Händlers
amountuint256Angeforderter Zahlungsbetrag in den kleinsten Einheiten des Assets
buyerPaysCommissionboolLegt fest, wer die Bearbeitungsgebühr trägt
optionalCommissionWalletaddressProvisions-Wallet eines Partners oder die Nulladresse des Netzwerks, falls nicht zutreffend

Nulladressen

NetzwerkNulladresse
Ethereum / BNB Smart Chain0x0000000000000000000000000000000000000000
TRON (Base58)T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb

Die Funktion transfer() akzeptiert keinen Parameter orderId. Ihr Backend muss den Hash jeder Zahlungstransaktion (txid) der zugehörigen Bestellung zuordnen.

Zur Zuordnung von Transaktionen und zur Vermeidung doppelter Zahlungen siehe Zahlungsprüfung und Bestellverfolgung.

Zahlungs-Event​

Die Zahlungsprozessoren lösen das Event PaymentProcessed aus, nachdem die Zahlung an den Händler verteilt wurde.

event PaymentProcessed(
address indexed buyer,
address indexed seller,
uint256 commission,
uint256 totalPay
);
ParameterTypBeschreibung
buyeraddressWallet, das die Zahlung ausgelöst hat
selleraddressEmpfangs-Wallet des Händlers
commissionuint256Bearbeitungsgebühr in den kleinsten Einheiten des Assets
totalPayuint256Vom Käufer gezahlter Gesamtbetrag in den kleinsten Einheiten des Assets

Der vom Händler erhaltene Betrag ist:

receivedAmount = totalPay - commission

Diese Formel gilt unabhängig von der Einstellung buyerPaysCommission.

Bei Zahlungen in nativem ETH, BNB und TRX bestätigt eine erfolgreiche, finalisierte Transaktion mit einem echten, übereinstimmenden PaymentProcessed-Event die Zahlung an den Händler gemäß der dokumentierten Prozessor-Implementierung.

Prüfen Sie bei USDT-Zahlungen zusätzlich das Transfer-Event des Tokens vom Zahlungsprozessor an den Händler über den erwarteten Betrag.

Gleichen Sie die Adresse des Contracts, der das Event ausgelöst hat, immer mit der freigegebenen Prozessor-Adresse ab.

Implementierungsbeispiele finden Sie unter Zahlungsprüfung und Bestellverfolgung.

Bearbeitungsgebühren​

Der Parameter buyerPaysCommission legt fest, wie die Bearbeitungsgebühr angewendet wird.

EinstellungKunde zahltHändler erhält
trueAngeforderter Betrag + BearbeitungsgebührAngeforderter Betrag
falseAngeforderter BetragAngeforderter Betrag − Bearbeitungsgebühr

Die tatsächliche Bearbeitungsgebühr und den Gesamtbetrag der Zahlung berechnet previewPayment() gemäß dem bereitgestellten Contract.

Netzwerkgebühren der Blockchain fallen zusätzlich zur Bearbeitungsgebühr an:

  • Ethereum / BNB Smart Chain: Gas-Gebühren in ETH oder BNB.
  • TRON: Energy- und Bandwidth-Kosten, die gegebenenfalls in TRX bezahlt werden.

Abrechnung​

Bei Non-Custodial-Zahlungen überweist der Smart Contract die Gelder direkt auf das Empfangs-Wallet des Händlers.

Die Gelder werden keinem Volet.com-Konto gutgeschrieben, und eine automatische Umrechnung in Fiat ist nicht Teil dieses Zahlungsablaufs.

Contract-Fehler​

Der Zahlungsprozessor kann folgende Fehler zurückgeben:

FehlerBeschreibung
SellerZeroAddressDie Empfangsadresse des Händlers ist die Nulladresse
SellerIsBuyerWallet-Adressen von Käufer und Händler sind identisch
AmountIsZeroDer Zahlungsbetrag ist null
InvalidTotalAmountValidationvalue oder callValue des nativen Assets entspricht nicht dem erwarteten Gesamtbetrag
CommissionExceedsAmountDie Bearbeitungsgebühr übersteigt den Betrag, von dem sie abgezogen werden kann
SellerNotWhitelistedDer bereitgestellte Contract hat das Händler-Wallet möglicherweise nicht freigeschaltet
EnforcedPauseDie Zahlungsabwicklung wurde pausiert

Welche Fehler verfügbar sind und wie sie sich genau verhalten, hängt vom bereitgestellten Contract ab. Dekodieren Sie benutzerdefinierte Fehler mit seiner verifizierten ABI.

Ursachen und empfohlene Maßnahmen finden Sie unter Fehlerbehebung bei Smart-Contract-Zahlungen.