suchen
HeimTechnologie-PeripheriegeräteIT IndustrieSolidität Fallstricke: Zufällige Zahlenerzeugung für Ethereum

Solidity Pitfalls: Random Number Generation for Ethereum

Dieser Artikel wird von IOLITE gesponsert und erstellt. Vielen Dank, dass Sie die Partner unterstützt haben, die SitePoint ermöglicht haben.

Solidität ist eine relativ neue Sprache, die Probleme im Zusammenhang mit dem Code und seiner beabsichtigten Verwendung enthält, da es keinen perfekten Code gibt. In diesem Artikel werden Sie Best Practices und Fallstricke leiten, wenn Sie Zufallszahlen als Eingabe in Smart Contracts von Ethereum verwenden.

Schlüsselpunkte

  • Soliditätssprache selbst kann aufgrund ihrer deterministischen Natur und den hohen Kosten komplexer Algorithmen keine echten Zufallszahlen erzeugen. Entwickler müssen sich bewusst sein, dass in einigen Fällen ein Angreifer die Ergebnisse vorhersagen kann.
  • Ein häufiger Weg, um Pseudo-Random-Zahlen in der Solidität zu erzeugen, besteht darin, den LCG-Algorithmus für Kongruenzgenerator (LCG) zu verwenden. Es funktioniert jedoch nicht für Kennwortsicherheitsanwendungen und stützt sich auf block.timestamp und block.difficulty, Bergarbeiter können diese Werte manipulieren.
  • kettenlink vrf (verifizierte zufällige Funktion) liefert eine Lösung, um nachgewiesene Zufallszahlen in der Solidität zu erzeugen. Es verwendet zufällige Überprüfung und Kennwortmischung, um sicherzustellen, dass die Zahlen wirklich zufällige Zahlen sind.
  • Andere Mechanismen zur Erzeugung von Zufallszahlen sind: Ethereum -Wecker für die Planung von Transaktionen; intelligente Verträge.

Soliditätsnummer Erzeugung

Solidität können keine Zufallszahlen erstellen. Tatsächlich sind alle Algorithmen, die zufällige Zahlen erzeugen, Pseudo-Random-keine Sprache kann vollständig zufällige Zahlen erzeugen. Das Problem mit Solidität ist, dass komplexe Algorithmen zu teuer sind und daher eine grundlegende Lösung verwendet wird. Abgesehen davon sollte der Soliditätscode deterministisch sein, da er auf mehreren Knoten ausgeführt wird. Wir brauchen einen Algorithmus, der gleichzeitig eine Zufallszahl erzeugen und auf mehreren Knoten verwenden kann. Informationen wie die Uhrzeit sind nicht verfügbar, um Zufallszahlen zu generieren. Daher müssen wir nach anderen Optionen suchen. Als Entwickler sollten Sie sich dieses Problems bewusst sein, da ein Angreifer in bestimmten Situationen Ergebnisse vorhersagen kann.

Einer der am häufigsten verwendeten Algorithmen ist der "lineare Kongruenzgenerator" (LCG). Es ist einer der ältesten Algorithmen, schnell und leicht zu verstehen. LCGs sind eine gute Wahl für eingebettete Systeme, da sie nur einen begrenzten Speicher haben. Es funktioniert jedoch nicht mit Passwort -Sicherheitsanwendungen. Trotzdem wird es immer noch in intelligenten Verträgen verwendet, da schnelle Algorithmen in Bezug auf die Gaskosten billiger sind.

Der Algorithmus selbst führt die folgenden Schritte aus:

  • Eingabe
  • Akzeptieren
  • Algorithmus auf Eingabe
  • ausführen
  • Holen Sie sich den Modul des Ausgangs (geteilt durch die maximale Zahl im gewünschten Bereich)
  • Ausgabe 0 zum Wert zwischen der maximalen Zahl im gewünschten Bereich

Lassen Sie uns verschiedene Möglichkeiten untersuchen, um zufällige Zahlen mit dem Lottery Smart Contract -Beispiel zu erstellen. Benutzer können sich der Lotterie anschließen, indem sie 0,1 Ether an den Vertrag und eine Ganzzahl zwischen 0 und 250 senden.

  1. block.timestamp & block.difficulty

Wenn der Bergmann eine Transaktion bestätigt, wird ein block.timestamp zugewiesen. Kein Spieler in unserem Lotterievertrag kann dies kontrollieren. Schauen wir uns diesen Code an, der zum Erstellen von Zufallsnummern verwendet wird.

function random() private view returns (uint8) {
  return uint8(uint256(keccak256(block.timestamp, block.difficulty))%251);
}

