Ein Python-NFT-Bot ist ein Programm, das Marktplatzbeobachtungen in aufgezeichnete Entscheidungen und, sofern autorisiert, in Transaktionsanfragen umwandelt. Python kann Recherchen zu Kollektionen, Bestandsverfolgung, Benachrichtigungen und Ausführungsabläufe unterstützen. Die Sprache selbst bestimmt aber nicht, ob diese Abläufe verlässlich sind. Die wichtigen Gestaltungsentscheidungen betreffen die Bedeutung der Daten, die Betragsgenauigkeit, die Befugnisse und die Wiederherstellung, nachdem etwas schiefgegangen ist.
Eine nützliche erste Version hat einen bescheidenen Auftrag. Sie könnte eine bekannte Kollektion beobachten, Angebotsaufzeichnungen vereinheitlichen, Preise oberhalb einer festen Grenze ablehnen und jede Entscheidung erklären. Das schafft eine Grundlage, die ohne Wallet-Kontrolle getestet werden kann. Eine spätere Ergänzung um Signierung sollte eine bewusste Erweiterung dieses Entwurfs sein und nicht darin bestehen, einen privaten Schlüssel in ein ansonsten ungeprüftes Skript einzufügen.
Dieser Artikel beschreibt die Architektur eines Python-NFT-Bots in einfacher Sprache. Er verwendet beispielhafte Mengen und interne Komponentenbezeichnungen, ohne eine bestimmte Bibliothek vorzuschreiben oder einen sofort ausführbaren Händler zu liefern. Die Architektur gilt am unmittelbarsten für einen EVM-NFT-Ablauf. Wo sich Transaktions- und Vermögenswertregeln unterscheiden, sind ausdrückliche Netzwerkadapter erforderlich.
Einem Python-NFT-Bot klare Komponentengrenzen geben
Trennen Sie die Arbeit in einen Beobachtungsadapter, einen Speicher vereinheitlichter Aufzeichnungen, eine Richtlinienbewertung, eine Ausführungskoordination und eine beschränkte Signierungsschnittstelle. Diese können als Module in einem Projekt beginnen; sie müssen nicht zu fünf separaten Diensten werden. Ihr Nutzen entsteht daraus, ihre Verantwortlichkeiten so ausdrücklich zu machen, dass sie unabhängig getestet und durchdacht werden können.
Der Beobachtungsadapter versteht die Antwortstruktur und Fehler einer externen API. Er sollte nicht entscheiden, ob ein Token kaufenswert ist. Die Richtlinienbewertung versteht Kollektionskriterien und Ausgabenlimits. Sie sollte nicht stillschweigend einen anderen Preis abrufen, wenn die gelieferte Beobachtung ihre Regeln nicht erfüllt. Die Ausführungskoordination verwaltet autorisierte Handlungen und ihre ungeklärten Zustände, während die Signierungskomponente die genau angeforderten Befugnisse prüft.
Jede Grenze benötigt eine definierte Eingabe und Ausgabe. Eine Angebotsaufzeichnung könnte Vermögenswertidentität, Orderidentität, Preiseinheiten, Identität des Zahlungstokens, Beobachtungszeitpunkt und Validierungsstatus enthalten. Eine Entscheidung ergänzt Richtlinienversion, Begründung und maximal autorisierte Ausgabe. Eine Transaktionsanfrage verweist auf diese Entscheidung zurück und bewahrt die Belegkette von den Daten bis zur Handlung.
Diese Aufzeichnungen machen Unstimmigkeiten sichtbar. Wenn der Beobachtungsadapter einen Token-Preis in einer Währung meldet und die Richtlinie eine andere erwartet, sollte die Eingabe die Validierung nicht bestehen. Das automatische Ersetzen durch ein vertrautes Währungssymbol würde genau den Sachverhalt verdecken, den das System untersuchen muss. Ein kleiner ausdrücklicher Fehler ist einer großen stillschweigenden Annahme vorzuziehen.
Identität als strukturierte Daten behandeln
Der Anzeigename eines NFTs ist für Menschen nützlich, als Datenbankschlüssel aber schlecht geeignet. Erfassen Sie für einen gewöhnlichen EVM-Vermögenswert Blockchain, Vertragsadresse, Token-Kennung und Standard. Beziehen Sie gegebenenfalls die Menge ein. Dieselbe Kennung unter einem anderen Vertrag bezeichnet einen anderen Vermögenswert, und dieselbe wie ein Vertrag aussehende Adresse auf einer anderen Blockchain gehört zu einem anderen Netzwerkkontext.
Die Orderidentität ist von der Vermögenswertidentität getrennt. Ein Token kann im Lauf der Zeit mehrmals angeboten werden, und ein Verkäufer kann eine Order durch eine andere ersetzen. Werden Duplikate allein nach Token-Kennung entfernt, kann eine echte Preisänderung verworfen oder eine abgelaufene Order mit ihrem Ersatz verwechselt werden. Bewahren Sie Protokoll und Orderkennung neben der Stückaufzeichnung auf.
Verwenden Sie Zeichenfolgen oder ausreichend große Ganzzahlen für Kennungen, ohne anzunehmen, jedes nachgelagerte System könne sie sicher als gewöhnliche Gleitkommazahlen darstellen. Eine große numerische Token-Kennung kann Pythons Ganzzahlverarbeitung unverändert überstehen und dann an Genauigkeit verlieren, wenn sie an eine andere Komponente gesendet wird, die sie als binären Gleitkommawert behandelt. Serialisierung ist Teil der Architektur und nicht bloß Darstellung.
OpenSeas Hinweise zur Überprüfung einer Stückseite liefern nützlichen Identitätskontext für menschliche Prüfungen. Das Programm sollte die zugrunde liegenden Kennungen bewahren, anhand derer ein Betreiber einen echten Kollektionsvermögenswert von einem unverbundenen Stück mit ähnlichem Kunstwerk oder ähnlichem Namen unterscheiden kann.
An der Schnittstelle ganzzahlige Token-Beträge verarbeiten
Token-Beträge benötigen sowohl eine Zahl als auch eine Einheit. Ein Rohbetrag von einer Million bedeutet bei einem Token mit sechs Dezimalstellen etwas anderes als bei einem Token mit achtzehn. Speichern Sie die rohe Ganzzahl, die Token-Identität und die verifizierte Dezimalstellenkonvention zusammen. Eine Zahl ohne Einheit sollte nicht in eine Ausgabenentscheidung eingehen.
Bei einem hypothetischen Zahlungstoken mit sechs Dezimalstellen entsprechen 12,345678 Einheiten 12.345.678 Basiseinheiten. Drei Stücke zu jeweils 4,125000 Einheiten ergeben zusammen 12,375000 Einheiten oder 12.375.000 Basiseinheiten. Ein Richtlinienlimit von 12,300000 Einheiten ist deshalb um 75.000 Basiseinheiten zu niedrig, entsprechend 0,075000 Einheiten. Der Vergleich sollte exakt sein, selbst wenn die Oberfläche beide Zahlen für die Anzeige rundet.
Python-Ganzzahlen eignen sich für exakte Beträge in Basiseinheiten. Dezimalarithmetik kann bei von Menschen eingegebenen Preisen, Verhältnissen und Berichten helfen, sofern Eingaben angemessen eingelesen werden und Genauigkeits- sowie Rundungsregeln ausdrücklich festgelegt sind. Einen Dezimalwert aus einer bereits angenäherten binären Gleitkommazahl zu konstruieren, stellt die ursprünglich beabsichtigte Dezimaleingabe nicht wieder her. Bevorzugen Sie die ursprüngliche numerische Zeichenfolge, wenn dies die Quelldarstellung ist.
Runden Sie einen Nutzerbetrag mit zu vielen Dezimalstellen nicht stillschweigend in eine ausführbare Menge. Entscheiden Sie vor der Autorisierung, ob er zurückgewiesen oder nach einer klar dokumentierten Regel gerundet wird. Das Aufrunden eines Höchstpreises kann das Nutzerlimit überschreiten, während das Abrunden eines zur Abwicklung benötigten Betrags die Transaktion scheitern lassen kann. Das richtige Verhalten hängt von der Rolle des Betrags ab.
Preis, Gebühren und Gas in ihren eigenen Einheiten halten
Ein Kauf kann einen ERC-20-Zahlungstoken und natives ETH für Gas erfordern. Das sind getrennte Guthaben und getrennte Autorisierungsprüfungen. Ein gemeinsamer Berichtswert ist erst nützlich, nachdem die Umrechnungsannahmen genannt wurden. Das Programm sollte nicht 0,02 ETH Gas direkt zu 100 Einheiten eines anderen Tokens addieren und das Ergebnis als 100,02 Einheiten bezeichnen.
Betrachten Sie eine Ethereum-Transaktion mit einem Gas-Limit von 150.000 und einem maximalen Gas-Preis von 40 Gwei. Das maximale Gas-Kontingent beträgt 0,006 ETH. Verbraucht die Transaktion tatsächlich 110.000 Gas zu einem effektiven Preis von 25 Gwei, beträgt die Ausführungsgebühr 0,00275 ETH. Diese Zahlen veranschaulichen die Unterscheidung zwischen einem vor der Übermittlung reservierten Kontingent und nachträglich abgeglichenen Kosten.
Die Ethereum-Gas-Dokumentation erklärt die zugrunde liegenden Einheiten. Eine Implementierung sollte außerdem den tatsächlichen Transaktionstyp und Ausführungsweg berücksichtigen, statt anzunehmen, eine Formel decke jedes Netzwerk oder jede zusätzliche Gebühr ab. Der Beleg und die ausgeführten Zahlungsflüsse bestimmen die realisierten Ausgaben; eine Schätzung ist keine abschließende Rechnungsaufzeichnung.
Verwenden Sie ausdrückliche Namen wie Zahlungsbetrag, maximales Netzwerkkontingent und realisierte Netzwerkkosten. Mehrdeutige Felder namens „Gebühr“ oder „Gesamt“ begünstigen Doppelzählungen, wenn eine API-Antwort bereits eine Komponente enthält, die ein anderer Bericht erneut hinzufügt. Eine Transaktionskoordination sollte Ursprung und Einheit jedes reservierten Betrags erklären können.
Externe Daten vereinheitlichen, ohne fehlende Fakten zu erfinden
Ein API-Adapter sollte ein fehlendes Feld von einem Feld unterscheiden, dessen gültiger Wert null ist. Ein fehlender Preis bedeutet kein kostenloses Angebot. Ein nicht verfügbares Eigentümerfeld bedeutet nicht, dass niemand den Token besitzt. Eine leere Antwort kann bedeuten, dass keine passenden Aufzeichnungen vorliegen. Ein Authentifizierungsfehler oder eine wegen Zeitüberschreitung gescheiterte Anfrage belegt aber nicht, dass die Kollektion keine Angebote hat.
Validieren Sie erwartete Strukturen und weisen Sie unerwartete mit einer nützlichen Begründung zurück. Bewahren Sie genug von der ursprünglichen öffentlichen Antwort oder einen sicheren Verweis darauf auf, um Schemaänderungen zu untersuchen. Vermeiden Sie es, Authentifizierungsheader oder geheime Konfiguration zu protokollieren, während gewöhnliche Kennungen und Zeitstempel bewahrt werden. Fehlerdiagnose sollte nicht erfordern, die zum Dienstzugriff verwendeten Befugnisse offenzulegen.
Seitennavigation erfordert ähnliche Sorgfalt. Folgen Sie dem dokumentierten Fortsetzungsmechanismus und bewahren Sie beim Verarbeiten großer Kollektionen den Fortschritt. Nehmen Sie nicht an, die erste Seite repräsentiere den gesamten aktuellen Bestand. Können sich Aufzeichnungen während des Lesens der Seiten ändern, behandeln Sie das Ergebnis als Beobachtungen über ein Zeitintervall. Gleichen Sie Duplikate oder Änderungen ab, statt ohne Belege eine augenblickliche Momentaufnahme zu behaupten.
Die API-Hülle sollte berichten, was sie weiß. Eine Transportzeitüberschreitung ist eine Transportzeitüberschreitung und keine Stornierung durch einen Verkäufer. Eine fehlerhafte Antwort ist ein Parserfehler und kein negatives Handelssignal. Präzise Fehlerkategorien verhindern, dass eine Richtlinie auf Grundlage einer Geschichte handelt, die die Daten nie tatsächlich erzählt haben.
Ereignisse als Beobachtungen und nicht als Befehle behandeln
Ein Angebotsereignis sollte eine Bewertung auslösen und nicht allein deshalb einen sofortigen Kauf, weil es eingetroffen ist. Es kann doppelt, verzögert oder durch ein anderes Ereignis überholt sein. Der Arbeitsprozess sollte seine Identität vereinheitlichen, seine Zeit erfassen, es mit dem vorhandenen Zustand vergleichen und entscheiden, ob eine neue Validierung nötig ist, bevor Ausgabenbefugnisse angefordert werden.
OpenSeas Dokumentation der Stream API beschreibt eine Zustellung nach bestem Bemühen und mögliche Ereignisse in falscher Reihenfolge. Eine Wiederverbindung benötigt daher einen Abgleichweg, der während der Lücke verpasste Änderungen entdecken kann. Der genaue Wiederherstellungsentwurf hängt von den Aufzeichnungen ab, die die Strategie benötigt. Er sollte aber nicht annehmen, der Ereignisstrom sei ein vollständiges, dauerhaftes Kontobuch.
Halten Sie die Unterdrückung von Duplikaten getrennt von der Aktualität. Zwei Kopien desselben Ereignisses sollten nicht zwei Handlungen auslösen. Zwei verschiedene Beobachtungen über denselben Token können beide wichtig sein, weil eine den Orderstatus ändert. Ein zu weit gefasster Duplikatschlüssel kann ebenso schädlich sein wie gar keine Duplikatbereinigung, wenn er berechtigte Aktualisierungen unterdrückt.
Ein einfacher Probelauf kann dieselbe Beobachtung zweimal liefern und anschließend eine Stornierung, die in der Eingangsreihenfolge früher einzuordnen ist, aber einen relevanten Ereigniszeitstempel besitzt. Das erwartete Ergebnis ist eine Kandidatenaufzeichnung mit nachvollziehbarem Zustandsverlauf und nicht zwei Käufe oder eine blind vertraute zuletzt eingetroffene Nachricht. Definieren Sie diese Erwartungen, bevor Sie das Programm mit echten Befugnissen verbinden.
Gleichzeitige Entscheidungen durch gemeinsame Grenzen koordinieren
Python-Programme verwenden häufig asynchrone Aufgaben, um mehrere Netzwerkanfragen zu verarbeiten, ohne nacheinander auf jede warten zu müssen. Das kann die Reaktionsfähigkeit verbessern, wirft aber Fragen zum gemeinsamen Zustand auf. Zwei Kandidatenbewertungen können beide dasselbe verfügbare Budget sehen, bevor eine ihre Reservierung erfasst. Schnellere Verarbeitung macht dieses Konkurrenzproblem nicht weniger folgenreich.
Nehmen wir an, einer Kampagne stehen 600 Zahlungstoken-Einheiten zur Verfügung und zwei Arbeitsprozesse schlagen jeweils einen Kauf für 400 Einheiten vor. Jeder Vorschlag passt allein betrachtet, gemeinsam benötigen sie aber 800 Einheiten. Die Koordination darf unter diesem Budget höchstens einen autorisieren. Der andere sollte die verbleibenden 200 Einheiten sehen und gemäß der Richtlinie scheitern oder warten.
Eine asynchrone Sperre innerhalb eines Prozesses kann zusammenarbeitende Aufgaben in einem Prozess koordinieren. Sie koordiniert nicht automatisch separate Prozesse, andere Computer oder einen manuellen Kauf aus derselben Wallet. Ein dauerhaftes gemeinsames Kontobuch und eine angemessene transaktionale Aktualisierung sind nötig, wenn Befugnisse weiter verteilt sind. Benennen Sie die Grenze, die Ihr gewählter Synchronisierungsmechanismus tatsächlich schützt.
Begrenzen Sie auch die Zahl ausstehender Anfragen. Unbegrenzte Gleichzeitigkeit kann eine wachsende Warteschlange veralteter Kandidaten erzeugen, externe Dienste überlasten und die Wiederherstellung schwerer nachvollziehbar machen. Beachten Sie dokumentierte Grenzen und setzen Sie nach wiederholbaren Fehlern bewusste Warteabstände ein. Das Ziel sind aktuelle, erklärbare Entscheidungen und nicht die größtmögliche Zahl gleichzeitiger Anfragen.
Die Absicht vor der Signaturanfrage bewahren
Speichern Sie vor einer Signaturanfrage eine dauerhafte Absichtsaufzeichnung mit dem freigegebenen Vermögenswert, Ausführungsweg, der Währung, Höchstbeträgen, dem Empfänger, der Richtlinienversion und relevanten Ablaufzeit. Geben Sie dieser Absicht eine Kennung, die im gesamten Ablauf verwendet wird. Die Signierungskomponente sollte genug strukturierte Informationen erhalten, um die Anfrage anhand dieser Aufzeichnung zu prüfen, statt einen unerklärten Datenblock mit einer beruhigenden Bezeichnung.
API-Zugangsdaten und Wallet-Signierungsbefugnisse sind unterschiedliche Geheimnisse mit unterschiedlichen Möglichkeiten. Ein Datendienst kann einen Schlüssel zum Lesen erlaubter Aufzeichnungen benötigen, ohne einen Grund für den Zugriff auf ein Wallet-Geheimnis zu haben. Die Trennung dieser Befugnisse verringert die Anzahl der Komponenten, die Transaktionen autorisieren können, und erleichtert die Begrenzung einer versehentlichen Offenlegung von Geheimnissen.
Die Signierungsschnittstelle sollte eine andere Blockchain, einen anderen Empfänger, Vertrag oder Betrag zurückweisen, selbst wenn der Aufrufer behauptet, die Anfrage gehöre zu einem freigegebenen Kauf. Die Freigabe betrifft eine bestimmte Handlung innerhalb von Grenzen und nicht beliebige von einem Arbeitsprozess erzeugte Bytes. Ändert sich der Ausführungsweg wesentlich, holen Sie eine neue Richtlinienentscheidung ein, statt die alte zu dehnen.
Bevor Sie Code für diese Ebene übernehmen, verwenden Sie den Prüfungsansatz zur Bewertung eines GitHub-NFT-Bots. Ein vertrauter Repository-Name oder eine funktionierende Vorführung zeigt nicht, wohin seine Abhängigkeiten Daten senden oder wie viele Befugnisse sein Transaktionsgenerator anfordern kann.
Die Wiederherstellung von Python-NFT-Transaktionen ausdrücklich entwerfen
Der gefährliche Moment liegt häufig zwischen Übermittlung und lokaler Bestätigung. Ein Netzwerkdienst kann eine Transaktion annehmen, während beim Aufrufer eine Zeitüberschreitung auftritt, bevor er das zurückgegebene Ergebnis speichert. Ein allgemeiner Wiederholungsversuch kann eine zusätzliche Handlung erzeugen, während die ursprüngliche noch aussteht. Die Wiederherstellung muss zuerst die ursprüngliche Absicht und die Transaktionskennungen untersuchen.
Verwenden Sie Zustände, die Unsicherheit bewahren: vorbereitet, freigegeben, übermittelt, ausstehend, bestätigt, fehlgeschlagen und ungeklärt sind mögliche Beispiele. Ihre genauen Namen sind weniger wichtig als ihre Beleganforderungen. Eine erfolgreiche HTTP-Antwort ist nicht dasselbe wie bestätigtes Eigentum, und eine fehlende Antwort ist kein Beweis dafür, dass die Transaktion fehlgeschlagen ist.
Gleichen Sie beim Neustart unerledigte Absichten ab, bevor Sie neue Kandidaten verarbeiten. Behalten Sie ihre Budgetreservierungen bei, bis das Ergebnis eine Änderung rechtfertigt. Wird Eigentum bestätigt, erfassen Sie die tatsächliche Vermögenswertmenge und die Kosten. Ist ein Fehlschlag belegt, berücksichtigen Sie etwaige Netzwerkausgaben, bevor Sie den Rest freigeben. Kann das Ergebnis noch nicht festgestellt werden, bewahren Sie den ungeklärten Zustand und machen Sie ihn für den Betreiber sichtbar.
Minting benötigt zusätzliche Unterscheidungen, weil der Vermögenswert vor der Transaktion möglicherweise noch nicht existiert. Ein Ablauf für automatisiertes NFT-Minting sollte die autorisierte Mint-Menge mit den tatsächlich erstellten und empfangenen Kennungen verbinden. Er sollte keine erwarteten Token-Kennungen erfinden, nur weil der Vertrag sie häufig scheinbar fortlaufend ausgibt.
Entscheidungen mit gespeicherten Fällen testen
Bauen Sie eine kleine Sammlung öffentlicher, von sensiblen Daten bereinigter Beispiele und erwarteter Entscheidungen auf. Beziehen Sie ein gültiges Angebot, ein Stück auf der falschen Blockchain, einen fehlenden Preis, eine Anfrage über Budget, ein doppeltes Ereignis und ein unbekanntes Transaktionsergebnis ein. Diese Fälle testen bedeutsames Verhalten an Grenzen, an denen Fehler Ausgaben oder Bestand verändern können.
Testen Sie Ganzzahlumrechnungen mit Werten knapp unter, genau auf und knapp über einer Grenze. Beziehen Sie Token mit unterschiedlichen Dezimalstellenkonventionen ein. Ein Test, der die eigene Berechnung der Implementierung ohne unabhängig erwartetes Ergebnis wiederholt, kann bestehen, obwohl sowohl Implementierung als auch Test die Einheit missverstehen. Prüfen Sie einige Fälle von Hand und bewahren Sie ihre Herleitung auf.
Beziehen Sie für Mint-Abläufe nicht berechtigte Wallets und erschöpfte Zuteilungen als normale negative Ergebnisse ein. Automatisierung sollte die veröffentlichten Bedingungen respektieren, statt eine Zurückweisung als zu umgehende Herausforderung zu behandeln. Die Richtlinienerörterung in NFT-Whitelisting für Gewinn hilft, die Teilnahmeberechtigung von der unverbundenen Frage zu trennen, ob ein zulässiger Mint wirtschaftlich attraktiv ist.
Üben Sie schließlich Prozessunterbrechung und Wiederherstellung. Stoppen Sie nach der Aufzeichnung der Absicht, nach der Signaturvorbereitung und nach der Übermittlung. Das neu gestartete System sollte erklären, was an jeder Grenze bekannt ist, und vermeiden, einen neuen Kauf zu erfinden, um Unsicherheit zu beseitigen. Eine Vorführung nur vom sauberen Start aus testet nicht die Zustände, die viele betriebliche Fehler verursachen.
Konfiguration ebenso sorgfältig wie Marktdaten validieren
Die Konfiguration ist eine weitere Eingabegrenze. Eine falsch eingegebene Blockchain-Kennung, eine falsche Dezimalstellenzahl oder ein fehlendes Maximalbudget kann jede folgende Entscheidung verändern, während der Code normal weiterläuft. Prüfen Sie erforderliche Einstellungen vor dem Start der Arbeitsprozesse und weisen Sie eine Konfiguration zurück, die ihre Einheiten oder zulässigen Wege nicht erklären kann. Standardwerte sollten bewusst gewählt werden, insbesondere dort, wo eine Auslassung andernfalls unbegrenzte Ausgaben bedeuten könnte.
Bewahren Sie eine versionierte Beschreibung der für jede Entscheidung verwendeten Konfiguration auf, ohne Geheimnisse in diese Aufzeichnung zu kopieren. Ein Betreiber, der einen Kauf untersucht, muss wissen, ob die geltende Obergrenze 100 oder 120 Einheiten betrug, und nicht bloß, was die Einstellung heute besagt. Eine spätere Änderung sollte die Erklärung einer früheren Handlung nicht umschreiben.
Eine Limitänderung benötigt auch eine Regel für bestehende Verpflichtungen. Wird eine Kampagnenobergrenze unter die aktuelle Risikoposition gesenkt, sollte das zusätzliche Verpflichtungen verhindern und eine Prüfung auslösen; Käufe kann es nicht rückwirkend umkehren. Eine Erhöhung sollte dieselbe ausdrückliche Befugnis erfordern wie der ursprüngliche Auftrag. Das Neuladen der Konfiguration ist ein bequemer Übermittlungsmechanismus für eine Entscheidung und keine eigenständige Erlaubnis, die Strategie zu verändern. Testen Sie diese Übergänge neben der gewöhnlichen Startvalidierung.
Einen Python-NFT-Bot wartbar halten
Externe APIs, Abhängigkeiten und Marktplatzwege ändern sich. Halten Sie fest, gegen welche Versionen und Antwortannahmen eine Veröffentlichung getestet wurde. Prüfen Sie Aktualisierungen in einer kontrollierten Umgebung, bevor Sie ihnen dieselben Befugnisse wie der zuvor geprüften Version geben. Eine erfolgreiche Installation sagt wenig darüber aus, ob eine geänderte Abhängigkeit das beabsichtigte Verhalten bewahrt.
Halten Sie Berichte für jemanden verständlich, der den Code nicht geschrieben hat. Jede Handlung sollte ihren Grund, den autorisierten Betrag, das beobachtete Ergebnis und ungeklärte Fragen zeigen. Leistungsanalysen sollten fehlgeschlagene Versuche und unverkauften Bestand einbeziehen, während technische Berichte Schemafehler, Wiederherstellungslücken und zurückgewiesene Anfragen offenlegen sollten. Dies sind verwandte, aber unterschiedliche Ansichten des Systems.
Die nützlichste Architektur macht einen Fehler klein und diagnostizierbar. Exakte Einheiten verhindern mehrdeutige Ausgaben, ausdrückliche Grenzen beschränken Befugnisse und dauerhafte Aufzeichnungen unterstützen die Wiederherstellung. Python bietet nützliche Werkzeuge zur Umsetzung dieser Ideen. Die Qualität des Bots entsteht aber aus der Klarheit der Entscheidungen, die diese Werkzeuge durchsetzen sollen.