<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Mitchell Cuevas</title>
    <description>The latest articles on Forem by Mitchell Cuevas (@mcuevasm).</description>
    <link>https://forem.com/mcuevasm</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F126094%2F4637528b-ae2e-4c52-8ea8-5b5b1467c602.jpg</url>
      <title>Forem: Mitchell Cuevas</title>
      <link>https://forem.com/mcuevasm</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/mcuevasm"/>
    <language>en</language>
    <item>
      <title>January App Mining Results: Meet The New Faces In The Top 10</title>
      <dc:creator>Mitchell Cuevas</dc:creator>
      <pubDate>Tue, 22 Jan 2019 19:16:01 +0000</pubDate>
      <link>https://forem.com/blockstack/january-app-mining-results-meet-the-new-faces-in-the-top-10-256g</link>
      <guid>https://forem.com/blockstack/january-app-mining-results-meet-the-new-faces-in-the-top-10-256g</guid>
      <description>&lt;p&gt;Congratulations to January’s App Miners! The latest run saw the addition of &lt;a href="https://dev.to/blockstack/meet-trymyui-the-newest-independent-app-mining-app-reviewer-4bpn-temp-slug-5563639"&gt;new App Reviewer, TryMyUI&lt;/a&gt; and 13 new decentralized Blockstack applications. Graphite stayed steady at the top while the rest of the top 10 saw more changes, meet some of the new entrants to the top 10 below and browse the &lt;a href="https://app.co/mining/january-2019" rel="noopener noreferrer"&gt;full rankings here.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://app.co/mining/january-2019" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.app.co%2Fwp-content%2Fuploads%2F2019%2F01%2FText-placeholder-17.png" alt="app mining, January, blockstack"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Meet the new faces in the top 10
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://dpage.io" rel="noopener noreferrer"&gt;&lt;strong&gt;DPAGE&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;–&lt;/strong&gt; Publish web content on the decentralized internet
&lt;/h3&gt;

&lt;p&gt;“Combine videos, images and social media posts from the web to create webpages. Keep your pages private and encrypted or make them public.”&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Create a free, censorship-proof web page in five minutes. Give &lt;a href="https://t.co/8AjrnM0Gd1" rel="noopener noreferrer"&gt;https://t.co/8AjrnM0Gd1&lt;/a&gt; a try!&lt;/p&gt;

&lt;p&gt;— dpage (@dpageio) &lt;a href="https://twitter.com/dpageio/status/1085852184858820608?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;January 17, 2019&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;&lt;a href="https://sundly.co/" rel="noopener noreferrer"&gt;Sundly&lt;/a&gt; –&lt;/strong&gt; Decentralized Personal Health Records
&lt;/h3&gt;

&lt;p&gt;Sundly believes you should own and be in full control of your health records.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Friendly reminder: You can import your Apple Health records into Sundly &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs.w.org%2Fimages%2Fcore%2Femoji%2F11%2F72x72%2F1f49b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs.w.org%2Fimages%2Fcore%2Femoji%2F11%2F72x72%2F1f49b.png" alt="💛"&gt;&lt;/a&gt; &lt;a href="https://t.co/BScyX8fCeU" rel="noopener noreferrer"&gt;https://t.co/BScyX8fCeU&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;— Sundly (@getsundly) &lt;a href="https://twitter.com/getsundly/status/1087451565437394945?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;January 21, 2019&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Check out Sundly’s &lt;a href="https://trello.com/b/vH8XPCVb/sundly" rel="noopener noreferrer"&gt;roadmap for more.&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;&lt;a href="https://mevaul.com/" rel="noopener noreferrer"&gt;Mevaul&lt;/a&gt; –&lt;/strong&gt; Private, Encrypted and Distributed storage that just works
&lt;/h3&gt;

&lt;p&gt;“Built on Blockstack, Mevaul is a file storage and sync service that helps you store your personal and private files securely. It uses Blockstack and Gaia storage under the hood to give you true data privacy.”&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;My thoughts on Mevaul on &lt;a href="https://twitter.com/ProductHunt?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;@ProductHunt&lt;/a&gt; &lt;a href="https://t.co/0zsDozrEWS" rel="noopener noreferrer"&gt;https://t.co/0zsDozrEWS&lt;/a&gt; &lt;a href="https://t.co/nvi3mTkxAG" rel="noopener noreferrer"&gt;pic.twitter.com/nvi3mTkxAG&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;— Akso (@theAkso) &lt;a href="https://twitter.com/theAkso/status/1085500822048387072?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;January 16, 2019&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Check out &lt;a href="https://mevaul.com/roadmap" rel="noopener noreferrer"&gt;Mevaul’s roadmap for more.&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;More decentralized apps are being built everyday – you’ll be meeting even more in next month’s run. If you want more security, more privacy, and data portability, every single one of these is worth a try.&lt;/p&gt;

&lt;p&gt;Developers: Submit your &lt;strong&gt;applications by February 1st&lt;/strong&gt; to be included in the next ranking. You can learn to build a dapp in an hour or less and &lt;strong&gt;start App Mining with the &lt;a href="https://docs.blockstack.org/develop/zero_to_dapp_1.html" rel="noopener noreferrer"&gt;Zero-to-Dapp tutorial&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Lifetime earnings of January 2019’s top 5 applications
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd2mxuefqeaa7sj.cloudfront.net%2Fs_5D31161F9739CD122EF7FF67CC86BE5FCB029D27D8532A0358E32260ECB59D33_1548180207422_image.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd2mxuefqeaa7sj.cloudfront.net%2Fs_5D31161F9739CD122EF7FF67CC86BE5FCB029D27D8532A0358E32260ECB59D33_1548180207422_image.png" alt="app mining, blockstack"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This post originally &lt;a href="https://blog.app.co/january-app-mining-results-meet-the-new-faces-in-the-top-10/" rel="noopener noreferrer"&gt;appeared on App.co.&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://blog.blockstack.org/january-app-mining-results-meet-the-new-faces-in-the-top-10/" rel="noopener noreferrer"&gt;January App Mining Results: Meet The New Faces In The Top 10&lt;/a&gt; appeared first on &lt;a href="https://blog.blockstack.org" rel="noopener noreferrer"&gt;Blockstack Blog - Blockstack&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>appmining</category>
      <category>dapps</category>
      <category>blockstack</category>
      <category>miner</category>
    </item>
    <item>
      <title>Blockchains and Consensus Protocols: Liveness and Correctness are Inseparable</title>
      <dc:creator>Mitchell Cuevas</dc:creator>
      <pubDate>Thu, 20 Dec 2018 16:03:06 +0000</pubDate>
      <link>https://forem.com/blockstack/blockchains-and-consensus-protocols-liveness-and-correctness-are-inseparable-65p</link>
      <guid>https://forem.com/blockstack/blockchains-and-consensus-protocols-liveness-and-correctness-are-inseparable-65p</guid>
      <description>&lt;p&gt;In the world of blockchains, &lt;em&gt;consensus protocols&lt;/em&gt; are widely discussed. However, it’s often hard to distinguish between competing protocols and evaluate them, especially because it is not always clear how a particular protocol solves a consensus problem, or how that particular problem relates to the practical concerns of blockchains (e.g., when is my transaction confirmed? what fork am I on?). In this post, I will outline the problem that consensus protocols are trying to solve, detail what a valid consensus protocol should achieve, and hopefully this will help convey which approaches to this problem are likely to bear fruit.&lt;/p&gt;

&lt;p&gt;Roughly speaking, consensus protocols aim to achieve agreement between mutually distrusted parties. In networks like the Bitcoin network, nodes are attempting to reach agreement on &lt;em&gt;what to include in the next block.&lt;/em&gt; In this network, blocks tell us what transactions have been broadcasted, and the order of those transactions. Other consensus protocols are usually similar — they tell clients the order in which operations should be applied.&lt;/p&gt;

&lt;p&gt;As a user of a consensus protocol, you might initially think “Well, I’m not so concerned about the order and timing of operations, so long as I can guarantee those operations are correct.” Indeed, correctness is an important property. However, this property is completely linked to the order and timing of operations. To see why, let’s look at some example transactions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T1:&lt;/strong&gt; Public Key A transfers coin “Z” to Public Key B&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T2:&lt;/strong&gt; Public Key A transfers coin “Z” to Public Key C&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T3:&lt;/strong&gt; Public Key B transfers coin “Z” to Public Key D&lt;/p&gt;

