iexbase/web3.php

Ethereum web3接口。

2.0.1 2020-10-15 18:16 UTC

This package is auto-updated.

Last update: 2024-09-16 03:02:33 UTC


README

Build Status codecov Join the chat at https://gitter.im/web3-php/web3.php Licensed under the MIT License

一个用于与以太坊区块链和生态系统交互的PHP接口。

安装

设置最小稳定性为dev

"minimum-stability": "dev"

然后

composer require sc0vu/web3.php dev-master

或者你可以在composer.json中添加此行

"sc0vu/web3.php": "dev-master"

用法

新建实例

use Web3\Web3;

$web3 = new Web3('https://:8545');

使用提供者

use Web3\Web3;
use Web3\Providers\HttpProvider;
use Web3\RequestManagers\HttpRequestManager;

$web3 = new Web3(new HttpProvider(new HttpRequestManager('https://:8545')));

// timeout
$web3 = new Web3(new HttpProvider(new HttpRequestManager('https://:8545', 0.1)));

你可以使用回调来处理每个RPC调用

$web3->clientVersion(function ($err, $version) {
    if ($err !== null) {
        // do something
        return;
    }
    if (isset($version)) {
        echo 'Client version: ' . $version;
    }
});

Eth

use Web3\Web3;

$web3 = new Web3('https://:8545');
$eth = $web3->eth;

或者

use Web3\Eth;

$eth = new Eth('https://:8545');

Net

use Web3\Web3;

$web3 = new Web3('https://:8545');
$net = $web3->net;

或者

use Web3\Net;

$net = new Net('https://:8545');

批量

web3

$web3->batch(true);
$web3->clientVersion();
$web3->hash('0x1234');
$web3->execute(function ($err, $data) {
    if ($err !== null) {
        // do something
        // it may throw exception or array of exception depends on error type
        // connection error: throw exception
        // json rpc error: array of exception
        return;
    }
    // do something
});

eth

$eth->batch(true);
$eth->protocolVersion();
$eth->syncing();

$eth->provider->execute(function ($err, $data) {
    if ($err !== null) {
        // do something
        return;
    }
    // do something
});

net

$net->batch(true);
$net->version();
$net->listening();

$net->provider->execute(function ($err, $data) {
    if ($err !== null) {
        // do something
        return;
    }
    // do something
});

personal

$personal->batch(true);
$personal->listAccounts();
$personal->newAccount('123456');

$personal->provider->execute(function ($err, $data) {
    if ($err !== null) {
        // do something
        return;
    }
    // do something
});

合约

use Web3\Contract;

$contract = new Contract('https://:8545', $abi);

// deploy contract
$contract->bytecode($bytecode)->new($params, $callback);

// call contract function
$contract->at($contractAddress)->call($functionName, $params, $callback);

// change function state
$contract->at($contractAddress)->send($functionName, $params, $callback);

// estimate deploy contract gas
$contract->bytecode($bytecode)->estimateGas($params, $callback);

// estimate function gas
$contract->at($contractAddress)->estimateGas($functionName, $params, $callback);

// get constructor data
$constructorData = $contract->bytecode($bytecode)->getData($params);

// get function data
$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 'New account: ' . $account . PHP_EOL;
});

示例

要运行示例,你需要运行本地的以太坊区块链(testrpc)。

如果你使用Docker作为开发环境,你可以尝试使用ethdock来运行本地的以太坊区块链,只需简单地运行docker-compose up -d testrpc并暴露8545端口。

开发

已安装本地的php cli

  1. 克隆仓库并安装包。
git clone https://github.com/sc0Vu/web3.php.git && cd web3.php && composer install
  1. 运行测试脚本。
vendor/bin/phpunit

Docker容器

  1. 克隆仓库并运行Docker容器。
git clone https://github.com/sc0Vu/web3.php.git
  1. 将web3.php复制到web3.php/docker/app目录并启动容器。
cp files docker/app && docker-compose up -d php ganache
  1. 进入php容器并安装包。
docker-compose exec php ash
  1. TestCase.php中更改testHost
/**
 * testHost
 * 
 * @var string
 */
protected $testHost = 'http://ganache:8545';
  1. 运行测试脚本
vendor/bin/phpunit
安装包

首先进入容器

docker-compose exec php ash
  1. gmp
apk add gmp-dev
docker-php-ext-install gmp
  1. bcmath
docker-php-ext-install bcmath
移除扩展

将扩展配置从/usr/local/etc/php/conf.d/移动

mv /usr/local/etc/php/conf.d/extension-config-name to/directory

API

待办事项。

许可证

MIT