Последний раз этот пост был отредактирован jimi2018 11.12.2018 09:06
1. Обзор пакета разработкиЦель EosTool — устранить трудности при разработке блокчейн-приложений EOS с использованием PHP, таких как: - Вызывайте его функции через интерфейс RPC Nodeos и Keosd
- Генерировать приватные и публичные ключи в формате EOS офлайн
- Используйте локальный приватный ключ для генерации подписей транзакций, соответствующих EOS,
- Сериализируйте транзакционные объекты в packed_trx формат, необходимый Nodeos
Можно считать, что EosTool — это PHP-версия eosjs, которая позволяет полностью реализовывать функции официального клиента EOS Cleos, а также легко добавляется в поддержку блокчейна EOS в PHP-приложениях, значительно повышая эффективность разработки.
Заинтересованные друзья также могут напрямую перейти на эту ссылку, чтобы скачать комплект разработки EOS Blockchain PHP:http://t.cn/EUZAODQ
EosTool работает в среде Php 7.1+, текущая версия — 1.0.0, а список основных файлов кода следующий:
| Кодовые файлы | иллюстрировать | | eostool/src/client/NodeClient.php | Класс пакетов интерфейса RPC для узлов | | eostool/src/client/WalletClient.php | Класс инкапсуляции интерфейса RPC в программном обеспечении кошелька KEOSD | | eostool/src/client/RpcOutput.php | RPC возвращает полученный класс инкапсуляции | | eostool/src/Crypto/PrivateKey.php | Класс приватного ключа EOS | | eostool/src/Crypto/PublicKey.php | Класс открытого ключа EOS | | eostool/src/Crypto/Signature.php | Класс подписи EOS | | eostool/src/Serializer/AbiType.php | Класс пакетов типа ABI от EOS | | eostool/src/Serializer/AbiTypeFactory.php | Заводской класс типа ABI | | eostool/src/Serializer/SerialBuffer.php | Класс реализации сериализованного буфера | | eostool/src/Serializer/Serializer.php | Класс реализации сериализатора | | eostool/src/Signer/Signer.php | Интерфейс signer | | eostool/src/Signer/KeosdSigner.php | Класс реализации Keosd signer | | eostool/src/Signer/LocalSigner.php | Реализация локального офлайн-знака | | eostool/src/Contract.php | Контрактный класс | | eostool/src/EosTool.php | Класс входа в пакет разработки | | eostool/тесты | Каталог модульных тестовых случаев | | eostool/phpunit.xml | Профили модульных тестов | | eostool/vendor | Сторонние пакеты зависимостей | | eostool/composer.json | Конфигурационный файл composer | 2. Доступ к серверу узловИспользуйте класс NodeClient для доступа к интерфейсу rpc nodeos. Например, следующий код обращается к интерфейсу get_info плагина цепи для нативно запущенного узла Nodeos: 2.1 Группировка вызовов RPC
EosTool использует согласованный метод именования, и метод вызова NodeClient можно вывести по API: группировка API соответствует свойству с тем же именем, что и NodeClient, а API — методу, преобразованному CamelCase под тем же атрибутом того же имени, что и группировка клиента No. Например:
| Плагины | Группировка API | RPC API | Метод NodeClient | | chain_api_plugin | Цепь | get_info | $nc->chain->getInfo() | | history_api_plugin | История | get_transaction | $nc->history->getTransaction() | | net_api_plugin | Нет | Статус | $nc->net->status() | | producer_api_plugin | Продюсер | get_runtime_options | $nc->producer->getRunTimeOptions() | | dbsize_api_plugin | dbsize | Получить | $nc->dbsize->get() |
Официальная документация по RPC API:https://developers.eos.io/eosio-nodeos/reference
2.2 Параметры вызова RPC
Для Nodeos некоторые вызовы требуют передачи дополнительных параметров, таких как get_block интерфейс плагина цепочки; при использовании EosTool для вызова просто организуйте параметры в соответствующий массив, примерный код выглядит следующим образом:
2.3 Возвратные значения RPC вызывают
Результатом возврата всех вызовов RPC является экземпляр RpcOutput, и вызов его метода hasError() позволяет определить, ошибочен ли вызов, а также можно использовать метод getError() для получения информации об ошибке. Ответ вызова RPC можно получить с помощью метода getResult(), который является объектом StdClass, преобразованным из исходного результата JSON, поэтому его легко извлечь атрибутную информацию, например:
2.4 Доступ к узлам mainnet/testnet
При создании экземпляра NodeClient могут передаваться дополнительные исполнения параметров для определения узлов EOS mainnet или testnet для доступа. Например, используйте следующий код для доступа к узлу основной сети:
Или посетите узел в тестовой сети Jungle:
3. Доступ к серверу кошелькаНовая версия Keosd больше не предоставляет документацию по RPC API, что может означать переход к краю программного стека EOS. Однако вы можете получить доступ к старой версии документации по этому адресу: https://developers.eos.io/eosio-nodeos/v1.1.0/reference
Используйте класс WalletClient для доступа к интерфейсу rpc Keosd. Например, следующий код обращается к list_wallets интерфейсу Keosd, который работает нативно: Поскольку API Keosd больше не группируется, соответствующий RPC метод напрямую зависает на объекте WalletClient, что является отличием. Как и NodeClient, вызов WalletClient возвращает объект RpcOutput.
Версия Keosd 1.4 использует UNIX-сокеты вместо HTTP для предоставления RPC-интерфейсов по умолчанию, что может считаться безопаснее для IPC, учитывая, что в большинстве случаев Keosd работает нативно. Таким образом, это также стандартный вариант инстанции для WalletClient, и в большинстве случаев не требуется передавать дополнительные параметры для создания WalletClient. 4. Приватные и публичные ключи
Ключевой алгоритм EOS похож на Bitcoin, но с некоторыми изменениями и определением собственного формата. Используйте статический метод класса PrivateKey new() для генерации случайного приватного ключа. Например: Метод toEos() используется для преобразования объектов приватного ключа в пользовательский формат для EOS.
4.1 Вывод открытого ключа Публичный ключ может быть получен из приватного ключа, например:
Аналогично, используйте метод toEos() для преобразования публичного ключа в пользовательский формат для EOS.
4.2 Импорт приватных ключей EOS Вы можете преобразовать приватный ключ, отформатированный в EOS, в объект PrivateKey EosTool, например, код ниже импортирует указанный приватный ключ EOS и отображает соответствующий публичный ключ EOS:
4.3 Авторитетная подпись Метод sign() в PrivateKey поддерживает как обычные, так и авторитарные подписи, необходимые узлам EOS. Например, следующий код возвращает простую подпись:
Передайте дополнительные параметры для получения авторитетной подписи для указанных данных:
5. Сериализация
EOS требует, чтобы транзакции были сериализованы перед фиксацией узла push_transaction, что также является неизбежной частью операционных транзакций EOS в PHP. В EosTool класс сериализаторов используется для операций сериализации. Например, следующий код сериализует транзакцию передачи EOS в формате 16-десятичного кодового потока, который может быть отправлен на узел EOS:
Статический метод fromAbi() из Serializer используется для построения экземпляра сериализатора на основе заданного abi, а затем метод serialize() этого экземпляра сериализируется для сериализации указанного типа данных с целью получения шестнадцатеричного потока кода. 6. ПодписьEosTool предлагает два способа подписания транзакций: использование Keosd для подписи или локальный приватный ключ. Используйте класс KeosdSigner для завершения подписи с помощью сервера кошелька. Например:
Используя класс LocalSigner, можно избежать использования keosd и напрямую использовать офлайн-подписку приватного ключа. Например: использовать EosTool\Signer\LocalSigner;
$prvKeys = ['5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3']; $signer = новый LocalSigner($prvKeys); $signatures = $signer->знак($tx,$pubKeys,$chainId);
7. Подача сделки
Данные транзакции должны быть нормализованы, сериализованы, подписаны и упакованы через серию операций, прежде чем их можно будет отправить в узел Nodeos для трансляции. Класс EosTool предоставляет метод transact() для изоляции этих утомительных операций. Например, код ниже создаёт экземпляр EosTool с помощью NodeClient и LocalSigner, а затем отправляет транзакцию: Удобно изменить подписчик на KeosdSigner, например:
8. Инициировать единое дело по контрактуИспользуйте метод pushAction() из EosTool, чтобы вызвать действие одного контракта. Например, следующий код вызывает метод hi() в контракте хостинга аккаунта Tommy:
9. Развернуть контрактРазвернуть контракт с помощью метода setContract() из EosTool, например: Заинтересованные друзья могут обратиться сюда:http://t.cn/EUZAODQ
|