Published: 23 12 月, 2021

以太坊开发简介

 

加密编程概念

简而言之,加密编程是使用区块链技术进行软件开发,以及将其与更熟悉的框架和语言如React和C++相结合的过程。

加密货币和区块链开发的需求越来越大。这是一份薪水丰厚、无数职位和未来无限潜力的工作。它为未来奠定了重要的基础,推动了这些技术的发展。

关键是,加密货币和区块链将构成未来经济的基础,分散式金融系统将主导球场。而且区块链技术本身足够通用,不仅在严格的金融事务(投资、拍卖、商业关系等)中有用,还在人类活动的其他领域中有用。

 

 

 

选择加密编程,你将创建像其他开发人员一样的程序,但在你的项目底层,总是会有与最先进的技术直接相关的代码。

 

什么是加密货币开发者?

加密货币开发者是那些不仅与计算机接触密切,知道如何创建页面或代码的人,而且熟悉分散式金融技术的开发人员。最好的情况是,他们有与程序的后端组件一起工作的经验,最差的情况下,至少了解如何原则上编写程序代码。

这样的开发人员致力于创建分散式应用程序的后端代码,这些应用程序被称为Dapps。它们通常存在于以太坊网络(Ethereum),实际上就是智能合约。

 

什么是”以太坊”?

以太坊是一个完整的区块链环境,允许每个人在由智能合约支持的可信环境中运行程序。

与比特币不同,以太坊平台允许你不仅与加密货币互动,还可以处理其他数据。

相应的程序在一个称为EVM(以太坊虚拟机)的环境中运行。它允许将人们编写的代码转换为区块链可识别的字符集,并支持在区块链内执行特定任务的智能合约。它还使用自己的货币,称为以太币(Ether)。

 

 

这是其类别中最大的系统,同时也是最受欢迎的系统。在大多数情况下,雇主寻找加密编程人员来创建将实施在以太坊项目界面中的软件。

 

智能合约

这是在EVM环境中运行的代码,能够处理传递给它的数据、以太币或任何逻辑。对于智能合约,编写了允许操作传递给它们的信息的函数。您可以与其他智能合约共享数据,或者根据接收到的信息,在智能合约用户之间进行广播。

智能合约允许在任何交易中排除第三方。程序代码将负责确保公平性:开放、不可腐败且正常运行。

加密编程人员致力于创建智能合约,允许区块链网络的居民进行与以太币相关的交易。

 

加密编程中使用的编程语言和库有哪些?

为了创建智能合约和加密货币网络的其他组件,既使用传统的通用目的编程语言,也使用专门为与以太坊或其类似项目工作而创建的新语言。

其中最流行的四种包括:

  • Solidity。它在该领域是领先的。首先要学习的语言是用于开始创建DApps和智能合约的。该语言基于JavaScript和C++语法。它具有严格的类型检查和相对较低的初学者入门门槛。本文稍后会详细介绍Solidity以太坊开发语言。
  • Java。这是一个功能强大的平台,在多个开发领域都表现出色,包括为移动操作系统创建软件。由于严格遵循面向对象编程原则以及在处理加密货币时所需的丰富库,它在区块链环境中很受欢迎。
  • Vyper。这是一种安全且功能齐全的编程语言,其语法借鉴自Python。它专注于与以太坊虚拟机(EVM)的工作和创建智能合约。
  • Python。Python本身也不能被忽视。作为一种最通用和广泛使用的语言之一,Python在区块链领域也找到了自己的位置。

 

如何开始加密编程职业?

进入该职业的门槛并不高。由于需求量大,要求并不特别严格,但仅仅充满热情是不够的。你需要获得基本知识,并深入研究区块链编程语言。

 

需要学习和了解什么?

首先,值得了解一下区块链的基础知识。我们需要以一般性的术语了解整个系统的运作方式。至少在初期阶段,深入了解实现的技术特点是可选的。

接下来,你需要选择一种编程语言。对于初学者,推荐使用Solidity,因为它较容易理解。接下来的阶段应该是要么深入研究文档并进行不断的独立实践,要么参加相应的课程。

在设备方面,你不需要太多。只需打开名为Remix的Web集成开发环境(IDE),并根据官方Solidity网站上的说明编写你的第一个智能合约即可。

 

在Remix IDE中,哪种环境可用于连接私有测试网络?

你可以通过多种方式访问Remix IDE:通过互联网、通过像Chrome这样的Web浏览器、从本地副本,或者通过Mist(以太坊Dapp浏览器)。

 

使用内置的Remix IDE

 

Remix IDE

 

在学习Solidity之后,您将需要学习以下用于区块链开发的框架:Truffle用于简化智能合约的创建,Ganache用于在虚拟区块链网络中测试软件,Web3.js用于连接您的区块链应用的后端与前端组件(可以是React或Vue)。

 

 