Finden Sie hier Gist .

Dieser Code hasht zuerst den Block -Zeitstempel und die Schwierigkeit. Als nächstes konvertieren wir den Hash -Wert in eine Ganzzahl und teilen ihn durch 251, um eine Ganzzahl zwischen 0 und 250 zu erhalten. Das Problem mit diesem Code ist jedoch, dass wir den Bergleuten nicht vertrauen sollten, um den Gewinner zu wählen.

  1. Lotterieeingabe - JEDE Daten

Wir benötigen mehr willkürliche Daten, um unseren Gewinner auszuwählen. Wir können die Adresse der Spieler verwenden, die in unseren Lotterie -Smart -Vertrag abgeschlossen haben, aber wir müssen sie verbergen, weil sie ihn möglicherweise missbrauchen. Da alle Informationen auf der Blockchain aufgezeichnet werden, können diese Informationen nicht versteckt werden.

Die Zahlen, die an unseren Lotterie -Smart -Vertrag übermittelt werden können. Benutzer müssen die Hashing -Nummer haben, die sie mit ihrer Ethereum -Adresse ausgewählt haben. Dies gibt uns eine ziemlich zufällige Zahl.

Wenn dies gesagt wird, ist Zufälligkeit möglich, aber Sie müssen nur ein Orakel verwenden, um die Zufallszahl von außerhalb der Blockchain zu erhalten. Das Problem bei der Verwendung externer Daten ist, dass es sehr schwierig ist zu beweisen, dass die Zahl tatsächlich zufällig ist und sicherzustellen, dass die Entität außerhalb des Ketten die Zufallszahl in keiner Weise manipuliert. Hier kommt Chainlink VRF ins Spiel. ChainLink VRF (verifizierte zufällige Funktion) ist, wie wir nachweisliche Zufallszahlen in der Solidität erhalten.

ChainLink VRF fügt der Blockchain ein Ereignis hinzu, aus dem der ChainLink -Knoten das Ereignis liest und eine Zufallszahl zurückgibt. Zufälligkeitsprüfungen auf Ketten werden über den sogenannten VRF-Koordinator durchgeführt. Dies verwendet einen bestimmten Schlüssel -Hash aus dem Orakel und einer Saatgutphrase des Benutzers sowie einer Kryptographie, um sicherzustellen, dass die Zahl eine echte Zufallszahl ist. Auf diese Weise können wir eine unvoreingenommene Zufallszahl erhalten.

  1. Andere Mechanismen

4.1 Ethereum Wecker

Entwickler müssen überlegen, wann sie einen Gewinner auswählen sollen. Informationen wie die Uhrzeit sind in der virtuellen Maschine von Ethereum nicht verfügbar, da der Code zu verschiedenen Zeiten auf mehreren Knoten ausgeführt wird. Dies macht es schwieriger, den Gewinner zu wählen. Eine Möglichkeit besteht darin, eine Funktion in Ihrem Smart -Vertrag zu implementieren, die die Lotterie ausschaltet und den Gewinner auswählt. Dies ist nicht so dezentralisiert, wie wir es uns erhofft hätten. Der Besitzer des Vertrags kann die Lotterie schließen, wenn festgestellt wird, dass sein Freund gewinnen wird. Wir müssen diese Art von Betrug vermeiden.

Eine bessere Option ist die Verwendung des Ethereum -Weckers. Es ist ein Dienst, mit dem die Planung von Transaktionen später in der Ethereum -Blockchain ausgeführt werden kann. Dieser Service ist völlig vertrauenslos, was bedeutet, dass der gesamte Service als intelligenter Vertrag ausgeführt wird. Grundsätzlich verwendet der Ethereum -Alarm Blocknummern, um Transaktionen zu planen. Beachten Sie, dass dies nicht bedeutet, dass der Vertrag von selbst beginnt. Es beruht auf dem Interesse des Benutzers, die Funktion "Gewinner auszuwählen" (Ether Belohnung). Wenn niemand Ihre Funktion aufruft, fällt Ihnen natürlich fehl.

4.2 Zufällige Dateneingabe

random.org stellt eine API bereit, die eine zufällige Datenquelle über JSON bereitstellt. Ethereum Smart Contracts können diese Datenquelle verwenden, um Algorithmen zur Auswahl von Zufallszahlen zu füttern. Da Sicherheit wichtig ist, können digitale Signaturen verwendet werden. Zufällige Daten werden von random.org signiert. Sie können die Integrität der Daten überprüfen, damit Sie nachweisen können, dass sie tatsächlich von random.org stammen und dass die Daten nicht manipuliert wurden.

