How To Become A Blockchain Developer - Blockgeeks

Ameer Rosic

正如标题所示,在本指南中,我们将向您展示如何成为区块链开发者。 正如你很快就会看到的,区块链开发与常规 Web 开发没有太大的不同。 为了让您轻松解决问题,我们已经编写了本指南来帮助您学习区块链开发,并在每个部分末尾为您提供行动步骤。

比特币区块链上的发展范围有点有限。 然而,随着以太坊的出现,这是世界上第一个可编程区块链,游戏完全改变了。 世界各地的开发人员终于有机会在区块链上构建应用程序。 这就是为什么学习区块链开发已经成为如此热门的技能的原因。

享受 Blockgeeks 图书馆的免费课程!

不用说,我们生活在 "时代的区块链"。 它可能对我们的未来产生的影响确实是可怕和宽大的。 那么,你怎么能得到一块 “区块链行动”? 如果你要成为一名区块链开发者,那么你需要采取一些步骤。

希望,在指南的末尾,你将有所需的工具启动你的旅程。 如果您认真想成为开发人员,那么我们需要为您设置一些期望。 首先,这将需要时间,您需要将您的时间和资源投入到您的教育中(您可以通过参加我们的在线课程继续您的区块链开发课程)。 其次,不要指望立即结果,成为一个区块链开发商并不是一个神奇的药丸。

所以,话虽如此,让我们开始你的旅程。

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

区块链开发工具

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

如果你是初学者,那么有一些你需要熟悉的术语:

学习区块链技术

区块链:区块链是一个块链,其中每个块包含价值数据,没有任何中央监督。 它是加密安全和不可变的。

分散:区块链据说是分散的,因为没有中央机构监督任何事情。

共识机制:权力下放的网络就某些事项达成共识的机制。

矿工:使用他们的计算能力挖掘块的用户。

了解更多关于这些在加密领域广泛使用的术语可能是可取的。 强烈建议您阅览我们全面的词汇表。 学习这些基本术语是非常重要的,否则你将会在你的教育中进一步迷失。 现在,接下来,是时候让自己更多地了解区块链的技术方面。

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

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

因此,有鉴于此,阅读一下经济学并对其有一个概念可能是一个好主意。 如果你想了解一般的加密经济学,那么你可以在这里查看我们的文章。

如果您特别对加密学感兴趣,并想知道签名是如何工作的,以及公钥加密的含义,请阅读这篇文章。

之后,强烈建议您了解比特币的工作原理。 比特币是区块链技术中最广泛、最优秀的应用程序之一。 你甚至可以把它称为区块链技术纯粹由于它具有的影响而可以实现的最好的例子。

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

让我们来看看您需要在此处接管的操作步骤:

熟悉各种术语和词典。

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

阅读比特币白皮书。

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

看到有多少萌芽的 “开发人员” 根本没有任何现实世界第一手的加密货币体验,这是非常令人惊讶的。 当你甚至没有使用过一次平台时,你怎么能够在平台上进行创新和改进?

强烈建议您今天开始熟悉系统。

前往 Coinbase 或任何您喜欢或在您所在国家访问的其他交易所,并购买一些硬币。 你不需要立即创建一个广泛的投资组合,只需购买几个硬币,看看整个过程是如何工作的。

这是非常直截了当的。 既然你不会购买很多硬币,那么简单地使用一个基本的在线钱包。

这些钱包是最容易使用的所有。 创建非常简单,因为它基本上是在任何交换服务上创建自己的帐户。 此外,只要连接到网络,您就可以从世界上的任何服务器或任何设备访问这个钱包。 话虽如此,有一个很大的问题,当涉及到在线钱包。 您的私钥将被保存在另一台服务器上。 这基本上就像在银盘上为黑客提供钥匙一样。 不要使用在线钱包来存储大量的钱。 存储用于交换目的所需的最低限度。

当你创建一个广泛的投资组合,你必须学习如何利用冷钱包来存储你的钱。 您可以在此了解如何执行此操作。 稍后,如果你创建你的 ICO,那么你必须知道钱包,特别是多 sig 钱包是如何工作的。

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

您的操作步骤在这里:

了解交易所的工作原理。

熟悉钱包。

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

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