&lt;p&gt;Now, when examined individually, confirming that these transactions are correct is trivial. For transactions 1 and 2, a verifier need &lt;em&gt;only&lt;/em&gt; confirm that the transaction was signed by the private key corresponding to A. This is achievable with rather boring cryptography, and has been a solved problem for decades. But examining these transactions individually isn’t interesting, and doesn’t provide a useful measure of correctness. I want to know whether or not I “own” coin Z, in the sense that nobody else can convincingly attempt to transfer that coin without my permission. What do consensus protocols have to say about this?&lt;/p&gt;

&lt;p&gt;Well, importantly, in a consensus protocol, clients and nodes in the network reach an agreed upon &lt;em&gt;view of the world,&lt;/em&gt; and that view of the world includes an ordering of transactions. Once we can order transactions, we can begin to evaluate whether or not they are valid at a specific point in time. For example, if a consensus protocol establishes that at Time 0, coin “Z” is owned by Public Key A, and that the transactions are ordered as T1, T3, T2 — then clearly T1 and T3 are &lt;em&gt;valid,&lt;/em&gt; but T2 is &lt;em&gt;not&lt;/em&gt; (because after T1 broadcasts, Z is owned by Public Key B, and no longer Public Key A). However, if the protocol establishes that the transactions are ordered T2, T1, T3, then &lt;em&gt;only&lt;/em&gt; T2 is valid. Clearly, &lt;em&gt;order&lt;/em&gt; and &lt;em&gt;timing guarantees&lt;/em&gt; matter. Fortunately, this is exactly what consensus protocols attempt to provide.&lt;/p&gt;

&lt;p&gt;Consensus protocols provide two guarantees with respect to order and timing:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Safety:&lt;/strong&gt; As long as the protocol does not have more than some threshold of faulty participants, other participants cannot convince a client to accept an incorrect or invalid message.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Liveness:&lt;/strong&gt; As long as the protocol does not have more than some threshold of faulty participants, other participants cannot indefinitely delay the acceptance of a correct message.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What do these guarantees usually mean in the context of blockchains? As we saw before, incorrect messages are nearly trivial to validate as such on the blockchain. Does that mean safety is a trivial property to achieve? Why is liveness important when it comes to timing of transactions, and the order of transactions? What does any of this have to do with forks?&lt;/p&gt;

&lt;p&gt;To map this into the context of blockchains, we have to first understand what, &lt;em&gt;exactly,&lt;/em&gt; blockchains are trying to achieve consensus &lt;em&gt;on&lt;/em&gt;. The answer, it turns out, isn’t messages, or even transactions: it’s histories. A blockchain client is continuously trying to figure out which history of transactions is the “true” history. From the previous example of transactions, a client would need to conclude which of these two possible histories is the correct one:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;History 1:&lt;/strong&gt; Transaction 1, Transaction 3.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;History 2:&lt;/strong&gt; Transaction 2.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Nakamoto&lt;/em&gt; consensus uses Proof-of-Work mining and a “longest chain wins” metric to decide on which history is the correct history. And this history &lt;em&gt;should match the expected&lt;/em&gt; history if all nodes in the network were honest.&lt;/p&gt;

&lt;p&gt;With this understanding, we can now frame our two consensus guarantees as they relate to blockchains:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Safety:&lt;/strong&gt; As long as the protocol does not have more than some threshold of faulty participants, other participants cannot convince a client to accept a history which is the wrong history,&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Liveness:&lt;/strong&gt; As long as the protocol does not have more than some threshold of faulty participants, other participants cannot prevent clients from accepting some history as the correct history.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Interestingly, when it comes to blockchains (though this is true of &lt;em&gt;most&lt;/em&gt; consensus protocols), our usual understanding of properties like correctness, validity, ordering, and timing require guarantees of both &lt;em&gt;safety&lt;/em&gt; and &lt;em&gt;liveness&lt;/em&gt; simultaneously. This is just the nature of blockchains. If I want to be confident that I cannot be attacked via a “double-spend”, I need to know, first, that the transaction will be accepted in a timely fashion, and second, that once accepted, the transaction is very unlikely to be in an orphaned block.&lt;/p&gt;

&lt;p&gt;This is why safety and liveness are &lt;strong&gt;inseparable&lt;/strong&gt; properties of fault-tolerant protocols. Fault tolerant protocols use techniques to guarantee liveness which affect safety and vice-versa. For example, in Practical Byzantine Fault Tolerance (one of the most influential fault-tolerant consensus protocols– I recommend reading the &lt;a href="http://pmg.csail.mit.edu/papers/osdi99.pdf"&gt;’99 paper&lt;/a&gt; from MIT), the two-phase commit mechanism used by replicas is what ensures that the replicas make progress, but it is also how new messages are accepted into the protocol history. If this mechanism were faulty, it would affect &lt;em&gt;both&lt;/em&gt; safety and liveness. &lt;strong&gt;These properties cannot be effectively treated or proven in the absence of the other— a protocol which assumes liveness can be trivially safe&lt;/strong&gt;. A protocol which waves away concerns about safety can always make progress.&lt;/p&gt;

&lt;p&gt;If blockchains are going to revolutionize the way that people interact on the internet, and I believe they will, then the proper functioning of those blockchains is massively important. When evaluating the technologies and plans for various platforms, it’s essential to remember the fundamental problems that a blockchain is trying to solve. At a basic level, that problem is an old one: achieving consensus while tolerating some number of faulty or malicious actors. In both theory and practice, this means providing liveness and safety guarantees. However, these guarantees are inseparable, because the mechanisms for providing one always affect the other.&lt;/p&gt;

&lt;p&gt;Now, when evaluating projects that are trying to make progress on new mechanisms for achieving consensus in support of open blockchains, projects that sufficiently treat these twin concerns are the most likely to bear fruit. Some projects like &lt;a href="https://www.stellar.org/"&gt;Stellar&lt;/a&gt; use consensus protocols in a federated model (non-open), but provide sound fault-tolerance guarantees. &lt;a href="https://www.algorand.com/"&gt;Algorand&lt;/a&gt; has also made significant progress towards building a fault-tolerant protocol, though the question of dealing with open-membership sets is still open. Our own blockchain design work provides fault-tolerance guarantees while also enabling open-membership through Proof-of-Burn mining. Progress on that work can be tracked in pull requests on our &lt;a href="https://github.com/blockstack/blockstack-core/pull/888"&gt;blockstack-core Github repository&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://blog.blockstack.org/blockchains-and-consensus-protocols-liveness-and-correctness-are-inseparable/"&gt;Blockchains and Consensus Protocols: Liveness and Correctness are Inseparable&lt;/a&gt; appeared first on &lt;a href="https://blog.blockstack.org"&gt;Blockstack Blog - Blockstack&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>blockchain</category>
    </item>
    <item>
      <title>December App Mining Results: Meet The Top Ranked Blockstack Applications</title>
      <dc:creator>Mitchell Cuevas</dc:creator>
      <pubDate>Tue, 18 Dec 2018 19:50:06 +0000</pubDate>
      <link>https://forem.com/blockstack/december-app-mining-results-meet-the-top-ranked-blockstack-applications-1mcj</link>
      <guid>https://forem.com/blockstack/december-app-mining-results-meet-the-top-ranked-blockstack-applications-1mcj</guid>
      <description>&lt;p&gt;The results are in: Congratulations to every team and founder that was a part of December’s App Mining Pilot run, you and your apps are an integral part of the Blockstack ecosystem and the decentralized internet. &lt;a href="https://www.blockchain.com/btc/tx/333b82ed85af86334a8e1c558cd6c159d3dca55cf04b6e74e4bd7ccce8247674" rel="noopener noreferrer"&gt;&lt;strong&gt;$100K USD has successfully been distributed in Bitcoin&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;across eligible Blockstack apps according to&lt;/strong&gt; &lt;a href="https://app.co/mining/december-2018" rel="noopener noreferrer"&gt;&lt;strong&gt;December’s final rankings&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;.&lt;/strong&gt; Rankings were determined according to the &lt;a href="https://blog.app.co/how-app-minings-ranking-algorithm-works/" rel="noopener noreferrer"&gt;App Mining algorithm&lt;/a&gt; which uses scores from independent App Reviewers.&lt;/p&gt;

