واجهة PHP للتفاعل مع blockchain والنظام البيئي Ethereum.
اضبط الحد الأدنى من الاستقرار على dev
"minimum-stability": "dev"
ثم
composer require web3p/web3.php dev-master
أو يمكنك إضافة هذا السطر في Composer.json
"web3p/web3.php": "dev-master"
استخدم Web3Web3;$web3 = new Web3('http://localhost:8545');
استخدم Web3Web3; ));
$web3->clientVersion(function ($err, $version) {if ($err !== null) {// do Somethingreturn; }if (isset($version)) {echo "إصدار العميل:" . نسخة $; } });
استخدم Web3Web3; ));// انتظار$promise = $web3->clientVersion(function ($err, $version) {// do somthing});Asyncawait($promise);
استخدم Web3Web3; ));// انتظار$promise = $web3->clientVersion(function ($err, $version) {// افعل شيئًا});Asyncawait($promise);// إغلاق الاتصال$web3->provider->إغلاق();
استخدم Web3Web3;$web3 = new Web3('http://localhost:8545');$eth = $web3->eth;
أو
استخدم Web3Eth;$eth = new Eth('http://localhost:8545');
استخدم Web3Web3;$web3 = new Web3('http://localhost:8545');$net = $web3->net;
أو
استخدم Web3Net;$net = new Net('http://localhost:8545');
web3
$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) {// افعل شيئًا ما العودة؛ }// افعل شيئًا});
شبكة
$net->batch(true);$net->version();$net->listening();$net->provider->execute(function ($err, $data) {if ($err !== null) {// افعل شيئًا ما العودة؛ }// افعل شيئًا});
شخصي
$personal->batch(true);$personal->listAccounts();$personal->newAccount('123456');$personal->provider->execute(function ($err, $data) {if ($err) !== null) {// افعل شيئًا ما العودة؛ }// افعل شيئًا});
استخدم Web3Contract;$contract = new Contract('http://localhost:8545', $abi);// نشر العقد$contract->bytecode($bytecode)->new($params, $callback);// call وظيفة العقد $contract->at($contractAddress)->call($functionName, $params, $callback);// تغيير الوظيفة State$contract->at($contractAddress)->send($functionName, $params, $callback);// تقدير نشر عقد الغاز$contract->bytecode($bytecode)->estimateGas($params, $callback); // تقدير وظيفة الغاز$contract->at($contractAddress)->estimateGas($functionName, $params, $callback);// الحصول على المنشئ data$constructorData = $contract->bytecode($bytecode)->getData($params);// الحصول على بيانات الوظيفة$functionData = $contract->at($contractAddress)->getData($functionName, $params);
نظرًا لأن رد الاتصال لا يشبه رد اتصال جافا سكريبت، إذا أردنا تعيين قيمة للنطاق الخارجي، فسنحتاج إلى تعيين مرجع لرد الاتصال.
$newAccount = '';$web3->personal->newAccount('123456', function ($err, $account) use (&$newAccount) {if ($err !== null) {echo 'Error: ' . $err->getMessage();return; }$newAccount = $account;echo 'حساب جديد:' . حساب $. PHP_EOL; });
لتشغيل الأمثلة، تحتاج إلى تشغيل Ethereum blockchain local (testrpc).
إذا كنت تستخدم docker كجهاز تطوير، فيمكنك تجربة ethdock لتشغيل blockchain محلي من ethereum، ما عليك سوى تشغيل docker-compose up -d testrpc
وكشف المنفذ 8545
.
استنساخ الريبو وتثبيت الحزم.
git clone https://github.com/web3p/web3.php.git && cd web3.php && composer install
تشغيل البرنامج النصي للاختبار.
vendor/bin/phpunit
استنساخ الريبو وتشغيل حاوية عامل الإرساء.
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
com.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!
معهد ماساتشوستس للتكنولوجيا