(在我们继续之前,大卫·施瓦茨对他关于 C++ 在 CPPCCON 2016 年区块链软件开发中使用的主旨演讲进行了巨大的宣讲。)

原因 #1:安全性

正如大卫·施瓦茨所说的,区块链应该是堡垒。 首先,代码是公开的,所有人都可以看到。 任何人都可以查看代码并检查错误和漏洞。 然而,与其他开放代码资源不同,在区块链代码上发现漏洞的缺点是巨大的。 任何程序员都可以破解和逃脱潜在的数百万美元。 由于这些合法的安全考虑,区块链的开发通常非常缓慢。

原因 #2:资源管理

与网络保持同步是非常重要的。 你不能落后太远,也不能跟上所有的网络需求。 您应该具备处理远程和本地查询的充分准备。

原因 #3:绩效

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

“可并行” 任务的一个很好的例子是数字签字核查. 签名验证所需的只是密钥、事务和签名。 只需三个数据,您就可以以并行方式进行验证。

然而,并非区块链上的所有功能都应该以这种方式完成。 想想事务执行本身。 多个事务不能并行执行;需要一次执行一个事务,以避免双重支出等错误。 有些语言擅长并行操作,有些语言擅长非并行操作。

原因 #4:隔离

什么是确定性行为?

如果 A + B = C,那么无论在什么情况下,A+B 将始终等于 C,这就是所谓的确定性行为。

散列函数是确定性的,这意味着 A 的散列将始终是 H(A)。

因此,在区块链开发中,所有的交易操作都必须是确定性的。 您不能拥有一种行为方式,然后在第二天采取另一种方式行为的事务。 同样,您不能拥有在两台不同计算机上以两种不同方式工作的智能合约。

唯一的解决办法是隔离。 基本上,您将智能合约和交易与非确定性元素隔离开来。

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

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

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

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

巨大的大声来 savjee.是下面的内容。

我们如何做一个块? 一个简单的块由什么组成? 在我们将要制作的简单加密硬币(让我们称之为 “BlockgeekScoin”)中,每个块都有以下信息:

索引:要知道块号。

时间戳:要知道创建的时间。

数据:块内的数据。

上一个散列:上一个块的散列。

哈希:当前块的哈希。

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

这:“this” 关键字在函数中调用,并允许您访问调用该特定函数的特定对象中的值。

构造函数:构造函数是一个特殊的函数,可以帮助在类中创建和初始化对象。 每个类仅限于一个构造函数。

现在已经完成了,让我们开始制作我们的块。

创建块

常量 SHA256 = 需要(“加密日元/sha256”);

类块

{

构造函数(索引,时间戳,数据,上一个 Sash = “)

{

这个 .index = 索引;

此。上一次的上一次的上一次的上一次的上一次;

此 .时间戳 = 时间戳;

这个 .data = 数据;

这个 .hash = 这个. 计算哈希 ();

}

计算哈希 ()

{

返回 SHA256(这个。索引 + 这个。前一个字符串 + 这个。时间戳 + JSON。字符串(这个 .数据))。

}

}

代码分析

好吧,所以这就是一个街区。 因此,在代码的第一行中,我们调用了加密 js 库,因为 sha256 散列函数在 JavaScript 中不可用。

接下来,我们在类中调用一个构造函数来调用具有某些值的对象。 可能引起你的注意的是 CalculateHash()函数。 让我们来看看它究竟在做什么。

在一个块中,我们采取所有内容并散列它们以获取该特定块的散列。 我们正在使用 Json.stringify 函数将块的数据转换为字符串以散列它。

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

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

类区块链

{

//第1节创建模块

构造函数 ()

{

此. 链 = [此. 创建遗传块 ()];

}

创建遗传块 ()

{

返回新的块(0,“2017 年 1 月 1 日”,“创世纪块”,“0”);

}

//第2节添加新的块

获取最新块 ()

{

返回这个. 链 [此. 链. 长度-1];

}

添加块(新块){

新块。前面的散列 = 此。获取最新块()。散列;

新块. 散列 = 新块. 计算散列 ();

这个。链。推(新块);

}

//第3节检查链条

链式有效 ()

{

(让我 = 1; 我这个 .链.长度; i ++)

{

常量电流块 = 此. 链 [i];

常量前一个块 = 此. 链 [i-1];

如果(当前块。哈希! == 当前块。计算哈希()){

返回假;

}

如果(当前块。上一个! == 上一个块。散列)

{

返回假;

}

}

返回 true;

}

}

