域名频道资讯站
我们一直在努力制造惊吓

想加入区块链行业吗?这份开发者权威指南值得一读

作者介绍:Haseeb:加密货币对冲基金MetaStable Capital的普通合伙人。

原文链接:https://haseebq.com/about/

本文应该是我看到过对于区块链应用开发学习指导最全面,同时也是最好的材料。希望这篇文章能够让想学习区块链开发的朋友有所收获,在此特别感谢两位本文的翻译者:了得资本的Managing Partner @Blake 及 Mochimo 和 Ixian 的中国社区负责人 @angryolk。
 

区块链开发权威指南

加密货币,ICO,神奇的互联网现金 – 这一切都非常令人兴奋,而你,热切的开发者,想要了解这些疯狂的东西,你该从哪里开始呢?

我很高兴你对这个领域感到兴奋。我也是。但你可能会发现还是不清楚从哪里开始。区块链正在以极快的速度发展,但没有明确的指南来学习这些东西。

自从我离开Airbnb在区块链上全职工作以来,很多人都向我询问如何全时进入区块链空间。考虑一下我的权威(不可避免地这篇文章是不完整的)区块链工程指南。

本指南分为十个部分

为什么要学习区块链开发?

先决条件

比特币的理论基础

如何自己构建区块链

以太坊与智能合约编程

智能合约安全

开始真正上手

建立自己的项目

领导区块链社区

得到一份相关工作

你为什么要学习区块链开发?

在我回答这个问题之前,让我先做一个小的陈述:区块链现在是一个被高估的事物。这些价格是不可持续的,崩溃肯定会到来。这一切以前都发生过,而且很可能还会发生。但如果你在这个领域长期工作,你就会学会对价格置之不理。用 emin gun sierr 的话来说,价格是加密货币中最不有趣的部分。这些都是非常重要的技术,它们将不可逆转地改变世界。如果你不确定,我不能直接告诉你是否跳进去。但我可以试着告诉你五个让我信服的理由:

区块链仍然很早期

比特币是10年前发明的,但在过去几年里,比特币的创新率才达到一个狂热的水平,特别是随着以太坊在2015年的推出。这一领域的大多数新公司和想法都是建立在以太坊之上的,以太坊还很不成熟。

即使你现在开始,你也可以在几年内成为世界级的专家。大多数人都没做那么久,要赶上也没那么难。从现在开始(学习区块链)类似于在21世纪末开始研究深度学习。


这个领域还没有很强的人才漏斗

大学里最优秀、最聪明的学生大多专注于机器学习、网络编程或游戏开发。当然,区块链在公众话语中变得越来越具有吸引力,但它们仍然是一个怪异和颠覆性的话题,你的职业生涯可能受到一些这方面的影响。

在早期,区块链只属于cypherpunk(赛博朋克)(其实更准确的说服应该是加密朋克)、偏执狂和怪人的领域。只是最近才开始改变。作为一个好奇和开放的开发人员,你会给这个领域带来很多价值。

大部分创新都发生在学术界之外

据我们所知,中本聪并不是一个学者。目前还没有一所大学或机构提供一整套的区块链精选。这里的大多数创新都是由狂热者、企业家和独立研究人员领导的。你需要知道的几乎都是白皮书、博客、公共休闲频道和开源软件。你只需要卷起袖子,投入战斗。

对人才的需求远远超过供给

只是在这个领域没有足够的开发人员,他们也不能得到足够快的培训。每个人都在竞相招聘区块链人才,而项目也感受到了人才短缺。许多最好的公司付不起足够的钱让员工留下来,因为他们有太多的机会。如果你掌握了一些技能,就很容易找到工作。

加密货币真的太特么酷了

