如何成为区块链开发者-Blockgeeks

 如标题所示,在本指南中,我们将向您展示如何成为区块链开发人员。正如您将很快看到的,区块链开发与常规Web开发没有太大区别。为了简化您的工作,我们编写了本指南,以帮助您学习区块链开发并在每个部分的末尾为您提供操作步骤.

比特币区块链的发展范围是有限的。但是,随着以太坊的到来,游戏彻底改变了,以太坊是世界上第一个可编程区块链。全世界的开发人员终于有机会在区块链之上构建应用程序。这就是学习区块链开发成为如此热门技能的原因.

毋庸置疑,我们生活在“区块链时代”。它可能对我们的未来产生巨大的影响。那么,您如何获得“区块链行动”的一部分呢?如果您要成为区块链开发人员,则需要采取某些步骤.

希望在本指南结尾处,您将拥有启动旅程所需的工具。如果您真的想成为一名开发人员,那么我们需要为您设定一些期望。首先,这将需要时间,您将需要花费时间和资源用于教育(您可以通过参加我们的在线课程来继续进行区块链开发课程)。其次,不要期望立竿见影的结果,成为区块链开发者不是万能药.

因此,让我们开始您的旅程.

成为区块链开发人员–里程碑#1:了解基础知识

区块链开发工具

诸如区块链技术之类的新事物和革命性事物最大的障碍之一就是使自己熟悉系统不可或缺的各种概念.

如果您是初学者,则需要熟悉一些术语:

学习区块链技术

  • 区块链 区块链是一个区块链,其中每个区块都包含有价值的数据,而无需任何中央监督。它在密码上安全且不可变.
  • 去中心化: 据说区块链是去中心化的,因为没有中央机构来监督任何事情.
  • 共识机制: 分散网络在某些问题上达成共识的机制.
  • 矿工: 使用其计算能力来挖掘区块的用户.

建议更多地了解在加密领域广泛使用的这些术语。强烈建议您阅读我们的综合词汇表。重要的是要学习这些基本术语,否则您将在学习中进一步迷失方向。现在,接下来,是时候对区块链的技术方面进行一些自我教育了.

如果您对如何在区块链之上创建金融科技应用程序的技术方面感兴趣,那么您绝对应该了解加密经济学的来龙去脉。大多数开发人员通常精通方程式的“加密”部分,但是他们对“经济学”部分的知识却非常缺乏.

当您研究其中一些浮动的ICO时,这种知识差异非常明显。很明显,他们的ICO的经济学方面没有被深思熟虑.

因此,鉴于此,对经济学有所了解并对此有一个大概的想法可能是一个好主意。如果您想全面了解加密经济学,则可以在此处查看我们的文章.

如果您对密码学特别感兴趣,并且想知道签名的工作原理以及公钥密码学的含义,请阅读以下内容.

之后,强烈建议您了解比特币的工作原理。比特币是区块链技术中应用最广泛,最精细的应用程序之一。您甚至可以称其为纯粹的区块链技术可以实现的最好的例子,因为它已经产生了影响.

因此,建议您阅读中本聪的比特币白皮书。你可以 在这里找到. 现在,完成了第一个里程碑.

让我们在此处查看需要执行的操作步骤:

  • 熟悉各种术语和词典.
  • 阅读有关区块链更多技术方面的内容.
  • 阅读比特币白皮书.

成为区块链开发人员-里程碑2:了解流程

令人惊讶的是,有多少新兴的“开发者”根本没有任何关于加密货币的真实经验。即使您没有使用过平台,如何在平台上进行创新和改进?

强烈建议您立即开始熟悉该系统.

前往Coinbase或您在国家/地区熟悉或可以使用的任何其他交易所,购买一些硬币。您无需直接创建广泛的投资组合,只需购买几枚硬币,然后查看整个过程的工作原理.

这非常简单。由于您不会购买大量硬币,因此只需使用基本的在线钱包.

这些钱包是所有钱包中最容易使用的。创建过程非常简单,因为它基本上是在任何交换服务上创建您自己的帐户。此外,您可以从世界上的任何服务器或任何设备访问此钱包,只要它连接到网络即可。话虽如此,在线钱包存在一个大问题。您的私钥将保存在另一台服务器上。基本上,这就像在银盘上向黑客提供密钥。请勿使用在线钱包存储大量资金。存储交换所需的最低限度的费用.

创建广泛的产品组合时,您必须学习如何利用冷钱包来储钱。您可以在此处了解如何操作。以后,如果您创建ICO,则必须了解钱包,尤其是多重签名钱包的工作方式.

