区块链开发的权威指南

原文:https://medium.freecodecamp.org/the-authoritative-guide-to-blockchain-development-855ab65b58bc

新的csdn的编辑器真的不好用,没markdown好用。

加密货币,ICOS,神奇的网络货币——这些都是非常让人激动的疯狂事件。也是你们这些充满激

情的开发者所希望加入的。

我很高兴你对这个领域非常感兴趣。我也是。但是你可能对从哪里开始学习并不是很清楚。区块链

正在以折颈的速度移动,但是并没有斜波来帮助学习这个东西。

自从我离开Airbnb全职于区块链,许多人都开始找我了解如何全职投入到区块链这个领域。可以

这个当做是我对区块链编程的权威教程(必然是不完全的)。

这个教程会按照以下10个部分展开:

  1. 你为什么需要学习开发区块链?
  2. 学前准备
  3. 比特币理论基础
  4. 创建属于你自己的区块链
  5. 以太坊和智能合约编程
  6. 智能合约安全
  7. 独立学习
  8. 创建你自己的项目
  9. 导向区块链社区
  10. 找到相关工作

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

在我回答这个问题前,先让我申明下:区块链现在是一个被过度高估的领域。这些价值不是一成

不变的,并且一场变故注定会发生。这之前便已经发生过了。并且会在将来再次发生。如果你在这

个领域工作很长时间的话。你会对这些价值表示不屑。在这个Emin Gun Sirer的世界中,价值是在

加密金融中最没趣的东西。在这个领域中有非常重要的技术,这些技术将会颠覆这个世界。

如果你不相信,我也不能命令你是否要加入这个领域。但是我可以告诉你是我加入这个领域

的5个理由。

1. 现在还不晚

    比特币再拾年前便已经被发明,但是在最近几年,它的参与度才达到顶峰,尤其是在
2015 年以太坊建立的这段时间。这个领域大多数的新公司和理念都是建立在以太坊的基
层上的, 这是非常不成熟的。
    即便是你现在加入,你也可以在几年时间中成为一个世界级的专家。大多数人都没有
在这个 领域花这么多时间,所以赶上他们不会很难。现在开始学习和在2000年开始学习
的这个领域, 到现在已经是大师的人是一样的。
2. 这个领域还没有非常聪明的天才的加入
    大多数大学最优秀和最聪明的学生都专注于机器学习,网络编程或游戏开发。 当然,区块链在公
共话语中变得越来越性感,但它们仍然是一个诡异而颠覆性的话题,可能会影响你的职业生涯。
    早期,区块链完全是cypherpunks,偏执狂和怪人的境界。 这只是最近才开始改变。 只是作为一
个好奇而开放的开发者,你会为这个领域带来很多价值。
3. 大部分创新都是在学术界之外进行的。
    据我们所知,中本聪不是一名学者。 没有大学或机构提供连贯的区块链集中。 这里的大部分创
新都是由爱好者,企业家和独立研究人员领导的。 几乎所有你需要知道的东西都在白皮书,博客文
章,公共Slack频道和开源软件中。 所需要的就是卷起袖子跳入战场。
4. 对人才的需求远远超过供应。
    在这个领域没有足够的开发人员,他们无法快速培训。 每个人都在竞相聘请区块链人才,而项
目正在感受人才紧缺。 许多最好的公司无法为员工支付足够的钱,因为他们有太多的机会。 如果
你掌握了一些技巧,就很容易找到工作。
5. Cryptocurrencies真的很酷。
你还可以在哪里制造像密码保护和分散式资金这样的科幻资料? 现在是狂野的西部 - 这带来了好
的和坏的。 这个空间可以使用更多的透明度,监管最终会到来。 但毫无疑问,加密货币是您现在
可以开展工作的最具创新性的领域之一。海军Ravikant在最近的一次采访中表示:成功的关键是
给社会提供它想要的东西,但不知道如何独立完成。 你不能去学校这样的事情; 如果可以的话,
世界将会有稳定的供应。所以建立一个没有人知道如何建立的东西。 目前,区块链是全新的,还
有很多东西需要弄清楚。 如果你成功地建立分散技术的未来,世界将会给你很大的回报。所以说
你想扔你的帽子。 在进入戒指之前你需要知道些什么?

