This commit is contained in:
代码之美 2021-08-16 21:46:39 +07:00 committed by GitHub
commit fcbcf3970c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 273 additions and 104 deletions

View File

@ -18,13 +18,13 @@ Set minimum stability to dev
Then
```
composer require sc0vu/web3.php dev-master
composer require haohetao/web3.php dev-master
```
Or you can add this line in composer.json
```
"sc0vu/web3.php": "dev-master"
"haohetao/web3.php": "dev-master"
```
@ -158,6 +158,20 @@ $personal->provider->execute(function ($err, $data) {
// do something
});
```
contract
```php
$contract->batch(true);
foreach ($accounts as $account) {
$contract->call('balanceOf', $account);
}
$contract->eth->provider->execute(function ($err, $data) use ($accounts) {
if ($err !== null) {
throw new $err;
}
print_r($data);
});
```
### Contract

View File

@ -1,12 +1,12 @@
{
"name": "sc0vu/web3.php",
"name": "haohetao/web3.php",
"description": "Ethereum web3 interface.",
"type": "library",
"license": "MIT",
"authors": [
{
"name": "sc0Vu",
"email": "alk03073135@gmail.com"
"name": "hetao",
"email": "haohetao@gmail.com"
}
],
"require": {

View File

@ -490,7 +490,6 @@ class Contract
if (isset($this->functions)) {
$arguments = func_get_args();
$method = array_splice($arguments, 0, 1)[0];
$callback = array_pop($arguments);
if (!is_string($method)) {
throw new InvalidArgumentException('Please make sure the method is string.');
@ -505,9 +504,18 @@ class Contract
if (count($functions) < 1) {
throw new InvalidArgumentException('Please make sure the method exists.');
}
/* if (is_callable($callback) !== true) {
throw new \InvalidArgumentException('The last param must be callback function.');
}*/
if ($this->eth->provider->isBatch) {
$callback = null;
} else {
$callback = array_pop($arguments);
if (is_callable($callback) !== true) {
throw new \InvalidArgumentException('The last param must be callback function.');
}
}
// check the last one in arguments is transaction object
$argsLen = count($arguments);
@ -564,6 +572,9 @@ class Contract
$transaction['to'] = $this->toAddress;
$transaction['data'] = $functionSignature . Utils::stripZero($data);
if ($this->eth->provider->isBatch) {
$this->eth->sendTransaction($transaction);
} else {
$this->eth->sendTransaction($transaction, function ($err, $transaction) use ($callback){
if ($err !== null) {
return call_user_func($callback, $err, null);
@ -572,6 +583,7 @@ class Contract
});
}
}
}
/**
* call
@ -585,7 +597,6 @@ class Contract
if (isset($this->functions)) {
$arguments = func_get_args();
$method = array_splice($arguments, 0, 1)[0];
$callback = array_pop($arguments);
if (!is_string($method)) {
throw new InvalidArgumentException('Please make sure the method is string.');
@ -600,9 +611,18 @@ class Contract
if (count($functions) < 1) {
throw new InvalidArgumentException('Please make sure the method exists.');
}
/* if (is_callable($callback) !== true) {
throw new \InvalidArgumentException('The last param must be callback function.');
}*/
if ($this->eth->provider->isBatch) {
$callback = null;
} else {
$callback = array_pop($arguments);
if (is_callable($callback) !== true) {
throw new \InvalidArgumentException('The last param must be callback function.');
}
}
// check the arguments
$argsLen = count($arguments);
@ -658,6 +678,9 @@ class Contract
$transaction['to'] = $this->toAddress;
$transaction['data'] = $functionSignature . Utils::stripZero($data);
if ($this->eth->provider->isBatch) {
$this->eth->call($transaction, $defaultBlock);
} else {
$this->eth->call($transaction, $defaultBlock, function ($err, $transaction) use ($callback, $function){
if ($err !== null) {
return call_user_func($callback, $err, null);
@ -668,6 +691,7 @@ class Contract
});
}
}
}
/**
* estimateGas
@ -857,4 +881,14 @@ class Contract
return $functionData;
}
}
/**
* batch
*
* @param bool $status
* @return void
*/
public function batch($status)
{
$this->eth->batch($status);
}
}

View File

@ -173,8 +173,6 @@ class Eth
*/
public function batch($status)
{
$status = is_bool($status);
$this->provider->batch($status);
}
}

View File

@ -0,0 +1,36 @@
<?php
/**
* This file is part of web3.php package.
*
* (c) Kuan-Cheng,Lai <alk03073135@gmail.com>
*
* @author Peter Lai <alk03073135@gmail.com>
* @license MIT
*/
namespace Web3\Formatters;
use InvalidArgumentException;
use Web3\Utils;
use Web3\Formatters\IFormatter;
class PrivateFormatter implements IFormatter
{
/**
* format
*
* @param mixed $value
* @return string
*/
public static function format($value)
{
$value = Utils::toString($value);
$value = mb_strtolower($value);
if (Utils::isZeroPrefixed($value)) {
$value = Utils::stripZero($value);
}
return $value;
}
}

View File

@ -0,0 +1,66 @@
<?php
/**
* This file is part of web3.php package.
*
* (c) Kuan-Cheng,Lai <alk03073135@gmail.com>
*
* @author Peter Lai <alk03073135@gmail.com>
* @license MIT
*/
namespace Web3\Methods\Personal;
use InvalidArgumentException;
use Web3\Methods\EthMethod;
use Web3\Validators\PrivateValidator;
use Web3\Validators\StringValidator;
use Web3\Formatters\StringFormatter;
use Web3\Formatters\PrivateFormatter;
class ImportRawKey extends EthMethod
{
/**
* validators
*
* @var array
*/
protected $validators = [
PrivateValidator::class, StringValidator::class
];
/**
* inputFormatters
*
* @var array
*/
protected $inputFormatters = [
PrivateFormatter::class, StringFormatter::class
];
/**
* outputFormatters
*
* @var array
*/
protected $outputFormatters = [];
/**
* defaultValues
*
* @var array
*/
protected $defaultValues = [];
/**
* construct
*
* @param string $method
* @param array $arguments
* @return void
*/
// public function __construct($method='', $arguments=[])
// {
// parent::__construct($method, $arguments);
// }
}

View File

@ -173,8 +173,6 @@ class Net
*/
public function batch($status)
{
$status = is_bool($status);
$this->provider->batch($status);
}
}

View File

@ -38,7 +38,7 @@ class Personal
* @var array
*/
private $allowedMethods = [
'personal_listAccounts', 'personal_newAccount', 'personal_unlockAccount', 'personal_lockAccount', 'personal_sendTransaction'
'personal_listAccounts', 'personal_newAccount', 'personal_unlockAccount', 'personal_lockAccount', 'personal_sendTransaction', 'personal_importRawKey'
];
/**
@ -173,8 +173,6 @@ class Personal
*/
public function batch($status)
{
$status = is_bool($status);
$this->provider->batch($status);
}
}

View File

@ -74,8 +74,6 @@ class HttpProvider extends Provider implements IProvider
*/
public function batch($status)
{
$status = is_bool($status);
$this->isBatch = $status;
}
@ -109,7 +107,7 @@ class HttpProvider extends Provider implements IProvider
return call_user_func($callback, null, $res);
};
$this->requestManager->sendPayload('[' . implode(',', $this->batch) . ']', $proxy);
$this->methods[] = [];
$this->methods = [];
$this->batch = [];
}
}

View File

@ -174,8 +174,6 @@ class Shh
*/
public function batch($status)
{
$status = is_bool($status);
$this->provider->batch($status);
}
}

View File

@ -0,0 +1,31 @@
<?php
/**
* This file is part of web3.php package.
*
* (c) Kuan-Cheng,Lai <alk03073135@gmail.com>
*
* @author Peter Lai <alk03073135@gmail.com>
* @license MIT
*/
namespace Web3\Validators;
use Web3\Validators\IValidator;
class PrivateValidator
{
/**
* validate
*
* @param string $value
* @return bool
*/
public static function validate($value)
{
if (!is_string($value)) {
return false;
}
return (preg_match('/^(0x)?[a-fA-F0-9]{64}$/', $value) >= 1);
}
}

View File

@ -283,8 +283,6 @@ class Web3
*/
public function batch($status)
{
$status = is_bool($status);
$this->provider->batch($status);
}
}