diff --git a/src/Methods/EthMethod.php b/src/Methods/EthMethod.php index 5240eb7..03aef80 100644 --- a/src/Methods/EthMethod.php +++ b/src/Methods/EthMethod.php @@ -118,11 +118,13 @@ class EthMethod extends JSONRPC implements IMethod } } if ($isError) { - throw new RuntimeException('Wrong type of ' . $this->method . ' method argument ' . $key . '.'); + $verifyMessage = call_user_func([$subRule, 'getVerifyMessage']); + throw new RuntimeException('Wrong type of ' . $this->method . ' method argument ' . $key . ', message: ' . $verifyMessage . '.'); } } else { if (call_user_func([$rule, 'validate'], $params[$key]) === false) { - throw new RuntimeException('Wrong type of ' . $this->method . ' method argument ' . $key . '.'); + $verifyMessage = call_user_func([$rule, 'getVerifyMessage']); + throw new RuntimeException('Wrong type of ' . $this->method . ' method argument ' . $key . ', message: ' . $verifyMessage . '.'); } } } else { diff --git a/src/Validators/AddressValidator.php b/src/Validators/AddressValidator.php index 0de7a28..606b913 100644 --- a/src/Validators/AddressValidator.php +++ b/src/Validators/AddressValidator.php @@ -12,8 +12,9 @@ namespace Web3\Validators; use Web3\Validators\IValidator; +use Web3\Validators\Validator; -class AddressValidator +class AddressValidator extends Validator implements IValidator { /** * validate diff --git a/src/Validators/BlockHashValidator.php b/src/Validators/BlockHashValidator.php index 3af31e8..c9e4081 100644 --- a/src/Validators/BlockHashValidator.php +++ b/src/Validators/BlockHashValidator.php @@ -12,8 +12,9 @@ namespace Web3\Validators; use Web3\Validators\IValidator; +use Web3\Validators\Validator; -class BlockHashValidator +class BlockHashValidator extends Validator implements IValidator { /** * validate diff --git a/src/Validators/BooleanValidator.php b/src/Validators/BooleanValidator.php index a6b99be..36bf500 100644 --- a/src/Validators/BooleanValidator.php +++ b/src/Validators/BooleanValidator.php @@ -12,8 +12,9 @@ namespace Web3\Validators; use Web3\Validators\IValidator; +use Web3\Validators\Validator; -class BooleanValidator +class BooleanValidator extends Validator implements IValidator { /** * validate diff --git a/src/Validators/CallValidator.php b/src/Validators/CallValidator.php index f7a83e4..571075c 100644 --- a/src/Validators/CallValidator.php +++ b/src/Validators/CallValidator.php @@ -12,11 +12,12 @@ namespace Web3\Validators; use Web3\Validators\IValidator; +use Web3\Validators\Validator; use Web3\Validators\QuantityValidator; use Web3\Validators\TagValidator; use Web3\Validators\HexValidator; -class CallValidator +class CallValidator extends Validator implements IValidator { /** * validate @@ -27,30 +28,39 @@ class CallValidator public static function validate($value) { if (!is_array($value)) { + self::$verifyMessage = 'call must be array'; return false; } if (isset($value['from']) && AddressValidator::validate($value['from']) === false) { + self::$verifyMessage = 'from is not valid'; return false; } if (!isset($value['to'])) { + self::$verifyMessage = 'to is required'; return false; } if (AddressValidator::validate($value['to']) === false) { + self::$verifyMessage = 'to is not valid'; return false; } if (isset($value['gas']) && QuantityValidator::validate($value['gas']) === false) { + self::$verifyMessage = 'gas is not valid'; return false; } if (isset($value['gasPrice']) && QuantityValidator::validate($value['gasPrice']) === false) { + self::$verifyMessage = 'gasPrice is not valid'; return false; } if (isset($value['value']) && QuantityValidator::validate($value['value']) === false) { + self::$verifyMessage = 'value is not valid'; return false; } if (isset($value['data']) && HexValidator::validate($value['data']) === false) { + self::$verifyMessage = 'data is not valid'; return false; } if (isset($value['nonce']) && QuantityValidator::validate($value['nonce']) === false) { + self::$verifyMessage = 'nonce is not valid'; return false; } return true; diff --git a/src/Validators/FilterValidator.php b/src/Validators/FilterValidator.php index 0d1ff82..1d61c5e 100644 --- a/src/Validators/FilterValidator.php +++ b/src/Validators/FilterValidator.php @@ -12,12 +12,13 @@ namespace Web3\Validators; use Web3\Validators\IValidator; +use Web3\Validators\Validator; use Web3\Validators\QuantityValidator; use Web3\Validators\TagValidator; use Web3\Validators\HexValidator; use Web3\Validators\AddressValidator; -class FilterValidator +class FilterValidator extends Validator implements IValidator { /** * validate @@ -28,6 +29,7 @@ class FilterValidator public static function validate($value) { if (!is_array($value)) { + self::$verifyMessage = 'filter must be array'; return false; } if ( @@ -35,6 +37,7 @@ class FilterValidator QuantityValidator::validate($value['fromBlock']) === false && TagValidator::validate($value['fromBlock']) === false ) { + self::$verifyMessage = 'fromBlock is not valid'; return false; } if ( @@ -42,16 +45,19 @@ class FilterValidator QuantityValidator::validate($value['toBlock']) === false && TagValidator::validate($value['toBlock']) === false ) { + self::$verifyMessage = 'toBlock is not valid'; return false; } if (isset($value['address'])) { if (is_array($value['address'])) { foreach ($value['address'] as $address) { if (AddressValidator::validate($address) === false) { + self::$verifyMessage = 'address is not valid'; return false; } } } elseif (AddressValidator::validate($value['address']) === false) { + self::$verifyMessage = 'address is not valid'; return false; } } @@ -60,11 +66,13 @@ class FilterValidator if (is_array($topic)) { foreach ($topic as $v) { if (isset($v) && HexValidator::validate($v) === false) { + self::$verifyMessage = 'topics are not valid'; return false; } } } else { if (isset($topic) && HexValidator::validate($topic) === false) { + self::$verifyMessage = 'topics are not valid'; return false; } } diff --git a/src/Validators/HexValidator.php b/src/Validators/HexValidator.php index ade1ae7..9c01be1 100644 --- a/src/Validators/HexValidator.php +++ b/src/Validators/HexValidator.php @@ -12,8 +12,9 @@ namespace Web3\Validators; use Web3\Validators\IValidator; +use Web3\Validators\Validator; -class HexValidator +class HexValidator extends Validator implements IValidator { /** * validate diff --git a/src/Validators/IdentityValidator.php b/src/Validators/IdentityValidator.php index 4a61541..7f8f22a 100644 --- a/src/Validators/IdentityValidator.php +++ b/src/Validators/IdentityValidator.php @@ -12,8 +12,9 @@ namespace Web3\Validators; use Web3\Validators\IValidator; +use Web3\Validators\Validator; -class IdentityValidator +class IdentityValidator extends Validator implements IValidator { /** * validate diff --git a/src/Validators/NonceValidator.php b/src/Validators/NonceValidator.php index b64bcd2..3e28970 100644 --- a/src/Validators/NonceValidator.php +++ b/src/Validators/NonceValidator.php @@ -12,8 +12,9 @@ namespace Web3\Validators; use Web3\Validators\IValidator; +use Web3\Validators\Validator; -class NonceValidator +class NonceValidator extends Validator implements IValidator { /** * validate diff --git a/src/Validators/PostValidator.php b/src/Validators/PostValidator.php index fc38e22..b3ac93e 100644 --- a/src/Validators/PostValidator.php +++ b/src/Validators/PostValidator.php @@ -12,11 +12,12 @@ namespace Web3\Validators; use Web3\Validators\IValidator; +use Web3\Validators\Validator; use Web3\Validators\QuantityValidator; use Web3\Validators\HexValidator; use Web3\Validators\IdentityValidator; -class PostValidator +class PostValidator extends Validator implements IValidator { /** * validate @@ -27,38 +28,49 @@ class PostValidator public static function validate($value) { if (!is_array($value)) { + self::$verifyMessage = 'post must be array'; return false; } if (isset($value['from']) && IdentityValidator::validate($value['from']) === false) { + self::$verifyMessage = 'from is not valid'; return false; } if (isset($value['to']) && IdentityValidator::validate($value['to']) === false) { + self::$verifyMessage = 'to is not valid'; return false; } if (!isset($value['topics']) || !is_array($value['topics'])) { + self::$verifyMessage = 'topics are not valid'; return false; } foreach ($value['topics'] as $topic) { if (IdentityValidator::validate($topic) === false) { + self::$verifyMessage = 'topics are not valid'; return false; } } if (!isset($value['payload'])) { + self::$verifyMessage = 'payload is required'; return false; } if (HexValidator::validate($value['payload']) === false) { + self::$verifyMessage = 'payload is not valid'; return false; } if (!isset($value['priority'])) { + self::$verifyMessage = 'priority is required'; return false; } if (QuantityValidator::validate($value['priority']) === false) { + self::$verifyMessage = 'priority is not valid'; return false; } if (!isset($value['ttl'])) { + self::$verifyMessage = 'ttl is required'; return false; } if (isset($value['ttl']) && QuantityValidator::validate($value['ttl']) === false) { + self::$verifyMessage = 'ttl is not valid'; return false; } return true; diff --git a/src/Validators/QuantityValidator.php b/src/Validators/QuantityValidator.php index fc8d12e..a633b46 100644 --- a/src/Validators/QuantityValidator.php +++ b/src/Validators/QuantityValidator.php @@ -12,8 +12,9 @@ namespace Web3\Validators; use Web3\Validators\IValidator; +use Web3\Validators\Validator; -class QuantityValidator +class QuantityValidator extends Validator implements IValidator { /** * validate diff --git a/src/Validators/ShhFilterValidator.php b/src/Validators/ShhFilterValidator.php index 48f7faf..55482cb 100644 --- a/src/Validators/ShhFilterValidator.php +++ b/src/Validators/ShhFilterValidator.php @@ -12,11 +12,12 @@ namespace Web3\Validators; use Web3\Validators\IValidator; +use Web3\Validators\Validator; use Web3\Validators\QuantityValidator; use Web3\Validators\HexValidator; use Web3\Validators\IdentityValidator; -class ShhFilterValidator +class ShhFilterValidator extends Validator implements IValidator { /** * validate @@ -27,18 +28,26 @@ class ShhFilterValidator public static function validate($value) { if (!is_array($value)) { + self::$verifyMessage = 'filter of shh must be array'; return false; } if (isset($value['to']) && IdentityValidator::validate($value['to']) === false) { + self::$verifyMessage = 'to is not valid'; return false; } - if (!isset($value['topics']) || !is_array($value['topics'])) { + if (!isset($value['topics'])) { + self::$verifyMessage = 'topics are required'; + return false; + } + if (!is_array($value['topics'])) { + self::$verifyMessage = 'topics must be array'; return false; } foreach ($value['topics'] as $topic) { if (is_array($topic)) { foreach ($topic as $subTopic) { if (HexValidator::validate($subTopic) === false) { + self::$verifyMessage = 'topics are not valid'; return false; } } @@ -46,6 +55,7 @@ class ShhFilterValidator } if (HexValidator::validate($topic) === false) { if (!is_null($topic)) { + self::$verifyMessage = 'topics are not valid'; return false; } } diff --git a/src/Validators/StringValidator.php b/src/Validators/StringValidator.php index 5e49239..7700ed5 100644 --- a/src/Validators/StringValidator.php +++ b/src/Validators/StringValidator.php @@ -12,8 +12,9 @@ namespace Web3\Validators; use Web3\Validators\IValidator; +use Web3\Validators\Validator; -class StringValidator +class StringValidator extends Validator implements IValidator { /** * validate diff --git a/src/Validators/TagValidator.php b/src/Validators/TagValidator.php index fd1f966..55b133e 100644 --- a/src/Validators/TagValidator.php +++ b/src/Validators/TagValidator.php @@ -12,9 +12,10 @@ namespace Web3\Validators; use Web3\Validators\IValidator; +use Web3\Validators\Validator; use Web3\Utils; -class TagValidator implements IValidator +class TagValidator extends Validator implements IValidator { /** * validate diff --git a/src/Validators/TransactionValidator.php b/src/Validators/TransactionValidator.php index 157d3f2..0732323 100644 --- a/src/Validators/TransactionValidator.php +++ b/src/Validators/TransactionValidator.php @@ -12,11 +12,12 @@ namespace Web3\Validators; use Web3\Validators\IValidator; +use Web3\Validators\Validator; use Web3\Validators\QuantityValidator; use Web3\Validators\TagValidator; use Web3\Validators\HexValidator; -class TransactionValidator +class TransactionValidator extends Validator implements IValidator { /** * validate @@ -29,36 +30,39 @@ class TransactionValidator public static function validate($value) { if (!is_array($value)) { + self::$verifyMessage = 'transaction must be array'; return false; } if (!isset($value['from'])) { + self::$verifyMessage = 'from is required'; return false; } if (AddressValidator::validate($value['from']) === false) { + self::$verifyMessage = 'from must be address'; return false; } if (isset($value['to']) && AddressValidator::validate($value['to']) === false && $value['to'] !== '') { + self::$verifyMessage = 'to must be address'; return false; } if (isset($value['gas']) && QuantityValidator::validate($value['gas']) === false) { + self::$verifyMessage = 'gas is not valid'; return false; } if (isset($value['gasPrice']) && QuantityValidator::validate($value['gasPrice']) === false) { + self::$verifyMessage = 'gasPrice is not valid'; return false; } if (isset($value['value']) && QuantityValidator::validate($value['value']) === false) { + self::$verifyMessage = 'value is not valid'; return false; } - // if (!isset($value['data'])) { - // return false; - // } - // if (HexValidator::validate($value['data']) === false) { - // return false; - // } if (isset($value['data']) && HexValidator::validate($value['data']) === false) { + self::$verifyMessage = 'data is not valid'; return false; } if (isset($value['nonce']) && QuantityValidator::validate($value['nonce']) === false) { + self::$verifyMessage = 'nonce is not valid'; return false; } return true; diff --git a/src/Validators/Validator.php b/src/Validators/Validator.php new file mode 100644 index 0000000..3802ada --- /dev/null +++ b/src/Validators/Validator.php @@ -0,0 +1,68 @@ + + * + * @author Peter Lai + * @license MIT + */ + +namespace Web3\Validators; + +use Web3\Validators\IValidator; + +class Validator +{ + /** + * verifyMessage + * verify result from calling validate function + * + * @var string + */ + protected static $verifyMessage; + + /** + * get + * + * @param string $name + * @return mixed + */ + public function __get($name) + { + $method = 'get' . ucfirst($name); + + if (method_exists($this, $method)) { + return call_user_func_array([$this, $method], []); + } + return false; + } + + /** + * set + * + * @param string $name + * @param mixed $value + * @return bool + */ + public function __set($name, $value) + { + $method = 'set' . ucfirst($name); + + if (method_exists($this, $method)) { + return call_user_func_array([$this, $method], [$value]); + } + return false; + } + + /** + * getVerifyMessage + * + * @return string + */ + public static function getVerifyMessage() + { + return self::$verifyMessage; + } +} \ No newline at end of file