以太坊入门

news2024/11/24 1:26:39

1. 以太坊简介

        Vitalik Buterin 在 2013 年 11 月提出了以太坊的概念,其关键思想是:开发一种图灵完备(Turing-Complete) 的语言,以允许开发用于区块链和去中心化应用的任意程序(智能合约)。该概念与比特比相反,因为后者的脚本语言本质上是受限制的,并且仅允许进行必要的操作。

        下表显示了以太坊从第一个版本到计划的最终版本在内的所有版本。

版本发布日期
Olympic(奥林匹克)2015 年 5 月
Frontier(前沿)2015 年 7月
Homestead(家园)2016 年 3月

Metropolis (大都会)

Byzantine (拜占庭,大都会的第一阶段)

2017 年 10 月
Constantinople(君士坦丁堡,大都会的第二阶段)2019 年 3 月
Serenty(宁静,以太坊最终版)即将发布

        以太坊的第一个版本为 Olympic (奥林匹克),于 2015 年 5 月发布。

        大约两个月后,即 2015 年 7 月,以太坊的一个名为 Frontier (前沿)的版本发布。

        2016 年 3 月,发布了具有改进功能的名为 Homestead (家园) 的版本。

        2017 年 10 月,Byzantium (拜占庭)版本发布,这是 Metropolis (大都会) 版本的第一阶段。此版本于 2017 年 10 月在区块高度为 4370000 的区块上实施了 Constantinople (君士坦丁堡)硬分叉,这也是 Metropolis 版本的第二阶段。

        2019 年 3 月,以太坊网络在区块高度为 708000 的区块上实施了 Constantinople(君士坦丁堡)硬分叉,这也是 Metropolis 版本的第二阶段。

        以太坊的最终计划发行版本称为 Serenity (宁静),它将计划引入基于 PoS 的最终版本而不是 PoW。

        在以太坊黄皮书中已经描述了以太坊的正式规范,该规范可用于开发以太坊实现。现在我们就来认识一下这个黄皮书。

1.1 黄皮书

        以太坊黄皮书由 Ethereum & Parity 公司创始人 Gavin Wood 博士撰写,并作为以太坊协议的正式定义。任何人都可以通过遵循该黄皮书定义的协议规范来实现以太坊客户端。其网址如下:

https://ethereum.github.io/yellowpaper/paper.pdf

        尽管普通人阅读该黄皮书可能有些挑战,尤其是对于没有代数或数学背景并且不熟悉数学符号的读者来说,想要全面理解可能需要多做功课,但它包含了以太坊的完整、正式规范,该规范可用于实现完全兼容的以太坊客户端。 

        下面将提供该黄皮书中所有符号及其含义的列表,以帮助你更轻松地阅读以太坊黄皮书。在理解了这些符号的含义之后,就能轻松理解该黄皮书所描述的概念和规范。

1.2 有用的数学符号
1.3 以太坊区块链

        就像其他任何区块链一样,以太坊区块链可以可视化为基于交易的状态机。Gavin Wood 博士在以太坊黄皮书中提到了这个定义。其核心思想是:在以太坊区块链中,通过逐步执行交易,将初始状态转换为最终状态,然后将最终转换后的状态作为绝对无可争议的版本。

        在下图中,显示了以太坊状态转换函数,其中交易的执行已导致状态转换。

原文译文原文译文
INITAL STATE初始状态FINAL STATE最终状态
TRANSACTION交易

        在上图中,启动了两个以太坊从地址 4718bf7a 到地址 741f7a2 的转移。初始状态表示交易执行之前的状态,而最终状态则表示交易执行之后的状态。

        状态将作为世界状态(World State) 存储在以太坊网络上,这也称为以太坊区块链的全球状态(Global State)。

2. 从用户角度观察以太坊

        下面将从用户的角度了解以太坊的工作方式。为此,我们将介绍最常见的转帐示例。

        在本示例中,将从一个用户(刘玄德)转帐到另一个用户(张翼德)。我们将使用两个以太坊客户端,一个用于汇款,另一个用于接收汇款。此过程涉及以下步骤:

        (1)转帐双方都可以发起操作。收款人可以通过将请求发送给付款人来要求转帐,付款人也可以直接决定将钱款发送给收款人。

        收款人发起请求时,可以将收款人的以太坊地址发送给付款人。例如,有两个用户(刘玄德和张翼德),如果张翼德粮草不足,要求刘玄德付款,则可以使用二维码将请求发送给刘玄德。刘玄德收到此请求后,将扫描二维码或手动输入张翼德的以太坊地址,然后将以太币发送到张翼德的以太坊地址。该请求被编码为如下图所示的二维码