&lt;p&gt;App Mining &lt;a href="https://dev.to/blockstack/how-app-mining-works-7ef-temp-slug-4258655"&gt;has been rigorously designed&lt;/a&gt; to fairly fund developers that are building the best decentralized applications on Blockstack. We welcome the 16 new apps that joined the program since the &lt;a href="https://blog.blockstack.org/introducing-app-mining/" rel="noopener noreferrer"&gt;alpha run&lt;/a&gt; and invite developers to &lt;a href="https://app.co/mining" rel="noopener noreferrer"&gt;register&lt;/a&gt; for next month’s payouts – &lt;strong&gt;the deadline is January 4th, 2019.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Please meet the top 10 earners for December below, the &lt;a href="https://app.co/mining/december-2018" rel="noopener noreferrer"&gt;full list of results can be found on app.co&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  1) Graphite: Encrypted, shareable, decentralized personal data
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://www.graphitedocs.com/" rel="noopener noreferrer"&gt;https://www.graphitedocs.com/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;App.co:&lt;/strong&gt; &lt;a href="https://app.co/app/graphite" rel="noopener noreferrer"&gt;https://app.co/app/graphite&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Recommended for users of:&lt;/strong&gt; Google Drive, Dropbox Paper, Office 365, Quip&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Do you really want google reading everything you write? Every keystroke you make? Even the ones you delete? &lt;a href="https://twitter.com/graphitedocs?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;@graphitedocs&lt;/a&gt; &lt;a href="https://t.co/ERGfjYw9VG" rel="noopener noreferrer"&gt;https://t.co/ERGfjYw9VG&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;— George J Peacock (@Peacockg) &lt;a href="https://twitter.com/Peacockg/status/1074058833234923521?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;December 15, 2018&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  2) Stealthy: Decentralized communication platform on Blockstack
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://stealthy.im/" rel="noopener noreferrer"&gt;https://stealthy.im/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;App.co:&lt;/strong&gt; &lt;a href="https://app.co/app/stealthy" rel="noopener noreferrer"&gt;https://app.co/app/stealthy&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Recommended for users of:&lt;/strong&gt; Telegram, Whatsapp, Facebook Messenger, Secret, Google Hangouts&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Here's what your &lt;a href="https://twitter.com/hashtag/encrypted?src=hash&amp;amp;ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;#encrypted&lt;/a&gt; message looks behind the scenes on &lt;a href="https://twitter.com/hashtag/Stealthy?src=hash&amp;amp;ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;#Stealthy&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The content is only visible to you and your &lt;a href="https://twitter.com/blockstack?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;@blockstack&lt;/a&gt; contact &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs.w.org%2Fimages%2Fcore%2Femoji%2F11%2F72x72%2F1f50f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs.w.org%2Fimages%2Fcore%2Femoji%2F11%2F72x72%2F1f50f.png" alt="🔏"&gt;&lt;/a&gt; &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs.w.org%2Fimages%2Fcore%2Femoji%2F11%2F72x72%2F1f575-fe0f-200d-2640-fe0f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs.w.org%2Fimages%2Fcore%2Femoji%2F11%2F72x72%2F1f575-fe0f-200d-2640-fe0f.png" alt="🕵️‍♀️"&gt;&lt;/a&gt;&lt;a href="https://twitter.com/hashtag/decentralized?src=hash&amp;amp;ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;#decentralized&lt;/a&gt; &lt;a href="https://twitter.com/hashtag/controlyourdata?src=hash&amp;amp;ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;#controlyourdata&lt;/a&gt; &lt;a href="https://t.co/xIScIeUq3Z" rel="noopener noreferrer"&gt;pic.twitter.com/xIScIeUq3Z&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;— stealthy.im (&lt;a class="mentioned-user" href="https://dev.to/stealthyim"&gt;@stealthyim&lt;/a&gt;) &lt;a href="https://twitter.com/stealthyim/status/1070718840722472960?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;December 6, 2018&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  3) Zinc: Work based identity &amp;amp; reputation system
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://zinc.work/" rel="noopener noreferrer"&gt;https://zinc.work/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;App.co:&lt;/strong&gt; &lt;a href="https://app.co/app/zinc" rel="noopener noreferrer"&gt;https://app.co/app/zinc&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Recommend for users of:&lt;/strong&gt; LinkedIn&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs.w.org%2Fimages%2Fcore%2Femoji%2F11%2F72x72%2F1f680.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs.w.org%2Fimages%2Fcore%2Femoji%2F11%2F72x72%2F1f680.png" alt="🚀"&gt;&lt;/a&gt;Zinc is LIVE &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs.w.org%2Fimages%2Fcore%2Femoji%2F11%2F72x72%2F1f680.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs.w.org%2Fimages%2Fcore%2Femoji%2F11%2F72x72%2F1f680.png" alt="🚀"&gt;&lt;/a&gt;and officially open for business &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs.w.org%2Fimages%2Fcore%2Femoji%2F11%2F72x72%2F1f64c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs.w.org%2Fimages%2Fcore%2Femoji%2F11%2F72x72%2F1f64c.png" alt="🙌"&gt;&lt;/a&gt; With positive endorsements &amp;amp; the new website live, we look forward to welcoming &lt;a href="https://twitter.com/hashtag/recruiters?src=hash&amp;amp;ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;#recruiters&lt;/a&gt; &amp;amp; &lt;a href="https://twitter.com/hashtag/candidates?src=hash&amp;amp;ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;#candidates&lt;/a&gt; onto the platform as we start to populate the &lt;a href="https://twitter.com/hashtag/Zinc?src=hash&amp;amp;ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;#Zinc&lt;/a&gt; ecosystem &lt;a href="https://t.co/pGOBmvqh0M" rel="noopener noreferrer"&gt;https://t.co/pGOBmvqh0M&lt;/a&gt;&lt;a href="https://twitter.com/hashtag/HRtech?src=hash&amp;amp;ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;#HRtech&lt;/a&gt; &lt;a href="https://twitter.com/hashtag/blockchain?src=hash&amp;amp;ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;#blockchain&lt;/a&gt; &lt;a href="https://twitter.com/hashtag/recruiting?src=hash&amp;amp;ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;#recruiting&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;— Zinc (@zinc_work) &lt;a href="https://twitter.com/zinc_work/status/1041678626155048965?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;September 17, 2018&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  4) Afari: Group based, privacy focused social network
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://www.afari.io/" rel="noopener noreferrer"&gt;https://www.afari.io/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;App.co:&lt;/strong&gt; &lt;a href="https://app.co/app/afari" rel="noopener noreferrer"&gt;https://app.co/app/afari&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Recommended for users of:&lt;/strong&gt; Twitter, WeChat, SnapChat, Peepeth&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I'm using &lt;a href="https://twitter.com/afari_io?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;@afari_io&lt;/a&gt;, a decentralized social media platform built on &lt;a href="https://twitter.com/blockstack?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;@blockstack&lt;/a&gt;. Join me at &lt;a href="https://t.co/edcc53K4uO" rel="noopener noreferrer"&gt;https://t.co/edcc53K4uO&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;— 𝔪𝔞𝔯𝔦𝔬 &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs.w.org%2Fimages%2Fcore%2Femoji%2F11%2F72x72%2F26a1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs.w.org%2Fimages%2Fcore%2Femoji%2F11%2F72x72%2F26a1.png" alt="⚡"&gt;&lt;/a&gt; (&lt;a class="mentioned-user" href="https://dev.to/m4rio"&gt;@m4rio&lt;/a&gt;) &lt;a href="https://twitter.com/m4rio/status/1059441218197901312?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;November 5, 2018&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  5) BlockVault: Decentralized password manager for teams
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://blockvault.site/" rel="noopener noreferrer"&gt;https://blockvault.site/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;App.co:&lt;/strong&gt; &lt;a href="https://app.co/app/blockvault" rel="noopener noreferrer"&gt;https://app.co/app/blockvault&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Recommended for users of:&lt;/strong&gt; 1Password, LastPass, LogMeIn, Dashlane&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Woot! Woot! BLOCKVAULT just got hunted on &lt;a href="https://twitter.com/ProductHunt?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;@ProductHunt&lt;/a&gt;! &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs.w.org%2Fimages%2Fcore%2Femoji%2F11%2F72x72%2F1f63a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs.w.org%2Fimages%2Fcore%2Femoji%2F11%2F72x72%2F1f63a.png" alt="😺"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If PH is your thing, check out our page over here &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs.w.org%2Fimages%2Fcore%2Femoji%2F11%2F72x72%2F1f449.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs.w.org%2Fimages%2Fcore%2Femoji%2F11%2F72x72%2F1f449.png" alt="👉"&gt;&lt;/a&gt;&lt;a href="https://t.co/Gd2vDD4W3u" rel="noopener noreferrer"&gt;https://t.co/Gd2vDD4W3u&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;— BLOCKVAULT (@blockvaultdapp) &lt;a href="https://twitter.com/blockvaultdapp/status/1071739524789755906?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;December 9, 2018&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  6) SpringRole: Decentralized professional network platform.
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://springrole.com/" rel="noopener noreferrer"&gt;https://springrole.com/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;App.co:&lt;/strong&gt; &lt;a href="https://app.co/app/springrole" rel="noopener noreferrer"&gt;https://app.co/app/springrole&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Recommended for users of:&lt;/strong&gt; LinkedIn, Angellist&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We are at 35K users &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg51k36wfckepd3286mmn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg51k36wfckepd3286mmn.png" alt="🙂"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;— SpringRole Inc. (@springroleinc) &lt;a href="https://twitter.com/springroleinc/status/1069766159409573892?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;December 4, 2018&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  7) Entaxy: Insight into your finances, without sacrificing your data
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://entaxy.io/" rel="noopener noreferrer"&gt;https://entaxy.io/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;App.co:&lt;/strong&gt; &lt;a href="https://app.co/app/entaxy" rel="noopener noreferrer"&gt;https://app.co/app/entaxy&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Recommended for users of:&lt;/strong&gt; Mint.com, Prosper, Penny, Personal Capital&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Entaxy: Insight into your finances, without sacrificing your data &lt;a href="https://t.co/jcfG5pOis0" rel="noopener noreferrer"&gt;https://t.co/jcfG5pOis0&lt;/a&gt; via &lt;a href="https://twitter.com/jack_neto?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;@jack_neto&lt;/a&gt; &lt;a href="https://t.co/77vtWHS8KW" rel="noopener noreferrer"&gt;pic.twitter.com/77vtWHS8KW&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;— Jack Neto (@jack_neto) &lt;a href="https://twitter.com/jack_neto/status/981508111373602816?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;April 4, 2018&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  8) Recall: Safely store and access your photos.
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://recall.photos/" rel="noopener noreferrer"&gt;https://recall.photos/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;App.co:&lt;/strong&gt; &lt;a href="https://app.co/app/recall" rel="noopener noreferrer"&gt;https://app.co/app/recall&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Recommended for users of:&lt;/strong&gt; Google Photos, Box.com, Flickr, Dropbox, Photobucket, iCloud&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://twitter.com/hashtag/TopHunts?src=hash&amp;amp;ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;#TopHunts&lt;/a&gt; of Dec 7, 2018 on &lt;a href="https://twitter.com/ProductHunt?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;@producthunt&lt;/a&gt; &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs.w.org%2Fimages%2Fcore%2Femoji%2F11%2F72x72%2F1f680.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs.w.org%2Fimages%2Fcore%2Femoji%2F11%2F72x72%2F1f680.png" alt="🚀"&gt;&lt;/a&gt; &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs.w.org%2Fimages%2Fcore%2Femoji%2F11%2F72x72%2F1f31f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs.w.org%2Fimages%2Fcore%2Femoji%2F11%2F72x72%2F1f31f.png" alt="🌟"&gt;&lt;/a&gt; Products by &lt;a href="https://twitter.com/MinhoKo120?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;@MinhoKo120&lt;/a&gt; &lt;a href="https://twitter.com/nhuphan0404?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;@nhuphan0404&lt;/a&gt; &lt;a href="https://twitter.com/jackveiga?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;@jackveiga&lt;/a&gt; &lt;a href="https://twitter.com/alvesjtiago?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;@alvesjtiago&lt;/a&gt; &lt;a href="https://twitter.com/teddy?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;@teddy&lt;/a&gt; &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs.w.org%2Fimages%2Fcore%2Femoji%2F11%2F72x72%2F1f3c6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs.w.org%2Fimages%2Fcore%2Femoji%2F11%2F72x72%2F1f3c6.png" alt="🏆"&gt;&lt;/a&gt; &lt;a href="https://t.co/1tco04Wzb7" rel="noopener noreferrer"&gt;https://t.co/1tco04Wzb7&lt;/a&gt; &lt;a href="https://t.co/jr585aJ0sg" rel="noopener noreferrer"&gt;pic.twitter.com/jr585aJ0sg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;— Top Hunts Daily (@tophuntsdaily) &lt;a href="https://twitter.com/tophuntsdaily/status/1071306014383923200?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;December 8, 2018&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  9) Misthos: Governance and financial management platform.
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://www.misthos.io/" rel="noopener noreferrer"&gt;https://www.misthos.io/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;App.co:&lt;/strong&gt; &lt;a href="https://app.co/app/misthos" rel="noopener noreferrer"&gt;https://app.co/app/misthos&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Recommended for users of:&lt;/strong&gt; BitGo, Quickbooks&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Shout-out to &lt;a href="https://twitter.com/misthosio?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;@misthosio&lt;/a&gt; on &lt;a href="https://twitter.com/hashtag/FutureMoney?src=hash&amp;amp;ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;#FutureMoney&lt;/a&gt; on &lt;a href="https://twitter.com/konsensusry?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;@konsensusry&lt;/a&gt; with &lt;a href="https://twitter.com/OmniFinn?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;@OmniFinn&lt;/a&gt; and &lt;a href="https://twitter.com/simonlutz21?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;@simonlutz21&lt;/a&gt;! &lt;a href="https://twitter.com/hashtag/Bitcoin?src=hash&amp;amp;ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;#Bitcoin&lt;/a&gt; &lt;a href="https://twitter.com/hashtag/MultiSig?src=hash&amp;amp;ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;#MultiSig&lt;/a&gt;&lt;a href="https://t.co/rzxyt3OT4a" rel="noopener noreferrer"&gt;https://t.co/rzxyt3OT4a&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;— Max Hillebrand &lt;a href="@HillebrandMax"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs.w.org%2Fimages%2Fcore%2Femoji%2F11%2F72x72%2F26a1.png" alt="⚡"&gt;&lt;/a&gt; &lt;a href="https://twitter.com/HillebrandMax/status/1054834449039400962?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;October 23, 2018&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  10) Blockusign: Encrypted Document Signing and Digital Notary – Powered by the Blockchain
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Website&lt;/strong&gt; : &lt;a href="https://blockusign.co/" rel="noopener noreferrer"&gt;https://blockusign.co/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;App.co: ** &lt;a href="https://app.co/app/blockusign" rel="noopener noreferrer"&gt;https://app.co/app/blockusign&lt;/a&gt;&lt;br&gt;&lt;br&gt;
**Recommended for users of:&lt;/strong&gt;  Docusign, Eversign, DocHub&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Graphite + Blockusign: Encrypted alternatives to DocuSign and Google Docs. Here is a commentary video with founders &lt;a href="https://twitter.com/polluterofminds?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;@polluterofminds&lt;/a&gt; and &lt;a href="https://twitter.com/nicktheile?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;@nicktheile&lt;/a&gt; on how to Create, Sign and Verify a contract w/o a 3rd party &lt;a href="https://t.co/DreFlSNdPs" rel="noopener noreferrer"&gt;https://t.co/DreFlSNdPs&lt;/a&gt; &lt;a href="https://twitter.com/BlockstackApps?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;@BlockstackApps&lt;/a&gt; &lt;a href="https://twitter.com/ProductHunt?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;@ProductHunt&lt;/a&gt; &lt;a href="https://twitter.com/DemocracyEarth?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;@DemocracyEarth&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;— blockusign (@blockusignapp) &lt;a href="https://twitter.com/blockusignapp/status/1071879305926467584?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;December 9, 2018&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;More decentralized apps are being built everyday so if you want more security, more privacy, and more data portability – give these alternatives and re-imaginings of centralized services a chance. Trying these upstart applications (and offering feedback if you can) is one of the best things you can do for the future of the internet and your own digital rights. Apps are added to &lt;a href="https://app.co" rel="noopener noreferrer"&gt;app.co&lt;/a&gt; everyday, visit to sign up for receive an email update featuring new dapps added each week.&lt;/p&gt;

