suzzzj / web3.php
Ethereum web3接口。
dev-master
2021-10-18 03:33 UTC
Requires
- php: ^7.1
- ext-mbstring: *
- guzzlehttp/guzzle: ^7.0
- kornrunner/keccak: ~1.0
- phpseclib/phpseclib: ~3.0.10
Requires (Dev)
- phpunit/phpunit: ~6.0
This package is not auto-updated.
Last update: 2024-09-30 16:47:29 UTC
README
用于与以太坊区块链和生态系统交互的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已安装
克隆仓库并安装包。
git clone https://github.com/sc0Vu/web3.php.git && cd web3.php && composer install
运行测试脚本。
vendor/bin/phpunit
docker容器
克隆仓库并运行docker容器。
git clone https://github.com/sc0Vu/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
在
TestCase.php
中更改testHost/** * 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
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