我们将在这里结束本节,困难的部分从下一个里程碑开始.

您的操作步骤如下:

  • 了解交流的工作方式.
  • 结识钱包.

成为区块链开发人员-里程碑3:让我们开始编码!

作为区块链开发人员,您将在后端面临无数挑战。由于多种原因,创建和维护公共区块链并不容易.

(在我们继续之前,大卫·施瓦茨(David Schwartz)在CPPCON 2016上有关C ++在区块链软件开发中的使用的主题演讲中大声喊叫。

  • 原因1:安全性

正如大卫·施瓦茨(David Schwartz)所说,区块链应该是要塞。首先,该代码是公开的并且公开给所有人。任何人都可以查看代码,并检查错误和漏洞。但是,与其他开放代码资源不同,在区块链代码上查找漏洞的弊端是巨大的。任何程序员都可以侵入并逃脱潜在的数百万美元。由于这些合法的安全问题,区块链上的开发通常非常缓慢.

  • 原因2:资源管理

与网络保持同步很重要。您不能落在后面,也不能跟上所有网络需求。您应该具备处理远程和本地查询的能力.

  • 原因3:效果

区块链必须始终以其最高的功能来执行,但是要做到这一点,所选择的语言必须非常灵活。问题在于,区块链中的某些任务是可并行化的,而有些任务则无法并行完成.

数字签名验证是“可并行化”任务的一个很好的例子。签名验证所需的全部就是密钥,交易和签名。仅需三个数据,您就可以并行进行验证.

但是,并不是区块链上的所有功能都应该那样做。考虑事务执行本身。多个交易不能并行执行;必须一次完成一次,以免发生重复支出之类的错误。有些语言擅长并行操作,而有些则擅长非并行操作.

  • 原因4:隔离

什么是确定性行为?

如果A + B = C,那么无论什么情况,A + B总是等于C。这就是确定性行为.

哈希函数是确定性的,这意味着A的哈希始终为H(A).

因此,在区块链开发中,所有交易操作必须是确定性的。您的交易不能以一种方式发生,然后在第二天以另一种方式发生。同样,您不能拥有可以在两种不同机器上以两种不同方式工作的智能合约.

唯一的解决方案是隔离。基本上,您可以将智能合约和交易与不确定因素隔离开.

有些语言可以满足大多数这些需求。如果您是区块链开发人员,那么您肯定需要具备C ++和JavaScript的一些基本知识。.

尽管C ++似乎有些过时,但事实是它很好地满足了我们上面描述的所有功能。实际上,中本聪(Satoshi Nakamoto)用C语言编写了比特币源代码++.

与HTML和CSS一起,它是万维网内容生产中的三项核心技术之一。 Javascript通常用于创建高度互动的网页.

所以,现在我们将看到如何使用Javascript创建非常简单的区块链.

以下内容对savjee.be进行了大喊.

我们如何做一个方块?一个简单的块由什么组成?在我们将要制作的简单加密货币中(我们称其为“ BlockGeeksCoin”),每个区块将包含以下信息:

  • 指数: 要知道块号.
  • 时间戳记: 知道创作的时间.
  • 数据: 块内的数据.
  • 以前的哈希: 上一个区块的哈希.
  • 杂凑: 当前块的哈希.

在我们继续之前。您需要了解我们将在程序中使用的某些术语:

  • 这: “ this”关键字在函数内部被调用,使您能够访问调用该特定函数的特定对象内的值.
  • 建设者:构造函数是一个特殊的函数,可以帮助创建和初始化类中的对象。每个类仅限于一个构造函数.

现在完成了,让我们开始做块.

创建块

const SHA256 = require("crypto-js / sha256");

类块

{

构造函数(索引,时间戳,数据,previousHash =”)

{

this.index =索引;

this.previousHash = previousHash;

this.timestamp =时间戳;

this.data =数据;

this.hash = this.calculateHash();

}

computeHash()

{

返回SHA256(this.index + this.previousHash + this.timestamp + JSON.stringify(this.data))。toString();

}

}

代码分析

好的,这就是一个障碍。因此,在代码的第一行中,我们调用了crypto-js库,因为sha256哈希函数在JavaScript中不可用.

接下来,我们在类内部调用了一个构造函数来调用将具有某些值的对象。可能引起您注意的是calculateHash()函数。让我们看看它到底在做什么.

在一个块中,我们获取所有内容并对其进行哈希处理以获得该特定块的哈希。我们正在使用JSON.stringify函数将块的数据转换为字符串以对其进行哈希处理.

好的,所以我们已经准备好了,该准备好了。现在让我们将这些块连接到一个区块链中.

创建区块链:成为区块链工程师

区块链类

{

//第1节创世块的创建

构造函数()

{

this.chain = [this.createGenesisBlock()];

}

createGenesisBlock()

{

返回新块(0, "2017/01/01", "创世块", "0");

}

//第2节添加新块

getLatestBlock()

{

返回this.chain [this.chain.length-1];

}

addBlock(newBlock){

newBlock.previousHash = this.getLatestBlock()。hash;

newBlock.hash = newBlock.calculateHash();

this.chain.push(newBlock);

}

//第3节验证链

isChainValid()

{

为(令我= 1;我 < this.chain.length;我++)

{

const currentBlock = this.chain [i];

const previousBlock = this.chain [i-1];

如果(currentBlock.hash!== currentBlock.calculateHash()){

返回false;

}

如果(currentBlock.previousHash!== previousBlock.hash)

{

返回false;

}

}

返回true;

}

}

代码分析

好的,以上链条中有很多事情要做,让我们将其分解为几个部分.

  • 第1节:创世块

什么是创世块?

创世块是区块链的第一个块,之所以如此特别,是因为尽管每个博克都指向它之前的块,但创世块没有指向任何东西。因此,一旦创建了新链,就立即调用创世块.

另外,您可以看到一个“ createGenesisBlock()”函数,其中我们手动给出了块的数据:

createGenesisBlock()

{

返回新块(0, "2017/01/01", "创世块", "0");

}

  • 第2节:添加块

首先,我们将需要知道当前区块链中的最后一块。为此,我们使用getLatestBlock()函数.

getLatestBlock()

{

返回this.chain [this.chain.length-1];

}

现在我们已经确定了最新的块,让我们看看如何添加新块.

addBlock(newBlock){

newBlock.previousHash = this.getLatestBlock()。hash;

newBlock.hash = newBlock.calculateHash();

this.chain.push(newBlock);

}

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

还记得块的内容吗?一个区块具有上一个区块的哈希值?

因此,我们在这里要做的很简单。将新块的先前哈希值与最新块的哈希值进行比较.

如何成为区块链开发者

图片提供:Lauri Hartikka中篇文章

如果这两个值匹配,则意味着新块合法,并将其添加到区块链中.

  • 第3节:验证链

现在,我们需要检查是否有人在弄乱我们的区块链,并且一切都稳定.

我们正在使用“ for”循环从块1到最后一个块。创世记块是第0块.

为(令我= 1;我 < this.chain.length;我++)

{

const currentBlock = this.chain [i];

const previousBlock = this.chain [i-1];

在代码的这一部分中,我们定义两个术语,当前块和上一个块。现在我们只需查找这两个值的哈希值.

如果(currentBlock.hash!== currentBlock.calculateHash()){

返回false;

}

如果(currentBlock.previousHash!== previousBlock.hash)

{

返回false;

}

}

返回true;

}