&lt;p&gt;If you’re a developer, it’s the perfect time to join the program. Learn to build a dapp in an hour or less and start App Mining with the &lt;a href="https://docs.blockstack.org/develop/zero_to_dapp_1.html" rel="noopener noreferrer"&gt;Zero-to-Dapp tutorial&lt;/a&gt; and then register for App Mining at &lt;a href="https://app.co/mining" rel="noopener noreferrer"&gt;app.co/mining&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;12/19/2018, 3:53pm EST: This post has been updated to reflect a ranking correction &lt;a href="https://forum.blockstack.org/t/issuing-an-app-mining-ranking-correction/6995" rel="noopener noreferrer"&gt;described here&lt;/a&gt;&lt;/em&gt;_ in further detail._&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://blog.blockstack.org/december-app-mining-results/" rel="noopener noreferrer"&gt;December App Mining Results: Meet The Top Ranked Blockstack Applications&lt;/a&gt; appeared first on &lt;a href="https://blog.blockstack.org" rel="noopener noreferrer"&gt;Blockstack Blog - Blockstack&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>appmining</category>
      <category>dapps</category>
    </item>
    <item>
      <title>How App Mining Works</title>
      <dc:creator>Mitchell Cuevas</dc:creator>
      <pubDate>Mon, 17 Dec 2018 11:02:32 +0000</pubDate>
      <link>https://forem.com/blockstack/how-app-mining-works-4ij5</link>
      <guid>https://forem.com/blockstack/how-app-mining-works-4ij5</guid>
      <description>&lt;p&gt;Blockstack is broadening the meaning of “Mining”.&lt;/p&gt;