原文译文
Tap to copy this address.Share it with the sender via email or text.点击以复制此地址。可通过电子邮件或短信与发送者(付款人)共享

 可以通过电子邮件、文本或任何其他通信方式共享。Jaxx 钱包的下载地址如下:https://jaxx.io

(2)一旦刘玄德收到此请求,他将扫描二维码或在以太坊钱包软件中复制以太坊地址并启动交易,如下图所示

其中,iOS 上的 Jaxx Ethereum 钱包软件用于向张翼德汇款。该图还显示,刘玄德已输入了用于发送以太币的金额和目标地址。在发送以太币之前,最后一步是确认(Confirm)交易。

(3)一旦在钱包软件中构造了汇款请求(交易),它将被广播到以太坊网络。交易由发送方(刘玄德)进行数字签名,以证明他是该以太币的所有者。

(4)该交易由以太坊网络上称为矿工的节点进行拾取,以进行验证并将其包含在区块中。在此阶段,交易仍未确认。

(5)一旦被验证并包含在区块中,PoW 过程就会开始。

(6)一旦矿工找到了 PoW 问题的答案(通过使用新的随机数重复对区块进行哈希处理),则该区块将立即被广播到其余节点,然后其他节点将验证该区块和 PoW。

(7)如果所有验证都通过,则此区块将添加到区块链中,并相应地向矿工支付奖励。

(8)张翼德得到以太币,并在他的钱包软件中显示出来,如下图所示:

在区块链上,此交易由以下交易哈希标识:

0xc63dce674e1640abd63ee63027c3352aed8cdb92b6a02ae25225666e171009e

可以在 https://etherscan.io/ 的区块浏览器中查看有关该交易的详细信息,如下图所示。

        在上述示例中,我们完成了最常见的以太坊网络操作,即将以太币从一个用户转帐到另一个用户。本示例只是对交易过程的大致介绍,目的是让你形成对以太币交易的粗略概念。

3. 以太坊网络

        和比特币网络一样,以太坊网络也是一个点对点网络,节点参与其中以维护区块链并促进共识机制。根据需求和使用情况,以太网络可以分为 3 种类型:主网、测试网络和私有网络。

3.1 主网

        主网(Mainnet) 是以太坊当前的实时网络。主网的当前版本为 Byzantium(Metropolis),其链 ID 为1。链 ID 用于标识网络,可以使用以太坊浏览器探索以太坊区块链。

3.2 测试网络

        以太坊的测试网络(Testnet) 也称为 Ropsten,是以太坊区块链广泛使用的测试网络。该测试区块链用于在部署到生产实时区块链之前测试智能合约和 DApp。此外,作为测试网络,它也可以进行实验和研究。

        主测试网络称为 Ropsten,其中包含针对特定版本创建的其他较小和专用测试网络的所有功能。其他的测试网络包括测试拜占庭版本而开发的 Kovan 和 Rinkeby。在这些较小的测试网络上实现的更改也已在 Ropsten 上实现。现在,Ropsten 测试网络包含 Kovan 和 Rinkeby 的所有属性。

3.3 私有网络

        私有网,顾名思义就是可以通过生成新的创世区块而创建的私有网络(Private Net)。在私有区块链分布式帐本网络中通常就是这种情况,在该类网络中,一组私有实体启动其区块链并将其用作许可的区块链。

        下表显示了以太坊网络及其网络 ID 的列表,这些网络 ID 被以太坊客户端用来标识网络。

网络名称网络ID/链
以太坊主网
Morden
Ropsten
Rinkeby
Kovan42
经典以太坊主网61

4. 以太坊生态系统的组成部分

        以太坊区块链堆栈包含多个组成部分。

        首先,其核心是在对等以太坊网络上运行的以太坊区块链。

        其次,有一个运行在节点上的以太坊客户端(通常是 Geth)。客户端连接到点对点以太坊网络,从该网络下载区块链并存储在本地。它提供了各种功能,例如挖矿和帐户管理。区块链的本地副本定期与网络同步。

        还有一个组件是 web3.js 库,该库允许通过远程过程调用(Remote Procedure Call,RPC)接口与 geth 客户端进行交互。

        下图显示了以太坊显示的架构。

原文译文
WEB3 OR CUSTOM INTERFACEweb3 或自定义接口
RPC远程过程调用(RPC)
ETHEREUM CLIENT以太坊客户端
LOCAL BLOCK CHAIN本地区块链
Synced with main network与主网同步

