Uma interface php para interagir com o blockchain e o ecossistema Ethereum.
Defina estabilidade mínima para dev
"minimum-stability": "dev"
Então
composer require web3p/web3.php dev-master
Ou você pode adicionar esta linha em compositor.json
"web3p/web3.php": "dev-master"
usar 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) {// faça algoreturn; }if (isset($version)) {echo 'Versão do cliente: ' . $versão; } });
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(função ($err, $version) {// faça algo});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 algo});Asyncawait($promise);// fecha conexão$web3->provider->close();
usar Web3Web3;$web3 = new Web3('http://localhost:8545');$eth = $web3->eth;
Ou
usar Web3Eth;$eth = new Eth('http://localhost:8545');
usar Web3Web3;$web3 = new Web3('http://localhost:8545');$net = $web3->net;
Ou
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) {// faça alguma coisa // pode lançar exceção ou array de exceção depende do tipo de erro // erro de conexão: lançar exceção // erro json rpc: array de exceçãoreturn; }//faça alguma coisa});
eth
$eth->batch(true);$eth->protocolVersion();$eth->syncing();$eth->provider->execute(function ($err, $data) {if ($err !== null) {// faça algo return; }//faça alguma coisa});
líquido
$net->batch(true);$net->version();$net->listening();$net->provider->execute(function ($err, $data) {if ($err !== null) {// faça algo return; }//faça alguma coisa});
pessoal
$pessoal->batch(true);$pessoal->listAccounts();$pessoal->newAccount('123456');$pessoal->provider->execute(function ($err, $data) {if ($err !== null) {// faça alguma coisa; }//faça alguma coisa});
use Web3Contract;$contract = new Contract('http://localhost:8545', $abi);// implantar contrato$contract->bytecode($bytecode)->new($params, $callback);// chamar função de contrato$contrato->at($contractAddress)->call($functionName, $params, $callback);// alterar função state$contract->at($contractAddress)->send($functionName, $params, $callback);// estimativa de implantação do contrato gas$contract->bytecode($bytecode)->estimateGas($params, $callback); // estima a função gas$contract->at($contractAddress)->estimateGas($functionName, $params, $callback);// obtém dados do construtor$constructorData = $contract->bytecode($bytecode)->getData($params);// obtém dados da função$functionData = $contract->at($contractAddress)->getData($functionName, $params);
Devido ao retorno de chamada não ser como o retorno de chamada javascript, se precisarmos atribuir valor ao escopo externo, precisamos atribuir referência ao retorno de chamada.
$newAccount = '';$web3->personal->newAccount('123456', function ($err, $account) use (&$newAccount) {if ($err !== null) {echo 'Erro: ' . $err->getMessage();return; }$newAccount = $account;echo 'Nova conta: ' . $ conta. PHP_EOL; });
Para executar exemplos, você precisa executar o blockchain ethereum local (testrpc).
Se você estiver usando o docker como máquina de desenvolvimento, você pode tentar o ethdock para executar o blockchain ethereum local, simplesmente execute docker-compose up -d testrpc
e exponha a porta 8545
.
Clone o repositório e instale os pacotes.
git clone https://github.com/web3p/web3.php.git && cd web3.php && composer install
Execute o script de teste.
vendor/bin/phpunit
Clone o repositório e execute o contêiner docker.
git clone https://github.com/web3p/web3.php.git
Copie web3.php para o diretório web3.php/docker/app e inicie o contêiner.
cp files docker/app && docker-compose up -d php ganache
Entre no contêiner php e instale os pacotes.
docker-compose exec php ash
Altere testHost em TestCase.php
/** * testHost * * @var string */ protected $testHost = 'http://ganache:8545';
Execute o script de teste
vendor/bin/phpunit
Insira o contêiner primeiro
docker-compose exec php ash
GMP
apk add gmp-dev docker-php-ext-install gmp
matemática
docker-php-ext-install bcmath
Mova a configuração da extensão de /usr/local/etc/php/conf.d/
mv /usr/local/etc/php/conf.d/extension-config-name to/directory
Pendência.
Obrigado a todas as pessoas que já contribuíram para web3.php!
MIT