代码分析

好的,所以很多事情都在上面的链条中发生,让我们把它分解成几个部分。

第 1 部分:创世纪块

什么是创世块?

创世块是区块链的第一个块,它是特殊的原因是,当每个博世指向它之前的块,创世块没有指向任何东西。 所以,当一个新的链被创建,创世纪块被立即调用。

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

创建遗传块 ()

{

返回新的块(0,“2017 年 1 月 1 日”,“创世纪块”,“0”);

}

第 2 部分:添加块

首先,我们需要知道区块链中的最后一个块是什么。 为此,我们使用 GetlatestBlock()函数。

获取最新块 ()

{

返回这个. 链 [此. 链. 长度-1];

}

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

添加块(新块){

新块。前面的散列 = 此。获取最新块()。散列;

新块. 散列 = 新块. 计算散列 ();

这个。链。推(新块);

}

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

还记得块的内容吗? 一个块具有前一个块的散列权利?

所以,我们在这里要做的很简单。 将新区块的上一个散列值与最新区块的散列值进行比较。

How to become a blockchain developer

图片提供:劳里·哈蒂克卡媒体文章

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

第 3 部分:验证链

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

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

(让我 = 1; 我这个 .链.长度; i ++)

{

常量电流块 = 此. 链 [i];

常量前一个块 = 此. 链 [i-1];

在这部分代码中,我们定义了两个术语,即当前块和前一块。 现在我们只是要找到这两个值的散列。

如果(当前块。哈希! == 当前块。计算哈希()){

返回假;

}

如果(当前块。上一个! == 上一个块。散列)

{

返回假;

}

}

返回 true;

}

如果当前块的 “前一块” 不等于前一块的 “哈希”,则此函数将返回 False,否则它将返回 True。

使用区块链

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

让块吉斯斯科 IN = 新的区块链 ();

添加块 (新块 (1, “2017 年 7 月 20 日”, {金额:4}));

添加块 (新块 (2, “2017 年 7 月 20 日”, {金额:8}));

就是这样!

这里发生了什么事?

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

我们简单地添加了两个块,并给了他们一些数据。

就这么简单

(谢谢你 savjee.Be 的惊人和简单的解释。)

这就是这个里程碑。 让我们来看看行动步骤。 这很简单,但绝对不容易:

获得许多区块链友好语言之一的教育,如 C ++,Javascript,C#,Go 等。

成为区块链开发人员-里程碑 #4:获得智能合约教育

how smart contracts work

你如何定义智能合约?

根据维基百科,智能合约是 “旨在促进、验证或强制执行合同谈判或履行的计算机协议”。 虽然它最初是由美国密码学家 Nick Szabo 在 1996 年提出的,但以太坊经常被认为是普及这个概念并使其成为主流。

您可以在我们的深入指南中了解更多关于智能合约的信息。

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

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

确定性。

终止。

孤立。

特征 #1:确定性

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

程序可以以非确定性的方式行事的各种时刻:

调用非确定性系统函数:当程序员在其程序中调用非确定性函数时。

非确定性数据资源:如果程序在运行时获取数据,并且该数据源是非确定性的,那么程序就变得非确定性的。 例如, 假设一个程序,获得特定查询的前 10 个谷歌搜索。 列表可能会不断变化。

动态调用:当程序调用第二个程序时,它被称为动态调用。 由于调用目标仅在执行过程中确定,因此它本质上是非确定性的。

功能 #2:可终止

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

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

图灵不完整:图灵不完整的区块链将具有有限的功能,并且不能够进行跳跃和/或循环。 因此,他们不能进入一个无尽的循环。

步骤和费用计量:程序可以简单地跟踪它已经采取的 “步骤” 的数量,即它已执行的指令数量,然后在执行特定步骤计数后终止。 另一种方法是费用计。 这里的合同是用预付费用执行的。 每个指令的执行都需要一定金额的费用。 如果所花费的费用超过预付费用,则合同终止。

计时器:这里保留了一个预先确定的计时器。 如果合约执行超过时间限制,则在外部中止。

功能 #3:隔离