先决条件
我建议你在进一步深入之前加强对基本面的理解。 区块链建立在计算机科学,密码学和经济学
的数十年研究之上。 Satoshi Nakamoto是叛徒,但他也很了解他之前的历史。 为了理解区块
链的工作原理,您需要了解它们的构建块 - 区块链之前发生了什么,以及为什么这些东西不起作
用.按照重要程度,以下是熟悉的一些很好的先决条件。
请注意,这些链接只是一个起点,您可能想要深入探讨这些主题。

  1. 计算机科学
  • 数据结构
您需要熟悉主要数据结构的特征和复杂性保证: 链接列表,二叉查找树,哈希映射和图(特别是在
区块链中突出显示的有向无环图)。 它有助于从头开始构建它们,以更好地了解它们的工作方式和
属性。

  • 加密
密码学是加密货币的同名和基础。 所有加密货币都使用公钥/私钥加密作为身份和身份验证的基础。 
我建议学习RSA(它很容易学习,不需要非常强大的数学背景),然后看看ECDSA。 椭圆曲线密码
术需要更多的抽象数学 -理解所有细节并不重要,但要知道这是大多数加密货币使用的密码术,包括
比特币。
另一个重要的密码原语是密码散列函数。 这些可以用来构建承诺计划,并且是Merkle树的构建块。 
Merkle树使Merkle证明成为区块链用于可伸缩性的关键优化之一。

  • 分布式系统

关于分布式系统有几本很好的教科书,但它是一个庞大而困难的学习领域。

分布式系统对推理区块链绝对是必不可少的,因此在开展区块链编程之前,

您必须在此建立基础。
一旦你不再住在一台机器上,你必须开始推理一致性和一致性。你会想知道

可线性化和最终一致性模型之间的区别。您还需要了解容错一致性算法的保

证,如Paxos和RAFT。了解在分布式系统中推理时间的困难。欣赏安全与活

力之间的权衡。
在这样的背景下,您将能够理解拜占庭容错共识(即公共区块链的主要安全

要求)带来的困难。您将需要了解PBFT,这是首个提供拜占庭容错共识的

扩展算法之一。 PBFT是许多非证明区块链共识算法的基础。再一次,您

需要了解PBFT是如何以及为什么是正确的细节,而是获得总体思路和安

保证。

了解分布式数据库的传统方法(核心,区块链毕竟是数据库)也非常有用。

了解分片(例如通过一致哈希),领导者跟随者复制和基于法定人数的提交。

查看分布式哈希表(DHT),如Chord或Kademlia。


  • 网络
区块链的分散主要来自其对等网络拓扑。 因此,区块链是过去的P2P网络的直接后代。要理解区
块链通信模型,您需要了解计算机网络的基础知识:这意味着了解TCP vs UDP,数据包模型,IP
数据包的外观以及Internet路由的工作原理。
公共区块链倾向于通过使用泛洪的八卦协议传播消息。 了解从Napster到Gnutella,BitTorrent和
Tor的P2P网络设计的历史很有意义。 区块链拥有自己的位置,但他们吸取了这些网络的教训以及它
们的设计方式。

  • 经济
加密货币本质上是多学科的 - 这是什么使他们如此迷人和激进的一部分。 除了计算机科学,密码学
和网络之外,它们也与经济学深度交织。 加密货币可以通过其经济结构获得许多安全属性,这通常
被称为cryptoconomics。 因此,经济学对理解加密货币是至关重要的.Cryptocurrencies本质上是
多学科的 - 这是使它们如此迷人和激进的一部分。 除了计算机科学,密码学和网络之外,它们也与
经济学深度交织。 加密货币可以通过其经济结构获得许多安全属性,这通常被称为cryptoconomic
s。 因此,经济学对理解加密货币至关重要。

  • 游戏理论
扮演加密货币的经济学中最重要的分支是博弈论,即多个代理人之间的收益和激励的研究。 在这里
你不需要非常深入,但你需要了解游戏理论分析的基本工具,以及如何使用它们来分析一次和迭代
游戏中的激励。
您的曲目中的两个关键概念应该是纳什均衡和Schelling点,因为它们在隐写经济分析中占有突出的
地位。

  • 宏观经济学
