Une interface php pour interagir avec la blockchain et l'écosystème Ethereum.
Définir la stabilité minimale sur dev
"minimum-stability": "dev"
Alors
composer require web3p/web3.php dev-master
Ou vous pouvez ajouter cette ligne dans composer.json
"web3p/web3.php": "dev-master"
utilisez Web3Web3;$web3 = new Web3('http://localhost:8545');
utiliser Web3Web3;utiliser 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 'Version client : ' . $version ; } });
utiliser Web3Web3;utiliser 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) {// faire quelque chose});Asyncawait($promise);
utiliser Web3Web3;utiliser 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 quelque chose});Asyncawait($promise);// fermer la connexion$web3->provider->close();
utilisez Web3Web3;$web3 = new Web3('http://localhost:8545');$eth = $web3->eth;
Ou
utilisez Web3Eth;$eth = new Eth('http://localhost:8545');
utilisez Web3Web3;$web3 = new Web3('http://localhost:8545');$net = $web3->net;
Ou
utilisez Web3Net;$net = new Net('http://localhost:8545');
web3
$web3->batch(true);$web3->clientVersion();$web3->hash('0x1234');$web3->execute(function ($err, $data) {if ($err !== null) {// faire quelque chose // cela peut générer une exception ou un tableau d'exceptions en fonction du type d'erreur // erreur de connexion : lancer une exception // erreur json rpc : tableau d'exceptionreturn ; }//faire quelque chose});
eth
$eth->batch(true);$eth->protocolVersion();$eth->syncing();$eth->provider->execute(function ($err, $data) {if ($err !== null) {// faire quelque chosereturn ; }//faire quelque chose});
filet
$net->batch(true);$net->version();$net->listening();$net->provider->execute(function ($err, $data) {if ($err !== null) {// faire quelque chosereturn ; }//faire quelque chose});
personnel
$personal->batch(true);$personal->listAccounts();$personal->newAccount('123456');$personal->provider->execute(function ($err, $data) {if ($err !== null) {// faire quelque chosereturn ; }//faire quelque chose});
utiliser Web3Contract;$contract = new Contract('http://localhost:8545', $abi);// déployer contract$contract->bytecode($bytecode)->new($params, $callback);// appeler fonction de contrat$contract->at($contractAddress)->call($functionName, $params, $callback);// changer l'état de la fonction$contract->at($contractAddress)->send($functionName, $params, $callback);// estimation du déploiement du contrat gas$contract->bytecode($bytecode)->estimateGas($params, $callback);// estimation de la fonction gas$contract->at($contractAddress)->estimateGas ($functionName, $params, $callback);// obtenir les données du constructeur$constructorData = $contract->bytecode($bytecode)->getData($params);// obtenir les données de la fonction$functionData = $contract->at($contractAddress)->getData($functionName, $params);
Étant donné que le rappel n'est pas comme le rappel javascript, si nous devons attribuer une valeur à l'extérieur de la portée, nous devons attribuer une référence au rappel.
$newAccount = '';$web3->personal->newAccount('123456', function ($err, $account) use (&$newAccount) {if ($err !== null) {echo 'Erreur : ' . $err->getMessage();return; }$newAccount = $account;echo 'Nouveau compte : ' . $compte . PHP_EOL; });
Pour exécuter des exemples, vous devez exécuter Ethereum blockchain local (testrpc).
Si vous utilisez Docker comme machine de développement, vous pouvez essayer ethdock pour exécuter la blockchain Ethereum locale, exécutez simplement docker-compose up -d testrpc
et exposez le port 8545
.
Clonez le dépôt et installez les packages.
git clone https://github.com/web3p/web3.php.git && cd web3.php && composer install
Exécutez le script de test.
vendor/bin/phpunit
Clonez le dépôt et exécutez le conteneur Docker.
git clone https://github.com/web3p/web3.php.git
Copiez web3.php dans le répertoire web3.php/docker/app et démarrez le conteneur.
cp files docker/app && docker-compose up -d php ganache
Entrez le conteneur php et installez les packages.
docker-compose exec php ash
Changer testHost dans TestCase.php
/** * testHost * * @var string */ protected $testHost = 'http://ganache:8545';
Exécuter le script de test
vendor/bin/phpunit
Entrez d'abord le conteneur
docker-compose exec php ash
gmp
apk add gmp-dev docker-php-ext-install gmp
bcmath
docker-php-ext-install bcmath
Déplacez la configuration de l'extension de /usr/local/etc/php/conf.d/
mv /usr/local/etc/php/conf.d/extension-config-name to/directory
Faire.
Merci à toutes les personnes qui ont déjà contribué à web3.php !
MIT