欢迎访问比特币_区块链-币链视界!

币链视界

如何成为一名区块链开发者一

发布时间:2021-02-23区块链开发评论
导读:随着区块链成为国家战略,央行也推出数字货币,业界对区块链行业从业人员的需求越来越大;另外最近比特币价格又创新高,去中心化金融DeFi应用也非常火热,程序员业余也有

导读:随着区块链成为国家战略,央行也推出数字货币,业界对区块链行业从业人员的需求越来越大;另外最近比特币价格又创新高,去中心化金融DeFi应用也非常火热,程序员业余也有开发了解区块链的需求。高可用架构翻译blockgeeks的系列文章,帮助大家更好学习及了解区块链开发。在本文中,我们将向你介绍如何成为一名区块链开发工程师。正如你很快就会看到的那样,区块链开发与普通的互联网开发并没有本质不同。为了方便大家上手,我们编写了这篇指南来帮助大家学习区块链开发,并在每个小节给出了总结性的操作步骤。早期比特币的开发范围比较有限,然而随着以太坊的发布,区块链开发的游戏规则发生了根本性的改变,以太坊是世界上第一个可编程的区块链。全球的开发者终于有机会在区块链之上构建自己的应用。这也是为什么学习区块链开发成为一项如此热门的技能的原因之一。毋庸置疑,我们已经生活在“区块链时代”,它对我们未来的影响非常大。那么,如何才能在这场区块链革命中分得一杯羹呢?如果你想成为一名区块链开发者,那么你需要按照一定的方法。希望通过这篇指南,你能开始你的区块链旅程。如果你想成为一名真正的区块链开发者,我们需要为你设定一些期望。首先,这需要时间,你需要将你的时间和资源投入到你的学习中。其次,不要期望立马就可以获得成果,区块链开发不能一蹴而就。说了这么多,让我们开始正题吧。成为一名区块链开发者—里程碑#1:了解基础知识区块链开发工具对于任何新的革命性的技术,比如区块链,最大的障碍之一就是熟悉系统中不可或缺的各种概念。如果你是一个区块链初学者,你需要熟悉某些术语。学习区块链技术区块链:区块链(1)是由一条多个区块组成的链条,每一个区块都存储对应的数据,它没有任何中心化监管,而是通过密码学来保证安全和数据不可改变。

去中心化:区块链被认为是去中心化的,因为没有中心化机构监督。

共识机制:去中心化网络就某些事项达成共识的机制(2)。

矿工:利用计算能力挖掘新区块的用户。建议你多了解一下这些在加密领域广泛使用的术语。也可以浏览我们的综合词汇表(3)。了解这些基本的术语非常重要,否则你会在进一步的学习中非常迷茫。如果你对如何在区块链之上创建一个金融科技应用感兴趣,那么你一定要学习加密经济学的来龙去脉。大多数开发人员通常精通“加密”部分,但可能对“经济学”部分的知识一无所知。鉴于此,不妨读一读经济学方面的知识,对其有一个大致的了解。如果你想了解一般的加密经济学,那么你可以在这里查看我们的文章(4)。如果你对密码学特别感兴趣,想知道数字签名是如何工作,以及了解公钥密码学的含义,那么请阅读这个(5)。之后,强烈建议你了解一下比特币的工作原理,比特币是区块链技术中传播最广泛、最好、最优雅的应用之一。你甚至可以说它是区块链技术所能达到的最优秀的例子,基于它所产生的影响。因此建议你阅读中本聪的比特币白皮书(6)(1)?

(2)?

(3)?

(4)?

(5)

(6)?现在,这完成了第一个里程碑。让我们来回顾一下你需要在这一步完成的行动计划。熟悉各种专业术语。

阅读区块链的更多技术方面的内容。

阅读比特币白皮书。成为一名区块链开发者?—?里程碑#2:熟悉流程看到很多新晋"开发者"完全没有真实世界的一手经验,这是令人惊讶的。如果一个系统你一次都没有使用过,怎么可能对它进行创新和改进呢?因此强烈建议你从今天开始熟悉这个系统。去Coinbase或任何其他你熟悉的交易所购买一些币。你不需要创建一个广泛的投资组合,只需要购买一些币来观察整个流程是如何工作的。这是非常直接的。既然你不打算购买大量的币,那么只需使用一个基本的在线钱包。这些钱包是所有钱包中最容易使用的。创建超级简单,因为它基本上是在任何一个交易所服务上创建自己的账户。此外,你可以从世界上任何服务器或任何设备访问这个钱包,只要它连接到网络。说到这里,在线钱包有一个很大的问题。你的私钥会被保存在另一台服务器上。这基本上就像在银盆上向黑客提供你的密钥。不要使用在线钱包来存储大量的资金。仅存放你需要的最低限度的测试交易用途的金额。当你创建一个广泛的加密货币投资组合时,你必须学会如何利用冷钱包来存储你的资金。你可以在这里学习如何这样做。后来,如果你开始了你的募资,那么你必须知道钱包,特别是多签钱包如何工作。这一部分也将结束,艰难的部分从下一个里程碑开始。这一节的行动计划包括:了解交易所的工作原理

