Help
RSS
API
Feed
Maltego
Contact
Domain > ryanlucchese.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2024-01-08
65.8.66.52
(
ClassC
)
2026-01-05
3.163.24.44
(
ClassC
)
Port 80
HTTP/1.1 301 Moved PermanentlyServer: CloudFrontDate: Mon, 05 Jan 2026 21:38:10 GMTContent-Type: text/htmlContent-Length: 167Connection: keep-aliveLocation: https://ryanlucchese.com/X-Cache: Redirect from cloudfrontVia: 1.1 cadda06365c5592c0d0a272a3fe5825e.cloudfront.net (CloudFront)X-Amz-Cf-Pop: HIO52-P2X-Amz-Cf-Id: -WuBX8HXOnpzwY072JaUhiBNI1qgLEmixFItGRipyY4EgnyNWb3P9g html>head>title>301 Moved Permanently/title>/head>body>center>h1>301 Moved Permanently/h1>/center>hr>center>CloudFront/center>/body>/html>
Port 443
HTTP/1.1 200 OKContent-Type: text/htmlContent-Length: 24491Connection: keep-aliveLast-Modified: Wed, 14 Jun 2023 20:06:00 GMTx-amz-server-side-encryption: AES256Accept-Ranges: bytesServer: AmazonS3Date: Mon, 05 Jan 2026 21:38:11 GMTETag: 9fb8e82c510c310ef07c27461ead2e0bX-Cache: RefreshHit from cloudfrontVia: 1.1 182d3a3dbb6658c964ee75cd45a42242.cloudfront.net (CloudFront)X-Amz-Cf-Pop: HIO52-P2X-Amz-Cf-Id: L12Vx8axrWcMzu_Bcwazk9uN40JfA4_Zs96Pg1fkiKPpphOSw7Nxsw !DOCTYPE html>html langen>head>title>Ryan Lucchese's Blog/title>link relstylesheet hrefhttps://cdn.jsdelivr.net/npm/katex@0.16.0/dist/katex.css crossoriginanonymous/>script defer srchttps://cdn.jsdelivr.net/npm/katex@0.16.0/dist/katex.js crossoriginanonymous>/script>script defer srchttps://cdn.jsdelivr.net/npm/katex@0.16.0/dist/contrib/auto-render.min.js crossoriginanonymous>/script>link relapple-touch-icon sizes180x180 href/icons/apple-touch-icon.png/>link relicon typeimage/png sizes32x32 href/icons/favicon-32x32.png/>link relicon typeimage/png sizes16x16 href/icons/favicon-16x16.png/>link relmanifest href/icons/site.webmanifest/>link relcanonical hrefhttps://ryanlucchese.com//>meta charSetutf-8/>meta nameHandheldFriendly contentTrue/>meta namedescription contentCrypto, Mathematics, Physics, AI/>meta nameviewport contentwidthdevice-width, initial-scale1/>meta namereferrer contentno-referrer-when-downgrade/>meta propertyog:site_name contentRyan Lucchese's Blog/>meta propertyog:type contentwebsite/>meta propertyog:title contentRyan Lucchese's Blog/>meta propertyog:description contentCrypto, Mathematics, Physics, AI/>meta propertyog:url contenthttps://ryanlucchese.com//>meta propertyarticle:publisher contenthttps://ryanlucchese.com/>meta nametwitter:card contentsummary/>meta nametwitter:title contentRyan Lucchese's Blog/>meta nametwitter:description contentCrypto, Mathematics, Physics, AI/>meta nametwitter:url contenthttps://ryanlucchese.com//>meta nametwitter:site content@RyanLucchese/>meta namenext-head-count content25/>link relpreload href/_next/static/css/0683635860dda314.css asstyle/>link relstylesheet href/_next/static/css/0683635860dda314.css data-n-g/>noscript data-n-css>/noscript>script defer nomodule src/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js>/script>script src/_next/static/chunks/webpack-8fa1640cc84ba8fe.js defer>/script>script src/_next/static/chunks/framework-2c79e2a64abdb08b.js defer>/script>script src/_next/static/chunks/main-afcb614f683e96d4.js defer>/script>script src/_next/static/chunks/pages/_app-70d58eb909199b8c.js defer>/script>script src/_next/static/chunks/135-351ec1f3da6edf44.js defer>/script>script src/_next/static/chunks/90-9c8fedd6dcf00ff6.js defer>/script>script src/_next/static/chunks/pages/index-2c545b806e23d511.js defer>/script>script src/_next/static/YKLeX8NN7sS8Up56Xr2za/_buildManifest.js defer>/script>script src/_next/static/YKLeX8NN7sS8Up56Xr2za/_ssgManifest.js defer>/script>/head>body>div id__next>div classbg-white flex flex-col h-screen justify-between>header classbg-grey text-white w-full bg-url('/stone_tile_4.png')>div classflex justify-center bg-gradient-to-br from-black to-grey opacity-80>div classflex justify-between w-full lg:w-61.8% h-48 px-2 lg:px-0>div classflex-none my-auto>a href/>h1 classtext-xl lg:text-4xl font-bold>Ryan Lucchese's Blog/h1>/a>hr/>h2 classtext-sm lg:text-md>Crypto, Mathematics, Physics, AI/h2>/div>div classflex-2 my-auto>div classgrid grid-cols-2>div> a classtext-xl font-bold hover:text-darkwhite href/>Home/a>/div>div> a classtext-xl font-bold hover:text-darkwhite href/about/index.html>About/a>/div>/div>/div>/div>/div>/header>main classflex justify-center py-5 px-2>div classflex flex-col w-full lg:justify-center lg:w-61.8%>div classrounded-md px-5 py-5 my-5 lg:w-full lg:px-0>div classmy-1>a href/posts/blockchain-difficulty-mathematics/index.html>h1 classtext-3xl underline font-bold my-1>Blockchain Difficulty Algorithms - Part 2: Mathematics/h1>/a>div classflex flex-row justify-between>div>p>by !-- -->Ryan Lucchese/p>/div>div classtext-sm text-grey>p>2/14/2023/p>p>3!-- --> minute read/p>/div>/div>p classtext-md>span classfont-bold>Tags: /span>Blockchain, !-- -->Crypto, !-- -->Energi, !-- -->Math/p>div>div classprose lg:max-w-none my-1>In Part 1 of this series, we described the basic ideas of what a difficulty algorithm is and why we need one to help us control block times in a decentralized network. In this post I will formalize some of the mathematics. The definitions presented here will form the basis for the rest of this series on difficulty algorithms, but feel free to skip ahead if you dont need the deep dive.DefinitionsDifficulty FunctionFirst, lets define the difficulty algorithm itself. A difficulty.../div>div classflex flex-row justify-between>div>/div>div>a href/posts/blockchain-difficulty-mathematics/index.html>p classtext-md font-bold my-1>Read more →/p>/a>/div>/div>/div>/div>/div>div classrounded-md px-5 py-5 my-5 lg:w-full lg:px-0>div classmy-1>a href/posts/blockchain-difficulty-intro/index.html>h1 classtext-3xl underline font-bold my-1>Blockchain Difficulty Algorithms - Part 1: Introduction/h1>/a>div classflex flex-row justify-between>div>p>by !-- -->Ryan Lucchese/p>/div>div classtext-sm text-grey>p>2/14/2023/p>p>3!-- --> minute read/p>/div>/div>p classtext-md>span classfont-bold>Tags: /span>Blockchain, !-- -->Crypto, !-- -->Energi/p>div>div classprose lg:max-w-none my-1>Blockchain difficulty algorithms have been the subject of much research and a lot of incremental improvements. After many incremental improvements there has been a significant leap forward which is unlikely to be surpassed any time soon. At Energi, I created a difficulty algorithm that outperforms every other algorithm in the industry, using PID control. In this series of posts I plan to cover difficulty algorithms in depth, discuss the motivation and technical details of Energis difficulty.../div>div classflex flex-row justify-between>div>/div>div>a href/posts/blockchain-difficulty-intro/index.html>p classtext-md font-bold my-1>Read more →/p>/a>/div>/div>/div>/div>/div>/div>/main>footer classw-full static bottom-0 bg-black text-white>div classflex justify-center>div classflex flex-row justify-between w-full lg:w-61.8% h-36 px-2 lg:px-0>div classflex-none my-auto>div classtext-sm>p classfont-bold>Ryan Lucchese's Blog/p>p>© !-- -->2023/p>/div>/div>div classtext-sm text-grey my-auto>v!-- -->0.1.3/div>div classmy-auto>div>div classinline-block>a hrefhttps://github.com/RyanLucchese target_blank relnoreferrer>img altGitHub src/social/github-mark-white.svg width40 height40 decodingasync data-nimg1 classopacity-80 hover:opacity-100 loadinglazy stylecolor:transparent/>/a>/div> div classinline-block>a hrefhttps://twitter.com/RyanLucchese target_blank relnoreferrer>img altTwitter src/social/twitter.png width40 height40 decodingasync data-nimg1 classopacity-80 hover:opacity-100 loadinglazy stylecolor:transparent/>/a>/div> div classinline-block>a hrefhttps://www.linkedin.com/in/ryanlucchese/ target_blank relnoreferrer>img altLinkedIn src/social/linkedin.png width40 height40 decodingasync data-nimg1 classopacity-80 hover:opacity-100 loadinglazy stylecolor:transparent/>/a>/div>/div>/div>/div>/div>/footer>/div>/div>script id__NEXT_DATA__ typeapplication/json>{props:{pageProps:{posts:{pages:,posts:{title:Blockchain Difficulty Algorithms - Part 2: Mathematics,slug:blockchain-difficulty-mathematics,html:\u003c!--kg-card-begin: markdown--\u003e\u003cp\u003eIn \u003ca href\https://ryanlucchese.com/posts/blockchain-difficulty-intro/index.html\\u003ePart 1\u003c/a\u003e of this series, we described the basic ideas of what a difficulty algorithm is and why we need one to help us control block times in a decentralized network. In this post I will formalize some of the mathematics. The definitions presented here will form the basis for the rest of this series on difficulty algorithms, but feel free to skip ahead if you dont need the deep dive.\u003c/p\u003e\n\u003ch2 id\definitions\\u003eDefinitions\u003c/h2\u003e\n\u003ch4 id\difficulty-function\\u003eDifficulty Function\u003c/h4\u003e\n\u003cp\u003eFirst, lets define the difficulty algorithm itself. A difficulty algorithm is a function \\( D \\) of the form:\u003cbr\u003e\n\\ D(\\Delta t_i) \\frac{1}{T} \\\u003cbr\u003e\nWhere \\( \\Delta t_i \\) is the \u003cstrong\u003eblock time interval\u003c/strong\u003e, and \\( T \\) is a \u003cstrong\u003etarget value\u003c/strong\u003e. Though it is not strictly necessary, its generally practical to have a restriction that \\( \\Delta t_i \u0026gt; 0 \\). It is common to consider that \\( \\Delta t_i \\) may be a vector, i.e. \\( \\Delta \\vec{t} \\) though we will forego this notation.\u003c/p\u003e\n\u003ch4 id\difficulty\\u003eDifficulty\u003c/h4\u003e\n\u003cp\u003eWell define \u003cstrong\u003edifficulty\u003c/strong\u003e \\( d \\) in terms of the target value as:\u003cbr\u003e\n\\ d \\frac{1}{T} \\\u003cbr\u003e\nThus, the \u003cstrong\u003edifficulty function\u003c/strong\u003e \\( D \\) is a function which maps one or more block time intervals \\( \\Delta t_i \\) to a difficulty \\( d \\).\u003cbr\u003e\n\\ D(\\Delta t_i) \\frac{1}{T} d \\\u003cbr\u003e\nEach block in a blockchain stores a difficulty value. The difficulty function is used to determine the correct difficulty value for the next block. There are many nodes which need to independently agree on the precise value of the next difficulty, so a difficulty function must be deterministic. For this reason we usually consider that \\( d \\) and \\( T \\) must be integers, so there can be no rounding errors or disagreements about the representation of a floating point value.\u003cbr\u003e\n\\ d,T \\in \\mathbb{Z} \\\u003c/p\u003e\n\u003ch4 id\target-value\\u003eTarget Value\u003c/h4\u003e\n\u003cp\u003eThe target value is a scalar value equal to the inverse of the difficulty. The target value is the value we use in Proof of Work, Proof of Stake, or other Sybil-resistance mechanisms to control how difficult it is to produce a certain block. Specifically, the target value is used in the \u003cstrong\u003edifficulty condition\u003c/strong\u003e to determine whether a block is valid or not.\u003c/p\u003e\n\u003ch4 id\difficulty-condition\\u003eDifficulty Condition\u003c/h4\u003e\n\u003cp\u003eThe difficulty condition describes a simple check that can determine whether or not a block is valid. In Bitcoin this is defined as:\u003cbr\u003e\n\\ \\text{SHA256}(b) \\le T \\\u003c/p\u003e\n\u003cp\u003eIf a block meets this difficulty condition, then it is considered valid. Otherwise, it must be rejected. The choice of difficulty condition in Bitcoin is somewhat arbitrary. What is really important is the property of the difficulty condition which is that the larger the difficulty, the less likely it is that a given block will satisfy the difficulty condition. Furthermore, it is desirable that this probability condition be linear, so that the difficulty function is more simple. Remember, the goal is to control the block time interval. So we can say that the probability of satisfying the difficulty condition is linearly proportional to the target value, and inversely proportional to the difficulty:\u003cbr\u003e\n\\ P( \\text{SHA256}(b) \\le T ) \\propto T \\\u003c/p\u003e\n\u003ch4 id\mining\\u003eMining\u003c/h4\u003e\n\u003cp\u003eThe job of a miner is to find a block \\( b \\) which meets the difficulty condition. Since all the nodes in the network abide by the same difficulty function, there is an agreed upon difficulty for the next block. From this a node computes the target value as the inverse, and tries to create a block which satisfies the difficulty condition. Upon doing so, a miner is generally rewarded for contributing this block to the network if it is accepted into the main blockchain. The difficulty condition is based on the block hash, so any piece of data that a miner changes within a block will result in a new block hash. The process of mining generally refers to repeatedly changing a number in the block reserved for the purpose, the nonce, and checking to see if the difficulty condition is satisfied yet. The miner may also change the block timestamp to produce different hashes. In a Proof of Work system like Bitcoin, miners must spend energy and time to compute hashes in the hope of finding a block which satisfies the difficulty condition. The more hashes a block producer can compute, they higher likelihood they have of solving the difficulty condition. In a Proof of Stake system like Energi, the difficulty condition is more likely to be solved by higher balances. In both cases, as time progresses there are more opportunities to solve the block. So we can define mining a search function over two dimensions: a weight \\( W \\) which measures the relative strength of a miner, and time \\( t \\).\u003c/p\u003e\n\u003ch2 id\problem-statement\\u003eProblem Statement\u003c/h2\u003e\n\u003cp\u003eWith the above definitions, we have all we need to fully define a system which is capable of decentralized time keeping. A well ordered blockchain is a linked list of blocks in chronological order, each block keeping track of its own timestamp. For some timestamp \\( t_i \\) we can compute \\( \\Delta t_i t_i - t_{i-1} \\).\u003cbr\u003e\nThe goal of a difficulty algorithm is to produce a series of difficulty values \\( d_i \\) such that if there are no changes to the miners, the average block time interval will converge upon some predetermined value \\( t \\):\u003cbr\u003e\n\\\\lim_{i \\to \\infty} \\overline{\\Delta t_i} t\\\u003cbr\u003e\nIn principle, a difficulty algorithm simply needs to increase the difficulty if \\( \\Delta t_i \u0026lt; t \\), and decrease the difficulty if \\( \\Delta t_i \u0026gt; t \\). This describes the basic problem statement behind many engineering problems classified as \u003ca href\https://en.wikipedia.org/wiki/Control_theory\\u003econtrol theory\u003c/a\u003e.\u003c/p\u003e\n\u003c!--kg-card-end: markdown--\u003e,excerpt:In Part 1 of this series, we described the basic ideas of what a difficulty algorithm is and why we need one to help us control block times in a decentralized network. In this post I will formalize some of the mathematics. The definitions presented here will form the basis for the rest of this series on difficulty algorithms, but feel free to skip ahead if you dont need the deep dive.\n\n\n\nDefinitions\n\n\nDifficulty Function\n\n\nFirst, lets define the difficulty algorithm itself. A difficulty...,feature_image:/content/images/2023/02/Screenshot-from-2023-02-14-10-44-55.png,feature_image_alt:null,feature_image_caption:Bitcoin Difficulty from 2013 - 2023,codeinjection_head:\u003clink rel\stylesheet\ href\https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/katex.css\ crossorigin\anonymous\\u003e\n\u003cscript defer src\https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/katex.js\ crossorigin\anonymous\\u003e\u003c/script\u003e\n\u003cscript defer src\https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/contrib/auto-render.min.js\ crossorigin\anonymous\ onload\renderMathInElement(document.body);\\u003e\u003c/script\u003e,codeinjection_foot:null,published_at:2023-02-13T16:20:06.000-07:00,updated_at:2023-02-14T13:52:50.000-07:00,tags:{name:Blockchain,slug:blockchain},{name:Crypto,slug:crypto},{name:Energi,slug:energi},{name:Math,slug:math},primary_tag:{name:Blockchain,slug:blockchain},authors:{name:Ryan Lucchese,slug:ryan,twitter:@RyanLucchese},primary_author:{name:Ryan Lucchese,slug:ryan,twitter:@RyanLucchese},twitter_title:null,twitter_description:null,reading_time:3,og_image:null,og_title:null,og_description:null,twitter_image:null,meta_title:null,meta_description:null,url:/blockchain-difficulty-mathematics/},{title:Blockchain Difficulty Algorithms - Part 1: Introduction,slug:blockchain-difficulty-intro,html:\u003c!--kg-card-begin: markdown--\u003e\u003cp\u003eBlockchain difficulty algorithms have been the subject of much research and a lot of incremental improvements. After many incremental improvements there has been a significant leap forward which is unlikely to be surpassed any time soon. At Energi, I created a difficulty algorithm that outperforms every other algorithm in the industry, using PID control. In this series of posts I plan to cover difficulty algorithms in depth, discuss the motivation and technical details of Energis difficulty algorithm, and go over some performance results.\u003c/p\u003e\n\u003ch3 id\definitions\\u003eDefinitions\u003c/h3\u003e\n\u003cp\u003eIf the term \u0026quot;difficulty algorithm\u0026quot; feels a bit vague, dont worry well start there. A blockchain generally has the characteristic that blocks should be produced at some predetermined rate. The very reason we put \u0026quot;blocks\u0026quot; in a \u0026quot;chain\u0026quot; is so that we can have a decentralized network reach consensus. But what exactly is a block? A block is nothing more than a small package of data that follows certain rules, which every node on the decentralized network can verify.\u003c/p\u003e\n\u003cp\u003eThe blocks are linked together to form a chain, very much like a linked list for those familiar with data structures. Each successive block in the chain packages some data which may update the state of the network, according to the rules established by the network participants.\u003c/p\u003e\n\u003ch3 id\why-does-it-matter\\u003eWhy Does It Matter?\u003c/h3\u003e\n\u003cp\u003eThere are a number of reasons we want to control the speed at which blocks are allowed to be added to the chain. One reason is economic - in most blockchains the producer of a block, often called a miner, is rewarded for doing so. This reward serves to ensure that there will be nodes out there validating the rules of the network and packaging data to be added to the chain. In a truly decentralized network like Energi, anyone can produce a block. But we dont want people producing useless blocks just to get a reward, there has to be some limit to when a block can be produced, and block producers compete for the reward.\u003c/p\u003e\n\u003cp\u003eAnother reason we want to control the speed at which blocks are produced relates to the security of the network itself. As anyone can produce a block, if there were no limit on how fast blocks could be produced, the network participants could be overwhelmed with different potential blocks. Nodes would have to sort out which blocks belong in the chain, sifting through many possible candidates. The network could become fragmented, with nodes receiving new block candidates faster than they can determine which block to add in the chain. Without some way to limit block production, a decentralized network cannot function properly.\u003c/p\u003e\n\u003ch3 id\decentralized-timekeeping\\u003eDecentralized Timekeeping\u003c/h3\u003e\n\u003cp\u003eOne unfamiliar with distributed systems might initially think this is an easy enough problem to solve. Blockchain nodes just need to be programmed to only accept a block every so often, for example 1 block per minute. However a system designed this way would run into a big problem: clocks will always differ between different network participants. With potentially thousands of nodes with different clocks, and various latency between these nodes, we could never agree on the time at which the block could be produced. To make matters worse, because block producers have an incentive to produce each block, they might try to lie about their own clock in order gain some advantage. We need some kind of decentralized clock suitable for a distributed system.\u003c/p\u003e\n\u003cp\u003eThis is what a \u0026quot;difficulty algorithm\u0026quot; really is, it is a mechanism that allows us to build a decentralized clock suitable for use in large scale distributed systems. We call it a difficulty algorithm because it allows us to adjust how difficult it is to produce a block. The higher the difficulty is, the longer it takes block producers to produce a block. The lower the difficulty is, the sooner block producers can produce a block.\u003c/p\u003e\n\u003ch3 id\an-analogy-from-cryptography\\u003eAn Analogy From Cryptography\u003c/h3\u003e\n\u003cp\u003eThere is an analogy here to some concepts in other cryptographic systems, for example the rounds in \u003ca href\https://man.openbsd.org/bcrypt.3#Blowfish_crypt\\u003ebcrypt\u003c/a\u003e. The password hashing scheme bcrypt uses a variable number of rounds to indirectly determine the amount of processing power needed to compute a bcrypt hash. In the case of password hashes, we want a cryptographic hashing algorithm that is fast enough to quickly verify a piece of data, but not so quick that we could brute force the data by trying a large amount of guesses. The variable number of rounds in bcrypt allows us to increase or decrease the difficulty of computing a hash, and in doing so indirectly control how much time it takes to compute a hash.\u003c/p\u003e\n\u003cp\u003eIn an analogous fashion, the difficulty algorithm allows a decentralized network to control the time it takes to produce a block. Difficulty does not control block timing directly, but rather determines the \u003cstrong\u003eprobability\u003c/strong\u003e that a block producer will be able to produce a block per unit time. By controlling this probability, we can achieve an \u003cstrong\u003eexpected value\u003c/strong\u003e for the time between blocks. Since block producers can join or leave the network at any time, a difficulty algorithm must be able to adjust this probability in response to conditions on the network. In \u003ca href\https://ryanlucchese.com/posts/blockchain-difficulty-mathematics/index.html\\u003ePart 2\u003c/a\u003e of this series well dive deep into the mathematics of a difficulty algorithm.\u003c/p\u003e\n\u003c!--kg-card-end: markdown--\u003e,excerpt:Blockchain difficulty algorithms have been the subject of much research and a lot of incremental improvements. After many incremental improvements there has been a significant leap forward which is unlikely to be surpassed any time soon. At Energi, I created a difficulty algorithm that outperforms every other algorithm in the industry, using PID control. In this series of posts I plan to cover difficulty algorithms in depth, discuss the motivation and technical details of Energis difficulty...,feature_image:null,feature_image_alt:null,feature_image_caption:null,codeinjection_head:null,codeinjection_foot:null,published_at:2023-01-31T21:37:00.000-07:00,updated_at:2023-02-14T13:52:19.000-07:00,tags:{name:Blockchain,slug:blockchain},{name:Crypto,slug:crypto},{name:Energi,slug:energi},primary_tag:{name:Blockchain,slug:blockchain},authors:{name:Ryan Lucchese,slug:ryan,twitter:@RyanLucchese},primary_author:{name:Ryan Lucchese,slug:ryan,twitter:@RyanLucchese},twitter_title:Blockchain Difficulty Algorithms - Part 1: Introduction,twitter_description:Introducing some basic concepts to help understand blockchain difficulty algorithms.,reading_time:3,og_image:null,og_title:null,og_description:null,twitter_image:null,meta_title:null,meta_description:Introducing some basic concepts to help understand blockchain difficulty algorithms, starting from first principles.,url:/blockchain-difficulty-intro/},meta:{pagination:{page:1,limit:15,pages:1,total:2,next:null,prev:null}}},settings:{title:Ryan Luccheses Blog,description:Crypto, Mathematics, Physics, AI,navigation:{label:Home,url:/},{label:About,url:/about/}}},__N_SSG:true},page:/,query:{},buildId:YKLeX8NN7sS8Up56Xr2za,isFallback:false,gsp:true,scriptLoader:}/script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]