如果当前块的“ previousHash”不等于前一个块的“ Hash”,则此函数将返回False,否则将返回True.

使用区块链

现在,我们将最终使用区块链创建我们的BlockGeeksCoin.

让BlockGeeksCoin = new Blockchain();

BlockGeeksCoin.addBlock(new Block(1, "2017/07/20", {金额:4}));

BlockGeeksCoin.addBlock(new Block(2, "2017/07/20", {金额:8}));

就是这样!

那这里发生了什么?

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

我们只是在上面添加了两个块,并给了他们一些数据.

就这么简单.

(感谢savjee.be提供了惊人而简单的解释。)

就是这个里程碑。让我们看一下操作步骤。这很简单,但绝对不容易:

  • 受多种区块链友好语言的教育,例如C ++,Javascript,C#,Go等.

成为区块链开发人员-里程碑4:学习智能合约

智能合约的工作原理

您如何定义智能合约?

根据维基百科, 智能合约是“旨在促进,验证或加强合约的谈判或履行的计算机协议”。以太坊最初是由美国密码学家尼克·萨博(Nick Szabo)于1996年提出的,而以太坊通常被认为推广了该概念并使之成为主流.

您可以在此处的深入指南中了解有关智能合约的更多信息.

那么,我们在智能合约中想要的理想属性是什么??

在区块链上运行的任何事物都必须是不可变的,并且必须具有在不损害其完整性的情况下跨多个节点运行的能力。因此,智能合约功能需要具备以下三点:

  • 确定性.
  • 终结的.
  • 隔离的.

功能1:确定性

如果程序每次都将相同的输出提供给给定的输入,则该程序是确定性的。例如。如果3 + 1 = 4,则3 + 1始终为4(假设基数相同)。因此,当程序将相同的输出提供给不同计算机中的相同输入集时,该程序称为确定性.

