Eine PHP-Schnittstelle für die Interaktion mit der Ethereum-Blockchain und dem Ökosystem.
Stellen Sie die Mindeststabilität auf Dev ein
"minimum-stability": "dev"
Dann
composer require web3p/web3.php dev-master
Oder Sie können diese Zeile in Composer.json hinzufügen
"web3p/web3.php": "dev-master"
use Web3Web3;$web3 = new Web3('http://localhost:8545');
use Web3Web3;use Web3ProvidersHttpProvider;$web3 = new Web3(new HttpProvider('http://localhost:8545'));// timeout$web3 = new Web3(new HttpProvider('http://localhost:8545', 0.1 ));
$web3->clientVersion(function ($err, $version) {if ($err !== null) {// do Somethingreturn; }if (isset($version)) {echo 'Client-Version: ' . $version; } });
use Web3Web3;use Web3ProvidersHttpAsyncProvider;$web3 = new Web3(new HttpAsyncProvider('http://localhost:8545'));// timeout$web3 = new Web3(new HttpAsyncProvider('http://localhost:8545', 0.1 ));//wait$promise = $web3->clientVersion(function ($err, $version) {// etwas tun});Asyncawait($promise);
use Web3Web3;use Web3ProvidersWsProvider;$web3 = new Web3(new WsProvider('ws://localhost:8545'));// timeout$web3 = new Web3(new WsProvider('ws://localhost:8545', 0.1 ));//wait$promise = $web3->clientVersion(function ($err, $version) {// do etwas});Asyncawait($promise);// Verbindung schließen$web3->provider->close();
use Web3Web3;$web3 = new Web3('http://localhost:8545');$eth = $web3->eth;
Oder
use Web3Eth;$eth = new Eth('http://localhost:8545');
use Web3Web3;$web3 = new Web3('http://localhost:8545');$net = $web3->net;
Oder
use Web3Net;$net = new Net('http://localhost:8545');
web3
$web3->batch(true);$web3->clientVersion();$web3->hash('0x1234');$web3->execute(function ($err, $data) {if ($err !== null) {// etwas tun// es kann eine Ausnahme oder ein Array von Ausnahmen auslösen, abhängig vom Fehlertyp// Verbindungsfehler: Ausnahme auslösen// JSON-RPC-Fehler: Array von Ausnahmenreturn; }// etwas tun});
eth
$eth->batch(true);$eth->protocolVersion();$eth->syncing();$eth->provider->execute(function ($err, $data) {if ($err !== null) {// etwas tunreturn; }// etwas tun});
netto
$net->batch(true);$net->version();$net->listening();$net->provider->execute(function ($err, $data) {if ($err !== null) {// etwas tunreturn; }// etwas tun});
persönlich
$personal->batch(true);$personal->listAccounts();$personal->newAccount('123456');$personal->provider->execute(function ($err, $data) {if ($err !== null) {// etwas tunreturn; }// etwas tun});
use Web3Contract;$contract = new Contract('http://localhost:8545', $abi);// Vertrag bereitstellen$contract->bytecode($bytecode)->new($params, $callback);// aufrufen Vertragsfunktion$contract->at($contractAddress)->call($functionName, $params, $callback);// Funktion ändern state$contract->at($contractAddress)->send($functionName, $params, $callback);// geschätzter Bereitstellungsvertrag gas$contract->bytecode($bytecode)->estimateGas($params, $callback); // Funktion gas$contract->at($contractAddress)->estimateGas($functionName, $params, $callback);// Konstruktordaten abrufen$constructorData = $contract->bytecode($bytecode)->getData($params);// Funktionsdaten abrufen$functionData = $contract->at($contractAddress)->getData($functionName, $params);
Da sich der Rückruf nicht mit einem Javascript-Rückruf verhält, müssen wir dem Rückruf eine Referenz zuweisen, wenn wir einem Wert außerhalb des Bereichs zuweisen müssen.
$newAccount = '';$web3->personal->newAccount('123456', function ($err, $account) use (&$newAccount) {if ($err !== null) {echo 'Error: ' . $err->getMessage();return; }$newAccount = $account;echo 'Neues Konto: ' . $Konto . PHP_EOL; });
Um Beispiele auszuführen, müssen Sie Ethereum Blockchain Local (testrpc) ausführen.
Wenn Sie Docker als Entwicklungsmachain verwenden, können Sie ethdock ausprobieren, um die lokale Ethereum-Blockchain auszuführen. Führen Sie einfach docker-compose up -d testrpc
aus und legen Sie den 8545
-Port frei.
Klonen Sie das Repo und installieren Sie die Pakete.
git clone https://github.com/web3p/web3.php.git && cd web3.php && composer install
Testskript ausführen.
vendor/bin/phpunit
Klonen Sie das Repo und führen Sie den Docker-Container aus.
git clone https://github.com/web3p/web3.php.git
Kopieren Sie web3.php in das Verzeichnis web3.php/docker/app und starten Sie den Container.
cp files docker/app && docker-compose up -d php ganache
Geben Sie den PHP-Container ein und installieren Sie die Pakete.
docker-compose exec php ash
Ändern Sie testHost in TestCase.php
/** * testHost * * @var string */ protected $testHost = 'http://ganache:8545';
Testskript ausführen
vendor/bin/phpunit
Betreten Sie zuerst den Container
docker-compose exec php ash
gmp
apk add gmp-dev docker-php-ext-install gmp
bcmath
docker-php-ext-install bcmath
Verschieben Sie die Erweiterungskonfiguration von /usr/local/etc/php/conf.d/
mv /usr/local/etc/php/conf.d/extension-config-name to/directory
Todo.
Vielen Dank an alle, die bereits zu web3.php beigetragen haben!
MIT