Ethereum web3 接口。

1.2 2021-11-17 03:47 UTC

This package is not auto-updated.

Last update: 2024-09-19 14:27:10 UTC


README

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

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

安装

设置最小稳定性为开发版

"minimum-stability": "dev"

然后

composer require happyyyyyyyyy/web3

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

"happyyyyyyyyy/web3": "*"

使用方法

创建新实例

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 端口。

API

待办事项。

许可证

MIT