熟悉使用钱包。成为一名区块链开发者?—?里程碑3:开始编码作为一名区块链开发者,我们将在后端面临大量的挑战。由于一些原因,创建和维护一个公链并不容易。原因1:安全正如DavidSchwartz所说,区块链应该是堡垒。首先,代码是公开的,所有人都可以看到。任何人都可以查看代码,检查错误和漏洞。然而,与其他开放的代码资源不同,在区块链代码上寻找漏洞的缺点是巨大的。任何程序员都可以黑客入侵,并有可能获得数百万美元甚至数百万美元的资金。由于这些合理的安全问题考虑,区块链上的开发进展通常非常缓慢。原因二:资源管理跟上网络的节奏很重要,不能滞后而跟不上所有的网络请求。你需要应对远程和本地查询的访问。原因3:性能区块链必须始终以尽可能高的能力执行,但要做到这一点,所选择的语言必须是非常通用的。问题是,区块链中的某些任务是可以并行的,而有些任务是不能并行完成的。数字签名验证就是可并行任务的一个好例子。签名验证所需要的就是密钥、交易和签名。只需三个数据,你就可以以并行化的方式进行验证。然而,并不是区块链上所有的功能都应该这样做。想想交易执行本身。多个交易不能并行执行,需要一次只做一个,以避免双重支出等逻辑错误。有些语言擅长并行操作,而有些语言擅长非并行操作。原因4:隔离什么是确定性行为?如果A+B=C,那么无论在什么情况下,A+B永远等于C,这就叫确定性行为。哈希函数是确定性的,即A的哈希值永远是H(A)。所以,在区块链开发中,所有的交易操作都必须是确定性的。你不能有一个交易的行为是一种方式,然后第二天又是另一种方式。同样,你不能让智能合约在两台不同的机器上以两种不同的方式工作。唯一的解决方案是隔离。基本上,你将你的智能合约和交易与非确定性元素隔离。有一些语言可以满足大部分需求,如果你是一个区块链开发者,那么你肯定需要掌握一些C++和JavaScript的基本知识。虽然C++可能看起来有点过时,但事实是,它奇妙地满足了我们上面所描述的所有功能。事实上,中本聪用C++编写了比特币的源代码。它与HTML和CSS一起,是WWW内容制作的三大核心技术之一。Javascript通常用于创建用户交互的网页。那么,现在我们就来看看如何使用Javascript创建一个非常简单的区块链。我们如何创建一个区块?一个简单的区块由什么组成?在我们将要开发的简单加密货币中(我们称它为"BlockGeeksCoin"),每个区块包含以下信息:索引:区块的编号

时间戳:区块的创建时间

数据:区块内的数据

PreviousHash:上一个区块的hash值。

Hash值:当前块的Hash值。在我们继续之前,你需要了解我们在程序中要用到的一些术语。This:"this"关键字是在函数中被调用的,它使你能够访问调用该函数的特定对象的值。

构造函数。构造函数是一个特殊的函数,它可以帮助在一个类中创建和初始化一个对象。每个类只能有一个构造函数。已经差不多了,让我们开始创建我们的区块。创建新区块代码constSHA256=require("crypto-js/sha256");classBlock{constructor(index,timestamp,data,previousHash=''){this.index=index;this.previousHash=previousHash;this.timestamp=timestamp;this.data=data;this.hash=this.calculateHash();}calculateHash(){returnSHA256(this.index+this.previousHash+this.timestamp+JSON.stringify(this.data)).toString();}}

