Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 9838|Відповідь: 4

Розробка EOS Blockchain PHP Kit

[Копіювати посилання]
Опубліковано 11.12.2018 08:56:36 | | |
Цей допис востаннє відредаговано 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 для вузлових програмних вузлів
eostool/src/client/WalletClient.phpКлас інкапсуляції інтерфейсу RPC у програмному забезпеченні гаманця KEOSD
eostool/src/client/RpcOutput.phpRPC повертає отриманий клас інкапсуляції
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Реалізація локального офлайн-підписача
Eostool/SRC/Contract.phpКонтрактний клас
Eostool/SRC/EosTool.phpКлас входу в пакет розробки
Eostool/ТестиКаталог одиничних тестових випадків
Eostool/phpunit.xmlПрофілі модульних тестів
eostool/постачальникПакети залежності від сторонніх сторін
Eostool/composer.jsonКонфігураційний файл композитора
2. Доступ до сервера вузлів
Використовуйте клас NodeClient для доступу до інтерфейсу rpc nodeos. Наприклад, наступний код звертається до get_info інтерфейсу плагіна ланцюга для нативно запущеного вузла Nodeos:
2.1 Групування викликів RPC

EosTool використовує узгоджений метод іменування, і метод виклику NodeClient можна вивести згідно з API: групування API відповідає властивості з тією ж назвою, що й NodeClient, а API — методу, конвертованому CamelCase під тим самим атрибутом з тією ж назвою, що й групування Client of No. Наприклад:



ПлагіниГрупування APIRPC APIМетод NodeClient
chain_api_pluginЛанцюгget_info$nc->chain->getInfo()
history_api_pluginІсторіяget_transaction$nc->history->getTransaction()
net_api_pluginnetСтатус$nc->net->status()
producer_api_pluginПродюсерget_runtime_options$nc->producer->getRunTimeOptions()
dbsize_api_plugindbsizeІди$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 для доступу. Наприклад, використовуйте наступний код для доступу до основного вузла:

Або відвідайте вузол у тестнеті 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




Опубліковано 11.12.2018 08:59:58 |
Дякую. Дуже корисно
 Орендодавець| Опубліковано 11.12.2018 09:06:52 |
Літо Опубліковано 2018-12-11 08:59
Дякую. Дуже корисно

Дякую за підтримку.
Опубліковано 11.12.2018 09:11:46 |
Я прочитав багато матеріалів на вашому сайті і вважаю, що деякі з них — перекладені іноземні статті
Опубліковано 11.12.2018 09:32:07 |
Подивись, дякую, босе, що розбагатів
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com