Този пост беше последно редактиран от 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 блокчейн PHP разработката:http://t.cn/EUZAODQ
EosTool работи в среда Php 7.1+, текущата версия е 1.0.0, а списъкът с основни кодови файлове е както следва:
| Кодови файлове | илюстрирам | | eostool/src/client/NodeClient.php | Класът RPC интерфейсен пакет на възлови софтуерни nodeos | | 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 | Интерфейс за подписване | | eostool/src/Signer/KeosdSigner.php | Клас на имплементация на Keosd signer | | eostool/src/Signer/LocalSigner.php | Реализация на локални офлайн signer | | eostool/src/Contract.php | Договорен клас | | eostool/src/EosTool.php | Клас на участие в пакета за разработка | | eostool/тестове | Каталог на тестови случаи | | eostool/phpunit.xml | Профили на единични тестове | | eostool/доставчик | Пакети за зависимости от трети страни | | eostool/composer.json | Конфигурационен файл на композитора | 2. Достъп до node serverИзползвайте класа NodeClient за достъп до rpc интерфейса на nodeos. Например, следният код достъпва get_info интерфейса на верижния плъгин за нативно работещ Nodeos възел: 2.1 Групиране на RPC повиквания
EosTool използва последователен метод за именуване, а методът за извикване на NodeClient може да се изведе според API-то: групирането на API съответства на свойство със същото име като NodeClient, а API съответства на метод, конвертиран от camelCase под същия атрибут със същото име като групирането на Client of 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 Достъп до основните/тестовите възли
При създаване на инстанция на NodeClient могат да се подадат допълнителни изпълнения на параметри, за да се дефинират основните или тестовите възли на EOS за достъп. Например, използвайте следния код за достъп до основен възел:
Или посетете възел в тестовата мрежа 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 е подобен на Биткойн, но с някои промени и дефиниране на собствен формат. Използвайте статичния метод на клас 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 класът Serializer се използва за операции по сериализация. Например, следният код сериализира EOS трансферна транзакция в 16-десетичен кодов поток, който може да бъде подаден към EOS възел:
Статичният метод fromAbi() на Serializer се използва за конструиране на инстанция на сериализатор, базирана на определен abi, а след това методът serialize() на инстанцията се използва за сериализация на зададения тип данни с цел получаване на шестнадесетичен поток от код. 6. ПодписEosTool предлага два начина за подписване на транзакции: използване на Keosd за подписване или използване на локален частен ключ. Използвайте класа KeosdSigner, за да завършите подписването чрез сървъра на портфейла. Например:
Използвайки класа LocalSigner, можете да избегнете използването на keosd и директно да използвате офлайн подписване на частни ключове. Например: използвайте EosTool\Signer\LocalSigner;
$prvKeys = ['5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3']; $signer = нов LocalSigner($prvKeys); $signatures = $signer->sign($tx,$pubKeys,$chainId);
7. Подаване на транзакцията
Данните от транзакцията трябва да бъдат нормализирани, сериализирани, подписани и пакетирани чрез серия от операции, преди да могат да бъдат предадени на възела Nodeos за излъчване. Класът EosTool предоставя метода transact() за изолиране на тези досадни операции. Например, кодът по-долу създава EosTool инстанция с помощта на NodeClient и LocalSigner, след което изпраща транзакция: Удобно е да се смени подписващият на KeosdSigner, например:
8. Да се позове на единен договорен искИзползвайте метода pushAction() на EosTool, за да извикнете едно действие по договор. Например, следният код извиква метода hi() на договора за хостване на акаунта Tommy:
9. Разгръщане на договораРазгръщайте договора чрез метода setContract() на EosTool, например: Заинтересовани приятели могат да посетят тук:http://t.cn/EUZAODQ
|