还有什么地方可以建立像加密、安全、去中心化货币这样科幻小说里的事物?现在是狂野的西部 – 这带来好的和坏的方面。这个领域可以更加透明,并最终实现监管。但毫无疑问,加密货币是您现在可以使用的最具创新性的领域之一。 Naval Ravikant 在最近的一次采访中说:成功的关键是给社会提供它想要的东西,只是你不知道怎么去做而已。你无法在学校学习到这样的知识; 如果可以的话,这个世界的物质文明早就极度饱和了。 所以去建立一些没有人知道如何构建的东西吧。而现在,区块链是全新的,还有很多东西需要解决。如果你成功地建立了去中心化技术的未来,那么世界将会给你带来丰厚的回报。 所以说,在你进入这个领域之前,你需要知道哪些东西呢? 

先决条件

我建议你在深入研究之前,先加强对基本原理的理解。区块链建立在计算机科学、密码学和经济学数十年研究的基础上。中本聪是一个“叛徒”,但他也很清楚之前的历史。为了理解区块链的工作原理,您需要了解区块链之前的构建块,以及为什么这些东西不起作用。

这里有一些很好的先决条件需要熟悉,按重要性排序。

注意,这些链接只是一个起点,您可能会想深入了解其中的许多主题。

计算机科学

数据结构

您需要熟悉主要数据结构的特性和复杂性保证: linked lists, binary search trees, hash maps, 以及 graphs (特别是在区块链中具有显著特征的有向非循环图)。从头开始构建它们有助于更好地理解它们的工作方式和属性。


密码学

密码学是加密货币的代名词和基础。所有加密货币都使用公钥/私钥加密( public/private key cryptography)作为身份和身份验证的基础。我建议学习 RSA( RSA)(它很容易学习,不需要很强的数学背景),然后看看 ecdsa( ECDSA)。椭圆曲线密码需要更抽象的数学——理解所有细节并不重要,但要知道,这是大多数加密货币(包括比特币)使用的密码。

另一个重要的密码原语是密码散列函数(哈希函数)。这些可用于一致性,并且是 merkle 树的构建块。Merkle trees 支持 Merkle proofs,这是区块链用于可扩展性的关键优化之一。


分布式系统

