Dieser Beitrag wurde zuletzt von jimi2018 am 11.12.2018 um 09:06 bearbeitet
1. Übersicht des EntwicklungspaketsDer Zweck von EosTool ist es, den Aufwand der Entwicklung von EOS-Blockchain-Anwendungen mit PHP zu beseitigen, wie zum Beispiel: - Ruft seine Funktionen über die RPC-Schnittstelle von Nodeos und Keosd auf
- Private und öffentliche Schlüssel im EOS-Format offline generieren
- Verwenden Sie Ihren lokalen privaten Schlüssel, um EOS-konforme Transaktionssignaturen zu erstellen
- Serialisieren Sie Transaktionsobjekte in das von Nodeos geforderte packed_trx-Format
Es kann angenommen werden, dass EosTool eine PHP-Version von eosjs ist, die zur vollständigen Implementierung der Funktionen des offiziellen EOS-Clients Cleos verwendet werden kann und auch einfach zur Unterstützung der EOS-Blockchain in PHP-Anwendungen hinzugefügt werden kann, was die Entwicklungseffizienz erheblich verbessert.
Interessierte Freunde können auch direkt dazu gehen, das EOS Blockchain PHP Entwicklungskit herunterzuladen:http://t.cn/EUZAODQ
EosTool läuft in der Php 7.1+-Umgebung, die aktuelle Version ist 1.0.0, und die Liste der Hauptcodedateien ist wie folgt:
| Codedateien | illustrieren | | eostool/src/client/NodeClient.php | Die RPC-Schnittstellenpaketklasse der Nodeos der Knotensoftware-Nodeos | | eostool/src/client/WalletClient.php | Die RPC-Schnittstellenkapselungsklasse der Wallet-Software KEOSD | | eostool/src/client/RpcOutput.php | RPC liefert die resultierende Kapselungsklasse zurück | | eostool/src/Crypto/PrivateKey.php | EOS-Private-Key-Klasse | | eostool/src/Crypto/PublicKey.php | EOS-Klasse des öffentlichen Schlüssels | | eostool/src/Crypto/Signature.php | EOS-Signaturklasse | | eostool/src/Serializer/AbiType.php | EOS' ABI-Typ-Paketklasse | | eostool/src/Serializer/AbiTypeFactory.php | ABI-Typ-Fabrikklasse | | eostool/src/Serializer/SerialBuffer.php | Serialisierte Puffer-Implementierungsklasse | | eostool/src/Serializer/Serializer.php | Serializer-Implementierungsklasse | | eostool/src/Signer/Signer.php | Signer-Schnittstelle | | eostool/src/Signer/KeosdSigner.php | Keosd-Signer-Implementierungsklasse | | eostool/src/Signer/LocalSigner.php | Implementierung des lokalen Offline-Signierers | | eostool/src/Contract.php | Vertragsklasse | | eostool/src/EosTool.php | Entwicklungspaket-Einstiegsklasse | | Eostool/Tests | Katalog von Einheitstestfällen | | Eostool/phpunit.xml | Einheitstestprofile | | eostool/Anbieter | Drittanbieter-Abhängigkeitspakete | | eostool/composer.json | Komponisten-Konfigurationsdatei | 2. Zugriff auf den KnotenserverVerwenden Sie die NodeClient-Klasse, um auf die rpc-Schnittstelle von NodeOS zuzugreifen. Zum Beispiel greift der folgende Code auf die get_info-Schnittstelle des Chain-Plugins für einen nativ laufenden Nodeos-Knoten zu: 2.1 RPC-Rufgruppierung
EosTool verwendet eine konsistente Benennungsmethode, und die Aufrufmethode von NodeClient kann anhand der API abgeleitet werden: Die API-Gruppierung entspricht einer Eigenschaft mit demselben Namen wie der NodeClient, und die API entspricht einer von camelCase konvertierten Methode unter demselben Attribut mit demselben Namen wie die Gruppierung des Client von No. Zum Beispiel:
| Plugins | API-Gruppierung | RPC API | NodeClient-Methode | | chain_api_plugin | Kette | get_info | $nc->chain->getInfo() | | history_api_plugin | Geschichte | get_transaction | $nc->history->getTransaction() | | net_api_plugin | netto | Status | $nc->net->status() | | producer_api_plugin | Produzent | get_runtime_options | $nc->producer->getRunTimeOptions() | | dbsize_api_plugin | dbsize | Erhalten | $nc->dbsize->get() |
Offizielle Dokumentation für die RPC API:https://developers.eos.io/eosio-nodeos/reference
2.2 RPC-Aufrufparameter
Für Nodeos erfordern einige Aufrufe das Eingeben zusätzlicher Parameter, wie zum Beispiel die get_block-Schnittstelle des Ketten-Plugins. Wenn man mit EosTool einen Aufruf tätigt, organisiere die Parameter einfach in ein zugehöriges Array, der Beispielcode ist wie folgt:
2.3 RPC-Aufrufe returnieren Werte
Das Rückgabeergebnis aller RPC-Aufrufe ist eine RpcOutput-Instanz, und der Aufruf ihrer hasError()-Methode kann bestimmen, ob der Aufruf falsch ist, und Sie können außerdem die getError()-Methode verwenden, um Fehlerinformationen zu erhalten. Die Antwort des RPC-Aufrufs kann über die getResult()-Methode erhalten werden, die ein StdClass-Objekt ist, das aus dem ursprünglichen JSON-Ergebnis konvertiert wurde, sodass sie leicht extrahierbar Attributinformationen sind, wie zum Beispiel:
2.4 Zugriff auf Mainnet-/Testnet-Knoten
Beim Erstellen einer NodeClient-Instanz können zusätzliche Parameterausführungen eingereicht werden, um die EOS-Hauptnetz- oder Testnetzknoten zu definieren, auf die sie zugreifen sollen. Verwenden Sie zum Beispiel folgenden Code, um auf einen Mainnet-Knoten zuzugreifen:
Oder besuchen Sie einen Knoten im Jungle-Testnetz:
3. Zugriff auf den Wallet-ServerDie neue Version von Keosd bietet keine RPC-API-Dokumentation mehr, was bedeuten könnte, dass sie im EOS-Softwarestack langsam an den Rand rutscht. Die alte Version der Dokumentation können Sie jedoch unter dieser Adresse abrufen: https://developers.eos.io/eosio-nodeos/v1.1.0/reference
Verwenden Sie die WalletClient-Klasse, um auf die rpc-Oberfläche von Keosd zuzugreifen. Zum Beispiel greift folgender Code auf die list_wallets Schnittstelle von Keosd zu, die nativ läuft: Da Keosds API nicht mehr gruppiert ist, hängt die entsprechende RPC-Methode direkt am WalletClient-Objekt auf, was einen Unterschied macht. Wie bei NodeClient gibt der Aufruf an WalletClient ein RpcOutput-Objekt zurück.
Keosd Version 1.4 verwendet UNIX-Sockets anstelle von HTTP, um standardmäßig RPC-Schnittstellen bereitzustellen, was als sicherer für IPC gelten kann, da Keosd in den meisten Fällen nativ läuft. Daher ist dies auch die Standardinstanziierungsoption für WalletClient, und in den meisten Fällen müssen keine zusätzlichen Parameter eingegeben werden, um den WalletClient zu instanziieren. 4. Private und öffentliche Schlüssel
Der Schlüsselalgorithmus von EOS ähnelt Bitcoin, weist jedoch einige Anpassungen auf und definiert ein eigenes Format. Verwenden Sie die statische Methode der PrivateKey-Klasse new(), um einen zufälligen privaten Schlüssel zu generieren. Zum Beispiel: die toEos()-Methode wird verwendet, um private Schlüsselobjekte in ein benutzerdefiniertes EOS-Format umzuwandeln.
4.1 Herleitung des öffentlichen Schlüssels Der öffentliche Schlüssel kann aus dem privaten Schlüssel abgeleitet werden, zum Beispiel:
Verwenden Sie ähnlich die toEos()-Methode, um den öffentlichen Schlüssel in ein benutzerdefiniertes EOS-Format umzuwandeln.
4.2 Import von EOS-Privatschlüsseln Sie können einen EOS-formatierten privaten Schlüssel in ein EosTool PrivateKey-Objekt umwandeln, zum Beispiel importiert der untenstehende Code den angegebenen EOS-Privatschlüssel und zeigt den entsprechenden EOS-Public-Key an:
4.3 Autoritative Unterschrift Die sign()-Methode von PrivateKey unterstützt sowohl normale Signaturen als auch autoritative Signaturen, die von EOS-Knoten benötigt werden. Zum Beispiel liefert der folgende Code eine einfache Signatur:
Geben Sie zusätzliche Parameter ein, um eine autoritative Signatur für die angegebenen Daten zu erhalten:
5. Serialisierung
EOS erfordert, dass Transaktionen serialisiert werden, bevor Knoten-push_transaction gecommittet wird, was ebenfalls ein unvermeidbarer Bestandteil des Betriebs von EOS-Transaktionen in PHP ist. In EosTool wird die Serializer-Klasse für Serialisierungsoperationen verwendet. Zum Beispiel serialisiert der folgende Code eine EOS-Übertragungstransaktion in ein 16-dezimales Codestream-Format, das an einen EOS-Knoten übermittelt werden kann:
Die statische Methode fromAbi() von Serializer wird verwendet, um eine Serializer-Instanz auf Basis eines angegebenen Abi zu konstruieren, und anschließend wird die Serialize()-Methode der Instanz verwendet, um den angegebenen Datentyp zu serialisieren und so einen hexadezimalen Codestrom zu erhalten. 6. UnterschriftEosTool bietet zwei Möglichkeiten, Transaktionen zu signieren: mit Keosd zum Signieren oder mit einem lokalen privaten Schlüssel. Verwenden Sie die KeosdSigner-Klasse, um das Signieren über den Wallet-Server abzuschließen. Zum Beispiel:
Mit der LocalSigner-Klasse können Sie die Nutzung von keosd vermeiden und direkt Offline-Private-Key-Signing nutzen. Zum Beispiel: EosTool\Signer\LocalSigner verwenden;
$prvKeys = ['5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3']; $signer = neuer LocalSigner($prvKeys); $signatures = $signer->Zeichen($tx,$pubKeys,$chainId);
7. Einreichung der Transaktion
Eine Transaktionsdaten müssen normalisiert, serialisiert, signiert und durch eine Reihe von Operationen verpackt werden, bevor sie zum Broadcasting an den Nodeos-Knoten gesendet werden können. Die EosTool-Klasse bietet die transact()-Methode, um diese mühsamen Operationen zu isolieren. Zum Beispiel erstellt der folgende Code eine EosTool-Instanz mit NodeClient und LocalSigner und reicht dann eine Transaktion ein: Es ist praktisch, den Signer zum Beispiel in KeosdSigner zu ändern:
8. Erheben Sie eine einheitliche VertragsklageVerwenden Sie die pushAction()-Methode von EosTool, um eine einzelne Vertragsaktion aufzurufen. Zum Beispiel ruft der folgende Code die hi()-Methode des Tommy-Konto-Hosting-Vertrags auf:
9. Den Vertrag auszulösenDeployen Sie den Vertrag zum Beispiel mit der setContract()-Methode von EosTool: Interessierte Freunde können hier gehen:http://t.cn/EUZAODQ
|