加密货币也与市场深层交织,这需要了解微观经济学。 你需要强大的供求曲线直觉。 你应该能够
推理竞争和机会成本(他们会经常应用于加密货币挖掘)。 对于很多硬币分配和隐含经济系统而言,
拍卖理论突出显着。
我希望你已经熟悉了其中的一些话题。 如果你是,可以随意浏览或完全跳过它们。
好吧,到现在为止,您已经完成了基本面(也许您跳过了一堆,谁在计算?),所以现在您已经掌
握了您的理论,让我们开始区块链开发。


比特币的理论基础

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

这个协议称为比特币。在您了解区块链背后的重要想法之前,您必须从比特币开始,掌握Satoshi的

独到见解。首先,我建议建立你的直觉关于工作证明和分岔选择规则(也称为Nakamoto共识)。

 从这里开始:

https://youtu.be/_160oMzblY8

我建议你观看一个以上的视频解说,让这个主意融入你的脑海:

大。 既然您已经建立了自己的直觉,那么本文将对比特币的关键组成部分进行更深入的端到端阐述。

加密货币本质上是多学科的 - 这是什么使他们如此迷人和激进的一部分。 除了计算机科学,密码学

和网络之外,它们也与经济学深度交织。 加密货币可以通过其经济结构获得许多安全属性,这通常

被称为cryptoconomics。 因此,经济学对理解加密货币是至关重要的.Cryptocurrencies本质上是

多学科的 - 这是使它们如此迷人和激进的一部分。 除了计算机科学,密码学和网络之外,它们也

与经济学深度交织。 加密货币可以通过其经济结构获得许多安全属性,这通常被称为cryptocono

mics。 因此,经济学对理解加密货币至关重要。

https://www.youtube.com/watch?v=Lx9zgZCMqXE

     既然您已经建立了自己的直觉,那么本文将对比特币的关键组成部分进行更深入的端到端阐述。

自己构建区块链
既然您拥有高层次的直觉,现在是时候构建您自己的基于工作区的证明链了。 别担心,这比听起
来容易。 这里有一些很好的资源。
首先,我有一个视频讲座,我会在Ruby中完成如何做到这一点(即使您不是Ruby程序员,我也建
议您观看一下):

https://youtu.be/3aJI1ABdjQk

这里是sourceCode

您还可以找到其他区块链实现,使用各种编程语言编写。继续建立你自己的,并让自己满意,它主

要是功能性的。一旦你做到这一点,你应该很好地掌握如何在区块链(比特币)上实现一个简单的

支付应用程序。您现在也应该拥有足够的背景,以便您能够阅读和理解原始比特币白皮书。

    为了理解比特币挖掘的经济学和机制,我建议观看比特币和加密货币普林斯顿课程的比特币挖掘

讲座。

    如果你已经得到这么多,你应该很好地理解比特币,以便遍历比特币块头并理解每个组件的含义。

您还应该能够与比特币区块浏览器一起玩,并浏览原始比特币交易。

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

个很好的概述。

https://youtu.be/apYieuvnUaE

一些额外的信用资源:

比特币的学术前兆
比特币机制:UTXOs和比特币脚本(比特币脚本不是非常重要,只是大致知道它能做什么)
比特币分叉指南
软叉和矿工信号
双重支出,51%的攻击和自私的采矿
重播攻击

比特币可扩展性问题,这是比特币生态系统中大部分争议的根源。你应该知道为什么比特币人会对

块的大小有很多争论。

隔离证人,又名SegWit,不是必需的,但它出现了很多。
Lightning Network是比特币更重要的缩放解决方案之一,也推广到其他区块链
比特币完整节点, 比特币费用统计, 图表, 图表和 更多图表  更多图表
比特币能耗指数(在发布时,比特币采矿消耗的能量与秘鲁全部一样多)
Gwern就比特币的不雅不雅而作的有深度的文章
如果你想深入兔子洞,Jameson Lopp就有比特币的 丰富资源。
以太坊和智能合约编程

现在您已经构建了区块链并了解比特币的动态,现在是时候钻研以太坊。您了解区块链和工作证明