关于分布式系统有一些很好的教科书(https://dataintensive.net/),但这是一个庞大而困难的研究领域。 分布式系统对于区块链的论证是绝对必要的,因此在处理区块链编程之前必须在此建立基础。

一旦你的系统不再运行在一台机器上,就必须开始论证一致性和共识。 您需要了解可线性化和最终一致性模型之间的区别。 您还需要了解容错一致性算法的保证,例如  Paxos 和  RAFT。 了解在分布式系统中论证时间的困难, 鉴赏安全与活性之间的权衡。

有了这样的背景,你将能够理解拜占庭容错共识的困难,这是公共区块链的主要安全要求。 您将需要了解  PBFT,这是首个提供拜占庭容错共识的可扩展算法之一。 PBFT 是许多非工作证明区块链一致性算法的基础。 再一次,你不需要了解 PBFT 太多的细节,而是总体的思路及其安全保障性。

理解传统的分布式数据库也是非常有用的(其核心思想是,区块链本质上是数据库)。 了解分片(例如通过一致性哈希),主从复制( leader-follower replication),分布式哈希表 (DHTs),例如 Chord 或 Kademlia.。


网络

区块链的分布式在很大程度上源于其点对点网络拓扑结构。因此,区块链是过去 p2p 网络的直接产物。

要了解区块链通信模型,您需要了解计算机网络的基础知识:如 TCP 与 UDP、数据包模型、IP数据包,以及大致的网络路由工作方式。

公共区块链倾向于通过 gossip protocols 和 flooding 来传播信息。学习p2p网络设计的历史,包括  Napster to Gnutella, BitTorrent ,Tor,都具有一定的指导意义。区块链有自己的特点,但它们借鉴了这些网络的经验教训以及它们是如何设计的。

经济学

加密货币本质上是多学科的 – 这是使它们如此迷人和激进的主要原因。 除了计算机科学,密码学和网络,它们还与经济学密切相关。 加密货币可以通过其经济结构获得许多安全属性,这通常被称为加密经济学。 因此,经济学对于理解加密货币至关重要。

博弈论

对加密货币最重要的经济学分支是博弈论,即研究多个主体之间的收益和激励。你不需要深入到很细节,但你需要了解博弈论分析的基本工具,以及如何使用它们来分析一次性和持续性游戏中的激励因素。

你的剧本中的两个关键概念应该是纳什均衡点和谢林点,因为它们在密码学分析中具有突出的特点。


宏观经济学

加密货币不仅是协议,也是货币的形式。因此,它们响应宏观经济规律(如果它们可以被称为规律的话)。加密货币受制于不同的货币政策,并对通货膨胀和通货紧缩作出可预见的反应。你应该了解这些过程以及它们对支出、储蓄等的影响。

另一个有价值的经济概念是货币的流通速度,特别是当它与货币的价值相对应时。


微观经济学

加密货币也深深地与市场交织在一起,这需要了解微观经济学。你需要对供求曲线有很强的直觉。你应该能够解释竞争和机会成本(它们将经常应用于挖矿领域)。在许多硬币发行和密码经济系统中,拍卖理论具有突出的特点。

我希望你已经熟悉了其中的一些话题。如果是的话,请随意浏览或跳过它们。

好吧,到现在为止,你已经完成并巩固了你的基础知识,现在您已经掌握了以上的理论,让我们来开始区块链开发吧。

比特币的理论基础

2008年10月,Satoshi Nakamoto发表了一份白皮书,他在其中描述了一种分散数字货币的协议。他把这个协议叫做比特币。

在你了解区块链背后的伟大创意之前,你必须先从比特币开始,掌握 Satoshi 的独到见解。

首先,我建议你建立关于工作证明和分叉选择规则(也称为中本共识)的直觉。你可以从以下视频开始:区块链可视化 Demohttps://www.youtube.com/watch?v=_160oMzblY8&feature=youtu.be

我建议多看几个视频,让想法更加深入你的脑海:比特币的工作原理https://www.youtube.com/watch?v=bBC-nXj3Ng4&feature=youtu.be

很好! 现在你已经建立了自己的直觉,本文将提供关于比特币原理的关键组件更深入的阐述。

自己构建区块链

现在你有了高级直觉,是时候建立自己的基于工作的区块链证明了。别担心,这比听起来容易。这里有一些好的资源。

首先,我有一个视频讲座,我将详细介绍如何在 ruby 中实现这一点(即使你不是 ruby 程序员,我也建议您观看):如何用 ruby 创建一条区块链讲解https://www.youtube.com/watch?time_continue=1016&v=3aJI1ABdjQk

资源及 PPT 点击此链接:https://github.com/Haseeb-Qureshi/lets-build-a-blockchain

你还可以找到用其他各种语言编写的区块链实现形式。建立你自己的区块链,并满足你自己的需求,是最实用的方式。

一旦你做到了这一点,你应该能很好地掌握如何在区块链(即比特币)上实现一个简单的支付应用程序。你现在也应该有足够的背景能够阅读和理解最初的比特币白皮书。

为了了解比特币挖矿的经济学和机制,我建议观看普林斯顿的比特币和加密货币课程中关于比特币挖矿的讲座。

如果你已经完成了这一课程,你应该对比特币有了足够的了解,能够通过比特币块头来理解它的每一个组成部分的含义。你还应该能够玩比特币块浏览器和导航原始比特币交易。

现在是研究比特币和加密货币历史的好时机。下面的视频,由加州大学伯克利分校提供,提供了一个很好的概述。

伯克利分校比特币学习视频:https://haseebq.com/the-authoritative-guide-to-blockchain-development/

一些额外的可靠学习材料:

比特币的学术先驱 (Academic precursors to Bitcoin)

比特币机制:utxos和比特币脚本(比特币脚本不是特别重要,只是大致知道它能做什么)( UTXOs and Bitcoin script)

比特币分叉指南 (Short guide to Bitcoin forks)

软分叉和矿工信号 (Soft forks and miner signaling)

双重花费,51%攻击和自私采矿(Double spends, 51% attacks, and selfish mining)

重放攻击 (Replay attacks)

比特币的可扩展问题是比特币生态系统中大多数争议的根源。你应该知道为什么行业内对块大小争论这么多。(Bitcoin scalability problems)

隔离见证,也就是Segwit,不是非常必要的,但它引出了很多东西。(Segregated witness, a.k.a. SegWit)

Lightning Network 是比特币更重要的扩展解决方案之一,也推广到了其他区块链中。(Lightning Network)

(NPC 也曾编译过一份完整的关于闪电网络的学习资料,可在历史消息中查看)

比特币完整节点、比特币费用统计、图表、图表和更多图表(Bitcoin full nodes, Bitcoin fee statistics, charts, charts)

比特币能源消耗指数(在本文公布时,比特币采矿消耗的能源与秘鲁所有地区一样多)

(Bitcoin energy consumption index )

格温关于比特币的深刻论述(Insightful essay by Gwern)

如果你想深入兔子洞的话,jameson lopp 在比特币上还有很多其他资源。(wealth of other resources


以太坊(Ethereum)和智能合约的编程

现在你已经构建了一个区块链并了解了比特币的动态,现在是时候深入研究以太坊了。

你了解区块链和工作证明如何在点对点网络中实现分布式、拜占庭式的容错一致性。但是,支付网络只是你可以在这样的区块链上运行的一个应用之一。2013年,以太坊的创始人Vitalik Buterin问道: 使用区块链来实现去中心化的计算机会怎么样?

在Ethereum,你向矿工付费,让他们在这个分布式虚拟机上执行你的程序。这代表你可以使用图灵完备的编程语言(与比特币脚本不同)执行任意的计算。当然,这包括与支付相关的应用,因此Ethereum启用并催生了创新的一套超越比特币的功能。

这就引出了智能合约——在虚拟机上运行的程序名称。智能合约可以根据程序的执行直接与区块链的加密货币进行交互。换句话说,你可以创建自动执行的金融合约。这是一个疯狂的想法,一旦你接受了这个编程模型,你就可以做各种想做的事情。

Ethereum催生了ICO的浪潮和构建在区块链之上的开发人员。它是仅次于比特币的第二大加密货币,拥有超过10倍的下一代最流行平台的开发人员,最强大的开发团队,最成熟的工具,以及基于它的大多数ICO和项目。它还拥有最多的行业支持。如果你正在进行区块链开发,那么你将Ethereum智能合约编写代码。(即使你不是,了解这个领域的情况也是很重要的。)

首先,我们对Ethereum做一个更详细和高层次说明:

以太坊背后的理念也催生了加密经济学领域的创新浪潮。你应该深入了解DAO的思想,以及它们所暗示的所有科幻狂热梦想。

好了,幻想已经够多了,让我们深入研究一下技术。

以下是Preethi Kasireddy对Ethereum yellow paper及其内部结构的一个很好的概述。Ethereum使用的是账户模型,而不是比特币的UTXO模型——你很快就会看到为什么这样更容易编写智能合约。

与任何技术一样,了解以太坊的最佳方式是构建几个小项目。

Ethereum的主要编程语言是Solidity,这是一种静态类型的JavaScript-esque语言。这是一种有很多缺点的语言,它也有很多设计上的问题。一旦Viper等更健壮的语言准备好投入生产,它们可能会取代Solidity,但目前Solidity是智能合约的编程通用语言。它基本上是Ethereum的JavaScript,所以你需要学习它(和它的缺陷)。

首次接触Solidity语言开发时,我建议你通读所有的cryptozombie教程。这是一个令人愉快和高质量的Codecademy-esque风格的教程,会教你Solidity的基础编程。

现在,已经激起了你的求知欲,是时候着手自己尝试了。

Ethereum的“hello world”可以创建一个兼容ERC-20的令牌。我建议将本指南作为指导你完成这个过程的第一个教程。

Remix是一个浏览器内的Solidity本文素材来自互联网

赞(0)
分享到: 更多 (0)

中国专业的网站域名及网站空间提供商

买域名买空间