&lt;p&gt;Traditionally the term ‘mining’ in cryptocurrency refers to the process of contributing compute resources to the network and earning a reward. On the Blockstack network, however, instead of just ‘mining’ through computation, developers can “mine” by contributing apps to the ecosystem and making applications the community wants.&lt;/p&gt;

&lt;p&gt;Blockstack’s &lt;a href="https://blog.blockstack.org/introducing-app-mining/" rel="noopener noreferrer"&gt;App Mining&lt;/a&gt; program rewards decentralized application development. This post takes a deeper dive into how the game rewards work.&lt;/p&gt;

&lt;p&gt;This post was prepared together with &lt;a href="http://wws.princeton.edu/faculty-research/faculty/ortoleva" rel="noopener noreferrer"&gt;Pietro Ortoleva&lt;/a&gt;, &lt;a href="https://as.nyu.edu/content/nyu-as/as/faculty/ahmet-efe-ok.html" rel="noopener noreferrer"&gt;Efe Ok&lt;/a&gt;, and &lt;a href="https://as.nyu.edu/content/nyu-as/as/faculty/ennio-stacchetti.html" rel="noopener noreferrer"&gt;Ennio Stacchetti&lt;/a&gt;, game theorists and behavioral economists from Princeton and New York University. This entry describes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;How the scores from the App Reviewers (the entities submitting votes into the aggregation algorithm) are aggregated into a final score&lt;/li&gt;
&lt;li&gt;A payment scheme for the best performing apps&lt;/li&gt;
&lt;li&gt;Methods of evaluating the performance of the app review companies themselves after one year from the initial period&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This post is a description of the general principles adopted for each of these steps. We refer to the technical report below for the details (including precise formulas) and a more complete technical analysis. You can also find a white paper and a few videos that provide further details.&lt;/p&gt;




&lt;h3&gt;
  
  
  Paper: An Aggregation Algorithm for Blockstack
&lt;/h3&gt;




&lt;h3&gt;
  
  
  The App Reviewers
&lt;/h3&gt;

&lt;p&gt;Reviews of apps will be made by App Reviewers: Product Hunt, Democracy Earth, and a third one; for the purpose of this discussion, just as an example, we will use Usertesting.com. Each App Reviewer reports different scores, using different criteria that are combined into a final ranking, with the hopes of producing a more robust, less game-able version of App Mining. There presumably would be more App Reviewers added in the future, where this game design would remain applicable.&lt;/p&gt;

&lt;h4&gt;
  
  
  How to aggregate the App Reviewer scores into a final score
&lt;/h4&gt;

&lt;h5&gt;
  
  
  &lt;strong&gt;The Raw Data&lt;/strong&gt;
&lt;/h5&gt;

&lt;p&gt;From each app reviewer, we receive multiple scores, one for each criterion.&lt;/p&gt;

&lt;h5&gt;
  
  
  &lt;strong&gt;Step 1: Normalizing the Scores&lt;/strong&gt;
&lt;/h5&gt;

&lt;p&gt;&lt;strong&gt;By bringing the scores to the same units of measurement, they can be aggregated more meaningfully.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the first step we take all the scores that we receive from all reviewers and normalize them: first, by subtracting the average raw score in each category, second by dividing by the standard deviation of the raw scores in that category.&lt;/p&gt;

&lt;p&gt;This normalization avoids giving excessive weight to those app reviewers that tend to give more extreme raw scores.&lt;/p&gt;

&lt;p&gt;The resulting normalized score of an app tells us to what extent the score of that app is above or below the mean score, measured in standard deviation units. For instance, the normalized score of 0 means that the corresponding raw score is exactly the average of all raw scores (of the same type). On the other hand, a normalized score of −1 means that the corresponding raw score is one standard deviation below the average raw scores of the same type (placing it roughly on the bottom 16% of all scores), and a score of 1/2 means that the corresponding raw score is one half standard deviation above the average raw scores of the same type (placing it roughly on the top 30% of all scores).&lt;/p&gt;

&lt;h5&gt;
  
  
  &lt;strong&gt;Step 2: Extension of Normalized Scores to Incorporate Missing Data&lt;/strong&gt;
&lt;/h5&gt;

&lt;p&gt;&lt;strong&gt;If there is missing data from an App Reviewer, this is the process for handling it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At this stage of the procedure, we turn to those apps that have not received any votes in Democracy Earth, or were not evaluated on a given category or by a given app reviewer. As a general principle, we assign −1 as the normalized score of such apps for every score they miss. Given the nature of normalization we have introduced in Step 1, this means that these apps receive the score of the app that sits (in terms of its raw score) exactly one standard deviation below the average. Thus, the procedure punishes these apps, but does not necessarily give them the worst evaluation. (Moreover, some of this punishment is alleviated in Step 5, where we aggregate the normalized total scores of the apps through the evaluation periods.)&lt;/p&gt;

&lt;h5&gt;
  
  
  Step 3: Aggregation within the App Reviewers
&lt;/h5&gt;

&lt;p&gt;&lt;strong&gt;In this step we aggregate the scores for an app within each App Reviewer to obtain “the” reviewer’s score of that app.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We now have multiple normalized scores for each app reviewer — recall that each app reviewer reports multiple raw scores in different categories. In the case of a potential App Reviewer like UserTesting.com, there may be four scores, one for each category. In the case of Product Hunt, we have two scores, one from the team and one from the community. In the case of Democracy Earth, we again have two scores, one measuring the “desirability” of the app, and one measuring the “attention” that app receives in the market. In this step we aggregate the scores that an app has received from any one of these reviewers into a single score to obtain “the” reviewer score of that app. We do this simply by taking a weighted average of the reviewer’s scores.&lt;/p&gt;

&lt;h5&gt;
  
  
  Step 4: Aggregation across the App Reviewers
&lt;/h5&gt;

