php程序员如何利用web3.php进行以太坊开发

web3.php是一个PHP接口,主要用于与以太坊区块链及其生态系统进行交互.

安装

通过Composer来管理依赖关系,首先将minimum-stability设置为dev

1
"minimum-stability": "dev"

然后执行:

1
composer require sc0vu/web3.php dev-master

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

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

用法

实例

1
2
3
use Web3\Web3;

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

接口调用

1
2
3
4
5
6
7
8
use Web3\Web3;
use Web3\Providers\HttpProvider;
use Web3\RequestManagers\HttpRequestManager;

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

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

使用回调函数调用rpc

1
2
3
4
5
6
7
8
9
$web3->clientVersion(function ($err, $version) {
if ($err !== null) {
// do something
return;
}
if (isset($client)) {
echo 'Client version: ' . $version;
}
});

eth

1
2
3
4
use Web3\Web3;

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

这样也行:

1
2
3
use Web3\Eth;

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

net

1
2
3
4
use Web3\Web3;

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

或者

1
2
3
use Web3\Net;

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

batch

web3

1
2
3
4
5
6
7
8
9
10
11
12
13
$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

1
2
3
4
5
6
7
8
9
10
11
$eth->batch(true);
$eth->protocolVersion();
$eth->syncing();

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

net

1
2
3
4
5
6
7
8
9
10
11
$net->batch(true);
$net->version();
$net->listening();

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

personal

1
2
3
4
5
6
7
8
9
10
11
$personal->batch(true);
$personal->listAccounts();
$personal->newAccount('123456');

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

智能合约Contract

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use Web3\Contract;

$contract = new Contract('http://localhost: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);

将值分配给外部域(从回调域到域外)

1
2
3
4
5
6
7
8
9
10
11
12
由于和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;
});

为了解决php程序员学习以太坊的需求,我们提供很受欢迎的互动教程: php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。

其他一些教程:

  • web3j教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
  • 以太坊教程,主要介绍智能合约与dapp应用开发,适合入门。
  • 以太坊开发,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
  • python以太坊,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。

汇智网原创翻译,转载请标明出处。这里是原文