代码分析好了,这里就创建了一个区块。在代码的第一行,我们调用了crypto-js库,因为sha256哈希函数在JavaScript中默认是不提供的。接下来,我们在类里面调用了一个构造函数,来调用会有一定值的对象。吸引你眼球的可能是calculateHash()函数。让我们来看看它到底在做什么。在一个区块中,我们把所有的内容进行哈希处理,得到该特定区块的哈希值。我们使用JSON.stringify函数将块的数据变成一个字符串来进行散列。好了,我们已经准备好了块,可以开始了。现在让我们把这些区块连接在一起变成一个区块链。classBlockchain{//Section1Genesisblockcreationconstructor(){this.chain=[this.createGenesisBlock()];}createGenesisBlock(){returnnewBlock(0,"01/01/2017","Genesisblock","0");}//section2addingnewblocksgetLatestBlock(){returnthis.chain[this.chain.length-1];}addBlock(newBlock){newBlock.previousHash=this.getLatestBlock().hash;newBlock.hash=newBlock.calculateHash();this.chain.push(newBlock);}//section3validatingthechainisChainValid(){for(leti=1;i{constcurrentBlock=this.chain[i];constpreviousBlock=this.chain[i-1];if(currentBlock.hash!==currentBlock.calculateHash()){returnfalse;}if(currentBlock.previousHash!==previousBlock.hash){returnfalse;}}returntrue;}}

代码分析好了,上面的代码中执行了很多操作,我们把它分成几个部分。第一部分:创世纪块什么是创世区块?创世区块是区块链的第一个区块,之所以特殊,是因为每个区块都指向之前的区块,而创世区块并不指向任何东西。所以,在创建新链的那一刻,创世区块会立即被创建。因此,你可以看到一个createGenesisBlock()函数,在这个函数中,我们手动给出了块的数据。createGenesisBlock(){returnnewBlock(0,"01/01/2017","Genesisblock","0");}

第二部分:添加区块首先,我们需要知道当前区块链中最新一个区块是什么。为此,我们使用getLatestBlock()函数。getLatestBlock(){returnthis.chain[this.chain.length-1];}Nowthatwehavedeterminedthelatestblock,let’sseehowwearegoingtoaddnewblocks.addBlock(newBlock){newBlock.previousHash=this.getLatestBlock().hash;newBlock.hash=newBlock.calculateHash();this.chain.push(newBlock);}

那么,这里发生了什么?我们是如何添加区块的?我们如何检查给定的区块是否有效?还记得一个区块的内容吗?每个区块有前一个区块的哈希值,对吗?所以,我们在这里要做的很简单。将新出块的previousHash与最后一个区块哈希值进行比较。

如果这两个值相匹配,那么就意味着新的区块是合法的,它被添加到区块链中。第三部分:验证链现在,我们需要检查没有人对我们的区块链进行破坏,一切都很稳定。我们使用for循环从区块1到最后一个区块。创世区块是区块0。for(leti=1;i{constcurrentBlock=this.chain[i];constpreviousBlock=this.chain[i-1];Inthispartofthecodewearedefiningtwoterms,currentblockandpreviousblock.Andnowwearesimplygoingtofindthehashofthesetwovalues.if(currentBlock.hash!==currentBlock.calculateHash()){returnfalse;}if(currentBlock.previousHash!==previousBlock.hash){returnfalse;}}returntrue;}

如果当前区块的previousHash不等于前一个区块的Hash,那么这个函数将返回False,否则将返回True。使用区块链现在,我们终于要使用区块链来创建我们的BlockGeeksCoin了。letBlockGeeksCoin=newBlockchain();BlockGeeksCoin.addBlock(newBlock(1,"20/07/2017",{amount:4}));BlockGeeksCoin.addBlock(newBlock(2,"20/07/2017",{amount:8}));

就是这样!那么这里发生了什么?我们基于区块链创建了一个新的加密货币,并将其命名为BlockGeeksCoin。通过调用这个新对象,我激活了构造函数,进而自动创建了创世区块。我们只需再给它添加两个区块,并给它们一些数据。就是这么简单。这个里程碑就到此为止了。让我们看看行动计划。它非常简单,但肯定也不容易。在众多的区块链友好语言中选择一种进行学习,比如C++,Javascript,C#,Go等。(由于篇幅关系,今天先发布第一部分,接下来合约部分敬请期待,着急的读者也可以阅读英文版了解全文)英文全文:参考阅读:微服务架构中的熔断器设计与实现(Golang版)

API分页设计与实现

Rust和C性能对比:排序

白话高并发中的协程

使用Go语言从零编写PoS区块链

使用Go语言编写区块链P2P网络本文由高可用架构翻译,技术原创及架构实践文章,欢迎通过公众号菜单「联系我们」进行投稿。高可用架构改变互联网的构建方式

广告位

热心评论

评论列表