Skip to main contentA-REX Foundation

Whitepaper · 13

Leistungsanalyse

Gemessenes Gas der Referenzimplementierung mit null, einem und zwei Hooks; was die Kosten bestimmt; und Hinweise zum Deployment.

Methode

Die folgenden Zahlen stammen aus scripts/gas-report-standard.js, ausgeführt im In-Process-Netzwerk von Hardhat gegen die kompilierte Referenzimplementierung (solc 0.8.22, viaIR, optimizer.runs = 1 für ARexToken), September 2026. „Warm“ bedeutet dasselbe Paar aus Sender, Empfänger und ID wie beim vorherigen Transfer (Speicher-Slots, die im Block bereits berührt wurden). Hooks: EligibilityHook (CHECK + ELIGIBILITY) und ExpiryHook (CHECK). Reproduzierbar mit:

npx hardhat run scripts/gas-report-standard.js

Ergebnisse

xychart-beta
    title "Gas eines Warm-Transfers nach Anzahl der Hooks (Tausend)"
    x-axis ["keine Hooks", "Berechtigung", "Berechtigung + Ablauf"]
    y-axis "Gas (k)" 0 --> 140
    bar [66.8, 91.2, 119.6]

Die Kosten wachsen linear mit der Anzahl der Hooks: Jeder verursacht einen externen check-Aufruf pro ID, bei einem Berechtigungs-Hook zusätzlich canSend und canReceive. Die Tabelle nennt jede Operation.

Operation0 Hooks1 Hook2 Hooks
createBatch (neue ID, Mint von 1000)264,096283,831299,396
safeTransferFrom (erster, kalt)80,687108,266136,682
safeTransferFrom (warm)66,79091,166119,582
transform Teilung 1 → 2 (zwei neue IDs)564,422595,707636,858
setFrozenTokens54,18854,18854,188
forcedTransfer80,15289,90999,569
burn66,62183,00193,395

Warm-Transfer mit genau einem Hook jeder Art (Grenzkosten der Regel):

xychart-beta horizontal
    title "Marginales Gas eines Hooks bei einem Warm-Transfer (Tausend)"
    x-axis ["DeliveryHook", "Traceability (emit)", "EligibilityHook", "ExpiryHook", "SeasonalHook", "PerishabilityHook"]
    y-axis "zusätzliches Gas (k)" 0 --> 35
    bar [12.3, 17.4, 24.4, 25.2, 27.5, 31.0]

TraceabilityHook im persistierenden Modus fügt 184.5k hinzu und ist der Übersichtlichkeit halber nicht im Diagramm enthalten.

HookGasΔ ggü. ohne Hook
EligibilityHook91,166+24,376
ExpiryHook92,023+25,233
SeasonalHook94,324+27,534
PerishabilityHook97,813+31,023
DeliveryHook (keine aktive Lieferung)79,076+12,286
TraceabilityHook, nur emittierend84,152+17,362
TraceabilityHook, persistierend251,273+184,483

Unternehmensaufzeichnungen auf Base

CompanyFactsHook und RequireStageHook (Referenz-Release 2.0.0-alpha.9) wurden mit scripts/gas-company-facts.js aus Transaktionsbelegen gemessen und mit Werten des Base-Mainnets vom 3. November 2026 (Block 53,443,324) bepreist: Grundgebühr 0.005 gwei plus 0.001 gwei Trinkgeld, ETH zu 2,250 USD.

OperationGasUSD
Stufenmarke159,1550.0021
50 Stufenmarken in einer Transaktion5,063,2200.068
Fakt74,4890.0010
Täglicher Anker51,8270.0007
Übertragung der Stufen bei einer Zusammenführung von 2 Chargen+49,990
Übertragung der Stufen bei einer Zusammenführung von 200 Chargen+2,142,023
Prüfung durch RequireStageHook bei einer Lieferung+47,679
Registrierung einer Liste mit 6 Stufen771,3500.010

Auf OP-Stack-Chains wie Base kostet eine Transaktion gasUsed × effectiveGasPrice + l1Fee, wobei l1Fee die L1-Datengebühr ist. An diesem Tag lag sie unter 0.00002 USD pro Operation, die L2-Ausführung in der Tabelle macht also fast die gesamten Kosten aus. Die vollständigen Daten stehen in docs/gas/company-facts.json von arex-contracts.