在区块链中,任何人和每个人都可以上传智能合约。 然而,正因为如此,合同可能,故意和不知不觉中含有病毒和错误。 如果合同不是孤立的,这可能会妨碍整个系统。 因此,将合同隔离在沙箱中是至关重要的,以保护整个生态系统免受任何负面影响。

现在,我们已经看到了这些功能,了解它们是如何执行的非常重要的。 通常,智能合约使用以下两种系统之一运行:

虚拟机:以太坊使用这个。

码头:织物使用这个。

让我们比较这两个,并确定哪些使得更好的生态系统。 为了简单起见,我们将以太坊(虚拟机)与 Fabric(Docker)进行比较。

如果你对以太坊的开发感兴趣,那么你学习稳固性也很重要。

对于任何想要学习如何制作 dApps(分散应用程序)或进入 ICO 游戏的人来说,学习 Solidity 是绝对必须的。 我们已经有一个详细的指南,你可以在这里阅读。 但是,在这里,我们将给你一个基本的概述。 Solidity 由加文伍德,基督教赖特维斯纳,亚历克斯 Beregszaszi,平井洋一和几个前以太坊核心贡献者开发,以便在区块链平台(如以太坊)上编写智能合约。

Solidity 是一种有目的的缩小,松散类型的语言,语法与 ECMAScript(Javascript)非常相似。 从以太坊设计理念文档中有一些要记住的关键点,即我们正在使用 32 字节指令字大小的堆栈和内存模型,EVM(以太坊虚拟机)让我们访问程序 “堆栈”,这就像一个寄存器空间,我们也可以坚持内存地址使程序计数器循环/跳转(用于顺序程序控制),可扩展的临时 “内存” 和实际写入永久区块链的更永久的 “存储”,最重要的是,EVM 需要智能合约中的完全确定性。

如果你有兴趣学习稳固性,那么你可以在这里查看我们的深度课程。

所以,让我们看看现在的操作步骤:

了解智能合约的工作原理。

(以太坊开发者可选)学习稳固性。

成为区块链开发人员-里程碑 #5:进入区块链开发公司

作为一个萌芽的开发人员,你可以做的最重要的事情之一是不断地保持混合。

去加入 Reddit 论坛、Gitbub 页面和 StackExchange,并与其他开发人员联系,并始终在寻找任何有关该技术的新闻。

与此同时,了解人们在区块链开发人员中寻找什么将会有所帮助。 公司在寻找雇佣时需要什么样的素质? 你可以在这里找到这些信息。

这些信息可以是非常有用的微调你的技能足以吸引公司。

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

所以,这是一个粗略的路线图,你和你成为区块链开发者的旅程。 当然,这本身是不够的,你将需要展示自己的主动性,并始终处于混合状态。

如果您正在寻找关于区块链开发的信息资源,请点击这里。

我们祝愿您在旅途中一切顺利!