在线课程会全面教授您所有方面的知识。许多活跃的Solidity开发者在完成课程后直接进入这个职业。平均培训时间不超过六个月。

 

前景和未来

加密编程是开发者职业的新阶段,不断增长的受欢迎程度。如果您对有前途且有利可图的工作感兴趣,应该关注区块链开发。


 

《实用指南:以太坊开发。Solidity智能合约编程》

如果您正在创建基于以太坊的DApp或ERC20代币,您需要学习Solidity语言。尽管区块链是独立于编程语言的,许多现有的编程语言都被区块链工程师使用,但也有一些任务无法方便地通过现有语言实现。这导致了对新的、专门用于加密领域的编程语言的需求之一就是Solidity。

无论您是经验丰富的开发者还是刚开始涉足加密领域,学习Solidity都是一个好主意,因为智能合约已经成为区块链生态系统的重要组成部分。除了积极推广的dApps的实施外,它们还积极集成到基础设施级别的区块链,甚至通过提供者(如RSK)集成到比特币中。了解如何创建智能合约,您可以跟踪区块链程序员的工作方式,并能够提供更好的解决方案。

 

Solidity文档

 

智能合约基础

作为开发的一部分,智能合约由三个部分组成:余额、存储和代码。余额表示智能合约拥有多少以太币。存储包含特定于每个应用程序的数据,例如字符串和数组。代码部分包含从我们在Solidity中编写的内容编译而成的原始机器代码。

与用户账户不同,智能合约账户不是外部于各自网络的。换句话说,您可以在各种网络上使用您的钱包,例如Kovan和Ropsten,但无法对智能合约这样做。智能合约是内部的。

每个智能合约都有一个存储在作者设备上的源代码和存储在区块链上的实例。要创建智能合约的实例(账户),我们需要在网络上部署它。这与传统面向对象编程(OOP)中的类和实例以及表示它的编程语言(如JS、Ruby)之间的关系非常相似。为了让您更直观地理解,让我们创建一个Bike类并添加一个其实例。

 

Bike class & instance

 

我们将编写一个合同定义,然后通过编译器运行它,这将创建两个文件:字节码(bytecode)和二进制应用程序接口(ABI)。字节码实际上将传递给以太虚拟机(EVM),而ABI是字节码和常规JavaScript代码之间的中间层,允许您创建用户界面(UI)。

 

选择一个集成开发环境(IDE)和Solidity版本是开始以太坊智能合约开发的重要步骤。

 

在开始之前,我们需要一个合适的集成开发环境(IDE),换句话说,我们需要一个方便的终端,具备编写代码所需的工具。对于本指南的目的,我们将选择Remix,这是由以太坊基金会创建的IDE,它允许您编写、测试、调试、运行智能合约等等。您可以直接在浏览器中使用它,也可以下载到本地使用。

运行Remix后,您将看到中央的代码编辑器、左侧的文件管理器和右侧的编译器。

 

Initial Remix window

 

将会有一些预先编写的代码 — 我们不需要它。要创建第一个独特的智能合约,让我们点击终端左上角的加号图标,并给它取一个名字。

 

Creating a new project in Remix

 

因为我们有一个空白的文档.sol,我们必须指定编译器将运行的Solidity版本。在撰写本指南时,最新版本是0.5.7。如果您不确定要使用哪个版本,您可以指定一个版本范围。

 

2 types of specifying the Solidity version

 

让我们给我们的智能合约起个名字,后面跟着括号。

 

Naming the contract

 

编写您的第一个智能合约

一旦我们准备好画布,就该定义主要的构建模块 — 变量。尽管有经验的软件开发人员对这个概念不会有问题,但我们将简要介绍给初学者。变量是信息部分的占位符,随后由运行它们的程序引用。

让我们创建一对变量:一个字符串(字符序列)和一个整数(数字)。在以太坊的情况下,变量存储在区块链中,与其他合同一起,因此可以从任何地方访问和更新。 Solidity 变量的另一个关键特性是您可以通过在变量旁边写“private”来使它们成为私有变量。最后,对于整数,Solidity 有两种类型:有符号的(可以是正数和负数)和无符号的(只能是正数)。要指定无符号变量,我们只需要在前面加上 ‘u’。

 

A private string and an integer

 

当我们有一个名为`name`的变量时,我们需要编写设置和获取的方法。这类似于JavaScript函数。请记住,Solidity是一种静态类型语言,因此我们必须定义变量的类型。现在,我们将放入`setName`的任何值来定义字符串`name`。要获取它,我们将使用`getName`并指定我们希望看到的变量。现在是时候对`age`变量做同样的事情了。该方法的构建方式与`getName`类似。

 

Name/age setters and getters

 