&lt;p&gt;&lt;strong&gt;In this step we aggregate the normalized scores that an app has received across all of the App Reviewers.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The objective is to do this in a way that reduces the impact of a single app reviewer score on the total score. In general, a main concern for the overall procedure is the potential for manipulation (such as vote buying, etc.). Our method reduces the incentives to do this by making such manipulations costly by means of adopting a nonlinear aggregation method across reviewers.&lt;/p&gt;

&lt;p&gt;Put more precisely, instead of taking simply the average of the reviewer-aggregate scores determined in Step 3 above, we pick a function F to transform each score, and only then take the average of these transformed values. This will be the aggregate score obtained in this step. The function F is chosen so that it is strictly concave for positive (normalized) scores, and strictly convex for negative (normalized) scores. (See the technical report for the exact formula.) It has an S-shape quite similar to the one below:&lt;/p&gt;

&lt;h5&gt;
  
  
  &lt;em&gt;The function F&lt;/em&gt;
&lt;/h5&gt;

&lt;p&gt;To illustrate the point of utilizing such a function F, suppose App i wishes to increase its overall ranking by 0.3. Given the (convex) payment scheme we suggest below, this may be profitable. (For, small upward shifts in the mid ranks make relatively small monetary returns.) Now, suppose that the original (normalized) score of the app from a certain reviewer is, say, 0.2. Suppose for concreteness that the function F above 0 is the square root. Then, the formula above says that to increase its full score by 0.3, the app would have to increase its score from that reviewer by 1.81: recalling that scores are normalized and that 1 is the standard deviation, this means manipulating that score from that reviewer very substantially. Importantly, the higher the app’s original score, the more unfeasible is to manipulate the algorithm from a given reviewer. If, for instance, the score of App i from Democracy Earth (DE) were 0.8, then the app needs to increase its DE score to 3.2 (in standard deviation units) which, for all practical purposes, means buying the votes of the entire community.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.blockstack.org%2Fwp-content%2Fuploads%2F2017%2F12%2Fimage_preview-10.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.blockstack.org%2Fwp-content%2Fuploads%2F2017%2F12%2Fimage_preview-10.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the other hand, with S-shaped functions like the one above it is a bit easier to have small manipulations for scores near the average scores. But given the payment scheme (see below), this may not be very profitable.&lt;/p&gt;

&lt;h5&gt;
  
  
  Step 5: Intertemporal aggregation, only for periods after the first
&lt;/h5&gt;

&lt;p&gt;&lt;strong&gt;Since app developers will continue to improve their apps, and since the past and present evaluations of their app contains valuable information, we can continuously account for this with a “memory” function.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For the initial period, the algorithm stops here. For periods after the first, however, we introduce a “memory” for the algorithm, because the previous scores of an app may contain valuable information that one should not lose. We thus adopt a scheme of discounted aggregation of scores over time.&lt;/p&gt;

&lt;p&gt;Specifically, we will discount previous scores by a factor of 0.8.&lt;/p&gt;

&lt;p&gt;The algorithm at this stage works as follows. Suppose we are in the second period. Consider the scores of the app obtained in Step 4 above in the initial period, call it s(1). Suppose the score of this app obtained in Step 4 in the second period, is s(2). Then, we obtain a total score for period 2, Total(2) as&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.blockstack.org%2Fwp-content%2Fuploads%2F2017%2F12%2FTotal2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.blockstack.org%2Fwp-content%2Fuploads%2F2017%2F12%2FTotal2.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In general, to compute the total score for period m, Total(m), we use the following recursive formula:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.blockstack.org%2Fwp-content%2Fuploads%2F2017%2F12%2FTotal2-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.blockstack.org%2Fwp-content%2Fuploads%2F2017%2F12%2FTotal2-1.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;According to this algorithm, older scores are accounted for, but discounted.&lt;/p&gt;

&lt;h4&gt;
  
  
  New Apps
&lt;/h4&gt;

&lt;p&gt;In some periods new apps may enter the pool. It is important that the reviewers are made aware when a new app arrives, and that they make sure to include it in their evaluation process as soon as it arrives. This is crucial for the method that is applied for missing data pertaining to a new app.&lt;/p&gt;

&lt;p&gt;In the case of new apps, the algorithm will compute a score for new apps as it this was the first period in the algorithm was run. Because the total scores of the other apps are normalized, it will thus be comparable, and new apps will not be disadvantaged.&lt;/p&gt;

&lt;h3&gt;
  
  
  The payment scheme for Apps
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;App developers must be paid out each month in accordance to their app’s ranking, where the higher your app is ranked the more you will earn.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We propose to use the following payment scheme. Blockstack sets total budget M, a percentage p, and a maximum number of paid apps n (which could be more than the total number of apps under consideration). Then, the scheme pays the fraction p of M to the first app; the fraction p of the remainder to the second app; and so on. In particular, the second best app is paid&lt;br&gt;&lt;br&gt;
 &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.blockstack.org%2Fwp-content%2Fuploads%2F2017%2F12%2FTotal2-2-e1545020821916.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.blockstack.org%2Fwp-content%2Fuploads%2F2017%2F12%2FTotal2-2-e1545020821916.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;while the nth app is paid&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.blockstack.org%2Fwp-content%2Fuploads%2F2017%2F12%2FTotal2-3-e1545020874913.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.blockstack.org%2Fwp-content%2Fuploads%2F2017%2F12%2FTotal2-3-e1545020874913.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This proceeds until app n is reached and/or there are no more apps.&lt;/p&gt;

&lt;p&gt;We adopt p=20% for the pilot of App Mining.&lt;/p&gt;

&lt;h4&gt;
  
  
  Dealing with Ties
&lt;/h4&gt;

&lt;p&gt;It may happen that two or more apps would get the same final score, and hence tie for a position in the final ranking. In this case, the payments to the apps are equally distributed among the apps that are tied, and the total amount to be shared is the one that would have been paid to all these apps if there was no tie.&lt;/p&gt;

&lt;p&gt;For example, recall that the first app receives a payment of p*M, and the second app a payment of &lt;em&gt;p(1 − p)M.&lt;/em&gt; Now suppose that two apps are tied for the first place. Then the two apps share equally a total of &lt;em&gt;pM + p(1 − p)M.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Criteria to Evaluate App Reviewers
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The below criteria are suggestions for evaluating App Reviewers and could be used for voting or for further incentivization.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We suggest three criteria to evaluate the app reviewers. All three criteria have advantages and disadvantages. The community will be given the outcome of the rankings according to all three criteria – the third one being run both globally and by broad categories – in order to make their evaluations.&lt;/p&gt;

&lt;h4&gt;
  
  
  Criterion A: Agreement with the Final Ranking
&lt;/h4&gt;

&lt;p&gt;A first possible criterion is to investigate whether a reviewer’s score is similar or diﬀerent to the final, aggregate one, obtained after 12 months. There are two reasons to consider this final score as a benchmark. First, it is the ranking resulting from the most information – it aggregates a number of diﬀerent reviews repeated over time – and may thus be considered the most accurate. Second, because these final scores will not be known until much later, it is harder for app reviewers to adapt to them beyond reporting their genuine evaluation of the app.&lt;/p&gt;

&lt;p&gt;Thus, we can construct a score for each reviewer which is minus the sum of the square distances between the score of each app in each period by that reviewer, and the final aggregate score of the app.&lt;/p&gt;

&lt;p&gt;There are two limitations of this criterion. First, because it punishes the variance with respect to a final score, it punishes reviewers with scores that are highly variable over time. For example, if the final score of an app is 1, a reviewer that reports 1 all the time has a higher score than a reviewer whose scores for that app alternate between 0.8 and 1.2.&lt;/p&gt;

&lt;p&gt;The second limitation is that it discourages reviewers to use an approach that is very different from that of the other reviewers. For example, suppose that two app reviewers follow methodologies that lead them to be largely in agreement, while a third one tends to give uncorrelated scores. Then, the last reviewer is more likely to receive a lower reviewer-score, unless his method is better at predicting the final score.&lt;/p&gt;

&lt;h4&gt;
  
  
  Criterion B: Agreement with Objective Criteria
&lt;/h4&gt;

&lt;p&gt;A second measure with which reviewers may be evaluated is by comparing their scores with external, objective criteria. For example, it could be possible to compute a score of diﬀerent apps based on external financing, or based on number of monthly active users. One can then compute whether each reviewers’ score in each period agrees, or not, with this final objective ranking.&lt;/p&gt;