在各种情况下,程序可能无法确定地采取行动:

  • 调用不确定的系统函数: 当程序员在程序中调用不确定函数时.
  • 不确定的数据资源: 如果程序在运行时获取数据,并且该数据源不确定,则该程序将变得不确定。例如。假设有一个程序可以获取特定查询的前10个Google搜索。列表可能会不断变化.
  • 动态通话: 当程序调用第二个程序时,称为动态调用。由于仅在执行期间确定调用目标,因此本质上是不确定的.

功能2:终结

在数学逻辑中,我们有一个称为“停止问题”的错误。基本上,它指出无法知道给定程序是否可以在一定时间内执行其功能。 1936年,艾伦·图灵(Alan Turing)使用康托尔(Cantor)的对角线问题推论得出,没有办法知道给定程序是否可以在一定时限内完成.

这显然是智能合约的问题,因为根据定义,合约必须能够在给定的期限内终止。采取了一些措施来确保有一种方法可以从外部“杀死”合同,并且不会陷入无休止的循环,从而浪费资源:

  • 图灵不完整: 图灵不完整区块链将具有有限的功能,并且无法进行跳转和/或循环。因此,他们无法进入无限循环.
  • 计步器: 程序可以简单地跟踪已执行的“步数”,即已执行的指令数,然后在执行了特定的步数后终止。另一种方法是收费表。在这里,合同是通过预付费执行的。每条指令的执行都需要一定的费用。如果所花费的费用超过预付款的费用,则合同终止.
  • 计时器: 这里保留了预定的计时器。如果合同执行超过了时限,那么它将在外部中止.

功能3:隔离

在区块链中,任何人和所有人都可以上传智能合约。但是,因此,合同可能在有意和无意的情况下包含病毒和错误。如果合同不是孤立的,则可能会妨碍整个系统。因此,将合同隔离在沙盒中对于保护整个生态系统免受任何负面影响至关重要.

既然我们已经看到了这些功能,那么了解它们的执行方式就很重要。通常,智能合约是使用以下两种系统之一运行的:

  • 虚拟机:以太坊使用此.
  • Docker:Fabric使用此.

让我们比较一下这两个因素,并确定哪个因素可以改善生态系统。为了简单起见,我们将比较以太坊(虚拟机)和Fabric(Docker).

如果您特别对以太坊开发感兴趣,那么学习稳固性也很重要.

对于任何想学习如何制作DAPP(去中心化应用程序)或进入ICO游戏的人来说,学习Solidity是绝对必要的。我们已经有详细的指南,您可以在这里阅读。但是,这里我们将为您提供基本概述。 Solidity由Gavin Wood,Christian Reitwiessner,Alex Beregszaszi,Hiichi Hirai和几位以太坊前核心贡献者共同开发,以实现在以太坊等区块链平台上编写智能合约.

Solidity是一种有意精简的,松散类型的语言,其语法与ECMAScript(Javascript)非常相似。以太坊设计基本原理文档中有一些要记住的要点,即我们正在使用具有32字节指令字长的堆栈模型,通过EVM(以太坊虚拟机)可以访问程序“堆栈”,就像是一个寄存器空间,我们还可以在其中粘贴内存地址以使程序计数器循环/跳转(用于顺序程序控制),可扩展的临时“内存”和更永久的“存储”,该内容实际上已写入永久性区块链,最重要的是,EVM需要在智能合约中进行全面确定性.

如果您对学习扎实感感兴趣,则可以在此处查看我们的深入课程.

因此,让我们看看现在的操作步骤:

  • 了解智能合约的工作原理.
  • (对于以太坊开发人员是可选的)了解Solidity.

成为区块链开发者–里程碑5:加入区块链开发公司

作为一个崭露头角的开发人员,您可以做的最重要的事情之一就是不断地参与进来.

参加Reddit论坛,Gitbub页面和StackExchange,并与其他开发人员联系,并随时注意有关该技术的任何新闻.

除此之外,这对您了解人们在区块链开发人员中的需求也将有所帮助。公司在招聘时会寻找什么素质?您可以在这里找到该信息.

这些信息对于微调您的技能以吸引公司非常有用。.

成为区块链开发人员或工程师的途径:结论

因此,这对您和您成为区块链开发人员的旅程来说都是艰难的路线图。仅仅这还不够,当然,您需要展示自己的主动性,并始终保持参与.

如果您正在寻找有关区块链开发的信息资源,请单击此处.

祝您旅途愉快!

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me