如何在对等网络内实现分布式拜占庭式容错共识。 但支付网络只是您可以在这种区块链上运行的一

个应用程序。 2013年,以太坊的创始人Vitalik Buterin问道:如果您使用区块链实施分散式计算机,

该怎么办?




在以太坊,您向矿工支付在这个分布式虚拟机上执行您的程序。这意味着您可以使用图灵完整编程

语言(与比特币脚本不同)执行任意计算。显然,这包括与支付相关的应用程序,因此以太坊实现

了比特币功能的超集,并且实现了创新的复兴。



这将我们带入了智能合约 - 在这样的虚拟机上运行的程序的名称。根据程序的执行情况,智能合约

可以直接与区块链的加密货币进行交互。换句话说,您可以创建自动执行的金融合同。这是一个疯

狂的想法,以及一旦你接受这种编程模型,你可以做的各种科幻未来的东西。



以太坊促成了ICO和开发商在区块链上的建设浪潮。它是比特币背后的第二大加密货币,拥有超过

10倍的下一个最受欢迎平台的开发人员,它拥有最强大的开发团队,最成熟的工具以及大多数ICO

和项目。它也拥有最多的行业支持,这有很长的路要走。很有可能,如果您正在开发区块链,您将

为以太坊智能合约编写代码。 (即使你不是,了解这个领域发生了什么也是很重要的。)

首先,更详细的以太坊高层解释:

https://youtu.be/mCzyDLanA7s


他在Ethereum背后的想法也催生了一场隐性经济学的创新浪潮。你应该将自己的脚趾浸入DAO

的想法,以及他们暗示的所有科幻发烧的梦想。

好的,这足以让我们深入了解科技。


以下是Preethi Kasireddy对Ethereum黄皮书及其内部结构的完美概述。以太坊使用账户模型而

不是比特币的UTXO模型 - 您很快就会明白为什么这会使编写智能合约更容易。



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


以太坊的主要编程语言是Solidity,它是一种静态类型化JavaScript语言。这是一种含有大量疣的

语言,以及许多可疑的设计选择。 Viper等更强大的语言可以在生产就绪后取代它,但现在,Soli

dity已成为智能合约编程的通用语言。这基本上是以太坊的JavaScript,所以你需要学习它(和它的

陷阱)。


为了让您第一次接触Solidity开发,我建议您通过所有 CryptoZombies教程。这是一个令人愉快和高质量的Codecademy-esque教程,将教你Solidity编程的基础知识。

区块链开发的权威指南_第1张图片

现在你已经开始了食欲,现在是时候自己开发了。


以太坊的“hello world”正在构建符合ERC-20的令牌。我建议将本指南作为第一个教程来引导您

完成整个过程。

    Remix是一款浏览器中的Solidity编辑器和编译器 - 它基本上是以太坊开发的培训轮,所以我建议

您在Remix中完成其余练习。但也值得设置一个本地区块链,并了解以太坊工具。本教程在通过端到

端的区块链堆栈和解释这些部分的过程中做得很好。

    接下来,我建议建立一个投票系统。我会称之为以太坊的Todo应用程序。卡尔Floersch有一个

很好的教程,他走过了如何建立一个安全的提交 - 揭示投票系统。

    太棒了,现在是你的中期考试:建立一个安全的投币游戏,两个玩家可以安全地投注投币。这次

没有教程,请自行完成。想想可能发生的攻击 - 玩家如何作弊?你能确保他们真的玩吗?这里有一

些提示。

智能合约安全

安全对区块链开发至关重要。智能合约一直受到灾难性黑客的困扰,包括DAO黑客攻击,Parity 

Wallet黑客攻击以及亲密命名的Parity Wallet hack 2(现在有自己的T恤)。如果你打算编写生

产智能合约,你绝对必须阅读所有这三个黑客的分析。



事实是,智能合约非常难以正确。尽管编程工具链会改进以使这些确切的攻击更难,但它们最终

都是由于程序员错误造成的。还有许多来自智能合约编程的细微错误,比如先行( frontrunn

ing)或secure generation of randomness 。



作为一名智能合约开发人员,您必须将安全视为至高无上。在智能合约编程中没有“快速移动和

