PHP-интерфейс для взаимодействия с блокчейном и экосистемой Ethereum.
Установите минимальную стабильность для dev
"minimum-stability": "dev"
Затем
composer require web3p/web3.php dev-master
Или вы можете добавить эту строку в композитор.json
"web3p/web3.php": "dev-master"
используйте Web3Web3;$web3 = новый 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 'Версия клиента:' . $версия; } });
use Web3Web3;use Web3ProvidersHttpAsyncProvider;$web3 = new Web3(new HttpAsyncProvider('http://localhost:8545'));// timeout$web3 = new Web3(new HttpAsyncProvider('http://localhost:8545', 0.1) ));// await$promise = $web3->clientVersion(function ($err, $version) {// сделать что-нибудь});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) ));// await$promise = $web3->clientVersion(function ($err, $version) {// do somthing});Asyncawait($promise);// закрываем соединение$web3->provider->close();
используйте Web3Web3;$web3 = новый Web3('http://localhost:8545');$eth = $web3->eth;
Или
используйте Web3Eth;$eth = новый Eth('http://localhost:8545');
используйте Web3Web3;$web3 = новый Web3('http://localhost:8545');$net = $web3->net;
Или
используйте Web3Net;$net = new Net('http://localhost:8545');
веб3
$web3->batch(true);$web3->clientVersion();$web3->hash('0x1234');$web3->execute(function ($err, $data) {if ($err !== null) {// сделать что-нибудь// может выдать исключение или массив исключений, зависит от типа ошибки// ошибка соединения: выбросить исключение// ошибка json rpc: массив исключенийreturn; }// сделать что-нибудь});
Эт
$eth->batch(true);$eth->protocolVersion();$eth->syncing();$eth->provider->execute(function ($err, $data) {if ($err !== null) {// сделать что-нибудь return; }// сделать что-нибудь});
сеть
$net->batch(true);$net->version();$net->listening();$net->provider->execute(function ($err, $data) {if ($err !== null) {// сделать что-нибудь return; }// сделать что-нибудь});
личный
$personal->batch(true);$personal->listAccounts();$personal->newAccount('123456');$personal->provider->execute(function ($err, $data) {if ($err !== null) {// сделать что-нибудьreturn; }// сделать что-нибудь});
use Web3Contract;$contract = new Contract('http://localhost:8545', $abi);// развертывание контракта $contract->bytecode($bytecode)->new($params, $callback);// вызов функция контракта$contract->at($contractAddress)->call($functionName, $params, $callback);// изменить функцию state$contract->at($contractAddress)->send($functionName, $params, $callback);// оцениваем развертывание контракта gas$contract->bytecode($bytecode)->estimateGas($params, $callback); // оцениваем функцию gas$contract->at($contractAddress)->estimateGas($functionName, $params, $callback);// получаем данные конструктора$constructorData = $contract->bytecode($bytecode)->getData($params);// получаем данные функции$functionData = $contract->at($contractAddress)->getData($functionName, $params);
Поскольку обратный вызов не похож на обратный вызов Javascript, если нам нужно присвоить значение внешней области, нам нужно назначить ссылку на обратный вызов.
$newAccount = '';$web3->personal->newAccount('123456', function ($err, $account) use (&$newAccount) {if ($err !== null) {echo 'Error: ' . $err->getMessage();return; }$newAccount = $account;echo 'Новая учетная запись: ' . $аккаунт . PHP_EOL; });
Чтобы запустить примеры, вам необходимо запустить локальный блокчейн Ethereum (testrpc).
Если вы используете Docker в качестве машины для разработки, вы можете попробовать ethdock для запуска локального блокчейна Ethereum, просто запустите docker-compose up -d testrpc
и откройте порт 8545
.
Клонируйте репозиторий и установите пакеты.
git clone https://github.com/web3p/web3.php.git && cd web3.php && composer install
Запустите тестовый скрипт.
vendor/bin/phpunit
Клонируйте репозиторий и запустите Docker-контейнер.
git clone https://github.com/web3p/web3.php.git
Скопируйте web3.php в каталог web3.php/docker/app и запустите контейнер.
cp files docker/app && docker-compose up -d php ganache
Войдите в контейнер php и установите пакеты.
docker-compose exec php ash
Измените testHost в TestCase.php
/** * testHost * * @var string */ protected $testHost = 'http://ganache:8545';
Запустить тестовый скрипт
vendor/bin/phpunit
Сначала войдите в контейнер
docker-compose exec php ash
GMP
apk add gmp-dev docker-php-ext-install gmp
bcmath
docker-php-ext-install bcmath
Переместите конфигурацию расширения из /usr/local/etc/php/conf.d/
mv /usr/local/etc/php/conf.d/extension-config-name to/directory
Тодо.
Спасибо всем, кто уже внес свой вклад в web3.php!
Массачусетский технологический институт