.
点击注册
你的位置: usdt数字币钱包 > usdt钱包 > 学习区块链开发!
数字货币热门文章

学习区块链开发!

发布日期:2022-03-25 04:53    点击次数:116

学习区块链开发!

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

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

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

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

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

  一旦你的系统不再运行在一台机器上,就必须开始论证一致性和共识。您需要了解可线性化和最终一致性模型之间的区别。您还需要了解容错一致性算法的保证,例如 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发表了一份白皮书,他在其中描述了一种分散数字货币的协议。他把这个协议叫做比特币。

  首先,我建议你建立关于工作证明和分叉选择规则(也称为中本共识)的直觉。你可以从以下视频开始:区块链可视化 Demo

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

  首先,我有一个视频讲座,我将详细介绍如何在 ruby 中实现这一点(即使你不是 ruby 程序员,我也建议您观看):如何用ruby创建一条区块链讲解

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

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

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

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

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

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

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

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

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

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

  Ethereum催生了ICO的浪潮和构建在区块链之上的开发人员。它是仅次于比特币的第二大加密货币,拥有超过10倍的下一代最流行平台的开发人员,最强大的开发团队,最成熟的工具,以及基于它的大多数ICO和项目。它还拥有最多的行业支持。如果你正在进行区块链开发,那么你将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编辑器和编译器——它基本上是Ethereum开发的训练轮,所以我建议把剩下的练习都在Remix内完成。但是,设置一个本地区块链并了解Ethereum工具也是值得的。本教程很好地介绍了一个点到点的区块链堆栈,并解释了其中的各个部分。

  接下来,我建议创建一个投票系统。我把这个叫做Ethereum的Todo应用。Karl Floersch有一篇很棒的教程,介绍了如何构建一个安全的委员会公开投票系统。

  很好,现在开始期中考试:构建一个安全的抛硬币(coin toss)游戏,在这个游戏中,两个玩家可以安全地在抛硬币上下注。这次没有教程,自己做吧。想想可能的攻击——玩家如何作弊你能保证他们打得诚实吗这里可以给你一些灵感。

  安全对于区块链的开发是绝对必要的。智能合约一直受到灾难性黑客攻击的困扰,包括DAO黑客攻击、Parity钱包黑客攻击,以及第二次Parity钱包黑客攻击,如果你想要编写智能合约,你必须阅读这三个技巧的分析。

  事实是,智能合约很难搞好。虽然编程工具链将会得到改进,使这些精确的攻击变得更加困难,但最终它们都是由于程序员的错误造成的。还有许多由智能合约编程产生的更微妙的bug,比如在前端集群(frontrunning)或安全生成随机性(secure generation of randomness)等方面。

  作为一名智能合约开发者,你必须将安全性视为最重要的事情。在智能合约编程中没有“快速行动和打破常规”。这意味着任何处理大量资金流动的代码都应该通过像Oyente或Securify这样的静态分析程序来运行,进行彻底的测试,然后由经验丰富的智能合约审核员进行审计。你还应该尝试依赖预审计的组件,比如OpenZeppelin的开源合约。

  为了加强你的安全性,我建议你使用OpenZeppelin开发的Ethernaut,这是一款你可以在智能合约中发现并攻击漏洞的游戏。他们中的很多人已经复制了对这个领域发生的智能合约的真实攻击。Phil Daian也有一套优秀的智能合约黑客挑战称为Hack This Contract.

  大多数开发人员都推荐使用 VSCode 或 Atom 作为文本编辑器,因为它们有相当可靠的 Solidity 插件。为了与本地区块链进行交互,你将使用Ganache(以前是TestRPC),并且你将使用Truffle框架进行(基于JS)测试和配置构建通道。

  然后是着手研究IPFS,你可以使用IPFS作为一个完全去中心的文件存储,其成本比Ethereum区块链低得多。以下是作者Juan Benet的简短解释:

  一旦你建立了完整的Web3堆栈,尝试部署端到端Dapp(去中心应用程序)。这个教程为后端提供了一个使用Node和Postgres的良好的全堆栈概览,并且这个教程将向你展示如何使用IPFS作为持久性层(persistence layer)创建一个完全去中心的应用程序。

  首先,开始建立自己的项目。如果你对某个点子很感兴趣,那就去实现它,并说服别人和你一起破解它! 如果你还没有特定的想法,或者不愿意动手,有许多高质量的开源项目欢迎你的贡献。OpenZeppelin可能是上手智能合约的一个好的起点。

  更好的是,我建议从寻找一个你喜欢的正在积极开发的项目开始。去他们的Slack或者Rocketcha –开发人员通常都在那里。告诉他们你愿意帮忙,并要求完成一些小的任务(或者在他们的Github上发现一些尚未解决的问题)。

  注意,虽然我一直关注协议(protocols)和智能合约的开发,但区块链公司需要web开发人员来构建它们的核心功能。这些角色经常需要与区块链(们)进行交互,所以要有一个区块链是如何工作的良好心理模型,但对于许多区块链初创公司的工程师,你的工作将在Python构建一个网络服务器,或者设计一个前端的React, 与区块链交互可能只是一小部分的工作。你不必专门从事智能合约开发 — 实际上,这只是成熟的区块链堆栈的一部分。

  除了对开源项目的贡献,还有许多区块链黑客马拉松不断涌现。大多数项目都有一个免费的Slack,你可以加入其中,而且Ethereum本身有一个非常活跃的Gitter channel,在那里有很多开发者。当你深入到这个空间,你最终会找到你的同伴,无论是在Slack频道,Telegram,还是Gitter channel。无论在哪里,找到和你趣味相投的人并继续学习。

  真正了解区块链世界的最好方法是让自己沉浸在其中。阅读和倾听最聪明的人,特别是他们过去写的东西。当我尝试学习一个新的领域时,这一直是我的策略,它为我带来了回报。

  在这里我推荐三个不错的播客,Software Engineering Daily Blockchain,他们对许多主题和加密货币提供了很好的技术介绍,以及Epicenter和Unchained — 他们过去推出的很多都系列值得一听。另一个有趣的新兴技术播客是Conspiratus。以上的博客建议你们都订阅。

  YouTube上也有几个不错的频道(尽管YouTube上有很多垃圾)。订阅以太坊基金会并观看DEVCON3演示文稿。伯克利大学的区块链记录了他们的许多讲座,其中大部分都是优秀的技术概述。Decypher媒体还发布了访谈、白皮书评级和教程。Jackson Palmer有精彩的每周概述,内容里面虽然技术部分较少但是涵盖内容较全面。

  对于实时区块链聊天来说,它主要存在于两个地方:Reddit和Twitter。对于reddit来说,大多数栏目的质量都很差。r/ethereum的质量一直不错(并且有一些适合特定加密货币的栏目)。不过,大多数栏目都被投机者占领,并不能对得起你的注意力。远离比特币相关的栏目。众所周知,比特币是最有毒性的社区之一,而Reddit只会放大这一点。

  Twitter上的内容更是参差不齐了。不管好坏,大多数区块链用户都生活在Twitter上。区块链Twitter起初对我来说有些神秘,但最终我建了一个非正式的Twitter区块链人物分类。根据我的经验,有五种类型的区块链人物:建设者、企业家、记者、交易员和“思想领袖”。

  避免像瘟疫一样的“思想领袖”。企业家除外,他们大多扮演炒作者的角色,或者在Twitter上宣传自己的项目。投资者大多在Twitter上谈论价格和炒作类项目,如果你也是这样的,那你继续吧。记者们倾向于在推特上发布当天的主要新闻。我建议你远离这些消息,除非你需要实时信息,但是通常这些信息你都不是必须要接受的。如果你是一个活跃的交易者,这可能很重要,但如果你试图在区块链技术上有所建树,大多数实时的东西都会分散你的注意力。

  总而言之,我建议尽量减少您对Twitter和Reddit的曝光率。如果你不是记者或日常交易者,很可能,你不需要实时聊天。重要信息将以异步方式向您显示,你可以关注重点信息摘要,而不是时刻获取市场的信息并受其影响。

  我建议订阅Inside Bitcoin 以获取最重要的加密新闻的每日摘要(它涵盖的不仅仅是比特币)。对于代币项目,Token Economy(代币经济)每周都有出色的内容,而Week in Ethereum(每周以太坊)则对以太坊生态系统中以开发人员为重点的事件提供了很好的摘要。

  V神博客(Vitalik Buterin)提供优秀的区块链和密码经济分析(阅读他所有的旧博客文章,Vitalik被广泛认为是百年一遇的思想家)

  破解,分布式(Hacking, Distributed)由康奈尔研究人员发表的区块链安全性分析

  未枚举(Unenumerated),Nick Szabo发表关于加密货币在社会中作用的挑战性和折衷性论文的著名博客

  金钱物质(Money Stuff),马特·莱文(Matt Levine)的Bloomberg的供稿,针对市场、金融和区块链新闻交叉点深刻的分析

  克里斯·伯尼斯克(Chris Burniske)撰写了一系列关于如何评估加密资产的优秀博客文章

  詹姆森洛普 (Jameson Lopp) 从构建区块链生态系统软件工程师的角度发表他出色的技术文章

  数字长城(Great Wall of Numbers)由蒂姆斯旺森 (Tim Swanson)撰写,关于他对区块链狂热的冷静而坚定的解构,特别是在企业领域

  如果你想要一种更有条理的方法来学习这些材料,有一些高质量的书籍和课程(以及许多低质量的书籍和课程)。

  如果你想用更结构化的方法来学习这些材料,有一些高质量的课程(还有很多低质量的课程)。我已经链接到了普林斯顿大学Coursera课程(视频也在YouTube上)和加州大学伯克利分校(UC Berkeley)的一些讲座。我也听说了针对那些想进入智能合约开发的人员关于康森斯学院(Consensys Academy )的好消息。

  我还在旧金山布拉德菲尔德计算机科学学院( Bradfield School of Computer Science)为软件开发人员举办为期4周的加密货币研讨会。本课程仅限于旧金山地区,座位有限,因为它是一个小型的、深入的研讨班。但如果你是名位于旧金山的软件工程师,想了解更多有关加密货币背后的理论和实践,那么它可能很适合你。

  但在我看来,加入一个公司最好方法是找到一个你感兴趣的项目并直接联系他们。大多数区块链团队都愿意为合适的人才提供远程办公职位。许多开发人员可以在Twitter、Github或他们公共的Slack频道上轻松的联系上。假如你有扎实的作品集并能展示技术专长,如果你表现出一些主动性。就会让很多人印象深刻。

  因为兔子洞不会真的结束。我给你展示的只是一个开始。加密货币仍处于早级阶段usdt数字币钱包,我真的相信这是你可以工作的最快速发展的领域。我相信这本指南将在一年内过时,还有很多令人惊叹的项目我还没有机会谈论。但如果你进入这个空间,你会在适当的时候找到他们。



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