{"id":30639,"date":"2019-10-31T21:36:39","date_gmt":"2019-10-31T18:36:39","guid":{"rendered":"https:\/\/prohoster.info\/blog\/waveskit-php-frejmvork-dlya-raboty-s-blokchejnom-waves\/"},"modified":"2019-10-31T21:36:39","modified_gmt":"2019-10-31T18:36:39","slug":"waveskit-php-frejmvork-dlya-raboty-s-blokchejnom-waves","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/waveskit-php-frejmvork-dlya-raboty-s-blokchejnom-waves","title":{"rendered":"WavesKit \u2014 framework PHP do pracy z blockchainem Waves","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Lubi\u0119 <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/PHP\">PHP<\/a><\/noindex> za szybko\u015b\u0107 rozwoju i doskona\u0142\u0105 przeno\u015bno\u015b\u0107. To bardzo dobrze, gdy zawsze masz pod r\u0119k\u0105 narz\u0119dzie gotowe do rozwi\u0105zania problem\u00f3w.<\/p>\n<p><\/p>\n<p>By\u0142o do\u015b\u0107 przykre, gdy podczas zapoznawania si\u0119 z krajowym blockchainem <noindex><a rel=\"nofollow\" href=\"https:\/\/wavesplatform.com\">Waves Platform<\/a><\/noindex> nie znalaz\u0142em gotowego SDK w PHP. C\u00f3\u017c, musia\u0142em go napisa\u0107.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Na pocz\u0105tku musia\u0142em korzysta\u0107 <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.wavesplatform.com\/en\/waves-full-node\/what-is-a-full-node.html\">w\u0119z\u0142y<\/a><\/noindex> do podpisywania transakcji. Tak, by zarz\u0105dza\u0107 trzema adresami, musia\u0142em uruchomi\u0107 trzy w\u0119z\u0142y\u2026 To by\u0142 \u017ca\u0142osny widok, chocia\u017c rozwi\u0105zywa\u0142o niekt\u00f3re problemy. Do momentu, kiedy zrozumia\u0142em, \u017ce poleganie na w\u0119z\u0142ach to \u015blepy zau\u0142ek. Po pierwsze, z powodu ograniczonej funkcjonalno\u015bci <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.wavesplatform.com\/en\/waves-api-and-sdk\/waves-node-rest-api.html\">API<\/a><\/noindex>, po drugie, z powodu pr\u0119dko\u015bci (w tamtych czasach w\u0119z\u0142y by\u0142y bardzo wolne).<\/p>\n<p><\/p>\n<p>Zacz\u0105\u0142em dwie r\u00f3wnoleg\u0142e prace. Jedna \u2014 stworzy\u0107 przegl\u0105dark\u0119 blockchain, kt\u00f3ra b\u0119dzie szybka i ca\u0142kowicie niezale\u017cna od API w\u0119z\u0142\u00f3w. Druga \u2014 zebra\u0107 wszystkie funkcje do pracy z Waves Platform w jednym miejscu. Tak powsta\u0142y projekty <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/w8io\">w8io<\/a><\/noindex> i <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/WavesKit\">WavesKit<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Pierwszym krokiem za kulisy blockchaina Waves by\u0142a <noindex><a rel=\"nofollow\" href=\"https:\/\/w8io.ru\">przegl\u0105darka w8io<\/a><\/noindex>. To nie by\u0142o \u0142atwe, ale ostatecznie uda\u0142o si\u0119 napisa\u0107 niezale\u017cny skrypt obliczaj\u0105cy wszystkie salda i nawet znale\u017a\u0107 b\u0142\u0105d w obliczeniach na oryginalnych w\u0119z\u0142ach (<noindex><a rel=\"nofollow\" href=\"https:\/\/forum.wavesplatform.com\/t\/bug-bounty-program\/1127\">program bug-bounty<\/a><\/noindex> notabene u nich dzia\u0142a, p\u0142ac\u0105 za znalezione b\u0142\u0119dy). Mo\u017cesz dok\u0142adniej zapozna\u0107 si\u0119 z funkcjonalno\u015bci\u0105 przegl\u0105darki w8io w tym w\u0105tku: <noindex><a rel=\"nofollow\" href=\"https:\/\/forum.wavesplatform.com\/t\/w8io-waves-explorer-based-on-php-sqlite\">https:\/\/forum.wavesplatform.com\/t\/w8io-waves-explorer-based-on-php-sqlite<\/a><\/noindex><\/p>\n<p><\/p>\n<p>W trakcie pracy nad w8io mia\u0142em ju\u017c w\u0105tpliwo\u015bci, ale gdy praca dobieg\u0142a ko\u0144ca i przyst\u0105pi\u0142em do tworzenia SDK, w\u0105tpliwo\u015bci si\u0119 potwierdzi\u0142y. Nie mog\u0142em nigdzie znale\u017a\u0107 niekt\u00f3rych funkcji, w tym najwa\u017cniejszych, kryptograficznych. Wtedy zacz\u0105\u0142em tworzy\u0107 swoje ceg\u0142y na fundament. Tak narodzi\u0142y si\u0119: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/ABCode\">ABCode<\/a><\/noindex> do kodowania w base58 (tak naprawd\u0119 do kodowania dowolnego alfabetu w dowolnym), <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/Curve25519\">Curve25519<\/a><\/noindex> do tworzenia i weryfikacji zgodnych podpis\u00f3w (z wariantami <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/Curve25519\/blob\/0ba56fa566f4a29b06126465b9ebbe59c915ffbd\/src\/Curve25519.php#L104\">na sterydach<\/a><\/noindex>), <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/Blake2b\">Blake2b<\/a><\/noindex> do obliczania jednego z hashy (kt\u00f3ry by\u0142 dost\u0119pny dopiero od PHP 7.2) itd.<\/p>\n<p><\/p>\n<p>Tutaj musz\u0119 podzi\u0119kowa\u0107 <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/ikardanoff\">Inalowi Kardanowowi<\/a><\/noindex> za kilka cennych rad, kt\u00f3re skierowa\u0142y mnie w stron\u0119 <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Composer_(software)\">composer<\/a><\/noindex> zamiast znanych mi, ale przestarza\u0142ych, plik\u00f3w include.<\/p>\n<p><\/p>\n<p>Po kilku miesi\u0105cach <noindex>WavesKit ujrza\u0142 \u015bwiat\u0142o dzienne<\/noindex>, wyszed\u0142 z <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/ikardanoff\/status\/1091241637706190848\">wersji beta<\/a><\/noindex> i jest teraz gotowy do pracy ze wszystkimi standardowymi funkcjami platformy Waves. Wszystko dost\u0119pne w <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.wavesplatform.com\/en\/waves-environment\/waves-mainnet.html\">g\u0142\u00f3wnej sieci<\/a><\/noindex> Transakcje mog\u0105 by\u0107 \u0142atwo tworzone, podpisywane i wysy\u0142ane za pomoc\u0105 jednego pakietu dzia\u0142aj\u0105cego na wszystkich 64-bitowych wersjach PHP od 5.6 w\u0142\u0105cznie.<\/p>\n<p><\/p>\n<p>Integracja WavesKit w swoim projekcie:<\/p>\n<p><\/p>\n<pre><code class=\"php\">composer require deemru\/waveskit<\/code><\/pre>\n<p><\/p>\n<p>U\u017cywamy:<\/p>\n<p><\/p>\n<pre><code class=\"php\">use deemruWavesKit;\n$wk = new WavesKit( 'T' );\n$wk-&gt;setSeed( 'manage manual recall harvest series desert melt police rose hollow moral pledge kitten position add' );\n$tx = $wk-&gt;txBroadcast( $wk-&gt;txSign( $wk-&gt;txTransfer( 'test', 1 ) ) );\n$tx = $wk-&gt;ensure( $tx );<\/code><\/pre>\n<p><\/p>\n<p>W powy\u017cszym przyk\u0142adzie tworzymy obiekt WavesKit, kt\u00f3ry dzia\u0142a w sieci testowej \u201eT\u201d. Ustawiamy fraz\u0119 seed, z kt\u00f3rej automatycznie obliczane s\u0105 klucze i adres konta na podstawie klucza publicznego. Nast\u0119pnie tworzymy transakcj\u0119 transferu 0.00000001 Waves z automatycznie obliczonego adresu na adres aliasu \u201etest\u201d, przekazujemy j\u0105 do podpisania kluczem prywatnym i wysy\u0142amy do sieci. Po tym upewniamy si\u0119, \u017ce transakcja zosta\u0142a pomy\u015blnie potwierdzona przez sie\u0107.<\/p>\n<p><\/p>\n<p>Praca z transakcjami koncentruje si\u0119 w <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/WavesKit\/blob\/master\/docs\/WavesKit.md#waveskittxaddressscript\">funkcjach zaczynaj\u0105cych si\u0119 od tx<\/a><\/noindex>. Aby lepiej zrozumie\u0107 prac\u0119 z transakcjami, mo\u017cesz zapozna\u0107 si\u0119 z <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/WavesKit\/blob\/master\/docs\/WavesKit.md\">dokumentacj\u0105 WavesKit<\/a><\/noindex> lub od razu zapozna\u0107 si\u0119 z praktycznymi przyk\u0142adami w <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/WavesKit\/blob\/2c4937199c88bc4ae105f60657b1389482471c1f\/test\/selftest.php#L237\">testach ci\u0105g\u0142ej integracji<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Poniewa\u017c WavesKit rozwija\u0142 si\u0119 w warunkach realnego u\u017cycia, ma ju\u017c zaawansowane funkcje. Pierwsza funkcja killer to <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/WavesKit\/blob\/master\/docs\/WavesKit.md#waveskitensure\">funkcja ensure<\/a><\/noindex>, kt\u00f3ra kontroluje osi\u0105gni\u0119cie wymaganego poziomu pewno\u015bci, \u017ce transakcja nie zosta\u0142a utracona, a wr\u0119cz przeciwnie, zosta\u0142a potwierdzona i osi\u0105gn\u0119\u0142a wymagan\u0105 liczb\u0119 potwierdze\u0144 w sieci.<\/p>\n<p><\/p>\n<p>Inny nieprzepuszczalny mechanizm to spos\u00f3b, w jaki WavesKit komunikuje si\u0119 z w\u0119z\u0142ami. W kontrolowanych warunkach framework dzia\u0142a tylko z g\u0142\u00f3wnym w\u0119z\u0142em, utrzymuj\u0105c z nim sta\u0142e po\u0142\u0105czenie, ale przy b\u0142\u0119dach mo\u017ce automatycznie prze\u0142\u0105cza\u0107 si\u0119 na zapasowe. Je\u015bli ustalisz tablic\u0119 zapasowych w\u0119z\u0142\u00f3w, mo\u017cesz wywo\u0142a\u0107 funkcj\u0119 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/WavesKit\/blob\/master\/docs\/WavesKit.md#waveskitsetbestnode\">setBestNode<\/a><\/noindex> w celu okre\u015blenia najlepszego w\u0119z\u0142a jako g\u0142\u00f3wnego na podstawie maksymalnej warto\u015bci aktualnej wysoko\u015bci i czasu odpowiedzi. Teraz dodaj do tego wewn\u0119trzn\u0105 pami\u0119\u0107 podr\u0119czn\u0105 zapyta\u0144 i poczuj trosk\u0119 zar\u00f3wno o u\u017cytkownik\u00f3w, jak i w\u0142a\u015bcicieli w\u0119z\u0142\u00f3w.<\/p>\n<p><\/p>\n<p>Jednym z ostatnich zaawansowanych mechanizm\u00f3w jest funkcja <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/WavesKit\/blob\/master\/docs\/WavesKit.md#waveskittxmonitor\">txMonitor<\/a><\/noindex>. Pojawi\u0142a si\u0119 w odpowiedzi na konieczno\u015b\u0107 reagowania na przychodz\u0105ce transakcje w czasie rzeczywistym. Ta funkcja ca\u0142kowicie rozwi\u0105zuje wszystkie kwestie zwi\u0105zane z przetwarzaniem transakcji w blockchainie. \u017badnych wi\u0119cej problem\u00f3w, wystarczy ustawi\u0107 swoj\u0105 funkcj\u0119 callback z po\u017c\u0105danymi opcjami i czeka\u0107 na nowe transakcje, kt\u00f3re uruchomi\u0105 twoje procesy. Na przyk\u0142ad, jeszcze jeden m\u00f3j projekt <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/VECRO\">VECRO<\/a><\/noindex> jest ca\u0142kowicie zbudowany wok\u00f3\u0142 tej funkcji, mo\u017cesz swobodnie bada\u0107, jak dzia\u0142a bezpo\u015brednio <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/VECRO\/blob\/85d8373de56baff7c05697475211633b521bca7d\/src\/VECRO.php#L80\">w kodzie projektu<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Podoba mi si\u0119 open source, to jedno z najwi\u0119kszych osi\u0105gni\u0119\u0107 ludzko\u015bci. Poniewa\u017c jestem jedynym deweloperem i osi\u0105gn\u0105\u0142em stan, w kt\u00f3rym wszystkie moje potrzeby s\u0105 zaspokojone, zapraszam ci\u0119 do korzystania i wnoszenia wk\u0142adu w <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/WavesKit\">WavesKit<\/a><\/noindex>.<\/p>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/446110\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f PHP \u0437\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u043e\u0442\u043b\u0438\u0447\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c\u043e\u0441\u0442\u044c. \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e, \u043a\u043e\u0433\u0434\u0430 \u0432 \u043a\u0430\u0440\u043c\u0430\u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u0437\u0430\u0434\u0430\u0447 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442. \u0411\u044b\u043b\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043e\u0431\u0438\u0434\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0435 \u0441 \u043e\u0442\u0435\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u043e\u043c Waves Platform \u0432 \u0435\u0433\u043e \u0430\u0440\u0441\u0435\u043d\u0430\u043b\u0435 \u043d\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e SDK \u043d\u0430 PHP. \u0427\u0442\u043e \u0436, \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0435\u0433\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c. \u041f\u043e\u043d\u0430\u0447\u0430\u043b\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0434\u044b \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439. \u0422\u0430\u043a, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-30639","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f PHP \u0437\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u043e\u0442\u043b\u0438\u0447\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c\u043e\u0441\u0442\u044c.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/waveskit-php-frejmvork-dlya-raboty-s-blokchejnom-waves\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47WavesKit \u2014 PHP \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u043e\u043c Waves | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f PHP \u0437\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u043e\u0442\u043b\u0438\u0447\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c\u043e\u0441\u0442\u044c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/waveskit-php-frejmvork-dlya-raboty-s-blokchejnom-waves\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:36:39+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:36:39+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47WavesKit \u2014 framework PHP do pracy z blockchainem Waves | ProHoster","description":"Podoba mi si\u0119 PHP za szybko\u015b\u0107 rozwoju i doskona\u0142\u0105 przeno\u015bno\u015b\u0107.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/waveskit-php-frejmvork-dlya-raboty-s-blokchejnom-waves","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47WavesKit \u2014 PHP \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u043e\u043c Waves | ProHoster","og:description":"\u041c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f PHP \u0437\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u043e\u0442\u043b\u0438\u0447\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c\u043e\u0441\u0442\u044c.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/waveskit-php-frejmvork-dlya-raboty-s-blokchejnom-waves","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:36:39+00:00","article:modified_time":"2019-10-31T18:36:39+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"30639","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 02:15:25","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:31:24","updated":"2026-01-21 02:15:25","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/30639","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=30639"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/30639\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=30639"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=30639"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=30639"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}