web3.php
0.3.0
用于与以太坊区块链和生态系统交互的 php 界面。
将最低稳定性设置为 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');
use Web3Web3;use Web3ProvidersHttpProvider;$web3 = new Web3(new HttpProvider('http://localhost:8545'));// 超时$web3 = new Web3(new HttpProvider('http://localhost:8545', 0.1) ));
$web3->clientVersion(function ($err, $version) {if ($err !== null) {// 做某事return; }if (isset($version)) {echo '客户端版本:' . $版本; } });
use Web3Web3;use Web3ProvidersHttpAsyncProvider;$web3 = new Web3(new HttpAsyncProvider('http://localhost:8545'));// 超时$web3 = new Web3(new HttpAsyncProvider('http://localhost:8545', 0.1) ));// wait$promise = $web3->clientVersion(function ($err, $version) {// 执行东西});Asyncawait($promise);
use Web3Web3;use Web3ProvidersWsProvider;$web3 = new Web3(new WsProvider('ws://localhost:8545'));// 超时$web3 = new Web3(new WsProvider('ws://localhost:8545', 0.1 ));// wait$promise = $web3->clientVersion(function ($err, $version) {// 执行somthing});Asyncawait($promise);// 关闭连接$web3->provider->close();
使用 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');
网络3
$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) {// 做某事return; }//做某事});
网
$net->batch(true);$net->version();$net->listening();$net->provider->execute(function ($err, $data) {if ($err !== null) {// 做某事return; }//做某事});
个人的
$personal->batch(true);$personal->listAccounts();$personal->newAccount('123456');$personal->provider->execute(function ($err, $data) {if ($err !== null) {// 做某事return; }//做某事});
use Web3Contract;$contract = new Contract('http://localhost:8545', $abi);// 部署合约$contract->bytecode($bytecode)->new($params, $callback);// 调用合约函数$contract->at($contractAddress)->call($functionName, $params, $callback);//更改函数状态$contract->at($contractAddress)->send($functionName, $params, $callback);// 估计部署合约gas$contract->bytecode($bytecode)->estimateGas($params, $callback);// 估计函数gas$contract->at($contractAddress)->estimateGas($functionName , $params, $callback);// 获取构造函数数据$constructorData = $contract->bytecode($bytecode)->getData($params);// 获取函数数据$functionData = $contract->at($contractAddress)->getData($functionName, $params);
由于callback与javascript的callback不同,如果我们需要给外部作用域赋值,我们需要为callback分配引用。
$newAccount = '';$web3->personal->newAccount('123456', function ($err, $account) use (&$newAccount) {if ($err !== null) {echo '错误: ' . $err->getMessage();返回; }$newAccount = $account;echo '新帐户:' . $帐户。 PHP_EOL; });
要运行示例,您需要运行以太坊区块链本地(testrpc)。
如果您使用 docker 作为开发 machain,您可以尝试使用 ethdock 来运行本地以太坊区块链,只需运行docker-compose up -d testrpc
并公开8545
端口即可。
克隆存储库并安装包。
git clone https://github.com/web3p/web3.php.git && cd web3.php && composer install
运行测试脚本。
vendor/bin/phpunit
克隆存储库并运行 docker 容器。
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
更改TestCase.php
中的 testHost
/** * testHost * * @var string */ protected $testHost = 'http://ganache:8545';
运行测试脚本
vendor/bin/phpunit
先进入容器
docker-compose exec php ash
良好生产规范
apk add gmp-dev docker-php-ext-install gmp
数学数学
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 做出贡献的人!
麻省理工学院