破坏事物”。这意味着任何处理大量资金流动的代码都应该通过像Oyente或Securify这样的静态

分析器进行测试,并进行彻底测试,然后由有经验的智能合同审计师进行审计。您还应该尝

试依靠预先审计的组件,例如OpenZeppelin的开源合同。

    为了加强安全性,我建议您通过OpenZeppelin的Ethernaut进行工作,这是一款可以在智能合约

中找到并攻击漏洞的游戏。他们中的许多人会复制对野外发生的智能合约的实际攻击。


    菲尔戴安还拥有一套非常出色的智能合约黑客挑战,称为 Hack This Contract。


    一旦你过去了,我强烈建议阅读由ConsenSys编制的全部智能合同最佳实践。期望在您的智能合

约编程生涯中多次重温本文档。参考书目也值得探索,以供安全专家进一步阅读。



脱下训练轮
如果你已经做到了这一点,你现在应该准备好移过Remix并开始使用严格的Solidity开发堆栈。


大多数开发人员推荐将VSCode或Atom用于文本编辑器,因为它们具有相当好的Solidity插件。

为了与本地区块链进行交互,您需要使用Ganache(以前称为TestRPC),并且您需要为您的

(基于JS的)测试使用Truffle框架并配置您的构建管道。



现在是研究 IPFS的好时机,您可以以比以太坊区块链便宜得多的成本将它用作完全分散的文件存储。以下是创作者Juan Benet的简短说明:
https://youtu.be/skMTdSEaCtA


为了与Ethereum和IPFS完整节点交互,Infura是大多数开发人员推荐的。 Etherscan和ETH加油站

为以太坊网络提供有用的实时统计数据。



一旦你建立完整的 Web3堆栈,尝试部署一个端到端的Dapp(分散式应用程序)。本教程提供了使用Node和Postgres作为后端的完整堆栈概览,本教程将向您展示如何使用IPFS作为持久层来创建完全分散的应用程序。


建立你自己的项目
您现在应该对大部分技术感到满意 - 剩下的就是开始构建东西并深入区块链社区。


首先,开始构建自己的项目。如果有一些很棒的想法让你兴奋,那就去建立它,然后说服其他人跟

你一起攻击它!如果您还没有一个想法,或者不习惯让自己的手变脏,那么有许多高质量的开源项

目欢迎捐款。 OpenZeppelin可能是启动智能合约的好地方。



更好的是,我建议首先找到一个你很喜欢的积极开发的项目。获取他们的Slack或Rocketchat - 开

发人员通常可以轻松访问。告诉他们你想贡献一些小任务(或者在他们的Github上发现未解决的问

题)。



请注意,尽管我一直专注于协议和智能合约开发,但区块链公司需要Web开发人员来构建其核心功

能。这些角色通常需要与区块链进行交互,所以关于区块链的工作方式必须具备良好的心智模型 -

 但对于区块链初创公司的许多工程师而言,您的大部分工作都将在构建Python网络服务器或设计

React前端以及与区块链互动可能只是这项工作的一小部分。您不必专注于智能合约开发 - 实际上

,这只是工作区块链栈的一部分。



除开源贡献之外,还有许多区块链黑客马拉松不断涌现。大多数项目都有一个免费的公共Slack,

你可以加入,而且还有一个非常活跃的Ethereum的Gitter频道,许多开发者都在这里闲逛。当你

深入这个空间时,你最终会发现你的对等组,无论它是在Slack频道,电报组还是Gitter频道。无论

在哪里,找到你的人并继续学习。



浏览区块链社区

真正理解区块链世界的最好方法是让自己沉浸其中。阅读并聆听最聪明的人,特别是他们过去写过

的东西。在尝试学习一个新领域时,这一直是我的策略,对我来说这是付出的代价。


有很多好的区块链内容,但也有很多垃圾。这是我推荐的信息饮食。


媒体

我推荐的三个梦幻般的播客是软件工程每日区块链访谈( Software Engineering Daily

 Blockchain interviews),它为许多主题和加密货币提供了良好

的技术指导。从那里我推荐Epicentre和Unchained - 你会想回去听很多老的剧集。另一个有趣的