&lt;p&gt;This is constructed like Criterion A above, except that uses as a comparison point, instead of the total final score, the objective criterion (also normalized like in Step 1 of our algorithm).&lt;/p&gt;

&lt;p&gt;As in the case of Criterion A, this criterion rewards reviewers with scores that have been highly consistent over time. It also rewards those who have been accurate in predicting the apps that are financed the most/least, or have the most monthly active users.&lt;/p&gt;

&lt;h4&gt;
  
  
  Criterion C: Spotting Top Apps
&lt;/h4&gt;

&lt;p&gt;A third criterion to evaluate reviewers is their ability to spot great apps early. This could be a particularly desirable feature, as it may be particularly important for apps with great potential to receive funds early so that they reduce their risk of disappearing and continue to grow.&lt;/p&gt;

&lt;p&gt;Consider the apps that are in the top 10% with respect to these total, final scores; let T denote the set of all such apps. We want to give credit to a reviewer that gives a high score to apps in this group earlier on. Thus, we can simply add the number of times in which a given reviewer places each app in T in the top 10% of its own aggregate ranking (computed in Step 3 of our algorithm).&lt;/p&gt;

&lt;p&gt;Note that reviewers with scores that fluctuate a lot over time may (although need not) have an advantage according to this criterion. Note also that this measure does not depend on the actual score that apps are given either by the reviewer or in the final ranking: all that it matters is the ability to identify top performers, even if their relative rank is diﬀerent from the final one. This is markedly diﬀerent from the approach used in the other two criteria above.&lt;/p&gt;

&lt;p&gt;Finally, let us note that this criterion can be applied to the whole set of apps, or it can be run category by category. The latter method could be particularly useful in that it may incentivize reviewers to spot the good apps even in categories that are not too popular, thereby ensuring that the available apps are consistently good across the board.&lt;/p&gt;




&lt;p&gt;We hope this explainer was useful to you. If you would like to continue the discussion about App Mining, head over to the &lt;a href="https://forum.blockstack.org" rel="noopener noreferrer"&gt;forum&lt;/a&gt;. If you are interested in entering your app into the App Mining program, visit &lt;a href="https://app.co/mining" rel="noopener noreferrer"&gt;app.co/mining&lt;/a&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  Full Video Presentation
&lt;/h3&gt;

&lt;p&gt;The post &lt;a href="https://blog.blockstack.org/app-mining-game-theory-algorithm-design/" rel="noopener noreferrer"&gt;How App Mining Works&lt;/a&gt; appeared first on &lt;a href="https://blog.blockstack.org" rel="noopener noreferrer"&gt;Blockstack Blog - Blockstack&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>appmining</category>
      <category>governance</category>
      <category>guestauthor</category>
    </item>
    <item>
      <title>Learn to Build Decentralized Applications In an Hour: Introducing ‘Zero-to-Dapp’</title>
      <dc:creator>Mitchell Cuevas</dc:creator>
      <pubDate>Fri, 14 Dec 2018 17:31:49 +0000</pubDate>
      <link>https://forem.com/blockstack/learn-to-build-decentralized-applications-in-an-hour-introducing-zero-to-dapp-2ec3</link>
      <guid>https://forem.com/blockstack/learn-to-build-decentralized-applications-in-an-hour-introducing-zero-to-dapp-2ec3</guid>
      <description>&lt;p&gt;Learning to build a decentralized blockchain application doesn’t have to be difficult or time-consuming for developers. Using languages and frameworks they already know, Blockstack makes it easy to build decentralized applications that protect privacy, are inherently more secure, provide data portability, &lt;a href="https://blockstack.org/what-is-blockstack/" rel="noopener noreferrer"&gt;and more&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To help make getting started even easier, we’re introducing the &lt;a href="https://docs.blockstack.org/develop/zero_to_dapp_1.html" rel="noopener noreferrer"&gt;‘Zero-to-Dapp’ tutorial. &lt;/a&gt;The tutorial is a step by step sequence designed to help developers quickly understand the Blockstack platform, the benefits of decentralized architecture, and create a working decentralized application, all in just about an hour.&lt;/p&gt;

&lt;p&gt;While working through the Zero-to-Dapp tutorial, developers will create a multi-page web app called ‘Animal Kingdom’. In the course of building the application developers without previous blockchain or decentralized application experience will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learn how decentralized applications (Dapps) are different from traditional web or mobile apps.&lt;/li&gt;
&lt;li&gt;Explore the Blockstack Ecosystem and its powerful platform capabilities.&lt;/li&gt;
&lt;li&gt;Discover the potential resources available through App Mining.&lt;/li&gt;
&lt;li&gt;Build a multi-page web dapp using standard front-end frameworks.&lt;/li&gt;
&lt;li&gt;Deploy and publish your application&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In addition to learning a new approach and platform, developers who complete the Zero-to-Dapp tutorial and submit it to &lt;a href="https://app.co" rel="noopener noreferrer"&gt;App.co&lt;/a&gt; get a free limited edition t-shirt (pictured below).&lt;/p&gt;

&lt;p&gt;As you begin building we welcome you to join the Blockstack community, you can connect with thousands of other developers and the Blockstack PBC team via &lt;a href="http://chat.blockstack.org/" rel="noopener noreferrer"&gt;Slack&lt;/a&gt; and the &lt;a href="https://forum.blockstack.org/" rel="noopener noreferrer"&gt;Forum&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.blockstack.org/develop/zero_to_dapp_1.html" rel="noopener noreferrer"&gt;Start Now&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.blockstack.org%2Fwp-content%2Fuploads%2F2018%2F12%2Fimage_preview-9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.blockstack.org%2Fwp-content%2Fuploads%2F2018%2F12%2Fimage_preview-9.png" alt="zero-to-dapp"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://blog.blockstack.org/learn-to-build-decentralized-applications-in-an-hour-introducing-zero-to-dapp/" rel="noopener noreferrer"&gt;Learn to Build Decentralized Applications In an Hour: Introducing ‘Zero-to-Dapp’&lt;/a&gt; appeared first on &lt;a href="https://blog.blockstack.org" rel="noopener noreferrer"&gt;Blockstack Blog - Blockstack&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>dapps</category>
      <category>technical</category>
      <category>blockchain</category>
      <category>documentation</category>
    </item>
    <item>
      <title>Blockstack authentication server-side  — node.js</title>
      <dc:creator>Mitchell Cuevas</dc:creator>
      <pubDate>Fri, 07 Dec 2018 14:00:19 +0000</pubDate>
      <link>https://forem.com/blockstack/blockstack-authentication-server-side-nodejs-3em2</link>
      <guid>https://forem.com/blockstack/blockstack-authentication-server-side-nodejs-3em2</guid>
      <description>

&lt;p&gt;&lt;em&gt;This post was originally published &lt;a href="https://medium.com/@geeogi/ef9bf3801c15"&gt;on Medium.com&lt;/a&gt; by George Bennet and is republished with permission.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The Blockstack authentication flow enables users to authenticate themselves in an entirely client-side fashion. This way, users can port their identity and private data without the need for third party authentication.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But…&lt;/strong&gt;  what if you need to authenticate with a server? Users may need to authenticate with third parties in order to access services that they trust. Luckily, Blockstack has all the methods required to support this use case.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Client set-up&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The first half of the flow works exactly the same as the client-only flow described in the Blockstack guide. Your app will generate an  &lt;strong&gt;authRequest&lt;/strong&gt; with the necessary scopes and redirect your user to the blockstack browser. Your user will return to the callback URL with an  &lt;strong&gt;authResponse&lt;/strong&gt;  JWT which contains all the information needed to authenticate the user. You’ll need to POST the  &lt;strong&gt;authResponse&lt;/strong&gt;  to your server for authentication.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Server set-up&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The  &lt;strong&gt;authResponse&lt;/strong&gt;  token contains all the information needed to authenticate your user including a unique identifier, email address and the URL needed to fetch the user’s profile data.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First, we can use the &lt;strong&gt;blockstack.verifyAuthResponse()&lt;/strong&gt; method to verify that the  &lt;strong&gt;authResponse&lt;/strong&gt;  is valid&lt;/li&gt;
&lt;li&gt;Then, decode the JWT to reveal the user’s unique identifier, email and profile URL&lt;/li&gt;
&lt;li&gt;Then, perform a GET request to the profile URL to retrieve the user’s name&lt;/li&gt;
&lt;/ul&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight hack"&gt;&lt;code&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;FOR&lt;/span&gt; &lt;span class="nx"&gt;DEMONSTRATION&lt;/span&gt; &lt;span class="nx"&gt;PURPOSES&lt;/span&gt; &lt;span class="nx"&gt;ONLY&lt;/span&gt; &lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;

