Я искал решение для фреймворка Yii2 и для всех криптовалют, к сожалению теги по убирали, поэтому, те кто искал решение для Yii - возможно не увидят моего решения.
К слову о валидации:
https://etherscan.io/apis#contracts
Это сайт может помочь в проверке "эфирум-кошельков"
---
Обратите внимание:
1)
https://api.etherscan.io/api?module=contract&actio...
2)
https://api.etherscan.io/api?module=contract&actio...
что у ссылки (2) - ошибка, и
"status":"0", у ссылки (1) - видны блоки и
"status":"1","message":"OK"
По сути своей, это API в виде json файла.
если сделать себе свой ключ (хотя странно что без ключа тоже работает), то можно создать свой класс на php - где создать правила валидации:
// for Yii2
public function rules()
{
return [
...
['sender', 'validateSender'],
...
];
}
И само правило:
// for Yii2
public function validateSender($attribute, $params)
{
$money = self::rightAdress($this->sender);
if ($money == 0) {
$this->addError($attribute, 'Неправильный адрес Ethereum-кошелька.');
}
}
Естественно, чтобы это проверить, нужно сделать GET запрос к API:
public function rightAdress($sender = '')
{
$json = self::viewUrlContent($sender);
$obj = json_decode($json);
return ($obj->result == 'Invalid Address format') ? '0' : '1'; // Invalid Address format
}
Я сделал две функции, чтобы в дальнейшем можно было сделать более гибкое решение:
public static function formUrlAddressETH($sender = '')
{
// Tokensell::formUrlAddressETH()
return self::APIurl.'?module=contract&action=getabi&address='.$sender.'&apikey='.self::YourApiKeyToken;
}
public static function viewUrlContent($sender = '')
{
return file_get_contents(self::formUrlAddressETH($sender));
}
Грубо говоря делаем либо публичные переменные, либо как я, константы:
const APIurl = 'https://api-rinkeby.etherscan.io/api';
const YourApiKeyToken = 'тут ваш ключ от которого никакого толка ))) ';
Так же я делал проверку на баланс, ну я думаю дальше проще понять, и тут будет уже не по теме.
Мы же рассматривали варианты, чтобы проверить, верно указан кошелёк, или адрес не верный.
Универсального решения я пока не нашёл, может быть появится, или сам создам. Но по сути больше никак не проверишь, так как их (крипто-кошельков) очень много, хранить на сайте смысла нет, они постоянно обновляются XD
Поэтому только API, благо оно для криптовалюты есть.
Учитывая, что на Lavarel и на Simfony - php class особо не отличаются, можно сделать похожее решение.
Предупреждаю, что валидация срабатывает после отправки формы, после перезагрузки страницы, так что советую добавить ajax
У меня всё, надеюсь кому помог, или кому-то пригодится.