Randao ist ein neues Projekt im Blockchain -Bereich, das sich ausschließlich auf die Bereitstellung von Zufallszahlen konzentriert. Sie verwenden eine Kombination aus Orakel und intelligenten Verträgen, um Ihnen zufällige Zahlen zu geben. Randao Services sind jedoch derzeit sehr langsam. Wenn Sie eine App haben, die Sie häufig verwenden, ist dies nicht ideal.

4.3 Blocknummer Monitor

Sie können auch einen Monitor in Ihrem Code verwenden, der die Blocknummer überprüft, bis er mit der von Ihnen festgelegten Zielnummer übereinstimmt.

function random() private view returns (uint8) {
  return uint8(uint256(keccak256(block.timestamp, block.difficulty))%251);
}

Quelle. GIST .

4.4 IOLITE Smart Contract Creation

iOLite erstellt ein Produkt, das natürliche Sprache akzeptiert, um intelligente Verträge zu erstellen. Es verwendet die NLP -Motor (Stanford Natural Language Processing), die als Fast Adaptation Engine (FAE) bezeichnet wird. IOLITE verlässt sich auf Solidity -Experten für die Schulung der Gemeinschaft. Ein Solidity -Experte (Mitwirkender) kann eine Struktur definieren, die einen oder mehrere Sätze enthält und sie dem entsprechenden Smart Contract Code anhängen.

Die Stanford NLP Engine ist so konzipiert, dass sie komplexe Sprachen verstehen. Die Komplexität der Sprache hängt von der Menge des Maschinentrainings ab. Nach ordnungsgemäßem Training kann der Motor komplexe intelligente Verträge schaffen. FAE ist in der Lage, solche Verträge zu schaffen, da komplexe Verträge nicht so kompliziert sind. Experten können die Anfrage in mehrere kleinere Codeausschnitte aufteilen und an einen Satz anhängen.

Wenn jemand mehrere Sätze betritt, sucht er nach der entsprechenden Struktur/dem entsprechenden Satz, um einen "komplexen" Vertrag zu erstellen. Mitwirkende erhalten IOLITE -Token -Belohnungen durch den Bergbauprozess der neuen Struktur.

Der Vorteil der Verwendung von IOLITE besteht darin, dass Smart Contract -Experten Probleme wie die Zufallszahlengenerierung für Sie lösen können. Weitere Informationen finden Sie unter iOLite.io.

Schlussfolgerung

Wie Sie sehen können, ist es nicht einfach, echte zufällige Eingaben zu erzeugen. Verlassen Sie sich nicht auf block.timestamp, now und block.blockhash als Quellen der Zufälligkeit. Eine gute Lösung umfasst die Kombination mehrerer Pseudo-Random-Dateneingaben und die Verwendung von Oracles oder intelligenten Verträgen, um sie zuverlässiger zu gestalten. Sie müssen sich zu 100% sicher sein, sicher, dass niemand die in den Smart -Vertrag eingegebenen Daten manipulieren kann.

Bitte seien Sie vorsichtig und überlegen Sie sich zweimal, bevor Sie die Logik der Zufallszahlengenerierung implementieren.

FAQ für die Zufallszahlenerzeugung in Solidität (FAQ)

Warum ist es schwierig, zufällige Zahlen in Solidität zu generieren?

Solidität (die Programmiersprache zum Schreiben von Ethereum-Smart Contracts) verfügt nicht über integrierte Funktionen, um Zufallszahlen zu generieren. Dies liegt daran, dass Blockchain (die Grundtechnologie von Ethereum) im Wesentlichen deterministisch ist. Dies bedeutet, dass die Ausgabe bei einer Reihe von Eingängen immer gleich ist. Diese Sicherheit ist entscheidend für die Aufrechterhaltung der Integrität und Sicherheit der Blockchain. Es macht jedoch die Erzeugung echter Zufallszahlen zu einer Herausforderung, da das Konzept der Zufälligkeit von Natur aus nicht deterministisch ist.

Was sind die üblichen Methoden, um zufällige Zahlen in der Solidität zu erzeugen?

Entwickler verwenden verschiedene Methoden, um Pseudo-Random-Zahlen in Solidität zu generieren. Eine gemeinsame Methode besteht darin, die Keccak256 -Hash -Funktion zu verwenden, deren Eingabe schwer vorherzusagen ist, wie z. Ein anderer Ansatz ist die Verwendung eines Oracle-Dienstes, der zufällige Zahlen aus Off-Chain-Quellen bietet. Jeder Ansatz hat jedoch seine eigenen Einschränkungen und potenziellen Sicherheitsrisiken.

