首页 > 区块链 > 如何成为一名区块链开发者(一)
终极说法  

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

摘要:区块链源代码导读:随着区块链成为国家战略,央行也推出数字货币,业界对区块链行业从业人员的需求越来越大;另外最近比特币价格又创新高,去中心化金融 DeFi 应用也非常火热,程序员业余也有开发了解区块链的需求。高可用架构翻译 blockgeeks 的系列文章,帮助大家更好学习及了解区块链开发。在本文中,

导读:随着区块链成为国家战略,央行也推出数字货币,业界对区块链行业从业人员的需求越来越大;另外最近比特币价格又创新高,去中心化金融 DeFi 应用也非常火热,程序员业余也有开发了解区块链的需求。高可用架构翻译 blockgeeks 的系列文章,帮助大家更好学习及了解区块链开发。

在本文中,我们将向你介绍如何成为一名区块链开发工程师。正如你很快就会看到的那样,区块链开发与普通的互联网开发并没有本质不同。为了方便大家上手,我们编写了这篇指南来帮助大家学习区块链开发,并在每个小节给出了总结性的操作步骤。

早期比特币的开发范围比较有限,然而随着以太坊的发布,区块链开发的游戏规则发生了根本性的改变,以太坊是世界上第一个可编程的区块链。全球的开发者终于有机会在区块链之上构建自己的应用。这也是为什么学习区块链开发成为一项如此热门的技能的原因之一。

毋庸置疑,我们已经生活在“区块链时代”,它对我们未来的影响非常大。那么,如何才能在这场区块链革命中分得一杯羹呢?如果你想成为一名区块链开发者,那么你需要按照一定的方法。

希望通过这篇指南,你能开始你的区块链旅程。如果你想成为一名真正的区块链开发者,我们需要为你设定一些期望。首先,这需要时间,你需要将你的时间和资源投入到你的学习中。其次,不要期望立马就可以获得成果,区块链开发不能一蹴而就。

说了这么多,让我们开始正题吧。

成为一名区块链开发者 — 里程碑#1:了解基础知识

区块链开发工具

对于任何新的革命性的技术,比如区块链,最大的障碍之一就是熟悉系统中不可或缺的各种概念。

如果你是一个区块链初学者,你需要熟悉某些术语。

学习区块链技术

区块链:区块链 (1) 是由一条多个区块组成的链条,每一个区块都存储对应的数据,它没有任何中心化监管,而是通过密码学来保证安全和数据不可改变。

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

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

矿工:利用计算能力挖掘新区块的用户。

建议你多了解一下这些在加密领域广泛使用的术语。也可以浏览我们的综合词汇表 (3)。了解这些基本的术语非常重要,否则你会在进一步的学习中非常迷茫。

如果你对如何在区块链之上创建一个金融科技应用感兴趣,那么你一定要学习加密经济学的来龙去脉。大多数开发人员通常精通“加密”部分,但可能对“经济学”部分的知识一无所知。

鉴于此,不妨读一读经济学方面的知识,对其有一个大致的了解。如果你想了解一般的加密经济学,那么你可以在这里查看我们的文章 (4)。

如果你对密码学特别感兴趣,想知道数字签名是如何工作,以及了解公钥密码学的含义,那么请阅读这个 (5)。

之后,强烈建议你了解一下比特币的工作原理,比特币是区块链技术中传播最广泛、最好、最优雅的应用之一。你甚至可以说它是区块链技术所能达到的最优秀的例子,基于它所产生的影响。因此建议你阅读中本聪的比特币白皮书 (6)

(1) https://blockgeeks.com/guides/what-is-blockchain-technology/

(2) https://blockgeeks.com/guides/what-is-cryptoeconomics/

(3) https://blockgeeks.com/guides/blockchain-glossary-from-a-z/

(4) https://blockgeeks.com/guides/what-is-cryptoeconomics/

(5) https://blockgeeks.com/guides/cryptocurrencies-cryptography/

(6) https://bitcoin.org/bitcoin.pdf

现在,这完成了第一个里程碑。

让我们来回顾一下你需要在这一步完成的行动计划。

熟悉各种专业术语。

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

阅读比特币白皮书。

成为一名区块链开发者 — 里程碑 #2:熟悉流程

看到很多新晋 "开发者 "完全没有真实世界的一手经验,这是令人惊讶的。如果一个系统你一次都没有使用过,怎么可能对它进行创新和改进呢?

因此强烈建议你从今天开始熟悉这个系统。

去 Coinbase 或任何其他你熟悉的交易所购买一些币。你不需要创建一个广泛的投资组合,只需要购买一些币来观察整个流程是如何工作的。