让我们查看我们的一小段代码。转到编译器的“Run”选项卡,然后在合同名称下点击“Deploy”。在编译器的底部,您将看到“Deployed Contracts”部分,其中包含我们的方法。要将名称传递给值“Newname”,我们需要确保我们的字符串以JSON格式编写。否则,“getName”将不返回任何内容。对于“setAge”,只需指定您的年龄,不需要引号。正如您所见,现在我们可以通过我们的智能合约设置和接收名称和年龄变量。

 

Compiler, name and age

 

什么是Wei和Gas?

智能合约最显著的特点之一是,在将它们部署到以太坊网络上时,您需要发起一笔需要以以太币(Ether)支付的交易,这将花费一定金额的费用。了解系统中如何使用这些费用非常重要,因为每次与以太坊虚拟机(EVM)进行交互时,这些费用都会被扣除。

什么是Wei?

假设在阅读我们的课程时,您至少使用过比特币一次。您可能进行了一笔小额交易,花费不到1个比特币。在这种情况下,您使用了Satoshi,类似于美元的分。Wei类似于Satoshi — 它是1个以太币的最小部分。从编程角度来看,这是网络上的最低无符号整数。在与网络互动时,您最常遇到的是Gwei,它属于Gigawee,等于10亿Wei。

什么是Gas?

Gas是智能合约执行机制的一个重要组成部分。每个交易都有两个与Gas相关的值:Gas消耗和Gas价格。值得注意的是,发起交易的用户自己确定这些值。但是,如果设置的Gas值不足以执行某个操作,那么Gas将被消耗,但交易不会被执行。此外,如果在特定时间网络上设置的Gas价格过低,节点将不会处理交易,这将最终导致交易失败。有几个服务可以检查您的交易的最佳值,其中之一是ethgasstation.info。为了更好地理解Gas以及为什么需要支付费用,让我们开始编写一些智能合约。

返回到Remix窗口,创建一个新文件。在我们的示例中,我们将其命名为“Gas”,并创建一个同名的合同。请记住,我们在区块链上存储的数据越多,需要的Gas就越多。与此同时,为了本课程的目的,我们将创建一个廉价的合同;您添加的内容越多,费用就会越高。

有一个函数返回两个输入的整数总和。为了尽可能简化,我们将指示我们的合同不会在区块链上存储任何内容,为此,我们将在函数旁边添加“pure”。

 

Cheap contract

 

现在,您可以在编译器中扩展它,并输入任何两个数字来获取整数“c”。要检查我们交易的价格,我们必须查看位于代码部分下方的终端。有一个交易成本和一个执行成本。第一个是指交易包含多少数据。第二个是指交易需要多少EVM能量。

 
 
 

 

 

这是一个对网络几乎没有成本的非常简单的交易。当编写有意义的智能合约时,您将添加更多细节,这将增加它们的复杂度,因此会增加交易费用。

 

创建和部署您自己的ERC20代币。代币发行和ICO创建。

Let

让我们面对现实,大多数刚刚入门的区块链开发者往往会野心勃勃地创建自己的区块链和代币。尽管这是一个非常复杂的主题,吸引了一些其他领域最优秀的软件开发者,但创建一个基本的ERC20代币并不是一项困难的任务。

首先,我们需要在Remix中创建另一个文件,并加载ERC20接口,即:

 

 

ERC20标准

totalSupply函数允许我们查看总共有多少代币。balanceOf函数用于获取特定地址的代币数量。transfer函数允许用户之间执行交易。”transferFrom”、”allow”和”approve”函数允许用户允许其他用户代表他们发起交易。事件是总分类帐的登记工具。

除了接口本身,我们还需要一个单独的.sol文件来创建我们的新代币。在这里,我们导入ERC20接口,并指定我们代币的符号、名称和小数位数。

 

uToday token

 

在我们编译之前,我们需要指定一些约束条件。让我们从一般的句子开始:

  • 这是一个常量整数变量,我们将其设为私有。我们代币的总供应量将是100万。我们还将编写一个函数来返回这个值。

  • 其次,我们需要将我们的代币存储在某个地方。为此,我们需要指定一个映射(mapping),它将返回任何指定地址的余额。

  • 第三,我们需要创建一个用于转移代币的函数。这个函数将需要接收者的地址和要转移的代币数量。这个函数还应该能够检查发送者是否在其余额上有足够的代币,这可以通过简单的if/then语句来实现。此外,我们将对’_value’设置条件,以防止用户发送“0”代币的交易,因为这会导致网络被各种垃圾数据堵塞。

  • 第四,我们需要为其余的函数创建一个映射,这是一个整数映射。

  • 然后,我们将在“approve”和“allow”函数中指定几个检查,并为’transferFrom’设置条件。

  • 最后,不是所有的代币都会在市场上流通。一些代币通常保留给团队、基金会、顾问和其他用途。因此,重要的是我们明确表明有多少代币将在系统中流通。当我们创建代币时,可交易的供应等于我们的余额。

 

