Una interfaz php para interactuar con la cadena de bloques y el ecosistema Ethereum.
Establecer estabilidad mínima en dev
"minimum-stability": "dev"
Entonces
composer require web3p/web3.php dev-master
O puedes agregar esta línea en compositor.json
"web3p/web3.php": "dev-master"
utilizar Web3Web3;$web3 = nuevo Web3('http://localhost:8545');
use Web3Web3;use Web3ProvidersHttpProvider;$web3 = nuevo Web3(nuevo HttpProvider('http://localhost:8545'));// tiempo de espera$web3 = nuevo Web3(nuevo HttpProvider('http://localhost:8545', 0.1 ));
$web3->clientVersion(function ($err, $version) {if ($err!== null) {// hacer algoreturn; }if (isset($versión)) {echo 'Versión del cliente:' . $versión; } });
use Web3Web3;use Web3ProvidersHttpAsyncProvider;$web3 = new Web3(new HttpAsyncProvider('http://localhost:8545'));// timeout$web3 = new Web3(new HttpAsyncProvider('http://localhost:8545', 0.1 ));// await$promesa = $web3->clientVersion(función ($err, $versión) {// hacer 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 ));// await$promise = $web3->clientVersion(función ($err, $versión) {// hacer algo});Asyncawait($promise);// cerrar conexión$web3->proveedor->close();
utilizar Web3Web3;$web3 = nuevo Web3('http://localhost:8545');$eth = $web3->eth;
O
utilice Web3Eth;$eth = new Eth('http://localhost:8545');
utilizar Web3Web3;$web3 = nuevo Web3('http://localhost:8545');$net = $web3->net;
O
utilizar Web3Net;$net = new Net('http://localhost:8545');
web3
$web3->batch(true);$web3->clientVersion();$web3->hash('0x1234');$web3->execute(función ($err, $datos) {si ($err !== null) {// hacer algo// puede generar una excepción o la matriz de excepción depende del tipo de error// error de conexión: lanzar excepción// error json rpc: matriz de excepciónreturn; }// hacer algo});
ética
$eth->batch(true);$eth->protocolVersion();$eth->syncing();$eth->proveedor->execute(function ($err, $data) {if ($err !== nulo) {// hacer algoregresar; }// hacer algo});
neto
$net->batch(true);$net->version();$net->listening();$net->proveedor->execute(function ($err, $data) {if ($err !== nulo) {// hacer algoregresar; }// hacer algo});
personal
$personal->batch(true);$personal->listAccounts();$personal->newAccount('123456');$personal->proveedor->ejecutar(función ($err, $datos) {if ($err !== null) {// hacer algoreturn; }// hacer algo});
usar Web3Contract;$contract = new Contract('http://localhost:8545', $abi);// implementar contrato$contract->bytecode($bytecode)->new($params, $callback);// llamar función de contrato$contrato->at($contractAddress)->call($functionName, $params, $callback);// cambiar función state$contract->at($contractAddress)->send($functionName, $params, $callback);// estimación de implementación del contrato de gas$contract->bytecode($bytecode)->estimateGas($params, $callback); // función de estimación gas$contrato->at($direccióncontrato)->estimateGas($nombrefunción, $params, $callback);// obtener datos del constructor$constructorData = $contrato->bytecode($bytecode)->getData($params);// obtener datos de función$functionData = $contrato->at($contractAddress)->getData($functionName, $params);
Debido a que la devolución de llamada no es como la devolución de llamada de JavaScript, si necesitamos asignar un valor a un alcance externo, debemos asignar una referencia a la devolución de llamada.
$newAccount = '';$web3->personal->newAccount('123456', función ($err, $cuenta) use (&$newAccount) {if ($err !== null) {echo 'Error: ' . $err->getMessage();retorno; }$newAccount = $cuenta;echo 'Nueva cuenta:' . $cuenta. PHP_EOL; });
Para ejecutar ejemplos, debe ejecutar ethereum blockchain local (testrpc).
Si está utilizando Docker como máquina de desarrollo, puede probar ethdock para ejecutar la cadena de bloques ethereum local, simplemente ejecute docker-compose up -d testrpc
y exponga el puerto 8545
.
Clona el repositorio e instala los paquetes.
git clone https://github.com/web3p/web3.php.git && cd web3.php && composer install
Ejecute el script de prueba.
vendor/bin/phpunit
Clona el repositorio y ejecuta el contenedor acoplable.
git clone https://github.com/web3p/web3.php.git
Copie web3.php al directorio web3.php/docker/app e inicie el contenedor.
cp files docker/app && docker-compose up -d php ganache
Ingrese al contenedor php e instale los paquetes.
docker-compose exec php ash
Cambiar testHost en TestCase.php
/** * testHost * * @var string */ protected $testHost = 'http://ganache:8545';
Ejecutar script de prueba
vendor/bin/phpunit
Introduzca el contenedor primero
docker-compose exec php ash
gmp
apk add gmp-dev docker-php-ext-install gmp
bcmmatemáticas
docker-php-ext-install bcmath
Mueva la configuración de la extensión desde /usr/local/etc/php/conf.d/
mv /usr/local/etc/php/conf.d/extension-config-name to/directory
Hacer.
¡Gracias a todas las personas que ya contribuyeron a web3.php!
MIT