Was sind die Risiken für die Verwendung der Keccak256 -Hash -Funktion, um Zufallszahlen zu generieren?

Obwohl die Keccak256-Hash-Funktion verwendet werden kann, um Pseudo-Random-Zahlen zu generieren, stellt sie einige potenzielle Sicherheitsrisiken dar. Da Eingänge zu Hash -Funktionen wie aktuelle Block -Zeitstempel und Blockschwierigkeiten auf der Blockchain öffentlich verfügbar sind, können böswillige Bergleute diese Werte so manipulieren, um die nach Zufallszahlen generierte Ausgabe zu beeinflussen.

Wie generiere ich zufällige Zahlen in Solidität mit Oracle Service?

Originaldienste können zufällige Zahlen aus Off-Chain-Quellen bereitstellen. Diese Dienste fungieren als Brücke zwischen der Blockchain und der Außenwelt und ermöglichen es intelligenten Verträgen, mit Daten zu interagieren, die der Blockchain selbst nicht zur Verfügung stehen. Die Verwendung von Oracle Services führt jedoch ein Vertrauensniveau ein, da intelligente Verträge auf Orakel stützen müssen, um genaue und unvoreingenommene Zufallszahlen bereitzustellen.

Engagement-Was spielt die Rolle, Schemata bei der Erzeugung von Zufallszahlen aufzudecken?

Verpflichtungspflichtschema ist eine Möglichkeit, zufällige Zahlen auf dezentrale und sichere Weise zu generieren. Im Verpflichtungspflicht begehen die Teilnehmer zunächst eine geheime Zahl, und dann werden alle geheimen Zahlen gleichzeitig bekannt gegeben, und eine zufällige Zahl wird basierend auf diesen Geheimnissen generiert. Dieser Ansatz verhindert, dass ein einzelner Teilnehmer die durch Zufallszahlen erzeugte Ausgabe beeinflussen kann.

Warum ist es wichtig, echte Zufallszahlen in intelligenten Verträgen zu generieren?

reale Zufallszahlen sind für viele Arten von intelligenten Verträgen von entscheidender Bedeutung, beispielsweise für Spiele von Zufall, Lotterie und anderen Anwendungen, die Zufälligkeit erfordern. Wenn die in diesen Verträgen verwendeten Zufallszahlen vorhergesagt oder betroffen sind, kann dies zu unfairen Ergebnissen führen und sogar böswillige Akteure den Vertrag ausnutzen.

Kann die BlockHash -Funktion verwendet werden, um Zufallszahlen in Solidität zu generieren?

Die Blockhash-Funktion in Solidität kann verwendet werden, um Pseudo-Random-Zahlen zu erzeugen. Diese Funktion gibt den Hash -Wert der angegebenen Blocknummer zurück, der unvorhersehbar ist und mit jedem Block variiert. Diese Methode hat jedoch ihre Einschränkungen. Beispielsweise funktioniert die BlockHash -Funktion nur in den neuesten 256 Blöcken, und der Blockhash zukünftiger Blöcke kann vor dem Mining nicht bekannt sein.

Was sind die Einschränkungen bei der Verwendung des aktuellen Block -Zeitstempels, um Zufallszahlen zu generieren?

Es besteht eine große Begrenzung für die Verwendung des aktuellen Block -Zeitstempels als Eingabe, um Zufallszahlen zu generieren. Bergleute haben einen gewissen Einfluss auf die Zeitstempel der Blöcke, die sie abbauen, was bedeutet, dass sie die Zeitstempel manipulieren können, um die durch Zufallszahlen erzeugte Ausgabe zu beeinflussen.

Wie generiere ich zufällige Zahlen mit Randao Beacon?

Randao (zufällige Zahl DAO) Beacon ist eine dezentrale und transparente Möglichkeit, Zufallszahlen zu generieren. Die Teilnehmer der Randao Beacon versprechen geheime Zahlen, die dann enthüllt und kombiniert werden, um eine Zufallszahl zu generieren. Dieser Ansatz soll verhindern, dass ein einzelner Teilnehmer die durch Zufallszahlen erzeugte Ausgabe beeinflussen kann.

Gibt es bevorstehende Verbesserungen oder Vorschläge, um zufällige Zahlen in der Solidität zu generieren?

Forschungen und Vorschläge zur Verbesserung der Zufallszahlerzeugung bei Solidität und anderen Blockchain -Plattformen sind im Gange. Beispielsweise wird erwartet, dass Ethereum 2.0 (ein bevorstehendes Upgrade in das Ethereum-Netzwerk) einen integrierten Zufallszahlengenerator umfasst. Bevor diese Verbesserungen jedoch umgesetzt werden, müssen Entwickler weiterhin bestehende Ansätze und ihre inhärenten Einschränkungen und potenziellen Sicherheitsrisiken verwenden.