在本指南中,我们将规划您成为区块链开发者的旅程。 区块链开发与常规网络开发没有太大的区别-主要区别在于区块链开发人员将专门为区块链开发。 为了让您轻松解决问题,我们将本指南分为不同的里程碑,并在每个部分的末尾为您提供行动步骤。 不用说,我们生活在 "时代的区块链"。 它可能对我们的未来产生的影响确实是可怕和宽大的。 那么,你怎么能得到一块 “区块链行动”? 如果你要成为一名区块链开发者,那么你需要采取一些步骤。 希望,在指南的末尾,你将有所需的工具启动你的旅程。 如果您认真想成为开发人员,那么我们需要为您设置一些期望。 首先,这将需要时间,您将需要投入您的时间和资源用于您的教育(您可以通过参加我们的在线课程继续您的教育)。 其次,不要指望立即结果,成为一个区块链开发商并不是一个神奇的药丸。 所以,话虽如此,让我们开始你的旅程。 如何成为区块链开发人员教程! 里程碑 #1:了解基础知识是什么新的革命性的最大障碍之一,例如区块链技术,是熟悉系统中不可或缺的各种概念。 如果你是一个初学者,那么有一些你需要熟悉的术语:学习区块链技术区块链:区块链是一个块链,其中每个块都包含有价值的数据,没有任何中央监督。 它是加密安全和不可变的。 分散:区块链据说是分散的,因为没有中央机构监督任何事情。 共识机制:权力下放的网络就某些事项达成共识的机制。 矿工:使用他们的计算能力挖掘块的用户。 培训成为区块链开发人员 立即开始您的免费试用! 了解更多关于这些在加密领域广泛使用的术语可能是可取的。 强烈建议您阅览我们全面的词汇表。 学习这些基本术语是非常重要的,否则你将会在你的教育中进一步迷失。 现在,接下来,是时候让自己更多地了解区块链的技术方面。 如果您对如何在区块链之上创建金融技术应用程序的技术方面感兴趣,那么您一定应该了解密码经济学的来龙去脉。 大多数开发人员通常熟悉方程式的 “密码” 部分,但他们对 “经济学” 部分的知识极为缺乏。 当您研究其中一些 ICO 浮动时,知识上的这种差异非常明显。 很明显,看到他们的 ICO 的经济方面没有深思熟虑。 所以,有鉴于此,阅读一些关于经济学的概念可能是一个好主意。如果你想了解一般的密码经济学,那么你可以在这里查看我们的文章。 如果您特别对加密学感兴趣,并想知道签名是如何工作的,以及公钥加密的含义,请阅读这篇文章。 之后,强烈建议您了解比特币的工作原理。 比特币是区块链技术中最广泛、最优秀的应用程序之一。 你甚至可以把它称为区块链技术纯粹由于它具有的影响而可以实现的最好的例子。 所以,建议你阅读中本聪的比特币白皮书。 你可以在这里找到它。 现在,这完成了第一个里程碑。 让我们来看看你需要在这里接管的操作步骤:熟悉各种术语和词汇。 阅读 了解区块链的更多技术方面。 阅读比特币白皮书。 里程碑 #2:了解过程是如何工作的。看到有多少萌芽的 “开发人员” 根本没有任何真实世界的第一手加密货币体验是非常令人惊讶的。 当你甚至没有使用过一次平台时,你怎么能够在平台上进行创新和改进? 强烈建议您今天开始熟悉系统。 前往 Coinbase 或任何您喜欢或在您所在国家访问的其他交易所,并购买一些硬币。 你不需要立即创建一个广泛的投资组合,只需购买几个硬币,看看整个过程是如何工作的。 这是非常直截了当的。 既然你不会购买很多硬币,那么简单地使用一个基本的在线钱包。 这些钱包是最容易使用的所有。 创建非常简单,因为它基本上是在任何交换服务上创建自己的帐户。 此外,只要连接到网络,您就可以从世界上的任何服务器或任何设备访问这个钱包。 话虽如此,有一个很大的问题,当涉及到在线钱包。 您的私钥将被保存在另一台服务器上。 这基本上就像在银盘上为黑客提供钥匙一样。 不要使用在线钱包来存储大量的钱。 存储用于交换目的所需的最低限度。 当你创建一个广泛的投资组合,你必须学习如何利用冷钱包来存储你的钱。 您可以在此了解如何执行此操作。 稍后,如果你创建你的 ICO,那么你必须知道钱包,特别是多 sig 钱包是如何工作的。 我们将这部分结束在这里,艰难的部分从下一个里程碑开始。 您的操作步骤在这里:了解交易所的工作原理。 熟悉钱包。 里程碑 #3:让我们得到编码! 区块链教程作为区块链开发人员,您将在后端面临大量挑战。 由于许多原因,创建和维护公共区块链并不容易。 (在我们继续之前,大卫·施瓦茨对他关于 C++ 在 CPPCCON 2016 年区块链软件开发中使用的主旨演讲进行了巨大的宣讲。) 原因 #1:正如大卫·施瓦茨所说的,安全区块链应该是堡垒。 首先,代码是公开的,所有人都可以看到。 任何人都可以查看代码并检查错误和漏洞。 然而,与其他开放代码资源不同,在区块链代码上发现漏洞的缺点是巨大的。 任何程序员都可以破解和逃脱潜在的数百万美元。 由于这些合法的安全考虑,区块链的开发通常非常缓慢。 原因 #2:资源管理与网络保持同步是非常重要的。 你不能落后太远,也不能跟上所有的网络需求。 您应该具备处理远程和本地查询的充分准备。 原因 #3:性能区块链必须始终以尽可能高的功能执行,但要做到这一点,选择的语言必须非常灵活。 问题是,区块链中有一些可并行的任务,而有一些任务不能并行完成。 “可并行” 任务的一个很好的例子是数字签字验证. 签名验证所需要的只是密钥、交易和签名。 只需三个数据,您就可以以并行方式进行验证。 然而,并非区块链上的所有功能都应该以这种方式完成。 想想事务执行本身。 多个事务不能并行执行;需要一次执行一个事务,以避免双重支出等错误。 有些语言擅长并行操作,有些语言擅长非并行操作。 原因 #4:隔离什么是确定性行为? 如果 A + B = C,那么无论在什么情况下,A+B 将始终等于 C,这就是所谓的确定性行为。 散列函数是确定性的,这意味着 A 的散列将始终是 H(A)。 因此,在区块链开发中,所有的交易操作都必须是确定性的。 您不能有一个行为 一种方式,然后表现另一种方式的第二天。 同样,您不能拥有在两台不同计算机上以两种不同方式工作的智能合约。 唯一的解决办法是隔离。 基本上,您将智能合约和交易与非确定性元素隔离开来。 有一些语言可以满足大部分这些需求。 如果你是一个区块链开发人员,那么你肯定需要有一些 C ++ 和 JavaScript 的基本知识。 虽然 C ++ 可能看起来有点过时,但事实是它奇妙地满足了我们上面描述的所有功能。 事实上,中本聪用 C ++ 写了比特币源代码。 与 HTML 和 CSS 一起,它是万维网内容制作的三个核心技术之一。 Javascript 通常用于创建高度互动的网页。 所以,现在我们将看到如何使用 Javascript 创建一个非常简单的区块链。 巨大的大声来 savjee.是下面的内容。 我们如何做一个块? 一个简单的块由什么组成? 在我们将要制作的简单加密币(让我们称之为 “BlockgeekScoin”)中,每个块都会有以下信息:索引:要知道块号。 时间戳:要知道创建的时间。 数据:块内的数据。 上一个散列:上一个块的散列。 哈希:当前块的哈希。 在我们继续之前。 您需要理解我们将在程序中使用的某些术语:这:“this” 关键字在函数中调用,并允许您访问调用该特定函数的特定对象中的值。 构造函数:构造函数是一个特殊的函数,它可以帮助在类中创建和初始化对象。 每个类仅限于一个构造函数。 现在已经完成了,让我们开始制作我们的块。 创建块常量 SHA256 = 需要(“加密 JS/sha256”);类块 {构造函数(索引,时间戳,数据,上一个散列 = “){这个 .index = 索引;这个。前一个散列 = 以前的散列;这个 .时间戳 = 时间戳;这个 .data = 数据;这个 .hash = 这个 .散列 = 这个 256(此指数 +这个。前一个 + 这个。时间戳 + json.Stringify(这个 .data)))。字符串();}} 代码分析好,所以这就是一个块。 因此,在代码的第一行中,我们调用了加密 js 库,因为 sha256 散列函数在 JavaScript 中不可用。 接下来,我们在类中调用一个构造函数来调用具有某些值的对象。 可能引起你的注意的是 CalculateHash()函数。 让我们来看看它究竟在做什么。 在一个块中,我们采取所有内容并散列它们以获取该特定块的散列。 我们正在使用 Json.stringify 函数将块的数据转换为字符串以散列它。 好了,所以我们已经准备好了,好了。 现在让我们将块连接在一起到一个区块链中。 创建区块链:成为区块链工程师类区块链 {// 第 1 部分创建块构造函数 () {这 .chain = [创建基因块 ()];} 创建基因块 () {返回新块 (0, “01/2017”, “创世纪块”, “0”);} //第2节添加新块 Getlatestblock ({返回此。链 [这个. 链. 长度-1];} 添加块(新块){新块。前一个块 = 此 .hash; 新块。哈希 = 新块。计算哈希 (); 这个 .链.push (新块);} //第3节验证链是链是有效 () {对于 (让我 = 1; i; i 当前块 = 这个。链 [i]; 常量上一个块 = 这个。链 [i-1]; 如果(当前块。哈希! == 当前块。计算哈希()){返回 false;} 如果(当前块。上一个块! == 之前的 Block.hash){返回 false;}} 返回 true;}} 代码分析确定,所以很多事情正在上面的链中发生,让我们将其分解为几个部分。 第 1 部分:创世纪块什么是创世纪块? 创世块是区块链的第一个块,它是特殊的原因是,当每个博世指向它之前的块,创世块没有指向任何东西。 所以,当一个新的链被创建,创世纪块被立即调用。 此外,您可以看到 一个 “创建遗传块()” 函数,其中我们已经手动给出了块的数据:创建遗传块(){返回新块(0,“01/2017”,“创世纪块”,“0”);} 第 2 部分:添加块首先,我们需要知道区块链中的最后一个块是什么。 为此,我们使用 getlatestBlock () 函数。getlatestBlock () {返回这个 .chain [这个 .chain. 长度-1];} 现在我们已经确定了最新的块,让我们来看看我们将如何添加新的块。); 这个 .chain .push(NewBlock);} 那么,这里发生了什么? 我们如何添加块? 我们如何检查给定的块是否有效? 还记得块的内容吗? 一个块具有前一个块的散列权利? 所以,我们在这里要做的很简单。 将新区块的上一个散列值与最新区块的散列值进行比较。 图片提供:Lauri Hartikka 中文如果这两个值匹配,那么这意味着新块是合法的,它被添加到区块链。 第 3 部分:现在验证链,我们需要检查是否没有人在搞乱我们的区块链,并且一切都是稳定的。 我们正在使用 “for” 循环从块 1 到最后一个块。 创世纪块是块 0. (让我 = 1; 我这. 链. 长度; i ++) {const 电流块 = 这. 链 [i]; const 前一个块 = 这. 链 [i-1]; 在这部分代码中,我们正在定义两个术语,当前块和上一个块。 现在我们只是要找到这两个值的散列。如果(当前 Block.hash! == 当前块。计算哈希()){返回 false;} 如果(当前块。上一个块! == 上一个块 .hash) {返回 false;}} 返回 true;} 如果当前块的 “上一个块” 不等于上一个块的 “哈希”,则此函数将返回 False,否则它将返回 True。 使用区块链现在,我们将最终使用区块链来创建我们的区块链。让区块链 = 新区块链(); 区块链:新区块(1,“20/07/2017”,{金额:4}); 区块链。 这里发生了什么事? 我们创建了一个新的加密货币基于区块链,并将其命名为 BlockgeekScoin。 通过调用这个新对象,我激活了构造函数,它反过来自动创建了 Genesis 块。 我们简单地添加了两个块,并给了他们一些数据。 就这么简单 (谢谢你 savjee.Be 的惊人和简单的解释。) 这就是这个里程碑。 让我们来看看行动步骤。 这很简单,但绝对不容易:获得许多区块链友好语言之一的教育,如 C ++,Javascript,C#,Go 等里程碑 #4:获得智能合约教育你如何定义智能合约? 根据维基百科,智能合约是 “旨在促进、验证或强制执行合同谈判或履行的计算机协议”。 虽然它最初是由美国密码学家 Nick Szabo 在 1996 年提出的,但以太坊经常被认为是普及这个概念并使其成为主流。 您可以在我们的深入指南中了解更多关于智能合约的信息。 那么,什么是我们希望在我们的智能合约中的理想属性? 任何在区块链上运行的东西都需要是不可变的,并且必须有能力在不损害其完整性的情况下运行多个节点。 因此,智能合约功能需要三件事:确定性。 终止。 孤立。 特征 #1:确定性一个程序是确定性的,如果它每次向给定的输入提供相同的输出。 例如, 如果 3+1 = 4,那么 3+1 将始终是 4(假设相同的基数)。 因此,当一个程序向不同计算机中的同一组输入提供相同的输出时,该程序被称为确定性。 有各种时刻,程序可以以非确定性的方式行事:调用非确定性系统函数:当程序员在其程序中调用非确定性函数时。 非确定性数据资源:如果程序在 运行时,并且该数据源是非确定性的,那么程序变得非确定性的。 例如, 假设一个程序,获得特定查询的前 10 个谷歌搜索。 列表可能会不断变化。 动态调用:当程序调用第二个程序时,它被称为动态调用。 由于调用目标仅在执行过程中确定,因此它本质上是非确定性的。 特征 #2:终止在数学逻辑中,我们有一个称为 “停止问题” 的错误。 基本上,它指出,无法知道给定的程序是否可以在时间限制内执行其功能。 1936 年,艾伦·图灵推断,使用坎托尔的对角线问题,没有办法知道给定的程序是否可以在时间限制内完成。 这显然是智能合同的一个问题,因为根据定义,合同必须能够在给定的时限内终止。 有一些措施,以确保有一种方法来外部 “杀死” 合同,并且不会进入一个无尽的循环,这将耗尽资源:图灵不完整:图灵不完整的区块链将具有有限的功能,并且不能够进行跳跃和/或循环。 因此,他们不能进入一个无尽的循环。 步骤和费用计量:程序可以简单地跟踪它采取的 “步骤” 数量,即它已执行的指令数量,然后在执行特定步数后终止。另一种方法是费用计量。 这里的合同是用预付费用执行的。 每个指令的执行都需要一定金额的费用。 如果所花费的费用超过预付费用,则合同终止。 计时器:这里保留了一个预先确定的计时器。 如果合约执行超过时间限制,则在外部中止。 特点 #3:隔离在区块链中,任何人和每个人都可以上传智能合约。 然而,正因为如此,合同可能,故意和不知不觉中含有病毒和错误。 如果合同不是孤立的,这可能会妨碍整个系统。 因此,将合同隔离在沙箱中是至关重要的,以保护整个生态系统免受任何负面影响。 现在,我们已经看到了这些功能,了解它们是如何执行的非常重要的。 通常智能合约使用两个系统之一运行:虚拟机:以太坊使用它。 码头:织物使用这个。 让我们比较这两个,并确定哪些使得更好的生态系统。 为了简单起见,我们将以太坊(虚拟机)与 Fabric(Docker)进行比较。 如果你对以太坊的开发感兴趣,那么你学习稳固性也很重要。 对于任何想要学习如何制作 dApps(分散应用程序)或进入 ICO 游戏的人来说,学习 Solidity 是绝对必须的。 我们已经有一个详细的指南,你可以在这里阅读。 但是,在这里,我们将给你一个基本的概述。 Solidity 由加文伍德,基督教赖特维斯纳,亚历克斯 Beregszaszi,平井洋一和几个前以太坊核心贡献者开发,以便在区块链平台(如以太坊)上编写智能合约。 Solidity 是一种有目的的缩小,松散类型的语言,语法与 ECMAScript(Javascript)非常相似。 从以太坊设计理念文档中有一些要记住的关键点,即我们正在使用 32 字节指令字大小的堆栈和内存模型,EVM(以太坊虚拟机)让我们访问程序 “堆栈”,这就像一个寄存器空间,我们也可以坚持内存地址使程序计数器循环/跳转(用于顺序程序控制),可扩展的临时 “内存” 和实际写入永久区块链的更永久的 “存储”,最重要的是,EVM 需要智能合约中的完全确定性。 如果你有兴趣学习稳固性,那么你可以在这里查看我们的深度课程。 因此,让我们现在看看操作步骤:了解智能合约的工作原理。 (以太坊开发者可选)学习稳固性。 里程碑 #5:在混合中,作为一个新生的开发人员,你可以做的最重要的事情之一是不断地 留在混合。 去加入 Reddit 论坛、Gitbub 页面和 StackExchange,并与其他开发人员联系,并始终在寻找任何有关该技术的新闻。 与此同时,了解人们在区块链开发人员中寻找什么将会有所帮助。 公司在寻找雇佣时需要什么样的素质? 你可以在这里找到这些信息。 这些信息可以在你微调你的技能足以吸引公司非常有用。 成为区块链开发人员或工程师的路径:结论所以,这是您和您成为区块链开发人员的旅程的粗略路线图。 当然,这本身是不够的,你将需要展示自己的主动性,并始终处于混合状态。 如果您正在寻找关于区块链开发的信息资源,请点击这里。 我们祝愿您在旅途中一切顺利!

Like what you read? Give us one like or share it to your friends and get +16

7,696
Hungry for knowledge?
New guides and courses each week
Looking to invest?
Market data, analysis, and reports
Just curious?
A community of blockchain experts to help

Get started today

Already have an account? Sign In