这是非常直接的。既然你不打算购买大量的币,那么只需使用一个基本的在线钱包。

这些钱包是所有钱包中最容易使用的。创建超级简单,因为它基本上是在任何一个交易所服务上创建自己的账户。此外,你可以从世界上任何服务器或任何设备访问这个钱包,只要它连接到网络。说到这里,在线钱包有一个很大的问题。你的私钥会被保存在另一台服务器上。这基本上就像在银盆上向黑客提供你的密钥。不要使用在线钱包来存储大量的资金。仅存放你需要的最低限度的测试交易用途的金额。

当你创建一个广泛的加密货币投资组合时,你必须学会如何利用冷钱包来存储你的资金。你可以在这里学习如何这样做。后来,如果你开始了你的募资,那么你必须知道钱包,特别是多签钱包如何工作。

这一部分也将结束,艰难的部分从下一个里程碑开始。

这一节的行动计划包括:

了解交易所的工作原理

熟悉使用钱包。

成为一名区块链开发者 — 里程碑3:开始编码

作为一名区块链开发者,我们将在后端面临大量的挑战。由于一些原因,创建和维护一个公链并不容易。

原因1:安全

正如 David Schwartz 所说,区块链应该是堡垒。首先,代码是公开的,所有人都可以看到。任何人都可以查看代码,检查错误和漏洞。然而,与其他开放的代码资源不同,在区块链代码上寻找漏洞的缺点是巨大的。任何程序员都可以黑客入侵,并有可能获得数百万美元甚至数百万美元的资金。由于这些合理的安全问题考虑,区块链上的开发进展通常非常缓慢。

原因二:资源管理

跟上网络的节奏很重要,不能滞后而跟不上所有的网络请求。你需要应对远程和本地查询的访问。

原因3:性能

区块链必须始终以尽可能高的能力执行,但要做到这一点,所选择的语言必须是非常通用的。问题是,区块链中的某些任务是可以并行的,而有些任务是不能并行完成的。

数字签名验证就是可并行任务的一个好例子。签名验证所需要的就是密钥、交易和签名。只需三个数据,你就可以以并行化的方式进行验证。

然而,并不是区块链上所有的功能都应该这样做。想想交易执行本身。多个交易不能并行执行,需要一次只做一个,以避免双重支出等逻辑错误。有些语言擅长并行操作,而有些语言擅长非并行操作。

原因4:隔离

什么是确定性行为?

如果 A+B=C,那么无论在什么情况下,A+B 永远等于 C,这就叫确定性行为。

哈希函数是确定性的,即 A 的哈希值永远是 H(A)。

所以,在区块链开发中,所有的交易操作都必须是确定性的。你不能有一个交易的行为是一种方式,然后第二天又是另一种方式。同样,你不能让智能合约在两台不同的机器上以两种不同的方式工作。

唯一的解决方案是隔离。基本上,你将你的智能合约和交易与非确定性元素隔离。

有一些语言可以满足大部分需求,如果你是一个区块链开发者,那么你肯定需要掌握一些 C++ 和 JavaScript 的基本知识。

虽然 C++ 可能看起来有点过时,但事实是,它奇妙地满足了我们上面所描述的所有功能。事实上,中本聪用 C++ 编写了比特币的源代码。

它与 HTML 和 CSS 一起,是 WWW 内容制作的三大核心技术之一。Javascript 通常用于创建用户交互的网页。

那么,现在我们就来看看如何使用 Javascript 创建一个非常简单的区块链。

我们如何创建一个区块?一个简单的区块由什么组成?在我们将要开发的简单加密货币中(我们称它为 "BlockGeeksCoin"),每个区块包含以下信息:

索引:区块的编号

时间戳:区块的创建时间

数据:区块内的数据

Previous Hash:上一个区块的 hash 值。

Hash 值:当前块的 Hash 值。

在我们继续之前,你需要了解我们在程序中要用到的一些术语。

This: "this "关键字是在函数中被调用的,它使你能够访问调用该函数的特定对象的值。

构造函数。构造函数是一个特殊的函数,它可以帮助在一个类中创建和初始化一个对象。每个类只能有一个构造函数。

已经差不多了,让我们开始创建我们的区块。

创建新区块代码

const SHA256 = require("crypto-js/sha256"); class Block { constructor(index, timestamp, data, previousHash = '') { this.index = index; this.previousHash = previousHash; this.timestamp = timestamp; this.data = data; this.hash = this.calculateHash; } calculateHash { return SHA256(this.index + this.previousHash + this.timestamp + JSON.stringify(this.data)).toString; } }