新兴技术播客是Conspiratus。我建议订阅每个这些。



有几个很好的Youtube频道(尽管Youtube上有很多垃圾)。订阅以太坊基金会( Ether

eum Foundation)并观看Devcon3演示文稿。伯克利的区块链记录了他们的许多讲座,其中

大部分都是出色的技术概述。 Decypher Media还发布会谈,白皮书评论和教程。杰克逊帕尔默

已经参与了每周的综述,这些都是技术层面较差,但非常均匀。

-------------------------------------------------------------------------------------------------------

懒癌犯了,不想翻了,虽然借助了很多google翻译的力量

-------------------------------------------------------------------------------------------------------

在线阅读

对于实时区块链喋喋不休,它主要生活在两个地方:Reddit和Twitter。对于Reddit来说,大多数次

品质量都非常低,并且受噪音控制。 r /以太坊的质量一直很好(对于特定的加密货币,还有一些好

的子分类)。尽管大多数次级债券主要由投机者主导,并不能很好地利用你的注意力。远离比特币

相关的次级信用。比特币臭名昭着地是毒性最严重的社区之一,而Reddit只是放大了这一点。



Twitter更是一个混合包。无论好坏,大多数区块链人都生活在Twitter上。首先,区块链Twitter对

我来说有点神秘,但最终我开发了Twitter区块链人员的非正式本体论。根据我的经验,区块链

人士有五种类型:建设者,企业家,记者,交易员和“思想领袖”。



避免像瘟疫那样的“思想领袖”。企业家可以没事,尽管他们大多是炒作男人或者推销自己的项目

。投资者大多在推销价格和炒作项目,所以如果那是你的事情,那是你的事。记者倾向于发布关于

当天重大新闻的推文,我建议你不要离开,除非你需要实时分析,你可能不需要。如果你是一个

活跃的交易者,这可能很重要,但如果你试图在区块链上建立基础,大多数实时的东西都是一种分

心。



最关注建设者。他们是现在最重要的人,也是推动技术发展的人。


每个类别的几位代表(如果您想填写您的Twitter Feed,请广泛搜索这些人关注的人):


建设者
Vitalik Buterin,以太坊
Zooko Wilcox,ZCash
智能合约的发明者Nick Szabo
弗拉德赞菲尔,以太坊
库利律师事务所Marco Santori
Riccardo“fluffypony”Spagni,Monero
马特利斯顿,Gnosis
企业家
Balaji Srinivasan,Earn.com
Erik Voorhees,Shapeshift
投资者
海军Ravikant,MetaStable
Ari Paul,Blocktower Capital
Linda Xie,Scalar Capital
占位符Chris Burniske
记者
Tuur Demeester,Adamant Research
劳拉,福布斯
(你也应该跟着我,虽然我绝对不属于这个名单。)


所有这一切,我建议尽量减少你的Twitter和Reddit的曝光。如果你不是记者或日间交易员,那么很

可能你并不需要实时聊天。重要信息将异步地向您显示。有几个好消息摘要可以总结一天/周最重要

的消息,你可以在自己的时间消费,而不受关注市场的束缚。



我建议订阅Inside Bitcoin以获取最重要的加密新闻片段的日常摘要(它不仅涵盖比特币)。对于令

牌项目,令牌经济拥有出色的每周评论,而“以太坊”周刊对以太坊生态系统中以开发人员为中心

的事件进行了精辟的摘要。



除此之外,您可能不需要监控实时新闻。专注于建设和学习。


你会想要关注最好的博客。长型内容往往是降压的最佳选择。我建议遵循以下这些:


Vitalik Buterin提供卓越的区块链和密码经济分析(阅读他所有的旧博客文章,Vitalik被广泛认为是

一代人的思想家)

黑客攻击,由康奈尔大学的研究人员进行区块链安全分析
Nick Szabo发表了一篇具有挑战性和折衷性的文章,讲述了加密货币在社会中的作用

Money Stuff,Matt Levine的彭博联合企业,以切入和富有洞察力的分析触及市场,金融和区块链

新闻

Vlad Zamfir for tempe



你可能感兴趣的:(区块链开发的权威指南)