Das obige ist der detaillierte Inhalt vonSolidität Fallstricke: Zufällige Zahlenerzeugung für Ethereum. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorteile der benutzerdefinierten TelekommunikationssoftwareVorteile der benutzerdefinierten TelekommunikationssoftwareMay 11, 2025 am 08:28 AM

Die kundenspezifische Entwicklung von Telekommunikationssoftware ist zweifellos eine beträchtliche Investition. Langfristig können Sie jedoch erkennen, dass ein solches Projekt möglicherweise kostengünstiger ist, da es Ihre Produktivität wie jede fertige Lösung auf dem Markt steigern kann. Verstehen Sie die wichtigsten Vorteile des Aufbaus eines maßgeschneiderten Telekommunikationssystems. Holen Sie sich die genauen Funktionen, die Sie benötigen Es gibt zwei potenzielle Probleme mit der von Ihnen gekauften Telekommunikationssoftware. Einige fehlen nützliche Funktionen, die Ihre Produktivität erheblich verbessern können. Manchmal können Sie sie mit einer externen Integration verbessern, aber das ist nicht immer genug, um sie großartig zu machen. Andere Software hat zu viele Funktionen und ist zu kompliziert, um sie zu verwenden. Sie werden wahrscheinlich einige davon nicht verwenden (niemals!). Eine große Anzahl von Funktionen trägt normalerweise zum Preis bei. Basierend auf Ihren Bedürfnissen

CNCF löst einen Durchbruch der Plattformparität für ARM64 und X86 ausCNCF löst einen Durchbruch der Plattformparität für ARM64 und X86 ausMay 11, 2025 am 08:27 AM

CI/CD -Rätsel und -Lösungen für Open -Source -Software in ARM64 Architektur Die Bereitstellung von Open -Source -Software auf der ARM64 -Architektur erfordert eine leistungsstarke CI/CD -Umgebung. Es gibt jedoch einen Unterschied zwischen den Stützniveaus von ARM64 und herkömmlichen X86 -Prozessorarchitekturen, die häufig im Nachteil sind. Infrastrukturkomponentenentwickler für mehrere Architekturen haben bestimmte Erwartungen für ihr Arbeitsumfeld: Konsistenz: Die Tools und Methoden, die über Plattformen hinweg verwendet werden, sind konsistent und vermeiden, dass der Entwicklungsprozess aufgrund der Einführung weniger beliebter Plattformen geändert werden muss. Leistung: Die Plattform- und Support -Mechanismus haben eine gute Leistung, um sicherzustellen, dass die Bereitstellungsszenarien bei der Unterstützung mehrerer Plattformen nicht von unzureichender Geschwindigkeit beeinflusst werden. Testabdeckung: Effizienz, Konformität und

Top 21 Entwickler -Newsletter, die sich 2025 abonnieren könnenTop 21 Entwickler -Newsletter, die sich 2025 abonnieren könnenApr 24, 2025 am 08:28 AM

Bleiben Sie über die neuesten technischen Trends mit diesen Top -Entwickler -Newsletters informiert! Diese kuratierte Liste bietet für jeden etwas, von KI -Enthusiasten bis hin zu erfahrenen Backend- und Frontend -Entwicklern. Wählen Sie Ihre Favoriten und sparen Sie Zeit, um nach REL zu suchen

Serverlose Bildverarbeitungspipeline mit AWS ECS und LambdaServerlose Bildverarbeitungspipeline mit AWS ECS und LambdaApr 18, 2025 am 08:28 AM

Dieses Tutorial führt Sie durch das Erstellen einer serverlosen Bildverarbeitungspipeline mit AWS -Diensten. Wir werden ein Next.JS -Frontend erstellen, der in einem ECS -Fargate -Cluster eingesetzt wird und mit einem API -Gateway, Lambda -Funktionen, S3 -Eimer und DynamoDB interagiert. Th

CNCF ARM64 Pilot: Impact and InsightsCNCF ARM64 Pilot: Impact and InsightsApr 15, 2025 am 08:27 AM

Dieses Pilotprogramm, eine Zusammenarbeit zwischen CNCF (Cloud Native Computing Foundation), Ampere Computing, Equinix Metal und betätigten, rationalisiert ARM64 CI/CD für CNCF -Github -Projekte. Die Initiative befasst sich mit Sicherheitsbedenken und Leistung

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Nordhold: Fusionssystem, erklärt
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

mPDF

mPDF

mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHPStorm Mac-Version

PHPStorm Mac-Version

Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool