主页 > imtoken官网下载安装 > 什么是以太坊以及如何挖掘它

什么是以太坊以及如何挖掘它

imtoken官网下载安装 2023-06-22 07:22:25

很多同学一直渴望加入区块链开发团队,但感觉无从下手。本文将基于以太坊平台,通俗地介绍以太坊开发中涉及的晦涩概念,让大家轻松上手。什么是以太坊

以太坊是一个基于区块链技术的去中心化应用平台。它允许任何人在平台上构建和使用在区块链技术上运行的去中心化应用程序。

看不懂这句话的同学可以理解为以太坊是区块链中的安卓。它是一个开发平台,这样我们就可以像Android Framework一样基于区块链技术。编写应用程序。

在没有以太坊之前,写一个区块链应用是这样的:复制一份比特币代码,然后改变底层代码如加密算法、共识机制、网络协议等(很多山寨币都是这样的) ,如果你改变它,一个新的硬币就会出来)。

以太坊平台封装了底层区块链技术,让区块链应用开发者直接基于以太坊平台进行开发,只要专注于为应用本身的逻辑开发智能合约,这样就可以大大降低难度发展。

目前围绕以太坊已经形成了最完整的开发生态:有很多经过测试验证的开发库,完整的开发者文档(很多是中文的)和开发测试工具。

智能合约

那么什么是智能合约?在以太坊网络上运行的程序称为智能合约,与任何其他程序一样,它是代码和数据(状态)的集合。

智能合约与人工智能(Artificial Intelligence)的智能无关。智能合约最早由 Nick Szabo 于 1995 年提出,其概念很简单,就是将法律规定写入可执行代码。为了中和法律规定的执行,这个概念与区块链上不能被篡改或干扰的程序执行不谋而合(只有当有人触发交易时才会自动执行),所以区块链引入了这个概念。

在之前的比特币脚本介绍中,我们提到比特币交易也可以编程,但是比特币脚本有很多限制,可以写的程序有限,而以太坊的程序是“图灵完备”的,所以理论上允许我们编写可以做任何事情的程序。

智能合约非常适合对信任、安全和持久性要求高的应用场景,例如:数字货币、数字资产、投票、保险、金融应用、预测市场、产权管理、物联网、Peer-to - 对等交易等等。

目前,除了数字货币之外,真正的应用并不多(就像移动平台刚开始问世一样),相信1到3年内,各种杀手锏会逐渐出现。

要了解有关智能合约的更多信息,您可以阅读以全面了解智能合约的工作原理。

编程语言:Solidity

智能合约的主要编程语言是Solidity和Vyper。 Solidity 更加成熟。 Solidity 合约文件的扩展名为 .sol,虽然是一门新语言,但与大家常用的现代语言非常相似。以下是学期中的一个简单的计数器智能合约:

1
2
3
4
5
6
7
8
9

pragma solidity >=0.4.22 <0.6.0;
 // 用contract 关键字定义一个合约
contract Counter { 
    uint counter;
    function count() public {
        counter = counter + 1;
    }
}

如果上面的契约把契约改成类,就和用其他语言定义一个类是一样的。 Solidity 是一种编译语言。代码编译成以太坊虚拟机字节码后,部署到以太坊网络。以太坊为我们提供了很好的工具来做到这一点。例如,Remix 是一个用于开发、编译和部署智能合约的 IDE。它也是一个基于浏览器的 Web IDE。下面是 Remix IDE 的截图。

Remix IDE

Solidity 是一种静态类型语言,支持继承、库和复杂的用户定义类型等特性。更多关于Solidity的知识,可以参考社区翻译的Solidity中文文档。

运行环境:EVM

EVM(以太坊虚拟机)以太坊虚拟机用于在以太坊上执行交易,为智能合约提供运行环境。

Solidity 对于 EVM 就像对于 JVM 一样,所以每个人都很容易理解。

以太坊虚拟机是一个孤立的环境,运行在EVM内部的代码无法被外界访问。

EVM 在以太坊节点上运行。我们在以太坊网络上部署合约后,合约就可以在以太坊网络上运行了。

合同汇编

合约的字节码形式在以太坊虚拟机上运行。我们需要在部署之前编译合约。你可以选择 Remix 或 solc 编译器。

合约部署

在以太坊上开发应用程序时,经常使用以太坊客户端(钱包)。平时我们在开发,一般不会接触到客户端或者钱包的概念,是什么?

以太坊客户端(钱包)

以太坊客户端,其实我们可以理解为一个开发者工具,提供账户管理、挖矿、转账、智能合约部署和执行等功能。

EVM 由以太坊客户端提供

Geth 是以太坊开发中使用的典型客户端,基于 Go 语言开发。 Geth 提供了一个交互式命令控制台,通过该控制台可以包含以太坊的各种功能(API)。 Geth 的使用我们稍后会在文章中介绍,这里先有个概念。