代码分析

好了,这里就创建了一个区块。在代码的第一行,我们调用了 crypto-js 库,因为 sha256 哈希函数在 JavaScript 中默认是不提供的。

接下来,我们在类里面调用了一个构造函数,来调用会有一定值的对象。吸引你眼球的可能是 calculateHash 函数。让我们来看看它到底在做什么。

在一个区块中,我们把所有的内容进行哈希处理,得到该特定区块的哈希值。我们使用 JSON.stringify 函数将块的数据变成一个字符串来进行散列。

好了,我们已经准备好了块,可以开始了。现在让我们把这些区块连接在一起变成一个区块链。

class Blockchain{//Section 1 Genesis block creation constructor { this.chain = [this.createGenesisBlock()]; } createGenesisBlock { return new Block(0, "01/01/2017", "Genesis block", "0"); } //section 2 adding new blocksgetLatestBlock { return this.chain[this.chain.length - 1]; } addBlock(newBlock) { newBlock.previousHash = this.getLatestBlock.hash; newBlock.hash = newBlock.calculateHash; this.chain.push(newBlock); } //section 3 validating the chainisChainValid { for (let i = 1; i < this.chain.length; i++){ const currentBlock = this.chain[i]; const previousBlock = this.chain[i - 1]; if (currentBlock.hash !== currentBlock.calculateHash) { return false; } if (currentBlock.previousHash !== previousBlock.hash) { return false; } } return true; } }

代码分析

好了,上面的代码中执行了很多操作,我们把它分成几个部分。

第一部分:创世纪块

什么是创世区块?

创世区块是区块链的第一个区块,之所以特殊,是因为每个区块都指向之前的区块,而创世区块并不指向任何东西。所以,在创建新链的那一刻,创世区块会立即被创建。

因此,你可以看到一个 createGenesisBlock 函数,在这个函数中,我们手动给出了块的数据。

createGenesisBlock { return new Block(0, "01/01/2017", "Genesis block", "0"); }

第二部分:添加区块

首先,我们需要知道当前区块链中最新一个区块是什么。为此,我们使用 getLatestBlock 函数。

getLatestBlock { return this.chain[this.chain.length - 1]; } Now that we have determined the latest block, let’s see how we are going to add new blocks.addBlock(newBlock) { newBlock.previousHash = this.getLatestBlock.hash; newBlock.hash = newBlock.calculateHash; this.chain.push(newBlock); }

那么,这里发生了什么?我们是如何添加区块的?我们如何检查给定的区块是否有效?

还记得一个区块的内容吗?每个区块有前一个区块的哈希值,对吗?

所以,我们在这里要做的很简单。将新出块的 previousHash 与最后一个区块哈希值进行比较。

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

如果这两个值相匹配,那么就意味着新的区块是合法的,它被添加到区块链中。

第三部分:验证链

现在,我们需要检查没有人对我们的区块链进行破坏,一切都很稳定。

我们使用 for 循环从区块1到最后一个区块。创世区块是区块 0。

for (let i = 1; i < this.chain.length; i++){ const currentBlock = this.chain[i]; const previousBlock = this.chain[i - 1]; In this part of the code we are defining two terms, current block and previous block. And now we are simply going to find the hash of these two values.if (currentBlock.hash !== currentBlock.calculateHash) { return false; } if (currentBlock.previousHash !== previousBlock.hash) { return false; } } return true; }

如果当前区块的 previousHash 不等于前一个区块的 Hash,那么这个函数将返回 False,否则将返回 True。

使用区块链

现在,我们终于要使用区块链来创建我们的 BlockGeeksCoin 了。

let BlockGeeksCoin = new Blockchain; BlockGeeksCoin.addBlock(new Block(1, "20/07/2017", { amount: 4 })); BlockGeeksCoin.addBlock(new Block(2, "20/07/2017", { amount: 8 }));

就是这样!

那么这里发生了什么?

我们基于区块链创建了一个新的加密货币,并将其命名为BlockGeeksCoin。通过调用这个新对象,我激活了构造函数,进而自动创建了创世区块。

我们只需再给它添加两个区块,并给它们一些数据。

就是这么简单。

这个里程碑就到此为止了。让我们看看行动计划。它非常简单,但肯定也不容易。

在众多的区块链友好语言中选择一种进行学习,比如 C++,Javascript,C#,Go 等。

英文全文:https://blockgeeks.com/guides/blockchain-developer/

本文由高可用架构翻译,技术原创及架构实践文章,欢迎通过公众号菜单「联系我们」进行投稿。

高可用架构

改变互联网的构建方式

免责声明
世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。