以下是以太坊区块链中所有高级元素的正式列表:

  • 密钥和地址
  • 帐户
  • 交易和消息
  • 以太坊加密货币/代币
  • 以太坊虚拟机(EVM)
  • 智能合约 

 5. 交易和消息

        以太坊中的交易是使用私钥进行数字签名的数据包,其中包含的指令在完成后会导致消息调用或合约创建.

        交易可以根据它们产生的输出又分为以下两种类型:

  • 消息调用交易。此交易仅产生一个消息调用,该消息调用用于将消息从一个合约帐户传递到另一个合约帐户.
  • 合约创建交易。合约创建交易,顾名思义就是交易导致创建新的合约帐户.这意味着,成功执行此交易后,它将创建一个具有关联代码的帐户。

下图对此结构进行了可视化处理,

5.3 消息

在下图中,显示了两种类型的交易(合约创建和消息调用)之间的区别。

6. 以太坊区块链中的状态存储

        从根本上讲,以太坊区块链是一种由交易和共识驱动的状态机。状态需要永久存储在区块链中。为此,世界状态、交易和交易收据都将以区块的形式存储在区块链上。

下图显示了世界状态以及它与帐户字典树、帐户和区块标头之间的关系。

下图显示了交易收据的生成过程。

7. 以太币

        作为对矿工的激励,以太坊会发放它自己的货币,也就是以太币.

        在 DAO 遭到入侵后,提出了一个硬分叉来解决该问题。现在出现了两个以太坊区块链:一是经典以太坊(Ethereum Classic) ,其货币以 ETC 表示; 二是硬分叉版本的代币 ETH,它将继续增长并且正在积极地进行开发。

8. 以太坊虚拟机

        以太坊虚拟机是一个简单的基于堆栈的执行机,它运行字节码指令以将系统状态从一种状态转换为另一种状态。虚拟机的字长设置为 256 位。堆栈大小限制为 1024 个元素,并且基于后进先出(Last In,First Out,LIFO)队列。

下图显示了 EVM 的设计。

 执行环境可以可视化为包含 10 个元素的元组,如下图所示。

8.3 迭代器函数

机器状态可以看作是一个元组,如下图所示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2115093.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

驱动(RK3588S)第七课时:单节点设备树

目录 需求一、设备树的概念1、设备树的后缀名:2、设备树的语法格式3、设备树的属性(重要)4、设备树格式举例 二、设备树所用函数1、如何在内核层种获取设备树节点:2、从设备树上获取 gpio 口的属性3、获取节点上的属性只针对于字符…

【0324】Postgres内核 Shared Buffer Access Rules (共享缓冲区访问规则)说明

0. 章节内容 1. 共享磁盘缓冲区访问机制 (shared disk buffers) 共享磁盘缓冲区有两套独立的访问控制机制:引用计数(a/k/a pin 计数)和缓冲区内容锁。(实际上,还有第三级访问控制:在访问任何属于某个关系表的页面之前,必须持有该关系表的适当类型的锁。这里不讨论关系…

[Linux Kernel Block Layer第一篇] block layer架构设计

目录 1. single queue架构 2. multi-queue架构(blk-mq) 3. 问题 随着SSD快速存储设备的发展,内核社区越发发现,存储的性能瓶颈从硬件存储设备转移到了内核block layer,主要因为当时的内核block layer是single hw queue的架构&…

【C语言】插入排序、希尔排序——动图展示

目录 1. 插入排序1.1 基本概念1.2 实现思路1.3 代码部分 2. 希尔排序2.1 为什么会有希尔排序?2.2 基本概念2.3 实现思想1)单组排序2)多组排序 2.4 代码部分 3. 总结 1. 插入排序 1.1 基本概念 把待排序的记录逐个插入到一个已经排好序的有序…

PMP–一、二、三模–分类–14.敏捷–技巧–看板面板与燃尽图燃起图

文章目录 技巧一模14.敏捷--方法--看板(类似卡片)1、 [单选] 根据项目的特点,项目经理建议选择一种敏捷方法,该方法限制团队成员在任何给定时间执行的任务数。此方法还允许团队提高工作过程中问题和瓶颈的可见性。项目经理建议采用…

微软出品的一款管理多个远程桌面连接的工具

RDCMan(Remote Desktop Connection Manager)是微软官方出品的一款用于管理多个远程桌面连接的工具。它可以帮助用户集中管理和分类远程桌面,特别适用于需要同时管理大量服务器或在不同计算机间切换操作的场景。 RDCMan的主要功能包括&#x…

使用WebP解决网站加载速度问题,这些细节你需要了解

说到网页的图片格式,大家最常想到的可能是JPEG、PNG,毕竟这些老牌格式陪伴我们这么多年。然而,近几年,有一个格式悄悄崭露头角,那就是WebP。很多人可能听说过,但到底它好在哪?你的网站或者项目是不是也应该用WebP呢?别着急,今天咱们就来好好聊聊WebP这个图片格式的前世…

