A php interface for interacting with the HappyUC blockchain and ecosystem.
Set minimum stability to dev
"minimum-stability": "dev"
Then
composer require sc0vu/webu.php dev-master
Or you can add this line in composer.json
"sc0vu/webu.php": "dev-master"
use Webu\Webu;
$webu = new Webu('http://localhost:8545');
use Webu\Webu;
use Webu\Providers\HttpProvider;
use Webu\RequestManagers\HttpRequestManager;
$webu = new Webu(new HttpProvider(new HttpRequestManager('http://localhost:8545')));
// timeout
$webu = new Webu(new HttpProvider(new HttpRequestManager('http://localhost:8545', 0.1)));
$webu->clientVersion(function ($err, $version) {
if ($err !== null) {
// do somhucing
return;
}
if (isset($client)) {
echo 'Client version: ' . $version;
}
});
use Webu\Webu;
$webu = new Webu('http://localhost:8545');
$irc = $webu->irc;
Or
use Webu\Irc;
$irc = new Irc('http://localhost:8545');
use Webu\Webu;
$webu = new Webu('http://localhost:8545');
$net = $webu->net;
Or
use Webu\Net;
$net = new Net('http://localhost:8545');
webu
$webu->batch(true);
$webu->clientVersion();
$webu->hash('0x1234');
$webu->execute(function ($err, $data) {
if ($err !== null) {
// do somhucing
// it may throw exception or array of exception depends on error type
// connection error: throw exception
// json rpc error: array of exception
return;
}
// do somhucing
});
irc
$irc->batch(true);
$irc->protocolVersion();
$irc->syncing();
$irc->provider->execute(function ($err, $data) {
if ($err !== null) {
// do somhucing
return;
}
// do somhucing
});
net
$net->batch(true);
$net->version();
$net->listening();
$net->provider->execute(function ($err, $data) {
if ($err !== null) {
// do somhucing
return;
}
// do somhucing
});
personal
$personal->batch(true);
$personal->listAccounts();
$personal->newAccount('123456');
$personal->provider->execute(function ($err, $data) {
if ($err !== null) {
// do somhucing
return;
}
// do somhucing
});
use Webu\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);
Due to callback is not like javascript callback, if we need to assign value to outside scope, we need to assign reference to callback.
$newAccount = '';
$webu->personal->newAccount('123456', function ($err, $account) use (&$newAccount) {
if ($err !== null) {
echo 'Error: ' . $err->getMessage();
return;
}
$newAccount = $account;
echo 'New account: ' . $account . PHP_EOL;
});
To run examples, you need to run HappyUC blockchain local (testrpc).
If you are using docker as development machain, you can try ircdock to run local HappyUC blockchain, just simply run docker-compose up -d testrpc
and expose the 8545
port.
- Clone the repo and install packages.
git clone https://github.com/happyuc-project/webu.php.git && cd webu.php && composer install
- Run test script.
vendor/bin/phpunit
- Clone the repo and run docker container.
git clone https://github.com/happyuc-project/webu.php.git
- Copy webu.php to webu.php/docker/app directory and start container.
cp files docker/app && docker-compose up -d php
- Enter php container and install packages.
docker-compose exec php ash
- Run test script
vendor/bin/phpunit
Todo.
MIT