{"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\/sv\/blog\/administrirovanie\/waveskit-php-frejmvork-dlya-raboty-s-blokchejnom-waves","title":{"rendered":"Hur man bygger SDN \u2014 \u00e5tta verktyg med \u00f6ppen k\u00e4llkod | ProHoster","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Jag gillar <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/PHP\">PHP<\/a><\/noindex> utvecklingshastigheten och den utm\u00e4rkta b\u00e4rbarheten. Det \u00e4r v\u00e4ldigt bra n\u00e4r man alltid har ett verktyg redo f\u00f6r att l\u00f6sa uppgifter.<\/p>\n<p><\/p>\n<p>Det var ganska frustrerande n\u00e4r jag bekantade mig med den inhemska blockkedjan <noindex><a rel=\"nofollow\" href=\"https:\/\/wavesplatform.com\">Waves Plattform<\/a><\/noindex> och i dess arsenal fanns det ingen f\u00e4rdig SDK f\u00f6r PHP. N\u00e5v\u00e4l, jag var tvungen att skriva en.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>I b\u00f6rjan var jag tvungen att anv\u00e4nda <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.wavesplatform.com\/en\/waves-full-node\/what-is-a-full-node.html\">noder<\/a><\/noindex> f\u00f6r att signera transaktioner. S\u00e5ledes, f\u00f6r att hantera tre adresser var jag tvungen att k\u00f6ra tre noder... Det var en sorglig syn, \u00e4ven om det l\u00f6ste vissa uppgifter. Tills jag ins\u00e5g att f\u00f6rlita sig p\u00e5 noder \u00e4r en \u00e5terv\u00e4ndsgr\u00e4nd. F\u00f6r det f\u00f6rsta p\u00e5 grund av den begr\u00e4nsade funktionaliteten <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.wavesplatform.com\/en\/waves-api-and-sdk\/waves-node-rest-api.html\">API<\/a><\/noindex>, f\u00f6r det andra p\u00e5 grund av hastigheten (p\u00e5 den tiden var noderna v\u00e4ldigt l\u00e5ngsamma).<\/p>\n<p><\/p>\n<p>Jag b\u00f6rjade tv\u00e5 parallella projekt. Det ena var att skapa en blockkedjeutforskare som skulle vara snabb och helt oberoende av API:er fr\u00e5n noder. Det andra var att samla alla funktioner som beh\u00f6vs f\u00f6r att arbeta med Waves Plattform p\u00e5 ett st\u00e4lle. S\u00e5 f\u00f6ddes projekten <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/w8io\">w8io<\/a><\/noindex> och <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/WavesKit\">WavesKit<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Det f\u00f6rsta steget bakom kulisserna av Waves blockkedjan blev <noindex><a rel=\"nofollow\" href=\"https:\/\/w8io.ru\">utforskaren w8io<\/a><\/noindex>. Det var inte enkelt, men jag lyckades \u00e4nd\u00e5 skriva en oberoende ber\u00e4kning av alla saldon och till och med hitta ett fel i ber\u00e4kningarna p\u00e5 de ursprungliga noderna (<noindex><a rel=\"nofollow\" href=\"https:\/\/forum.wavesplatform.com\/t\/bug-bounty-program\/1127\">bug-bounty programmet<\/a><\/noindex> f\u00f6rresten har de, de betalar f\u00f6r hittade fel). Du kan studera funktionerna hos w8io utforskaren mer i den h\u00e4r tr\u00e5den: <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>Under arbetet med w8io hade jag redan tvekan, men n\u00e4r arbetet kom till ett logiskt slut och jag b\u00f6rjade skapa SDK:n, bekr\u00e4ftades tvekan. Jag kunde inte hitta vissa funktioner n\u00e5gonstans, inklusive de mest viktiga, kryptografiska. D\u00e5 b\u00f6rjade jag skapa mina egna byggblock f\u00f6r grunden. S\u00e5 f\u00f6ddes: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/ABCode\">ABCode<\/a><\/noindex> f\u00f6r kodning till base58 (egentligen f\u00f6r kodning av vilket alfabet som helst till vilket som helst), <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/Curve25519\">Curve25519<\/a><\/noindex> f\u00f6r att skapa och verifiera kompatibla signaturer (med varianter <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/Curve25519\/blob\/0ba56fa566f4a29b06126465b9ebbe59c915ffbd\/src\/Curve25519.php#L104\">p\u00e5 steroids<\/a><\/noindex>), <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/Blake2b\">Blake2b<\/a><\/noindex> f\u00f6r att ber\u00e4kna en av hasharna (som endast var tillg\u00e4nglig fr\u00e5n och med PHP 7.2) och s\u00e5 vidare.<\/p>\n<p><\/p>\n<p>H\u00e4r m\u00e5ste jag tacka <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/ikardanoff\">Inal Kardanov<\/a><\/noindex> f\u00f6r n\u00e5gra v\u00e4rdefulla r\u00e5d som ledde mig mot <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Composer_(software)\">composer<\/a><\/noindex> ist\u00e4llet f\u00f6r de gamla, men utdaterade, include-filerna.<\/p>\n<p><\/p>\n<p>Efter ett par m\u00e5nader <noindex>s\u00e5g WavesKit dagens ljus<\/noindex>, gick ut fr\u00e5n <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/ikardanoff\/status\/1091241637706190848\">beta-versionen<\/a><\/noindex> och \u00e4r nu redo att arbeta med all standardfunktionalitet p\u00e5 Waves plattformen. Allt som finns tillg\u00e4ngligt i <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.wavesplatform.com\/en\/waves-environment\/waves-mainnet.html\">huvudn\u00e4tverket<\/a><\/noindex> Transaktioner kan enkelt skapas, signeras och skickas av endast ett paket som fungerar p\u00e5 alla 64-bitarsversioner av PHP fr\u00e5n och med 5.6.<\/p>\n<p><\/p>\n<p>Koppla in WavesKit i ditt projekt:<\/p>\n<p><\/p>\n<pre><code class=\"php\">composer require deemru\/waveskit<\/code><\/pre>\n<p><\/p>\n<p>Anv\u00e4nd:<\/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>I exemplet ovan skapar vi ett WavesKit-objekt som arbetar i testn\u00e4tet \"T\". Vi st\u00e4ller in frasen, fr\u00e5n vilken nycklar och kontoadress automatiskt ber\u00e4knas baserat p\u00e5 den offentliga nyckeln. D\u00e4refter skapar vi en \u00f6verf\u00f6ringstransaktion p\u00e5 0,00000001 Waves fr\u00e5n den automatisk ber\u00e4knade adressen baserad p\u00e5 frasen till adressen f\u00f6r aliaset \"test\", signerar den med den privata nyckeln och skickar den till n\u00e4tverket. Efter det s\u00e4kerst\u00e4ller vi att transaktionen har bekr\u00e4ftats framg\u00e5ngsrikt av n\u00e4tverket.<\/p>\n<p><\/p>\n<p>Arbetet med transaktioner \u00e4r koncentrerat i <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/WavesKit\/blob\/master\/docs\/WavesKit.md#waveskittxaddressscript\">funktioner som b\u00f6rjar med tx<\/a><\/noindex>. F\u00f6r att b\u00e4ttre f\u00f6rst\u00e5 arbetet med transaktioner kan du studera <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/WavesKit\/blob\/master\/docs\/WavesKit.md\">WavesKit-dokumentationen<\/a><\/noindex> eller genast g\u00e5 till de tydliga exemplen i <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/WavesKit\/blob\/2c4937199c88bc4ae105f60657b1389482471c1f\/test\/selftest.php#L237\">tester f\u00f6r kontinuerlig integration<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Eftersom WavesKit har utvecklats under verkliga anv\u00e4ndningsf\u00f6rh\u00e5llanden har den redan f\u00e5tt avancerade funktioner. Den f\u00f6rsta killerfunktionen \u00e4r <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/WavesKit\/blob\/master\/docs\/WavesKit.md#waveskitensure\">funktionen ensure<\/a><\/noindex>, som kontrollerar att den n\u00f6dv\u00e4ndiga niv\u00e5n av s\u00e4kerhet uppn\u00e5s, vilket betyder att transaktionen inte har f\u00f6rlorats, utan ist\u00e4llet har bekr\u00e4ftats och n\u00e5tt det erforderliga antalet bekr\u00e4ftelser i n\u00e4tverket.<\/p>\n<p><\/p>\n<p>En annan kugghjulsskyddad mekanism \u00e4r hur WavesKit kommunicerar med noder. Under kontrollerade f\u00f6rh\u00e5llanden arbetar ramverket endast med den prim\u00e4ra noden, vilket uppr\u00e4tth\u00e5ller en st\u00e4ndig f\u00f6rbindelse med den, men vid fel kan det automatiskt v\u00e4xla till reservnoder. Om du st\u00e4ller in en array av reservnoder kan du kalla funktionen <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/WavesKit\/blob\/master\/docs\/WavesKit.md#waveskitsetbestnode\">setBestNode<\/a><\/noindex> f\u00f6r att best\u00e4mma den b\u00e4sta noden som prim\u00e4r baserat p\u00e5 det maximala v\u00e4rdet av den aktuella h\u00f6jden och svarstiden. L\u00e4gg nu till detta det interna cache-systemet f\u00f6r f\u00f6rfr\u00e5gningar och k\u00e4nn omsorgen b\u00e5de om anv\u00e4ndarna och noderna.<\/p>\n<p><\/p>\n<p>En av de senaste avancerade mekanismerna \u00e4r funktionen <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/WavesKit\/blob\/master\/docs\/WavesKit.md#waveskittxmonitor\">txMonitor<\/a><\/noindex>. Den uppkom p\u00e5 grund av behovet att reagera p\u00e5 inkommande transaktioner i realtid. Denna funktion l\u00f6ser helt alla aspekter kopplade till behandling av transaktioner i blockkedjan. Ingen mer sm\u00e4rta, du installerar enkelt din callback-funktion med \u00f6nskade alternativ och v\u00e4ntar p\u00e5 nya transaktioner som kommer att starta dina processer. Till exempel ett annat av mina projekt <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/VECRO\">VECRO<\/a><\/noindex> \u00e4r helt byggt kring denna funktion, du kan lugnt studera hur den fungerar direkt <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/VECRO\/blob\/85d8373de56baff7c05697475211633b521bca7d\/src\/VECRO.php#L80\">i projektets kod<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Jag \u00e4lskar \u00f6ppen k\u00e4llkod, det \u00e4r en av m\u00e4nsklighetens st\u00f6rsta prestationer. Eftersom jag \u00e4r den enda utvecklaren och har n\u00e5tt en punkt d\u00e4r alla mina behov \u00e4r l\u00f6sta, inbjuder jag dig att anv\u00e4nda och bidra till <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/WavesKit\">WavesKit<\/a><\/noindex>.<\/p>\n<p>K\u00e4lla: <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.4 - 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\/sv\/blog\/administrirovanie\/waveskit-php-frejmvork-dlya-raboty-s-blokchejnom-waves\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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 PHP-ramverk f\u00f6r arbete med blockkedjan Waves | ProHoster","description":"Jag \u00e4lskar PHP f\u00f6r snabb utveckling och utm\u00e4rkt portabilitet.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/waveskit-php-frejmvork-dlya-raboty-s-blokchejnom-waves","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/30639","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=30639"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/30639\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=30639"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=30639"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=30639"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}