SOMEIP_ETS_095: SD_Check_subscribe_eventgroup_ttl_expired

测试目的: 验证DUT(Device Under Test)能够检测到测试器(Tester)的订阅已过期(ttl 3秒),并且在TTL过期后不响应测试器触发的事件。 描述 本测试用例旨在确保DUT能够识别测试器的…

Kettle使用命令pan/kitchen执行任务时传参问题

在用windows任务执行kettle的kjb或ktr文件时,可通过bat命令传递参数,测试了很久,特此记录一下。 一、pan\kitchen 参数说明 Options: /rep : Repository name /user : Repository username /pass : Repository password…

【射频通信电路基础第二讲】射频通信电路基础知识——射频接插件、金属导线的趋肤效应、射频传输线及其特性、衰减电路等

一、射频接插件 参考https://blog.csdn.net/weixin_43813325/article/details/112340937 1、BNC:阻抗一般为50/75Ω,频带宽 2、SMA/SMB:损耗小,价格高昂 SMA接口有两种形式,分别如下所示,常规SMA“外螺纹…

AT32F415的OTA升级

AT32F415的OTA升级 项目简介IAP实现原理AT32中的内置FLASH分配情况AT32中的实现过程跳转到APP的程序代码删除APP区域的FLASH空间代码写APP的bin数据到FLASH空间代码 项目简介 在物联网应用开发过程中,不可避免的会需要用到软件升级,一般情况下&#xff…

C# Hash算法之MD5、SHA

MD5我们用的还是比较多的,一般用来加密存储密码。但是现在很多人觉MD5可能不太安全了,所以都用上了SHA256等来做加密(虽然我觉得都差不多,MD5还是能玩)。 还是跟上一篇说的一样,当一个算法的复杂度提高的同时肯定会带…

linux dlopen手册翻译

名称 dlclose, dlopen, dlmopen 打开和关闭一个共享对象 简介 #include <dlfcn.h> void *dlopen(const char*filename, int flags); int dlclose(void *handle);#define _GNU_SOURCE #include <dlfcn.h> void *dlmoopen(Lmid_t lmid, const char *filename, int…

【C++ Primer Plus习题】12.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream> #include "Stack.h"…

磁电偶极子天线学习1 一种60GHz 宽带圆极化口径耦合磁电偶极子天线阵列

摘要&#xff1a; 一种新型的圆极化口径耦合天线被提出。这种圆极化磁电偶极子天线由刻蚀在短路基片集成波导的一部分的宽臂上&#xff0c;并且很容易被集成基片。在工作频段内实现了宽于28.8%的阻抗带宽和宽带3-dB的25.9%的轴比和的增益。此外&#xff0c;因为圆极化辐射由两个…

稀有卡牌手游【植物大战僵尸】源码

稀有卡牌手游【植物大战僵尸】完整代码&#xff0c;画面精美&#xff0c;非常好玩。代码下载

机器学习1——手把手教你用Python跑一个线性回归模型

目录 一、前期准备 1.Scikit-learn 2.matplotlib 二、机器学习过程 三、代码框架 四、完整代码 1.导入所需库 2.准备训练数据 3.喂入训练数据 4.结果预测 5.输出模型中的w与b值 6.可视化 7.传入不规则数据 一、前期准备 在机器学习中我们使用Python居多&…

基于OMS构建OceanBase容灾双活架构的实践

在实际生产环境中&#xff0c;对于关键业务&#xff0c;往往会有容灾双活的需求。除了OceanBase提供的主备库能力&#xff0c;通过官方工具OMS也可以实现容灾双活架构。目前&#xff0c;通过OMS实现的双活架构仅支持OceanBase数据库之间的数据同步。 要通过OMS实现双活架构&am…

使用Node-API进行线程安全开发

一、Node-API线程安全机制概述 Node-API线程安全开发主要用于异步多线程之间共享和调用场景中使用&#xff0c;以避免出现竞争条件或死锁。 1、适用场景 异步计算&#xff1a;如果需要进行耗时的计算或IO操作&#xff0c;可以创建一个线程安全函数&#xff0c;将计算或IO操作放…

C#程序 Debugger,Release都没问题,但是,打包安装后:System.FormatException: 输入字符串的格式不正确

前言&#xff1a; 这是个问题解决&#xff0c;我们先谈问题&#xff1a; 这个问题不会再本地的调试机器上出现&#xff0c;但是&#xff0c;出现在你部署&#xff0c;或者说安装到其他的机器&#xff08;通过VS构建安装项目来做&#xff09; C#程序 Debugger&#xff0c;Relea…