Was die Kosten bestimmt

  • Ein Transfer ohne Hooks kostet warm ca. 67k, also ERC-1155 plus Mengenverfolgung plus die Lesezugriffe auf Existenz, Status und eingefrorenen Betrag der Charge sowie die Buchführung der Pipeline (Datenzwischenspeicher, Sperre). Das ist die Untergrenze.
  • Jeder Hook fügt bei einem Transfer etwa 25–30k hinzu: ein check-Aufruf (View, Contract-übergreifend) plus bei Berechtigungs-Hooks die Aufrufe canSend und canReceive. Die Kosten sind linear in der Anzahl der Hooks und in der Anzahl der IDs in einem Sammeltransfer. Würde jeder Regel-Contract vor dem Aufruf für jede Fähigkeit mit supportsInterface abgefragt, kämen mehrere statische Aufrufe pro ID hinzu; dieser Mehraufwand entfällt, weil die Flags bei der Registrierung zwischengespeichert werden.
  • createBatch wird vom Speicher dominiert: das Batch-Struct (sechs Wörter plus eine Zeichenkette) und die ERC-1155-Slots für Saldo und Gesamtmenge. Es sind einmalige Kosten pro Charge.
  • transform erzeugt neue IDs: Eine Teilung in zwei trägt zwei Chargendatensätze plus zwei Mints plus einen Burn, dazu Hook-Aufrufe bei jedem Teilvorgang (OP_TRANSFORM). Eine Teilung in n kostet in etwa n × createBatch plus einen Burn; das Zusammenführen von n in eine kostet in etwa n Burns plus ein createBatch.
  • Durchsetzung ist günstig: Einfrieren ist ein Slot; ein erzwungener Transfer kostet so viel wie ein Transfer plus den Schreibzugriff zum Aufheben des Einfrierens und das Ereignis.
  • transferCheck / canTransfer sind Views: Off-Chain kostenlos und derselbe Codepfad wie die Transaktion.

Was der Entwurf bringt

Entwurf mit FähigkeitsabfrageA-REX Core (ARexToken)
Transfer mit n Regel-ContractsIDs × Module × (supportsInterface-Abfragen + Hook-Aufruf), bevor irgendeine Logik läuftIDs × Hooks × 1 Aufruf (+2 bei Berechtigungs-Hooks); Flags bei der Registrierung zwischengespeichert
AblehnungRevert mit Zeichenkette (in den Memory kopiert, nicht indexierbar)benutzerdefinierter Fehler mit Hook-Adresse und bytes32-Code
Abstammungnicht verfügbarca. 280k pro Ausgabecharge
Einfrieren / erzwungener Transfernicht verfügbar54k / 80k

Die linke Spalte beschreibt den Entwurf, den A-REX Core ersetzt (ADR-004, ADR-005); nur die rechte Spalte ist gemessen.

Hinweise zum Deployment

  • Die Kosten in Geld ergeben sich aus gas × gas price × token price, und die letzten beiden ändern sich zwischen Chains und Tagen um Größenordnungen. Nur zur Veranschaulichung: Bei 0.01 gwei und 3,000 USD je ETH kostet ein Warm-Transfer mit zwei Hooks (119,582 Gas) etwa 0.0036 USD und ein createBatch (264,096 Gas) etwa 0.008 USD; bei 20 gwei im Ethereum-Mainnet kosten dieselben Operationen etwa 7.2 und 15.8 USD. Vor der Festlegung eines Unit-Economics-Modells ist auf der Ziel-Chain zu messen.
  • Sammeltransfers: safeBatchTransferFrom amortisiert Fixkosten; die Hook-Kosten skalieren weiterhin mit der Anzahl der IDs.
  • Hook-Reihenfolge: Günstige Hooks mit hoher Ablehnungsquote an den Anfang stellen; eine Ablehnung stoppt die Pipeline, bevor teurere Hooks laufen.
  • Anzahl der Hooks: Drei bis fünf genügen den meisten Ausstellern; jeder zusätzliche Hook bedeutet messbare Kosten pro Transfer und eine zusätzliche Governance-Fläche.
  • Metadaten: uri kurz halten (eine CID oder ein Digital Link); die Zeichenkette wird On-Chain gespeichert.
  • Off-Chain-Lesezugriffe: Vor dem Absenden transferCheck verwenden; eine revertierte Transaktion kostet dennoch Gas.

Durchsatz

Der Engpass ist nicht der Token selbst, sondern die Chain. Ein einzelner Transfer ist eine Transaktion; eine Transformation mit n Ausgaben ist eine Transaktion mit n Mints. Die Indexierung der Abstammung erfordert das Lesen von BatchTransformed-Ereignissen, die einmal pro Operation mit vollständigen Mengenlisten emittiert werden, sodass ein Indexer nichts aus den Ereignissen einzelner Transfers rekonstruieren muss.

Contract-Größe

ARexToken wird mit 24,213 Byte ausgerollt (Limit 24,576) und mit optimizer.runs = 1 kompiliert. Die übrigen Contracts sind klein: ARexAttestations 2,708; Hooks zwischen 1,358 (ExpiryHook) und 6,315 (DeliveryHook), TraceabilityHook 4,076; Erweiterungen zwischen 3,716 und 4,588. Dem Token selbst Funktionalität hinzuzufügen, ist konstruktionsbedingt durch die Größe begrenzt – dafür sind Hooks und Begleit-Contracts da.