{"id":8865,"date":"2025-02-22T12:06:38","date_gmt":"2025-02-22T11:06:38","guid":{"rendered":"https:\/\/wsj-crypto.com\/?p=8865"},"modified":"2025-02-22T12:06:38","modified_gmt":"2025-02-22T11:06:38","slug":"hive-our-journey-towards-a-pristine-fork","status":"publish","type":"post","link":"https:\/\/wsj-crypto.com\/index.php\/2025\/02\/22\/hive-our-journey-towards-a-pristine-fork\/","title":{"rendered":"Hive: Our Journey Towards a Pristine Fork"},"content":{"rendered":"<p><\/p>\n<div id=\"\">\n<p class=\"chakra-text css-gi02ar\">The DAO soft-fork endeavor proved to be challenging. Not only did we misjudge the repercussions on the consensus protocol (i.e. DoS vulnerability), but we also inadvertently introduced a data race into the hurried implementation that was a potential disaster waiting to occur. It was less than optimal, and although mitigated at the last moment, the rapidly approaching hard-fork deadline appeared quite grim, to say the least. We required a fresh approach&#8230;<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">The initial step toward this was an idea adapted from Google (thanks to Nick Johnson): crafting a thorough <!-- --><em class=\"chakra-text css-0\">postmortem<!-- --><\/em> of the incident, aiming to evaluate the fundamental causes of the problem, concentrating exclusively on the technical aspects and suitable measures to prevent a reoccurrence.<!-- --><\/p>\n<p><!-- --><\/p>\n<blockquote class=\"chakra-code css-1cl98my\"><p><i><span style=\"font-weight:400\">Technical resolutions can scale and endure; attributing blame does not. ~ Nick<!-- --><\/span><\/i><\/p><\/blockquote>\n<p>From the postmortem, one fascinating finding from the viewpoint of this blog entry was revealed. The soft-fork code within [go-ethereum](https:\/\/github.com\/ethereum\/go-ethereum) appeared robust from all angles: a) it was comprehensively covered by unit tests with a 3:1 test-to-code ratio; b) it underwent meticulous review by six foundation developers; and c) it was even manually live tested on a private network&#8230; Yet, a critical data race persisted, which could have potentially instigated severe network disruption.<br \/>\n<!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">It was discovered that the defect could only manifest in a network composed of multiple nodes, multiple miners, and multiple blocks being created concurrently. Even if all these conditions were met, there remained only a slight probability for the bug to appear. Unit tests failed to catch it, code reviewers might overlook it, and manual testing would likely miss it as well. Our conclusion was that the development teams required additional tools to conduct reproducible tests that would encapsulate the intricate interactions of multiple nodes in a simultaneous networked scenario. Lacking such a tool, manually verifying the various edge cases becomes cumbersome; and without conducting these checks continuously as part of the development cycle, rare errors would be nearly impossible to uncover in time.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Thus, <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/karalabe\/hive\">hive<!-- --><\/a> was conceived&#8230;<!-- --><\/p>\n<p><!-- --><\/p>\n<h2 class=\"chakra-heading css-1w54o5f\" id=\"what-is-hive\">What is hive?<!-- --><\/h2>\n<p>Ethereum expanded to the extent that testing implementations became a significant burden. Unit tests are suitable for examining various implementation idiosyncrasies, but validating that a client adheres to a certain baseline quality, or ensuring that clients can operate harmoniously in a multi-client environment, is far from straightforward.<br \/>\n<!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\"><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/karalabe\/hive\">Hive<!-- --><\/a> is designed to function as an easily extendable test harness where <!-- --><strong>anyone<!-- --><\/strong> can contribute tests (whether they are simple validations or network simulations) in <!-- --><strong>any<!-- --><\/strong> programming language of their preference, with hive capable of simultaneously executing those tests against <!-- --><strong>all<!-- --><\/strong> potential clients. Consequently, the harness is intended for black box testing where no client-specific internal details\/state can be tested or examined; rather, the emphasis is placed on compliance with official specifications or behaviors under varying circumstances.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\"><em class=\"chakra-text css-0\">Most critically, hive was crafted from the ground up to operate as part of any client&#8217;s CI workflow!<!-- --><\/em><\/p>\n<p><!-- --><\/p>\n<h2 class=\"chakra-heading css-1w54o5f\" id=\"how-does-hive-work\">How does hive work?<!-- --><\/h2>\n<p>Hive&#8217;s essence is [docker](https:\/\/www.docker.com\/). Each client implementation is a docker image; every validation suite is a docker image; and each network simulation is a docker image. Hive itself is an all-encompassing docker image. This is a highly effective abstraction&#8230;<br \/>\n<!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Since <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/karalabe\/hive#adding-new-clients\">Ethereum clients<!-- --><\/a> are docker images within hive, client developers can construct the optimal environment for their clients to operate in (in terms of dependencies, tools, and configuration). Hive will initiate as many instances as necessary, all of which run in their own Linux systems.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Likewise, as <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/karalabe\/hive#adding-new-validators\">test suites<!-- --><\/a> that validate Ethereum clients are docker images, the author of the tests can utilize any programming environment they are most proficient in. Hive will ensure that a client is operational when it activates the tester, who can then verify if the specific client adheres to the desired behavior.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Finally, <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/karalabe\/hive#adding-new-simulators\">network simulations<!-- --><\/a> are once more defined by docker images, but unlike simple tests, simulators not only execute code against a functioning client but can also initiate and terminate clients as necessary. These clients operate within the same virtual network and can connect with one another freely (or as governed by the simulator container), forming an on-demand private Ethereum network.<!-- --><\/p>\n<p><!-- --><\/p>\n<h2 class=\"chakra-heading css-1w54o5f\" id=\"how-did-hive-aidthe-fork\">How did hive assist the fork?<!-- --><\/h2>\n<p>Hive is neither a substitute for unit testing nor for thorough evaluations. All currently practiced methods are crucial to achieving a clean implementation of any feature. Hive can offer validation that extends beyond what is practical from an average developer&#8217;s viewpoint: executing extensive tests that may necessitate complex execution settings; and examining networking edge cases that could take hours to establish.<br \/>\n<!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">In the context of the DAO hard-fork, in addition to all the consensus and unit tests, it was imperative to ensure, most importantly, that nodes partitioned correctly into two subsets at the networking level: one supporting and one opposing the fork. This was vital as it is impossible to foresee what detrimental effects running two competing chains within one network might incur, especially from the minority&#8217;s standpoint.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Consequently, we implemented three specific network simulations in hive:<!-- --><\/p>\n<p><!-- --><\/p>\n<ul role=\"list\" class=\"css-1onhfjo\">\n<li class=\"css-cvpopp\">\n<!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\"><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/karalabe\/hive\/tree\/master\/simulators\/dao-hard-fork\/extradata\">The first<!-- --><\/a> to verify that miners creating the full Ethash DAGs generate correct block extra-data fields for both pro-forkers and no-forkers, even when trying to deceptively spoof.<!-- --><\/p>\n<p><!-- --><\/li>\n<li class=\"css-cvpopp\">\n<!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\"><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/karalabe\/hive\/tree\/master\/simulators\/dao-hard-fork\/network-split\">The second<!-- --><\/a> to confirm that a network composed of mixed pro-fork and no-fork nodes\/miners accurately splits into two upon the arrival of the fork block, also maintaining the separation thereafter.<!-- --><\/p>\n<p><!-- --><\/li>\n<li class=\"css-cvpopp\">\n<!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\"><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/karalabe\/hive\/tree\/master\/simulators\/dao-hard-fork\/synchronisation\">The third<!-- --><\/a> to verify that given an already forked network, newly joining nodes can synchronize, fast sync, and light sync with the\u00a0chain they prefer.<!-- --><\/p>\n<p><!-- --><\/li>\n<\/ul>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">The intriguing question, however, is: did hive genuinely detect any mistakes, or did it merely serve as an additional assurance that everything was functioning properly? The\u00a0response is, <!-- --><em class=\"chakra-text css-0\">both<!-- --><\/em>. Hive identified <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/karalabe\/hive#trophies\">three fork-unrelated bugs<!-- --><\/a> in Geth but also significantly contributed to Geth&#8217;s hard-fork development by constantly offering feedback on how adjustments influenced network dynamics.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">There was some critique of\u00a0the\u00a0go-ethereum team for taking their time\u00a0on the hard-fork execution. Hopefully, individuals will now comprehend what we were engaged in, meanwhile\u00a0executing the fork itself. Overall, I believe <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/karalabe\/hive\">hive<!-- --><\/a> ended up playing a quite significant role in the cleanliness of this\u00a0transition.<!-- --><\/p>\n<p><!-- --><\/p>\n<h2 class=\"chakra-heading css-1w54o5f\" id=\"what-is-hives-future\">What does the future hold for hive?<!-- --><\/h2>\n<p>The Ethereum GitHub organization presents [4 test tools already](https:\/\/github.com\/ethereum?utf8=%E2%9C%93&amp;query=test), with at least one EVM benchmarking tool being developed in some external\u00a0repository. They are not being leveraged to their full potential. They possess numerous dependencies, produce a great deal of clutter, and are notably complex to operate.<br \/>\n<!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">With hive, we intend to consolidate all the diverse scattered tests under one <!-- --><em class=\"chakra-text css-0\">universal client validator<!-- --><\/em> that has minimal dependencies, can be enhanced by anyone, and can function as part of the daily\u00a0CI workflow of client developers.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">We invite everyone to contribute to the project, whether that includes adding new clients for validation, validators for testing, or simulators to uncover intriguing networking challenges. In the meantime, we\u2019ll strive to further refine hive itself, incorporating support for running benchmarks as well as mixed-client simulations.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">With some effort, perhaps we&#8217;ll even achieve support for executing hive in the cloud, enabling it to perform network simulations at a much more compelling scale.<!-- --><\/p>\n<p><!-- --><br \/>\n<!-- --><\/div>\n<p><br \/>\n<br \/><a href=\"https:\/\/blog.ethereum.org\/en\/2016\/07\/22\/hive-strived-clean-fork\">Source link <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The DAO soft-fork endeavor proved to be challenging. Not only did we misjudge the repercussions on the consensus protocol (i.e. DoS vulnerability), but we also inadvertently introduced a data race into the hurried implementation that was a potential disaster waiting to occur. It was less than optimal, and although mitigated at the last moment, the<\/p>\n","protected":false},"author":3,"featured_media":8282,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23],"tags":[1406],"class_list":["post-8865","post","type-post","status-publish","format-standard","has-post-thumbnail","category-ethereum","tag-return-a-list-of-comma-separated-tags-from-this-title-hive-how-we-strived-for-a-clean-fork"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Hive: Our Journey Towards a Pristine Fork - WSJ-Crypto<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wsj-crypto.com\/index.php\/2025\/02\/22\/hive-our-journey-towards-a-pristine-fork\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Hive: Our Journey Towards a Pristine Fork - WSJ-Crypto\" \/>\n<meta property=\"og:description\" content=\"The DAO soft-fork endeavor proved to be challenging. Not only did we misjudge the repercussions on the consensus protocol (i.e. DoS vulnerability), but we also inadvertently introduced a data race into the hurried implementation that was a potential disaster waiting to occur. It was less than optimal, and although mitigated at the last moment, the\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wsj-crypto.com\/index.php\/2025\/02\/22\/hive-our-journey-towards-a-pristine-fork\/\" \/>\n<meta property=\"og:site_name\" content=\"WSJ-Crypto\" \/>\n<meta property=\"article:published_time\" content=\"2025-02-22T11:06:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2025\/02\/eth-org.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"2100\" \/>\n\t<meta property=\"og:image:height\" content=\"900\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"wsjcrypto\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"wsjcrypto\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/wsj-crypto.com\/index.php\/2025\/02\/22\/hive-our-journey-towards-a-pristine-fork\/\",\"url\":\"https:\/\/wsj-crypto.com\/index.php\/2025\/02\/22\/hive-our-journey-towards-a-pristine-fork\/\",\"name\":\"Hive: Our Journey Towards a Pristine Fork - WSJ-Crypto\",\"isPartOf\":{\"@id\":\"https:\/\/wsj-crypto.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/wsj-crypto.com\/index.php\/2025\/02\/22\/hive-our-journey-towards-a-pristine-fork\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/wsj-crypto.com\/index.php\/2025\/02\/22\/hive-our-journey-towards-a-pristine-fork\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2025\/02\/eth-org.jpeg\",\"datePublished\":\"2025-02-22T11:06:38+00:00\",\"author\":{\"@id\":\"https:\/\/wsj-crypto.com\/#\/schema\/person\/88a93723b30416db1a352d5a0096c4a7\"},\"breadcrumb\":{\"@id\":\"https:\/\/wsj-crypto.com\/index.php\/2025\/02\/22\/hive-our-journey-towards-a-pristine-fork\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/wsj-crypto.com\/index.php\/2025\/02\/22\/hive-our-journey-towards-a-pristine-fork\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/wsj-crypto.com\/index.php\/2025\/02\/22\/hive-our-journey-towards-a-pristine-fork\/#primaryimage\",\"url\":\"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2025\/02\/eth-org.jpeg\",\"contentUrl\":\"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2025\/02\/eth-org.jpeg\",\"width\":2100,\"height\":900},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/wsj-crypto.com\/index.php\/2025\/02\/22\/hive-our-journey-towards-a-pristine-fork\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/wsj-crypto.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Hive: Our Journey Towards a Pristine Fork\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/wsj-crypto.com\/#website\",\"url\":\"https:\/\/wsj-crypto.com\/\",\"name\":\"WSJ-Crypto\",\"description\":\"Just Another Crypto News Website\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/wsj-crypto.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/wsj-crypto.com\/#\/schema\/person\/88a93723b30416db1a352d5a0096c4a7\",\"name\":\"wsjcrypto\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/wsj-crypto.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/86fe8af82ea089646d6639ca2f87e0243d8688d957bd8e3ec22ec3c457cc16d4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/86fe8af82ea089646d6639ca2f87e0243d8688d957bd8e3ec22ec3c457cc16d4?s=96&d=mm&r=g\",\"caption\":\"wsjcrypto\"},\"url\":\"https:\/\/wsj-crypto.com\/index.php\/author\/wsjcrypto\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Hive: Our Journey Towards a Pristine Fork - WSJ-Crypto","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wsj-crypto.com\/index.php\/2025\/02\/22\/hive-our-journey-towards-a-pristine-fork\/","og_locale":"it_IT","og_type":"article","og_title":"Hive: Our Journey Towards a Pristine Fork - WSJ-Crypto","og_description":"The DAO soft-fork endeavor proved to be challenging. Not only did we misjudge the repercussions on the consensus protocol (i.e. DoS vulnerability), but we also inadvertently introduced a data race into the hurried implementation that was a potential disaster waiting to occur. It was less than optimal, and although mitigated at the last moment, the","og_url":"https:\/\/wsj-crypto.com\/index.php\/2025\/02\/22\/hive-our-journey-towards-a-pristine-fork\/","og_site_name":"WSJ-Crypto","article_published_time":"2025-02-22T11:06:38+00:00","og_image":[{"width":2100,"height":900,"url":"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2025\/02\/eth-org.jpeg","type":"image\/jpeg"}],"author":"wsjcrypto","twitter_card":"summary_large_image","twitter_misc":{"Scritto da":"wsjcrypto","Tempo di lettura stimato":"6 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/wsj-crypto.com\/index.php\/2025\/02\/22\/hive-our-journey-towards-a-pristine-fork\/","url":"https:\/\/wsj-crypto.com\/index.php\/2025\/02\/22\/hive-our-journey-towards-a-pristine-fork\/","name":"Hive: Our Journey Towards a Pristine Fork - WSJ-Crypto","isPartOf":{"@id":"https:\/\/wsj-crypto.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/wsj-crypto.com\/index.php\/2025\/02\/22\/hive-our-journey-towards-a-pristine-fork\/#primaryimage"},"image":{"@id":"https:\/\/wsj-crypto.com\/index.php\/2025\/02\/22\/hive-our-journey-towards-a-pristine-fork\/#primaryimage"},"thumbnailUrl":"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2025\/02\/eth-org.jpeg","datePublished":"2025-02-22T11:06:38+00:00","author":{"@id":"https:\/\/wsj-crypto.com\/#\/schema\/person\/88a93723b30416db1a352d5a0096c4a7"},"breadcrumb":{"@id":"https:\/\/wsj-crypto.com\/index.php\/2025\/02\/22\/hive-our-journey-towards-a-pristine-fork\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wsj-crypto.com\/index.php\/2025\/02\/22\/hive-our-journey-towards-a-pristine-fork\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/wsj-crypto.com\/index.php\/2025\/02\/22\/hive-our-journey-towards-a-pristine-fork\/#primaryimage","url":"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2025\/02\/eth-org.jpeg","contentUrl":"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2025\/02\/eth-org.jpeg","width":2100,"height":900},{"@type":"BreadcrumbList","@id":"https:\/\/wsj-crypto.com\/index.php\/2025\/02\/22\/hive-our-journey-towards-a-pristine-fork\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wsj-crypto.com\/"},{"@type":"ListItem","position":2,"name":"Hive: Our Journey Towards a Pristine Fork"}]},{"@type":"WebSite","@id":"https:\/\/wsj-crypto.com\/#website","url":"https:\/\/wsj-crypto.com\/","name":"WSJ-Crypto","description":"Just Another Crypto News Website","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wsj-crypto.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Person","@id":"https:\/\/wsj-crypto.com\/#\/schema\/person\/88a93723b30416db1a352d5a0096c4a7","name":"wsjcrypto","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/wsj-crypto.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/86fe8af82ea089646d6639ca2f87e0243d8688d957bd8e3ec22ec3c457cc16d4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/86fe8af82ea089646d6639ca2f87e0243d8688d957bd8e3ec22ec3c457cc16d4?s=96&d=mm&r=g","caption":"wsjcrypto"},"url":"https:\/\/wsj-crypto.com\/index.php\/author\/wsjcrypto\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/posts\/8865","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/comments?post=8865"}],"version-history":[{"count":2,"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/posts\/8865\/revisions"}],"predecessor-version":[{"id":8867,"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/posts\/8865\/revisions\/8867"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/media\/8282"}],"wp:attachment":[{"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/media?parent=8865"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/categories?post=8865"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/tags?post=8865"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}