Geth 控制台类似于 Chrome 浏览器开发者工具中的控制台,但 Geth 控制台运行在终端中。

如何部署

智能合约的部署是指将合约字节码发布到区块链上以太坊怎么可以挖完一个区块,并使用特定的地址来标记合约,称为合约账户。

以太坊有两种账户:

与比特币的 UTXO 设计不同,以太坊使用更简单的账户概念。

EVM 的两种账户类型相同。

外部账户和合约账户的区别和关系如下:外部账户可以通过使用自己的私钥创建和签署交易来向另一个外部账户或合约账户发送消息。

在两个外部账户之间传输消息是一个价值转移的过程。但是从外部账户到合约账户的消息会激活合约账户的代码,允许其执行各种操作(例如转移代币、写入内部存储、挖掘新代币、执行某些操作、创建新合约、等等等等)。

只有当外部账户发出指令时,合约账户才会进行相应的操作。

合约部署就是将编译好的合约字节码以通过外部账户发送交易的形式部署到以太坊区块链上(实际部署只有在实际矿工出块后才能成功)。

运行

合约部署后,当需要调用智能合约的方法时,只需向合约账户发送消息(交易),消息触发的智能合约代码将在 EVM 中执行。

煤气

和云计算类似,占用区块链的资源(无论是简单的转账交易,还是合约的部署和执行)也需要相应的费用(世界上没有这种东西)。免费午餐吧!)。

Gas 机制用于在以太坊上进行计费。气体也可以被认为是一个工作单位。智能合约越复杂(计算步骤的数量和类型、占用的内存等),需要的 Gas 就越多。

运行任何特定合约的合约所需的 Gas 数量是固定的,由合约的复杂性决定。

gas 价格由运行合约的人在提交运行合约的请求时设置,以确定他愿意为此交易支付的费用:Gas price(以 Ether 为单位)* Gas​​ 数量。

Gas 的目的是限制执行交易所需的工作量,同时支付执行费用。当 EVM 执行交易时,gas 会按照特定的规则逐渐消耗,无论在哪里执行,一旦 gas 用完以太坊怎么可以挖完一个区块,就会触发异常。当前调用帧所做的所有状态修改都会被回滚,如果执行结束时还有gas剩余,gas会退回到发送账户。

没有这个限制,有人会写一个无法停止的合约(例如:无限循环)来阻塞网络。

所以其实(把前面的内容串起来),我们需要一个有以太币余额的外部账户来发起交易(普通交易或者部署,运行合约),运行时,矿工收取相应的工作负载费用。

以太坊网络

有些焦急的同学想问,没有以太如何开发智能合约?您可以选择以下方法:

选择以太坊官网测试网Testnet

在测试网络中,我们可以轻松获得免费的以太币,但缺点是初始化节点需要很长时间。

使用私有链

创建您自己的以太坊私有测试网络,通常也称为私有链,我们可以将其用作开发、调试和测试智能合约的测试环境。

通过上面提到的Geth,您可以轻松创建自己的测试网络。无需同步官网的整个区块链数据,你可以挖多少以太币。

使用开发者网络(模式)

相对于私链,在开发者网络(模式)下,余额较大的开发者账户会自动分配给我们使用。

使用模拟环境

另一种创建测试网络的方法是使用Ganache,这是一个普通的应用程序,在本地使用以太坊区块链环境的内存模拟,用于开发和调试,更方便快捷。 Ganache 将帮助我们在启动时用资金创建 10 个测试账户。

开发合约时,在Ganache中测试通过后即可部署到Geth节点。

DApp:去中心化应用

以太坊社区将基于智能合约的应用程序称为去中心化应用程序。如果我们将区块链理解为一个不可变的数据库,而将智能合约理解为处理数据库的程序,那么就很容易理解 DApp。一个 DApp 不仅要有智能合约(相当于应用程序的后台),比如它还需要有一个友好的用户界面。

松露

Truffle 是一个非常流行的 DApp 开发框架,它可以帮助我们处理很多无关紧要的小事情,让我们可以快速开始编写代码 - 编译 - 部署 - 测试 - 打包 DApp 的过程。

总结

现在让我们总结一下,以太坊是一个让我们可以轻松使用区块链技术开发去中心化应用程序的平台。在这个应用程序中,我们使用 Solidity 来编写一个与区块链交互的智能合约,合约编写完成后,我们需要使用以太坊客户端来部署和运行合约,并使用一个有余额的账户(使用 Truffle 可以帮助我们做到这些东西更好)。为了开发方便,我们可以使用 Geth 或 Ganache 搭建测试网络。

注意:本文中,为了方便大家理解,有些概念是类推的,有些是严格不准确的,但我也觉得对于初学者来说,每个概念都没有必要非常仔细准确的把握,学习是一个循序渐进的过程,很多时候我们会发现,经过一段时间,我们对同一件事会有不同的理解。