uToday token constraints

 

代码已经准备好了,让我们来检查一下。转到编译器的“运行”选项卡,展开我们的代币合约。您将看到我们有代币数据、总供应量、余额和附加费。恭喜您,您已经创建了您的第一个代币。

为了使我们的代币在网络上真正运作,我们需要部署一个智能合约(请注意,这与在Remix中进行测试部署不同)。在本教程中,我们将使用Remix和Metamask,但还有其他方法可以实现这一点。Metamask是一个简单而有效的以太坊钱包程序,具有良好的用户界面,可以作为扩展集成到一些最流行的浏览器中。在我们的情况下,我们将使用Opera浏览器。首先,访问 metamask.io 并下载该扩展程序。一旦完成安装,您将在浏览器右上角看到狐狸图标。

 

 

 

点击该图标,然后按照建议的指示创建一个钱包。不要忘记保存密语!一旦您有了钱包,点击Metamask图标,并将网络切换到“Ropsten”,因为我们不想涉足以太坊主网络。

 

 

 

最后一步是创建一些以太币(不幸的是,您不能用它进行任何真正的购买,但它们对于测试是必要的)。访问 faucet.metamask.io 并请求1个以太币。

现在,一切都准备好了。返回Remix窗口,在编译器中将环境更改为“Injected Web3”。同时,查看账户选项卡 – 您的地址必须与您在Metamask中创建的地址相匹配。选择要部署的智能合约,这是您的代币合约,但不是ERC20接口,并点击适当的按钮。一个Metamask窗口将出现,显示交易、其详细信息以及与之交互的选项。发送一个交易,我们的代币将开始运行。

 

 

 

现在,您可以尝试各种我们之前提到的功能。让我们从另一侧查看我们的合约,以确保它正常运作。和其他区块链一样,以太坊有几个区块浏览器,主要用于监视网络上发生的事情。在我们的情况下,我们将使用etherscan,尽管还有其他几个很好的替代方案。请注意,如果您只是登录etherscan,您将看到主网络。由于我们需要查看Ropsten网络,您需要在网站地址前面加上“ropsten”。找到您的地址,您将看到两笔交易记录 – 一笔是您获得的免费以太币,另一笔是合同的部署交易。

 

 

 

要找到您的合约地址,请点击TxHash,然后转到“To”字段。在这里,您可以查看您的智能合约的交易、代码和事件。目前,我们需要检查和发布我们的合同。进入“Code”部分,然后点击“Verify and Publish”链接。在这里,您需要再次指定您的代币名称,编译器版本(在我们的情况下,我们使用的Solidity的最新版本是0.5.7,所以我们将坚持使用相应的编译器版本)。现在,您需要将代币智能合约代码以及来自Remix窗口的ERC20接口代码复制到etherscan,然后在屏幕底部点击“Confirm and Publish”。

 

Smart contract verification

 

现在是时候回到您的合同地址了。在“Code”选项卡上的代码现在将被提交验证。此外,现在您将有另外两个选项卡:“Read contract”和“Write contract”。在读取部分,我们可以检查我们代币的功能。在“balanceOf”字段中输入您的地址(不是合同地址)以查看您拥有多少代币;它应该显示100万,这是我们硬编码的总供应量,并已转移到我们的钱包中。这意味着我们的代币现在在测试网络中正常工作。

 

如果您想在加密货币行业开始开发人员职业,您应该了解,尽管区块链在核心层面相对简单,但它具有令人难以置信的灵活性和功能性。自2017年以来,区块链已经发展了许多,其用途已经超出了仅限于金融交易的范畴。随着以太坊的出现,出现了一整套托管各种dApps应用程序和基于区块链的解决方案的新网络层。这一演进的工具是智能合约,如果您想扩展您的经验,使其更有价值和面向未来,您需要了解它是如何工作的。

虽然您可以使用其他编程语言编写智能合约,但Solidity仍然更适合这些目的。此外,如果您想成为以太坊开发人员或为您的项目创建ICO/ERC20代币,那么Solidity绝对是您的选择。如果您有一些C++或JavaScript的经验,那么在Solidity中编码应该相对容易。然而,您将不得不理解客户端-服务器和去中心化软件启动模型之间的一些差异。感谢以太坊基金会和一些第三方组织,开发人员提供了一套便利的工具,如Remix和Etherscan,用于编写和部署智能合约。

我们希望我们的教程已经帮助您了解了大部分Solidity概念,以便开始学习区块链技术的激动人心的旅程。请记住,您可以随时查阅最新的Solidity文档。

Rate the article

Rate this post