{"id":52506,"date":"2019-11-10T00:00:00","date_gmt":"2019-11-09T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/kak-napisat-smart-kontrakt-na-python-v-seti-ontology-chast-1-blockchain-block-api"},"modified":"2020-02-18T14:00:15","modified_gmt":"2020-02-18T11:00:15","slug":"kak-napisat-smart-kontrakt-na-python-v-seti-ontology-chast-1-blockchain-block-api","status":"publish","type":"post","link":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/kak-napisat-smart-kontrakt-na-python-v-seti-ontology-chast-1-blockchain-block-api","title":{"rendered":"Jak napsat smart kontrakt v Pythonu v s\u00edti Ontology. \u010c\u00e1st 1: Blockchain &#038; Block API.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Jak napsat chytrou smlouvu v Pythonu na s\u00edti Ontology. \u010c\u00e1st 1: Blockchain &amp; Block API\" src=\"\/wp-content\/uploads\/2019\/11\/4748f7bfd5e6c0b7a17ec511d22313df.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nToto je prvn\u00ed \u010d\u00e1st s\u00e9rie v\u00fdukov\u00fdch \u010dl\u00e1nk\u016f o vytv\u00e1\u0159en\u00ed smart kontrakt\u016f v Pythonu v blockchainov\u00e9 s\u00edti Ontology s pomoc\u00ed n\u00e1stroje pro v\u00fdvoj smart kontrakt\u016f. <noindex><a rel=\"nofollow\" href=\"https:\/\/smartx.ont.io\/\">SmartX<\/a><\/noindex>. <\/p>\n<p>V tomto \u010dl\u00e1nku za\u010dneme s API smart kontrakt\u016f Ontology. API smart kontrakt\u016f Ontology je rozd\u011bleno do 7 modul\u016f: <\/p>\n<ol>\n<li>Blockchain &amp; Block API, <\/li>\n<li>Runtime API, <\/li>\n<li>Storage API, <\/li>\n<li>Native API, <\/li>\n<li>Upgrade API, <\/li>\n<li>Execution Engine API a <\/li>\n<li>Static &amp; Dynamic Call API.<\/li>\n<\/ol>\n<p>\nBlockchain &amp; Block API je hlavn\u00ed \u010d\u00e1st\u00ed syst\u00e9mu smart kontrakt\u016f Ontology. Blockchain API podporuje z\u00e1kladn\u00ed operace blockchainov\u00e9ho dotazu, jako je nap\u0159\u00edklad z\u00edsk\u00e1n\u00ed aktu\u00e1ln\u00ed v\u00fd\u0161ky bloku, zat\u00edmco Block API podporuje z\u00e1kladn\u00ed operace dotazu bloku, jako je nap\u0159\u00edklad dotaz na po\u010det transakc\u00ed pro tento blok.<\/p>\n<p><b>Poj\u010fme na to!<\/b><\/p>\n<p>Nejprve vytvo\u0159te nov\u00fd kontrakt v <noindex><a rel=\"nofollow\" href=\"https:\/\/smartx.ont.io\/#\">SmartX<\/a><\/noindex>, a pot\u00e9 se \u0159i\u010fte n\u00ed\u017ee uveden\u00fdmi pokyny.<br \/>\n <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>1. Jak pou\u017e\u00edvat Blockchain API<\/h3>\n<p>\nOdkazy na funkce smart kontrakt\u016f jsou toto\u017en\u00e9 s odkazy v Pythonu. M\u016f\u017eete zad\u00e1vat p\u0159\u00edslu\u0161n\u00e9 funkce podle pot\u0159eby. Nap\u0159\u00edklad n\u00e1sleduj\u00edc\u00ed instrukce zav\u00e1d\u00ed GetHeight \u2013 funkci pro z\u00edsk\u00e1n\u00ed aktu\u00e1ln\u00ed v\u00fd\u0161ky bloku a GetHeader \u2013 funkci pro z\u00edsk\u00e1n\u00ed hlavi\u010dky bloku.<\/p>\n<pre><code class=\"python\">from ontology.interop.System.Blockchain import GetHeight, GetHeader<\/code><\/pre>\n<p><\/p>\n<h4>GetHeight<\/h4>\n<p>\nGetHeight slou\u017e\u00ed ke z\u00edsk\u00e1n\u00ed posledn\u00edho po\u0159adov\u00e9ho \u010d\u00edsla bloku v blockchainu, jak je uk\u00e1z\u00e1no v n\u00e1sleduj\u00edc\u00edm p\u0159\u00edkladu. V posledn\u00edm p\u0159\u00edkladu pro p\u0159ehlednost p\u0159esko\u010d\u00edme funkci Main, ale m\u016f\u017eete ji p\u0159idat, pokud to bude pot\u0159eba.<\/p>\n<pre><code class=\"python\">from ontology.interop.System.Runtime import Notify\nfrom ontology.interop.System.Blockchain import GetHeight\ndef Main(operation):\n    if operation == 'demo':\n        return demo()\n    return False\n\ndef demo():\n    height=GetHeight()\n    Notify(height) # print height\n    return height #return height after running the function<\/code><\/pre>\n<p><\/p>\n<h4>GetHeader<\/h4>\n<p>\nGetHeader slou\u017e\u00ed ke z\u00edsk\u00e1n\u00ed hlavi\u010dky bloku, parametrem je po\u0159adov\u00e9 \u010d\u00edslo bloku v blockchainu. P\u0159\u00edklad:<\/p>\n<pre><code class=\"python\">from ontology.interop.System.Runtime import Notify\nfrom ontology.interop.System.Blockchain import GetHeader\ndef demo():\n    block_height=10\n    header=GetHeader(block_height) \n    Notify(header)\nreturn header<\/code><\/pre>\n<p><\/p>\n<h4>GetTransactionByHash<\/h4>\n<p>\nGetTransactionByHash slou\u017e\u00ed ke z\u00edsk\u00e1n\u00ed transakce pomoc\u00ed hash transakce. Hash transakce se pos\u00edl\u00e1 do <i>GetTransactionByHash <\/i>jako parametry v form\u00e1tu bytearray. Kl\u00ed\u010dem k t\u00e9to funkci je p\u0159evod hash transakce z hex form\u00e1tu na hash transakce v form\u00e1tu bytearray. To je d\u016fle\u017eit\u00fd krok. Jinak dostanete chybu, kter\u00e1 nazna\u010duje, \u017ee neexistuje blok s t\u00edmto hash bloku. Poj\u010fme vz\u00edt hash transakce v hex form\u00e1tu jako p\u0159\u00edklad, abychom jej p\u0159evedli do form\u00e1tu bytearray. P\u0159\u00edklad vypad\u00e1 takto:<\/p>\n<pre><code class=\"python\">9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1<\/code><\/pre>\n<p>\nNejprve oto\u010dte hash transakce:<\/p>\n<pre><code class=\"python\">c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279<\/code><\/pre>\n<p>\nV\u00fdvoj\u00e1\u0159i mohou tento krok prov\u00e9st pomoc\u00ed n\u00e1stroje pro konverzi Hex Number (little endian) Number, kter\u00fd poskytuje SmartX.<\/p>\n<p>Pak p\u0159evedete z\u00edskan\u00fd v\u00fdsledek na form\u00e1t bytearray:<\/p>\n<pre><code class=\"python\">{0xc1,0x89,0x0c,0x4d,0x73,0x06,0x26,0xdf,0xaa,0x94,0x49,0x41,0x9d,0x66,0x25,0x05,0xea,0xb3,0xbd,0xa2,0xe1,0xf0,0x1f,0x89,0x46,0x3c,0xc1,0xa4,0xa3,0x0a,0x27,0x9f}<\/code><\/pre>\n<p>\nTo lze prov\u00e9st pomoc\u00ed n\u00e1stroje pro konverzi String Byte Array, kter\u00fd poskytuje SmartX. Nakonec p\u0159evedete z\u00edskan\u00fd bytearray na podobn\u00fd \u0159et\u011bzec:<\/p>\n<pre><code class=\"python\">xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f<\/code><\/pre>\n<p>\nN\u00ed\u017ee je p\u0159\u00edklad funkce GetTransactionByHash, kter\u00e1 z\u00edsk\u00e1 transakci podle hashe transakce:<\/p>\n<pre><code class=\"python\">from ontology.interop.System.Blockchain import GetTransactionByHash\ndef demo():\n    # tx_hash=\"9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1\"    \n    tx_hash=bytearray(b\"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f\")\n    tx=GetTransactionByHash(tx_hash)\n    return tx<\/code><\/pre>\n<h4>GetTransactionHeight<\/h4>\n<p>\nGetTransactionHeight se pou\u017e\u00edv\u00e1 k z\u00edsk\u00e1n\u00ed v\u00fd\u0161ky transakce podle hashe transakce. Poj\u010fme vz\u00edt hash z p\u0159\u00edkladu v\u00fd\u0161e:<\/p>\n<pre><code class=\"python\">from ontology.interop.System.Blockchain import  GetTransactionHeight\ndef demo():\n    #   tx_hash=\"9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1\"    \n    tx_hash=bytearray(b\"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f\")\n    height=GetTransactionHeight(tx_hash)\n    return height<\/code><\/pre>\n<p><\/p>\n<h4>GetContract<\/h4>\n<p>\nV\u00fdvoj\u00e1\u0159i mohou pou\u017e\u00edt funkci GetContract, aby z\u00edskali kontrakt podle hashe kontraktu. Proces konverze hashe kontraktu je obdobn\u00fd procesu konverze hashe transakce, jak bylo zm\u00edn\u011bno v\u00fd\u0161e.<\/p>\n<pre><code class=\"python\">from ontology.interop.System.Blockchain import GetContract\ndef demo():\n    # contract_hash=\"d81a75a5ff9b95effa91239ff0bb3232219698fa\"    \n    contract_hash=bytearray(b\"xfax98x96x21x32x32xbbxf0x9fx23x91xfaxefx95x9bxffxa5x75x1axd8\")\n    contract=GetContract(contract_hash)\n    return contract<\/code><\/pre>\n<p><\/p>\n<h4>GetBlock<\/h4>\n<p>\nGetBlock se pou\u017e\u00edv\u00e1 k z\u00edsk\u00e1n\u00ed bloku. Existuj\u00ed dva zp\u016fsoby, jak z\u00edskat konkr\u00e9tn\u00ed blok.<\/p>\n<p><b>1. Z\u00edskat blok podle v\u00fd\u0161ky bloku:<\/b><\/p>\n<pre><code class=\"python\">from ontology.interop.System.Blockchain import GetBlock\ndef demo():\n    block=GetBlock(1408)\n    return block<\/code><\/pre>\n<p>\n<b>2. Z\u00edskat blok podle hashe bloku:<\/b><\/p>\n<pre><code class=\"python\">from ontology.interop.System.Blockchain import GetBlock\ndef demo():    \n    block_hash=bytearray(b'x16xe0xc5x40x82x79x77x30x44xeax66xc8xc4x5dx17xf7x17x73x92x33x6dx54xe3x48x46x0bxc3x2fxe2x15x03xe4')\n    block=GetBlock(block_hash)<\/code><\/pre>\n<p><\/p>\n<h3>2. Jak pou\u017e\u00edvat Block API<\/h3>\n<p>\nExistuj\u00ed t\u0159i dostupn\u00e9 funkce v Block API: <i>GetTransactions<\/i>, <i>GetTransactionCount<\/i>, a <i>GetTransactionByIndex<\/i>. Prozkoum\u00e1me je jednu po druh\u00e9.<\/p>\n<h4>GetTransactionCount<\/h4>\n<p>\nGetTransactionCount se pou\u017e\u00edv\u00e1 k z\u00edsk\u00e1n\u00ed po\u010dtu transakc\u00ed pro dan\u00fd blok.<\/p>\n<pre><code class=\"python\">from ontology.interop.System.Blockchain import GetBlock\nfrom ontology.interop.System.Block import GetTransactionCount\ndef demo():\n    block=GetBlock(1408)\n    count=GetTransactionCount(block)\n    return count<\/code><\/pre>\n<p><\/p>\n<h3>GetTransactions<\/h3>\n<p>\nV\u00fdvoj\u00e1\u0159i mohou pou\u017e\u00edt funkci GetTransactions k z\u00edsk\u00e1n\u00ed v\u0161ech transakc\u00ed v dan\u00e9m bloku.<\/p>\n<pre><code class=\"python\">from ontology.interop.System.Blockchain import GetBlock\nfrom ontology.interop.System.Block import GetTransactions \ndef demo():\n    block=GetBlock(1408)\n    txs=GetTransactions(block)\n    return txs<\/code><\/pre>\n<p><\/p>\n<h4>GetTransactionByIndex<\/h4>\n<p>\nGetTransactionByIndex se pou\u017e\u00edv\u00e1 k z\u00edsk\u00e1n\u00ed konkr\u00e9tn\u00ed transakce v dan\u00e9m bloku.<\/p>\n<pre><code class=\"python\">from ontology.interop.System.Blockchain import GetBlock\nfrom ontology.interop.System.Block import GetTransactionByIndex\ndef demo():\n    block=GetBlock(1408)\n    tx=GetTransactionByIndex(block,0) # index za\u010d\u00edn\u00e1 od 0.\n    return tx<\/code><\/pre>\n<p>\n\u00dapln\u00e9ho pr\u016fvodce najdete na na\u0161em <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/punicasuite\/tutorials\/blob\/master\/smart-contracts-docs-cn\/course04_use_blockchain_api_in_smart_contract.md\">GitHub<\/a><\/noindex>.<\/p>\n<h3>Pozn\u00e1mka na z\u00e1v\u011br<\/h3>\n<p>\nBlockchain &amp; Block API je nezbytnou sou\u010d\u00e1st\u00ed chytr\u00fdch smluv, proto\u017ee je m\u016f\u017eete pou\u017e\u00edt k dotazov\u00e1n\u00ed na data blockchainu a data bloku v chytr\u00fdch smlouv\u00e1ch. V n\u00e1sleduj\u00edc\u00edch \u010dl\u00e1nc\u00edch probereme, jak pou\u017e\u00edvat ostatn\u00ed API a zjist\u00edme jejich interakci s blockchainem Ontology.<\/p>\n<blockquote><p>\u010cl\u00e1nek byl p\u0159elo\u017een redakc\u00ed Hashrate&amp;Shares speci\u00e1ln\u011b pro OntologyRussia. <noindex><a rel=\"nofollow\" href=\"https:\/\/hashrate-and-shares.ru\/kak-razrabotat-smart-kontrakt-s-pomoshchyu-python-v-seti-ontology-chast-pervaya\">klikn\u011bte<\/a><\/noindex> <\/p><\/blockquote>\n<p> Jste v\u00fdvoj\u00e1\u0159? P\u0159ipojte se k na\u0161\u00ed technick\u00e9 komunit\u011b na <noindex><a rel=\"nofollow\" href=\"https:\/\/discord.gg\/4TQujHj\">Discord<\/a><\/noindex>. Nav\u00edc se pod\u00edvejte na <noindex><a rel=\"nofollow\" href=\"https:\/\/developer.ont.io\/\">Centrum pro v\u00fdvoj\u00e1\u0159e<\/a><\/noindex> na na\u0161ich str\u00e1nk\u00e1ch, kde m\u016f\u017eete naj\u00edt n\u00e1stroje pro v\u00fdvoj\u00e1\u0159e, dokumentaci a mnohem v\u00edce.<\/p>\n<h4>Ontology<\/h4>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ont.io\/\">webov\u00e1 str\u00e1nka Ontology<\/a><\/noindex> <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ontio\/\">GitHub<\/a><\/noindex> \/ <noindex><a rel=\"nofollow\" href=\"https:\/\/discord.gg\/pQRHtbD\">Discord<\/a><\/noindex><\/li>\n<li>Telegram <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/OntologyNetwork\">Angli\u010dtina<\/a><\/noindex> \/ <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/OntologyAnnouncementsRu\">Ru\u0161tina<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/OntologyNetwork\">Twitter <\/a><\/noindex> \/ <noindex><a rel=\"nofollow\" href=\"https:\/\/www.reddit.com\/r\/OntologyNetwork\/\">Reddit <\/a><\/noindex><\/li>\n<\/ul>\n<p>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/474966\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042d\u0442\u043e \u043f\u0435\u0440\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u0441\u0435\u0440\u0438\u0438 \u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u0435\u0439 \u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 \u043d\u0430 Python \u0432 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d \u0441\u0435\u0442\u0438 Ontology \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 SmartX. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043d\u0430\u0447\u043d\u0451\u043c \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e \u0441 API \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 Ontology. API \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 Ontology \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d \u043d\u0430 7 \u043c\u043e\u0434\u0443\u043b\u0435\u0439: Blockchain &amp; Block API, Runtime API, Storage API, Native API, Upgrade API, Execution Engine API \u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":52507,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-52506","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\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\/cs\/blog\/administrirovanie\/kak-napisat-smart-kontrakt-na-python-v-seti-ontology-chast-1-blockchain-block-api\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\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\udd47\u041a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u043d\u0430 Python \u0432 \u0441\u0435\u0442\u0438 Ontology. \u0427\u0430\u0441\u0442\u044c 1: Blockchain &amp; Block API | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/kak-napisat-smart-kontrakt-na-python-v-seti-ontology-chast-1-blockchain-block-api\" \/>\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-11-09T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:00:15+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\udd47Jak napsat chytrou smlouvu v Pythonu na s\u00edti Ontology. \u010c\u00e1st 1: Blockchain &amp; Block API | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/kak-napisat-smart-kontrakt-na-python-v-seti-ontology-chast-1-blockchain-block-api","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","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\udd47\u041a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u043d\u0430 Python \u0432 \u0441\u0435\u0442\u0438 Ontology. \u0427\u0430\u0441\u0442\u044c 1: Blockchain &amp; Block API | ProHoster","og:url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/kak-napisat-smart-kontrakt-na-python-v-seti-ontology-chast-1-blockchain-block-api","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-11-09T21:00:00+00:00","article:modified_time":"2020-02-18T11:00:15+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"52506","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-24 03:50:21","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:42:42","updated":"2026-01-24 03:50:21","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/52506","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=52506"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/52506\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/52507"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=52506"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=52506"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=52506"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}