&lt;span class="nx"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt; &lt;span class="nx"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;"request-promise"&lt;/span&gt; &lt;span class="nx"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;verifyAuthResponse&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;"blockstack"&lt;/span&gt; &lt;span class="nx"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;decodeToken&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;"jsontokens"&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;blockstackAuth&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="no"&gt;LOOKUP&lt;/span&gt;&lt;span class="nx"&gt;\_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"https://core.blockstack.org/v1/names"&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="no"&gt;authResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;authResponse&lt;/span&gt; &lt;span class="nx"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt; &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="no"&gt;valid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;verifyAuthResponse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;authResponse&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;LOOKUP\_URL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;decodeToken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;authResponse&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;valid&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"invalid authResponse."&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="no"&gt;userJSON&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;profile\_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="no"&gt;userToken&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userProfile&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;decodedToken&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="no"&gt;userData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;userToken&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;claim&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="no"&gt;userUniqueIdentifier&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;iss&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="no"&gt;userEmail&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="no"&gt;userFullName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;userData&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="c1"&gt;// Some logic relating to the now authenticated user e.g. sign-up&lt;/span&gt;

&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;send&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"all good!"&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  *&lt;em&gt;Catch — clock skew *&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;Time sensitive JWT authentication can suffer from clock skew, whereby the issuer’s time and the authenticator’s time is out of sync.&lt;/p&gt;

&lt;p&gt;If you find that a blockstack  &lt;strong&gt;authResponse&lt;/strong&gt;  is deemed invalid by your server, it might be because your server’s time is behind that of the server which issued the  &lt;strong&gt;authResponse. ** The **blockstack.verifyAuthResponse()&lt;/strong&gt; method will deem the ** ** futuristic issuance time as invalid.&lt;/p&gt;

&lt;p&gt;To resolve this, at Zinc, we omitted the issuance validation of the &lt;strong&gt;blockstack.verifyAuthResponse() *&lt;em&gt;method *&lt;/em&gt; ** in favour of a custom method which allowed for time discrepancy (or “leeway” by the &lt;a href="https://medium.com/r/?url=https%3A%2F%2Ftools.ietf.org%2Fhtml%2Frfc7519%23section-4.1.4"&gt;JWT standard&lt;/a&gt;). We made use of the Blockstack component functions to re-construct our own  **authResponse&lt;/strong&gt;  validation:&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// blockstack.js methods await blockstack.isExpirationDateValid(authResponse) await blockstack.doSignaturesMatchPublicKeys(authResponse) await blockstack.doPublicKeysMatchIssuer(authResponse) await blockstack.doPublicKeysMatchUsername(authResponse, LOOKUP\_URL)

// custom issuance date validation method await isIssuanceDateValid(authResponse, {leeway: 30})
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The post &lt;a href="https://blog.blockstack.org/blockstack-authentication-server-side-node-js/"&gt;Blockstack authentication server-side  — node.js&lt;/a&gt; appeared first on &lt;a href="https://blog.blockstack.org"&gt;Blockstack Blog - Blockstack&lt;/a&gt;.&lt;/p&gt;


</description>
      <category>guestauthor</category>
      <category>technical</category>
    </item>
    <item>
      <title>Free Blockchain Application Ideas</title>
      <dc:creator>Mitchell Cuevas</dc:creator>
      <pubDate>Wed, 05 Dec 2018 16:00:44 +0000</pubDate>
      <link>https://forem.com/blockstack/free-blockchain-application-ideas-39ep</link>
      <guid>https://forem.com/blockstack/free-blockchain-application-ideas-39ep</guid>
      <description>&lt;p&gt;Blockchain-based applications can offer a safe, secure, and more robust (even censorship resistant) experience for their users, but it is early days and there simply aren’t enough great ones being built.&lt;/p&gt;

&lt;p&gt;At a basic level you can sign in to them with an identity you alone control, run the app locally on your device, save your data to your own private cloud, and connect with friends who are also doing the same…without relying on middlemen or centralized data silos. This allows for complete freedom and user-centricity, meaning if I don’t like an app, I can fluidly move to another app by taking my data with me. This also means that some apps won’t quite look like traditional “apps” since people using this infrastructure can reorganize themselves in any way they want.&lt;/p&gt;

&lt;p&gt;To help incentivize app creators to build the future of high-quality apps, &lt;a href="https://blockstack.org/blog/introducing-app-mining/"&gt;we recently launched App Mining&lt;/a&gt;. This means that every month is a new opportunity to earn a portion of what is currently $100,000 in monthly payouts across registered apps. If you’ve been thinking about it or have some extra time and want to contribute to the ecosystem, here are some app ideas we think would be useful and could be successful:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Decentralized Localbitcoins.com&lt;/li&gt;
&lt;li&gt;Earn.com-like decentralized email client&lt;/li&gt;
&lt;li&gt;Coin-operated file viewer&lt;/li&gt;
&lt;li&gt;Decentralized Patreon alternative (information is not free! :-))&lt;/li&gt;
&lt;li&gt;Podcast that pays podcasters&lt;/li&gt;
&lt;li&gt;Spotify that pays artists&lt;/li&gt;
&lt;li&gt;Dating app with specific communities&lt;/li&gt;
&lt;li&gt;“Dunbar” Apps for your 1.5, 5, 15, 50, 150 friends&lt;/li&gt;
&lt;li&gt;Social media where you save photos of your friends&lt;/li&gt;
&lt;li&gt;Social media for people who are depressed (bring them from unnaturally unhappy to just naturally unhappy! ;-P)&lt;/li&gt;
&lt;li&gt;“Blockstack experience” app (educational app about decentralization that walks you through the how and why of signing in with your Blockstack ID, shows your files in private gaia cloud, etc.)&lt;/li&gt;
&lt;li&gt;App connecting community to campaign to make facebook’s algorithm public. Sign in to see progress, save files and communications in it.&lt;/li&gt;
&lt;li&gt;Real Person Generator: KYC in a way that solves bot Sybil attacks but preserves privacy.&lt;/li&gt;
&lt;li&gt;Blockstack Stacks token wallet app&lt;/li&gt;
&lt;li&gt;Mixpanel for privacy-centric blockchain applications&lt;/li&gt;
&lt;li&gt;App that connects you on one highly sensitive thing&lt;/li&gt;
&lt;li&gt;Auditable, voluntary pothole filling&lt;/li&gt;
&lt;li&gt;Personal therapy app where you can record your sessions privately&lt;/li&gt;
&lt;li&gt;Scooters! Sign in to a scooter with my Blockstack ID and own your ride history in your Gaia private cloud.&lt;/li&gt;
&lt;li&gt;This could allow many transportation networks to serve you in new ways.&lt;/li&gt;
&lt;li&gt;Github without the centralized data silo&lt;/li&gt;
&lt;li&gt;Slack without the centralized data silo&lt;/li&gt;
&lt;li&gt;An app that uploads facebook’s data and repurposes it. I don’t want to just download my facebook data and delete facebook, I want to recycle it into a new app! Same for twitter.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have ideas for new blockchain apps add them to the public forum:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://forum.blockstack.org/t/big-list-of-app-ideas/6816"&gt;Add to the Forum&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are building an app using Blockstack, sign up for app mining and earn money each month!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://app.co/mining"&gt;Register&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://blog.blockstack.org/free-blockchain-application-ideas/"&gt;Free Blockchain Application Ideas&lt;/a&gt; appeared first on &lt;a href="https://blog.blockstack.org"&gt;Blockstack Blog - Blockstack&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>dapps</category>
    </item>
  </channel>
</rss>
