加密货币、ICO、互联网催生的金钱产物——所有些东西可真太他妈的让人兴奋了,而你这个开发者是不是也坐不住了,也想拥抱这场疯狂的盛宴?但你应该从哪里开始做起呢?
很高兴你跟我志同道合,都对这个领域超级感兴趣。但是,我猜你可能发现自己目前处于困惑的处境,因为在区块链飞速发展的时代,你还没有明确的渠道来学习相关知识。
本指南将分为十个部分:
为什么要学习区块链开发?
先决条件
比特币的理论基础
建立一个自己的区块链
以太坊和智能合约编程
智能合约安全性
脱离辅助轮
创建自己的项目
探索区块链社区
找到一份工作
为什么要学区块链开发?
在回答这个问题之前,我先给大家提个醒:区块链现在是一个被过分高估的领域。这样的价格不可持续,并且终将在某一天彻底崩盘。这一切都发生过,并可能再次发生。但是如果你长期在这个领域工作,你得学会排除价格的干扰。用 Emin Gun Sirer 的话来说就是,“价格是加密货币中最无趣的部分”。区块链是非常重要的技术,且毫无疑问将改变世界。
如果你还不确定,我无法告诉你是不是应该到这个圈子里来。但是当初说服我进入这个圈子有五个理由:
现在还早。
比特币十年前就出世了,但在近十年才火起来,特别是随着 2015 年以太坊的推出。这个领域的大多数新公司和创意都建立在以太坊的基础之上,虽然以太坊现在仍很不成熟。
所以,即使你从现在开始学习,你也可以在几年内成为世界级的专家。因为做这个的人不多,所以追上队伍不是很难。这就跟 20 世纪晚期才开始学深度学习的专家一样。
这个领域还没有一个完善的人才培养渠道。
大多数最优秀和最聪明的学生都专注于机器学习,网络编程或游戏开发。当然,区块链在公共话语中变得越来越有吸引力,但它仍然是可以促进你职业发展的诡异而具有颠覆性的话题。
早期,区块链完全是密码发烧友、偏执狂和陌生人的专属领地,直到最近这种情况才发生变化。作为一个好奇而思想开放的开发者,相信你会为这个领域带来很多价值。
大部分创新发生在学术界之外
据我所知,中本聪不是一名学者。没有大学或机构开设连贯的区块链课程。这个领域的创新大部分是由爱好者、企业家和独立研究人员引领的。几乎所有你需要知道的东西都是在白皮书、博客文章、公共渠道和开源软件中可以找到。你需要做的,就是撸起袖子,开干!
对人才的需求远远超过供给。
在这个领域没有足够的开发人员,他们不能很快地得到训练。每个公司都在竞相聘请区块链人才,而项目人员应该是最能切身感受到人才稀缺的人。很多顶级公司因报酬不够有吸引力而留不住人才,因为他们的选择太多了。如果你掌握了一些技巧,就很容易找到工作。
加密货币真的很酷。
世界上还有什么工作可以造出像密码保护、去中心化货币这些科幻电影里才会出现的东西?这就像狂野的西部大开发一样,好的和坏的后果都有。这个领域将会更加透明,相关监管也会越来越完善。但毫无疑问,加密货币是你现在可以从事的最具创新性的领域之一。
Naval Ravikant 在最近的一次采访中说道:成功的关键是能带给社会一些它想要,但是却不能独立获取的东西。学校里是学不到这些东西的,否则早就全球供应了。
所以,你应该创造别人都不会的东西。目前,区块链是一个全新的,世人对之知之甚少的新事物,如果你成功地建立了去中心化技术的未来,世界绝对不会亏待你。
先决条件
我建议在你在深入这个领域之前了解一些基础知识。区块链建立在数十年的计算机科学、密码学和经济学研究之上,中本聪是一个叛徒,但即使是他也很了解区块链的历史。为了理解区块链的工作原理,您需要了解它们的构建块——区块链出现之前还出现过那些东西,以及为什么这些东西不起作用。
以下是我们需要熟悉的先决条件,按照重要性依序排列。
请注意,这些链接只是一个起点,这些话题你还需要做进一步的了解。
计算机科学
数据结构
您需要熟悉主要数据结构的特征和复杂性保证:链接列表,二叉搜索树,哈希映射和图片(特别是在区块链中突出显示的有向非循环图)。它有助于从头开始构建区块链,以便更好地了解其工作原理和属性。
加密
密码学是加密货币的同名物和基础。所有加密货币都使用公钥 / 私钥加密作为身份和身份验证的基础。我建议您学习 RSA(很容易学,不需要非常好的数学背景),然后再学习 ECDSA。椭圆曲线密码术需要更多的抽象数学知识,虽然你不需要理解所有的细节,但要知道这是在大多数加密货币中使用的密码术,包括比特币。
另一个重要的密码原语是密码哈希函数(cryptographic hash function)。这些可以用来构建承诺协议(Commitment scheme),这是建立 Merkle 树的构建块。 Merkle 树使 Merkle 证明(Merkle proofs)成为区块链用于可扩展性的关键优化之一。
分布式系统
这里是几本讲解分布式系统的很好的教科书,但它涉及范围广泛,也很难学。分布式系统对区块链的推理至关重要,所以在开始区块链编程之前,你必须有一点这方面的基础知识。
当你的工作不仅在一台机器上进行时,你必须开始推理一致性和共识。你需要了解线性化( linearizable)和最终一致性(eventual consistency)模型之间的区别,容错一致性算法(如 Paxos 和 RAFT)的保证,以及分布式系统中推理时间上的难题,和安全与生存之间的权衡。
在这些背景知识的帮助下,你才能够理解拜占庭容错共识(Byzantine fault-tolerant consensus,公共区块链的基本安全要求)方面的困难。您还需要了解 PBFT,这是第一个提供拜占庭式容错共识的可扩展算法之一。PBFT 是许多非证明区块链共识算法的基础。同样地,你不需要了解 PBFT 正确性的细节,只需要了解总体思路和安全保证即可。
理解分布式数据库的传统方法(核心,因为区块链毕竟是数据库)也是非常有用的。你还需要了解一下分片(例如通过一致性哈希,Consistent hashing),leader-follower replication 和基于法定人数的提交(quorum-based commits),以及分布式哈希表(DHT),如 Chord 或 Kademlia。
网络
区块链的分布式主要来源于其对等网络拓扑结构。因此,区块链是过去的 P2P 网络的直接产物。
要理解区块链通信模型,您需要了解计算机网络的基础知识:这意味着你需要知道 TCP vs UDP、数据包模型、IP 数据包,以及 Internet 路由的工作原理。
公共区块链通常使用 Flooding 八卦协议来传播消息。了解从 Napster 到 Gnutella,BitTorrent 和 Tor 等 P2P 网络设计的历史对你来说是有益的。区块链有自己的地位,但吸取了这些网络的设计经验。
经济学
加密货币本质上是跨学科的,这也它之所以迷人的一部分原因。除了计算机科学、密码学和网络之外,它们还与经济学有着千丝万缕的关系。加密货币可以通过其经济结构获得许多安全属性,通常被称为隐密经济学(cryptoeconomics)。因此,经济学对理解加密货币来说至关重要。
博弈论
博弈论在加密货币经济学中扮演着最重要的角色,即对多个代理人之间的收益和激励的研究。你不需要对此有深入了解,但需要了解博弈论分析的基本工具,以及如何使用它们来分析一次和迭代游戏中的激励。
关于博弈论,您需要了解两个关键概念,即纳什均衡(Nash equilibria )和谢林点(Schelling points),因为它们在隐含经济分析中占有突出的作用。
宏观经济学
加密货币不仅仅是协议,其也是一种货币形式。因此,它会受到宏观经济法(如果可以称之为法律)的限制。加密货币受到不同货币政策的影响,并会对通货膨胀和通货紧缩作出可预测的回应。你应该了解这些过程,以及它们对消费、储蓄等方面的影响。
另一个有价值的经济学概念是货币流通速度,因为其会影响货币价值。
个体经济学
加密货币也与市场息息相关,这就需要了解微观经济学。你需要对供求曲线有非常敏锐的直觉,并具备推理竞争和机会成本(经常被用于加密货币挖掘)的能力。对于许多硬币分配和隐含经济系统,拍卖理论(auction theory)尤其重要。
现在,你已经掌握了基本理论,开始进入区块链开发吧。
比特币的理论基础
2008 年 10 月,中本聪(Satoshi Nakamoto)发表了一篇白皮书,论述了分散数字货币的协议。他把这个协议称为比特币。
在了解区块链背后的重要思想之前,您必须从比特币开始,了解 Satoshi 最初的初衷。
首先,我建议您对工作证明(proof-of-work)和 fork choice rule(也被称为中本聪共识)有所了解,从这里开始:
视频链接:
https://v.qq.com/x/search/?q=blockchain%E5%85%A5%E9%97%A8+%E5%8F%AF%E8%A7%86%E5%8C%96%E6%BC%94%E7%A4%BA&stag=0&smartbox_ab=
我建议你多看一些视频解说,让这个想法在你的脑海里生根发芽:
视频链接 2:
https://www.youtube.com/watch?v=bBC-nXj3Ng4&feature=youtu.be
有了对于区块链的直觉之后,本文将对比特币的关键组成部分进行更深入的端到端的阐述。
建立一个自己的区块链
现在是时候构建您自己的基于工作量证明的区块链了。别担心,其实听起来难做起来容易,这里是一些很好的资源。
首先,我开了一个视频讲座,讲解如何用 Ruby 做这件事情(即使你不是 Ruby 程序员,我也建议你看看):
资源链接:https://github.com/Haseeb-Qureshi/lets-build-a-blockchain
在这里你还可以找到其他用各种编程语言编写的区块链应用。继续构建自己的模型。
当你做到这一点时,你应该已经很好地掌握了如何在区块链(比特币)上创建一个简单的支付应用程序。你现在也应该有足够的背景知识,能够阅读和理解原来的比特币白皮书。
要了解比特币挖掘的经济学和机制,我建议观看普林斯顿关于比特币和加密货币的比特币挖掘讲座。
现在,你应该已经达到了了解比特币 header,并知道每个组件含义的水平。您还可以使用比特币区块浏览器,探索原始比特币交易。
现在是研究比特币和加密货币历史的好时机。以下加州大学伯克利分校的视频做了很好的概述。
视频链接:https://youtu.be/apYieuvnUaE
一些额外的资源:
比特币的学术先驱
比特币机制:UTXOs 和比特币脚本(比特币脚本不是非常重要,大致知道它能做什么即可)
比特币 forks 指南
软分叉和矿工信号
双重打击,51%的攻击和自私的开采
重播攻击
比特币可扩展性问题,这是比特币生态系统中大部分争议的来源。你应该知道为什么
比特币人会对块的大小有很多争议。
隔离的证人,也就是 SegWit,不是必须了解,但会经常出现。
闪电网络(Lightning Network)是比特币更重要的拓展解决方案之一,也推广到其他区块链
比特币完整节点,比特币费用统计,图表,图表和其他图表
比特币能源消耗指数(在发布时,比特币开采能源消耗量相当于秘鲁全国)
Gwern 对比特币龌龊之处作了深刻的论述
如果你想更深一步了解,可以参考 Jameson Lopp 关于比特币资源的资源。
以太坊和智能合约编程
现在,您已经构建了自己的区块链,知道比特币的动态,现在是研究以太坊的时候了。
理解区块链和工作量证明如何在对等网络内实现分布式拜占庭式容错共识。但支付网络只是你可以应用区块链的应用程序之一。在 2013 年,以太坊的创始人 Vitalik Buterin 问道:将区块链应用到分布式计算机上会怎样?
在以太坊上,你花钱让矿工在这个分布式虚拟机上运行自己的程序。这意味着您可以使用图灵完整编程语言(不同于比特币脚本)执行任意计算。显然,这包括所有的支付程序,因此以太坊比特币的功能更强大,并做了进一步创新。
其后是智能合约,即在此类虚拟机上运行的程序的名称。智能合约可以根据程序的执行直接与区块链的数字货币进行交互。换句话说,您可以创建自动执行的金融合同。这是一个疯狂的想法,用这个编程模型,你几乎可以做到所有科幻作品中的事情。
以太坊掀起了 ICO 和区块链开发的浪潮。它是排在比特币后面的第二大加密货币,它的开发者是排名第三的加密货币币种的 10 倍之多。它拥有最强大的开发团队,最成熟的工具,大多数 ICO 和项目都与其相关,且最被业内看好。如果你正在做区块链开发工作,你很可能将会为以太坊智能合约编写代码。(即使无志于此,了解一下这个领域的趋势也无妨。)
首先,关于高层次以太坊的详解:
视频链接:
https://www.youtube.com/watch?v=mCzyDLanA7s&feature=youtu.be
以太坊背后的思想也催生了一波隐性经济学的创新浪潮。你应该接触一下 DAO 的思想。
好吧,幻想告一段落,让我们来深入了解背后的技术吧。
Preethi Kasireddy 关于以太坊黄皮书和内部结构概览介。以太坊使用的是账户模式而不是比特币的 UTXO 模式,您很快就会明白为什么这会使编写智能合约变得更容易。
与任何技术一样,了解以太坊的最好方法是创建一些小型项目。
以太坊的主要编程语言是 Solidity,它是一种静态类型的 JavaScript-esque 语言,实话说有很多缺点和设计问题。像 Viper 这样的更强大的语言可以在推出之后取代它,但目前,Solidity 是智能合约编程的通用语言。这基本上是以太坊的 JavaScript,所以你需要学会它(和它的陷阱)。
第一次接触 Solidity 开发时,我建议您通读所有的 CryptoZombies 教程。这些是高质量的 Codecademy-esque 教程,可以学到 Solidity 编程的基础知识。
现在,你的胃口被吊起来了,是时候自己开发了。
入门以太坊的课题是构建一个兼容 ERC-20 的令牌。我推荐这本指南作为你完成任务的指导教程。
Remix 是一个浏览器中的 Solidity 编辑器和编译器, 它基本上是以太坊开发的辅助轮,所以我建议把 Remix 中的其他练习都做一遍。设置一个本地区块链以了解以太坊工具也值得一试。本教程很好地介绍了一个端到端的区块链堆栈,并对这些堆栈进行了解释。
接下来,我建议你创建一个投票系统,称之为以太坊的 Todo。 Karl Floersch 的教程讲解了如何建立一个安全的提交显示投票系统。
很好,现在该中期考试了:创建一个安全的投币游戏,两个玩家可以安全地进行投掷硬币游戏。这次没有教程,自己动手做吧。在这个过程中要考虑到可能发生的攻击,如 玩家如何作弊?你能确保他们坦诚相待吗?这里有一些提示。
智能合约的安全性
对于区块链开发来说,保证安全性是绝对必要的。智能合约一直被灾难性的黑客攻击,包括 DAO、Parity Wallet,以及 Parity Wallet hack 2(现在竟然还有他们自己的 T 恤衫)威胁着。如果你打算编写生产智能合约,你必须把这三个黑客透彻地分析一遍。
然而事实上,智能合同很难尽善尽美。虽然编程工具链的改进让黑客更难实施攻击,但编程员会不可避免地犯错误。智能合约编程过程中还会犯许多微妙的错误,例如抢先交易或安全随机生成。
作为一名智能合同开发人员,您必须把安全性放在第一位,所有处理大量资金流动的代码都应该通过像 Oyente 或 Securify 这样的静态分析器来进行,并进行彻底的测试,然后由有经验的智能合约审计师进行审计。为了结果更可靠,您还可以使用 OpenZeppelin 开源合同等预审组件。
为了加强安全性,我建议您使用 OpenZeppelin 的 Ethernaut,在这个游戏中您可以找到攻击智能合约黑客的漏洞,这对你防范攻击有很重要的参考价值。
Phil Daian 发起了一项有名的智能合约黑客挑战赛,叫做 Hack This Contract。
在这之后,我强烈建议阅读由 ConsenSys 编写的“智能合同最佳实践(Smart Contract Best Practices)”。预计你将会在智能合约编程生涯中多次重温这个文档。由安全专家推荐的参考书目也值得你进一步阅读。
脱离辅助轮
如果你已经做到了这一点,现在就应该已经做好了通过 Remix 的准备,并可以开始正式使用 Solidity 开发堆栈了。
大多数开发人员推荐使用 VSCode 或 Atom 作为文本编辑器,因为它们的 Solidity 插件相当完善。为了与本地区块链进行交互,你需要使用 Ganache(以前称为 TestRPC),以及用于测试(基于 JS 的)和配置构建管道的 Truffle 框架。
现在是研究 IPFS 的好时机,您可以将其作为一个比以太坊成本便宜很多的分布式存储库。以下是创始人 Juan Benet 的简短说明:
https://youtu.be/skMTdSEaCtA
在与以太坊和和 IPFS 完整节点交互方面,大多数开发人员推荐使用 Infura。在以太网络上,Etherscan 和 ETH 加油站可以提供有用的实时统计数据。
完成 Web3 堆栈设置后,尝试部署一个端到端的 Dapp(分散式应用程序)。本教程是一个使用 Node 和 Postgres 作为后端的完整堆栈概览,另外,本教程演示如何使用 IPFS 作为持久层来创建完全分散的应用程序。
创建自己的项目
现在,你应该对大部分技术比较熟悉了,剩下的就是开始构建项目,并深入到区块链社区。
首先,开始创建自己的项目。如果有一些很棒的想法让你兴奋,那就去实现它,然邀请朋友来攻击它!如果你还没有好的想法,还有很多高质量的开源项目可以练手。OpenZeppelin 是创建智能合约不错的选择。
此外,我建议你最好选择一个你热衷的开发项目,进入他们的 Slack 或 Rocketchat,告诉他们你做一些贡献,让他们给你分配一些小任务,,或者在他们的 Github 上发现未解决的问题。
请注意,虽然我一直专注于协议和智能合约开发,但区块链公司需要 Web 开发人员来构建其核心功能。这些角色通常需要与区块链进行交互,所以你对于区块链模型应该有所了解。但是对于区块链初创公司的许多工程师来说,他们的大部分工作是构建一个 Python 网络服务器,或者设计一个 React 前端,与区块链互动可能只是这项工作的一小部分。您不必专注于智能合约开发,因为实际上这只是区块链工程的一部分。
除开源贡献之外,还有许多区块链黑客竞赛不断涌现。大多数项目都有一个你可以加入的免费的公共 Slack,以及一个非常活跃的以太坊 Gitter 社区。当你深入到这个领域时,你最终会在 Telegram、Gitter 等场所发现志同道合的伙伴,一起学习进步。
区块链社区
真正去了解区块链世界的最好方法就是沉浸其中,阅读和聆听最聪明的人,尤其是他们过去写过的东西。这一直是我尝试进入一个新领域时的策略,对我来说也是回报丰厚。
虽然好的区块链内容很多,但同时也有很多废话。以下是我推荐的学习社区。
媒体
我推荐三个很棒的播客,分别是 Software Engineering Daily Blockchain interviews,很多关于科技和加密货币的介绍和指导。其次是 Epicenter 和 Unchained,相信你听过之后会去翻已经播过的节目来听。另一个有趣的技术播客是 Conspiratus。
此外还有几个很好的 Youtube 频道(尽管 Youtube 上有很多垃圾),如 Ethereum Foundation ,并观看 Devcon3 演示文稿。伯克利的区块链课程记录了他们的许多讲座,其中大部分都是很棒的技术概述。另外还有 Decypher Media、Jackson Palmer 等技术频道。
在线阅读
区块链发烧友通常在两个地方发表他们的意见:Reddit 和 Twitter。Reddit 上的大多数用户质量不高,大多是一些废话。r/Ethereum 上的内容一贯质量不错(对于特定的加密货币,还有一些了解透彻的用户)。然而,这些人大多数是投资人,别太关注他们说了啥。远离比特币相关的用户,比特币社区在圈子里臭名昭著,人人敬而远之。
Twitter 更是鱼龙混杂。无论如何,大多数区块链人都活在 Twitter 的世界里。根据我的经验,这里的区块链人有五种类型:开发者、企业家、记者、商人,以及“思想领袖”。
对于这些人,我建议你远离“思想领袖”,企业家无所谓,记者通常只关注重大消息,除非你是个商人,否则对于开发者来说,这些消息只会让你分心。
最应该关注的是真正的开发者。目前,他们是最重要,也是正在推动技术的发展的群体。
以下是特定类型的代表人物:
开发者
Vitalik Buterin,以太坊
Zooko Wilcox,ZCash
Nick Szabo,智能合约的发明者
弗拉德 Zamfir,以太坊
Marco Santori,Cooley LLP
Riccardo“fluffypony”Spagni,Monero
Matt Liston,Gnosis
企业家
Balaji Srinivasan,Earn.com
Erik Voorhees,变形
投资者
Naval Ravikant,MetaStable
Ari Paul,Blocktower Capital
Linda Xie, Scalar Capital
Chris Burniske,Placeholder
记者
Tuur Demeester,Adamant Research
Laura Shin,福布斯(你也可以关注我,虽然我绝对不在这个名单之列。)
我建议你最好尽可能少关注 Twitter 和 Reddit,只关注一些新闻速递了解最新消息就足够了,比如 Inside Bitcoin、Token Economy 、 Week in Ethereum.
除此之外,您不需要实时监控最新新闻,而应该专注于项目创建和学习。
以下使一些好的技术博客:
Vitalik Buterin,网站上有很棒的区块链和密码经济分析(阅读所有他以前的博客文章,Vitalik 被普遍认为是一代区块链人的思想家)
Hacking,Distributed,由康奈尔大学研究人员进行区块链安全分析
Unenumerated,尼克·萨博(Nick Szabo)的博客文章,论述加密货币在社会中作用的文章
Money Stuff:马特•莱文(Matt Levine)的 Bloomberg Syndication,深入分析市场、金融和区块链新闻
Vlad Zamfir 对国有和公共区块链持温和谨慎的态度
Chris Burniske 撰写了一系列关于如何评估加密资产的高质量博客文章
Jameson Lopp 从区块链生态系统软件工程师的角度出发,撰写了一系列伟大的技术文章
Tim Swanson 的 Great Wall of Numbers 对区块链狂潮进行了清醒而条理清晰的解构,特别是在企业领域(你也可以阅读我的博客,再次声明,虽然我仍不在这个名单之列。)
书籍和课程
如果你想要更加系统地学习区块链,就需要看一些高质量的书籍和课程。
区块链最好的教科书是 Bitcoin and Cryptocurrency Technologies (内含普林斯顿 Coursera 课程)。在这个领域,其他的书籍我只推荐 Andreas Antonopoulos 和以太坊创始人的 Gavin Wood 共同撰写,O"Reilly 出版的 Mastering Bitcoin。非技术书我推荐 Nathaniel Popper 的 Digital Gold。几乎所有值得阅读的东西都是在博客上,而不是在书本上,因为这个领域正在飞速发展,最重要的人物很少有时间写书,而且书本在发行时经常已经过时了。
你还可以通过一些高质量的课程来系统学习。这是一些普林斯顿 Coursera 课程(Youtube 上也有视频)和加州大学伯克利分校的一些讲座链接。对于那些想要进入智能合约开发的人们,Consensys Academy 的课程也不错。
我还在旧金山的布拉德菲尔德计算机科学学院为软件开发人员教授为期 4 周的加密货币研讨会。如果你是旧金山的软件工程师,想要了解更多关于加密货币背后的理论和实践的知识,可以来听一听。
找工作
正如我之前所说的,区块链初创公司正在疯狂地招聘人才。如果你真的做到了以上我所说的,甚至只做到了一半,那么你已经能够在这个领域有所作为了。 AngelList 在如何在密码空间找到工作做了一个很好的写作。
这里是几个不错的区块链相关工作发布区:
AngelList 加密启动
BlockchainJobz
Ethereum Jobs
Be in Crypto
区块链工作委员会
Crypto Jobs List
Google(区块链搜索查询)
ConsenSys Jobs(旗下有很多以太坊创业工作室)
我知道一些特别有前途的区块链初创公司正在招聘开发人员:
0X
达摩实验室
Civic
市场上还有一些大公司在招聘开发人员:
Coinbase,加密界的 Google,一直在疯狂招聘
Stellar 和 Ripple,如果你想做对企业友好的加密货币,它们不错的选择
Square 已经整合了一些区块链,但不知道他们是否在进行外部招聘
IBM、Visa 或 JP 摩根
但是在我看来,选择进哪一家公司最好是因为对某一个项目感兴趣,并可以直接参与开发。大多数区块链团队都愿意为合适的人才进行远程招聘。许多开发者可以通过 Twitter,Github 或公共 Slack 渠道,展示自己的技术能力,并表现出一定的主动性,他们会给人留下深刻的印象。
这就是我为对你的建议,完成这些之后,我相信你会比我走的更远。