以太坊开发课_以太坊开发工具

欧意官网 比特币 2023-03-27 191 0

本篇文章给大家谈谈以太坊开发课,以及以太坊开发工具对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

用Go来做以太坊开发⑤事件日志

智能合约具有在执行期间“发出”事件的能力。 事件在以太坊中也称为“日志”。 事件的输出存储在日志部分下的事务处理中。 事件已经在以太坊智能合约中被广泛使用,以便在发生相对重要的动作时记录,特别是在代币合约(即ERC-20)中,以指示代币转账已经发生。 这些部分将引导您完成从区块链中读取事件以及订阅事件的过程,以便交易事务被矿工打包入块的时候及时收到通知。

为了订阅事件日志,我们需要做的第一件事就是拨打启用websocket的以太坊客户端。 幸运的是,Infura支持websockets。

下一步是创建筛选查询。 在这个例子中,我们将阅读来自我们在之前课程中创建的示例合约中的所有事件。

我们接收事件的方式是通过Go channel。 让我们从go-ethereum core/types 包创建一个类型为 Log 的channel。

现在我们所要做的就是通过从客户端调用 SubscribeFilterLogs 来订阅,它接收查询选项和输出通道。 这将返回包含unsubscribe和error方法的订阅结构。

最后,我们要做的就是使用select语句设置一个连续循环来读入新的日志事件或订阅错误。

我们会在下个章节介绍如何解析日志。

Commands

Store.sol

event_subscribe.go

智能合约可以可选地释放“事件”,其作为交易收据的一部分存储日志。读取这些事件相当简单。首先我们需要构造一个过滤查询。我们从go-ethereum包中导入 FilterQuery 结构体并用过滤选项初始化它。我们告诉它我们想过滤的区块范围并指定从中读取此日志的合约地址。在示例中,我们将从在 智能合约章节 创建的智能合约中读取特定区块所有日志。

下一步是调用ethclient的 FilterLogs ,它接收我们的查询并将返回所有的匹配事件日志。

返回的所有日志将是ABI编码,因此它们本身不会非常易读。为了解码日志,我们需要导入我们智能合约的ABI。为此,我们导入编译好的智能合约Go包,它将包含名称格式为 ContractABI 的外部属性。之后,我们使用go-ethereum中的 accounts/abi 包的 abi.JSON 函数返回一个我们可以在Go应用程序中使用的解析过的ABI接口。

现在我们可以通过日志进行迭代并将它们解码为我么可以使用的类型。若您回忆起我们的样例合约释放的日志在Solidity中是类型为 bytes32 ,那么Go中的等价物将是 [32]byte 。我们可以使用这些类型创建一个匿名结构体,并将指针作为第一个参数传递给解析后的ABI接口的 Unpack 函数,以解码原始的日志数据。第二个参数是我们尝试解码的事件名称,最后一个参数是编码的日志数据。

此外,日志结构体包含附加信息,例如,区块摘要,区块号和交易摘要。

若您的solidity事件包含 indexed 事件类型,那么它们将成为 主题 而不是日志的数据属性的一部分。在solidity中您最多只能有4个主题,但只有3个可索引的事件类型。第一个主题总是事件的签名。我们的示例合约不包含可索引的事件,但如果它确实包含,这是如何读取事件主题。

正如您所见,首个主题只是被哈希过的事件签名。

这就是阅读和解析日志的全部内容。要学习如何订阅日志,阅读上个章节。

命令

Store.sol

event_read.go

首先,创建ERC-20智能合约的事件日志的interface文件 erc20.sol :

然后在给定abi使用 abigen 创建Go包

现在在我们的Go应用程序中,让我们创建与ERC-20事件日志签名类型相匹配的结构类型:

初始化以太坊客户端

按照ERC-20智能合约地址和所需的块范围创建一个“FilterQuery”。这个例子我们会用 ZRX 代币:

用 FilterLogs 来过滤日志:

接下来我们将解析JSON abi,稍后我们将使用解压缩原始日志数据:

为了按某种日志类型进行过滤,我们需要弄清楚每个事件日志函数签名的keccak256哈希值。 事件日志函数签名哈希始终是 topic [0] ,我们很快就会看到。 以下是使用go-ethereum crypto 包计算keccak256哈希的方法:

现在我们将遍历所有日志并设置switch语句以按事件日志类型进行过滤:

现在要解析 Transfer 事件日志,我们将使用 abi.Unpack 将原始日志数据解析为我们的日志类型结构。 解包不会解析 indexed 事件类型,因为它们存储在 topics 下,所以对于那些我们必须单独解析,如下例所示:

Approval 日志也是类似的方法:

最后,把所有的步骤放一起:

我们可以把解析的日志与etherscan的数据对比:

Commands

erc20.sol

event_read_erc20.go

solc version used for these examples

要读取 0x Protocol 事件日志,我们必须首先将solidity智能合约编译为一个Go包。

安装solc版本 0.4.11

为例如 Exchange.sol 的事件日志创建0x Protocol交易所智能合约接口:

Create the 0x protocol exchange smart contract interface for event logs as Exchange.sol :

接着给定abi,使用 abigen 来创建Go exchange 包:

Then use abigen to create the Go exchange package given the abi:

现在在我们的Go应用程序中,让我们创建与0xProtocol事件日志签名类型匹配的结构体类型:

初始化以太坊客户端:

创建一个 FilterQuery ,并为其传递0x Protocol智能合约地址和所需的区块范围:

用 FilterLogs 查询日志:

接下来我们将解析JSON abi,我们后续将使用解压缩原始日志数据:

为了按某种日志类型过滤,我们需要知晓每个事件日志函数签名的keccak256摘要。正如我们很快所见到的那样,事件日志函数签名摘要总是 topic[0] :

现在我们迭代所有的日志并设置一个switch语句来按事件日志类型过滤:

现在要解析 LogFill ,我们将使用 abi.Unpack 将原始数据类型解析为我们自定义的日志类型结构体。Unpack不会解析 indexed 事件类型,因为这些它们存储在 topics 下,所以对于那些我们必须单独解析,如下例所示:

对于 LogCancel 类似:

最后是 LogError :

将它们放在一起并运行我们将看到以下输出:

将解析后的日志输出与etherscan上的内容进行比较:

命令

Exchange.sol

event_read_0xprotocol.go

这些示例使用的solc版本

如何学习区块链?

如果想学习比特币及区块链方面的知识,还是要系统性地学习。网上这方面讨论、资料都很多,但水平参差不齐。建议看一下区块链老师的线上课程。

线上区块链视频教程是由Steven老师进行直播教学。Steven老师,西交大学学士,北航软件学院工程硕士。从事IT行业15年,7年编程开发经验,8年计算机培训经验。分别从事过Asp、Asp.net、PHP、Java、Android、HTML5等开发和教学工作。曾出版发行《变身程序猿——Android应用开发》(电子工业出版社),《Steven陪你学Android》、《零基础学编程》、《解密区块链》系列视频。

想要学习区块链技术的同学通过三个月线上直播学习,毕业后能够掌握区块链基本概念、精通智能合约开发与架构设计、掌握代币开发与ICO发币、掌握全栈dapp开发。

其区块链技术课程大纲如下:

1.1区块链基本理论 0.5周

1.1.1初识区块链

1.1.2认识区块链家族

1.1.3区块链与比特币常见问题及基本概念

1.1.4区块链应用场景

1.1.5比特币钱包BitcoinCore

1.1.6testnet环境实现比特币交易

1.2编程基础入门 3.5周

1.2.1计算机软硬件基础

1.2.2字符集及字符编码

1.2.3HTML+CSS(含HTML5+CSS3)

1.2.4ECMAScript + BOM + DOM

1.2.5jQuery

1.2.6node.js

1.2.7Ajax及Express

1.3Go编程语言 6周

1.3.1Go基本语法

1.3.2流程控制

1.3.3函数及数据

1.3.4错误处理

1.3.5Go面向对象编程

1.3.6Go并发编程

1.3.7Go网络编程

1.3.8Go安全编程

1.3.9Go进阶编程(goroutine、channel)

1.3.10数据库MySQL、LevelDB

1.4区块链1.0——比特币Bitcoin 1周

1.4.1比特币原理

1.4.2比特币系统架构

1.4.3密码算法(Go语言实现)

1.4.4共识算法(Go语言实现)

1.4.5比特币交易原理及交易脚本

1.4.6比特币RPC编程(node.js实现)

1.4.7比特币源码解析

1.5区块链2.0——以太坊Ethereum 3周

1.5.1以太坊工作原理及基础架构

1.5.2以太坊基本概念(账户、交易、Gas)

1.5.3以太坊钱包Mist及Metamask

1.5.4以太坊交易

1.5.5ERC20标准Token开发部署

1.5.6以太坊开发IDE——remix-ide

1.5.7智能合约与Solidity

1.5.8Solidity部署、备份及调用

1.5.9框架技术:truffle及web3

1.5.10DApp开发实战

1.5.11Geth

1.6EOS及星云链开发实战 3周

1.6.1EOS介绍及石墨烯生态系

1.6.2EOS主要特点及发展前景

1.6.3EOS开发智能合约

1.6.4cleos及RPC接口

1.6.5EOS应用开发实战

1.6.6星云链介绍

1.6.7星云链开发DApp实战

1.7区块链3.0——超级账本之Fabric 3周

1.7.1超级账本项目介绍

1.7.2Fabric部署和使用

1.7.3Fabric配置管理

1.7.4Fabric架构设计

1.7.5Fabric CA应用与配置

1.7.6应用开发实战

区块链市场已经开始向大众打开,迅速抓住学习机遇,掌握区块链技术,站在互联网时代风口,未来发展必定会势如破竹!

ethg什么时候上

以太坊黄金(ETHG)主网将于2023年2月28日21点26分(UTC/GMT)启动通过 POW 共识机制保障公链网络安全性能,维持去中心化属性跟全球矿工的利益,通过 POS 共识机制进行质押挖矿,解决部分不支持算力挖矿国家的能源消耗问题,通过 POC 共识机制解决了全球超级算力中心的存储问题等。在ETHG网络中区块开采时间提高到约8秒开采出一个区块,初始区块奖励为2.6枚ETHG,每500万区块高度减产20%。

006:MPT与RLP|《ETH原理与智能合约开发》笔记

待字闺中开发了一门区块链方面以太坊开发课的课程:《深入浅出ETH原理与智能合约开发》以太坊开发课,马良老师讲授。此文集记录我的学习笔记。

课程共8节课。其中以太坊开发课,前四课讲ETH原理,后四课讲智能合约。

第二课分为三部分:

这篇文章是第二课第二部分的学习笔记:MPT与RLP。

MPT,Merkle Patricia Tree,结合了Merkle Tree(默克尔树)和 Patricia Tree(帕特里夏树)的一种数据结构。

RLP,Recursive Length Prefix,一种编码方法。

这是两个非常重要的数据结构,在以太坊的区块和交易中都有用到。

先分别介绍一下Merkle Tree 和 Patricia Tree。

Merkle Tree 和 Patricia Tree Merkle Tree 和 Patricia Tree

默克尔树的解释:对每一个交易计算其散列值(Hash),再对两个散列值求以太坊开发课他们的散列值。如果是奇数个,就把最后一个重复一次。最后得到的一个散列值就是默克尔树根的值。如图,交易1、1、2、3的散列值分别是HASH0、HASH1、HASH2、HASH3。HASH0和HASH1结合在一起计算散列值得HASH01,HASH2和HASH3结合在一起计算散列值得HASH23,接下来HASH01、HASH23结合在一起,计算散列值得HASH0123。

采用默克尔树的好处是可以方便的判断一个交易是否在区块中。

Patricia Tree,可称为压缩前缀树。如上图右半部分。相同的前缀在同一分支中,后面一同的部分分叉出来,如test和toast,都有相同的t,est和oast在两个分支中。

这个结构的好处是节省空间,因为每一级的键值可以是多个字符。

了解了Merkle Tree 和 Patricia Tree后,再来看这两者混合后的产物——MPT。

这里的原理知识单独来看不易理解,和具体的例子结合起来才更容易理解,此处先放上课件截图。在后面的例子中再做说明。

Merkle Patricia Tree 规格 Merkle Patricia Tree 规格

在MPT中,还涉及到三个小的编码标准。主要规则如图。下面结合两个例子说明一下。

三个编码标准 三个编码标准

HEX编码的例子:从ASCII码表中可以查出,b的十六进制编码为62,o的十六进制编码为6F,F在十六进制中就是15的意思。因为这是个叶子节点,最后加上0x10表示结束,也就是16。所以最后的编码为[6 2 6 15 6 2 16]

HEX-Prefix编码的例子:[6 2 6 15 6 2 16],将其最后的0x10去掉,[6 2 6 15 6 2]。前面补一个四元组,其中(倒数)第0位是区分奇偶信息的,[6 2 6 15 6 2]是偶数位,第0位是0以太坊开发课;第1位是区分节点类型的,这是叶子节点,第1位是1。所以这个四元组就是0010是2。“如果输入key的长度是偶数则再添加一个四元组0x0在flag四元组之后。”,所以,最终的前缀是0x20。本例最终的结果,[32 98 111 98],即[0x20, 0x62, 0x6F, 0x62]

下面是综合性的例子,通过它可以很方便地理解前面的理论知识。值得多看几篇,仔细休会。

初始的key-value对为:

其中,中的数据为key的16进制编码。

MPT.jpg MPT.jpg

因为4组数据都有公共的6,所以这个节点的值为6,长度为1,奇数;节点类型:扩展节点;所以前缀就是0001,即1。

这是个扩展节点,它的值是一个Hashvalue,它指向一个分支节点。Hashvalue,具体指的是分支节点RLP编码的结果的散列值。(RLP见下小节)

分支节点。上面4组数据的第2位是4和8两种情况。在4的位置上存的是下面的扩展节点的散列值,在8的位置上存的是下面的叶子节点的散列值。

叶子节点。以68开头的只有一个了。所以这个节点上的四元组就是6f727365了。它是偶数位。前缀是0x20(同前文HEX-Prefix编码的例子)。这个叶子节点的value值为'stallion'。

扩展节点。在64之后,公共的部分是6f,这个扩展节点的key即为6f,前缀为0000,即00。这个扩展节点的value存放的是一个hashvalue,指向下一个节点,一个分支节点。

分支节点。646f已经表达完,这个节点的value值就是646f对应的值,'verb'。

除此之外,646f之后就是6,所以在这个分支节点的6位置上有一个散列值,指向下一个节点。

扩展节点。在646f6之后,公共的部分是7,其长度为1,奇数。所以前缀为0001。这个节点的value是一个散列值,指向下一个节点。

分支节点。646f67已经表达完,这个节点的value值就是646f67对应的值,'puppy'。

除此之外,646f67之后就是6,所以在这个分支节点的6位置上有一个散列值,指向下一个节点。

叶子节点。key为5,value为'coin'。长度为1,奇数,前缀0011,即3。

整个分析过程结束。可结合上图和前文的理论多加复习。

这小节也是理论性较强,通过例子可以方便理解。先放上课件,再根据我的理解举更多的例子。同样,学习方法也是理论和例子配合学习。其中,list的例子在下篇文章的上机实验部分再列举。 RLP的编码标准 RLP的编码标准 再举几个例子 再举几个例子

区块链技术架构有些什么课程介绍?

目前市场上区块链培训课程跨度很大,课程内容和授课形式也是五花八门。

区块链

1、编程基础入门

计算机软硬件基础、字符集及字符编码、HTML+CSS(含HTML5+CSS3)、ECMA + BOM + DOM、jQuery、node.js、Ajax及Express

2、Go编程语言

Go基本语法、流程控制、函数及数据、错误处理、Go面向对象编程、Go并发编程、Go网络编程、Go安全编程、Go进阶编程(goroutine、channel)、数据库MySQL、LevelDB

3、区块链1.0——比特币Bitcoin

比特币原理、比特币系统架构、密码算法(Go语言实现)、共识算法(Go语言实现)、比特币交易原理及交易脚本、比特币RPC编程(node.js实现)、比特币源码解析

4、区块链2.0——以太坊Ethereum

以太坊工作原理及基础架构、以太坊基本概念(账户、交易、Gas)、以太坊钱包Mist及Metamask、以太坊交易、ERC20标准Token开发部署、以太坊开发IDE——remix-ide、智能合约与Solidity、Solidity部署、备份及调用、框架技术:truffle及web3、DApp开发实战、Geth

5、区块链3.0——超级账本之Fabric

超级账本项目介绍、Fabric部署和使用、Fabric配置管理、Fabric架构设计、Fabric CA应用与配置、应用开发实战。

链乔教育在线旗下学硕创新区块链技术工作站是中国教育部学校规划建设发展中心开展的“智慧学习工场2020-学硕创新工作站 ”唯一获准的“区块链技术专业”试点工作站。专业站立足为学生提供多样化成长路径,推进专业学位研究生产学研结合培养模式改革,构建应用型、复合型人才培养体系。

区块链在哪学习比较专业?

这是学习区块链的最佳网站和在线学习平台的列表。此列表包括视频课程、带有区块链教程和示例的网站,以及带有区块链课程和认证的网站。您可以查看它们以了解它们提供的内容,然后相应地使用它们。

1. 101区块链

这是我发现学习区块链并获得需求区块链认证的最受欢迎的网站之一。101 Blockchain 是一个课程网站,您可以在其中找到许多学习区块链、以太坊和 HyperLedger 技术的优质课程。

随着区块链的普及,对区块链认证的需求也在增加。该网站有两个最受欢迎和最全面的证书,称为认证企业区块链专业人员(CEBP)对于那些想要学习区块链开发并成为认证区块链开发人员和认证企业区块链架构师的人(洋葱) 对于那些希望成为认证区块链架构师的人。

它们有点贵,但不用担心;您可以使用 Blockchain 101 折扣代码 BCHAIN30 享受任何认证的 30% 折扣。

区块链是一个利基市场,前景光明。在简历中学习区块链开发可能会改变游戏规则。如果你对这个领域感兴趣,你应该看看这个网站。

2. Coursera

获得一些专业认证的最佳网站之一是许多行业的 Coursera。还有一些区块链课程可以帮助你学习和开发你的区块链,并在接下来的几年里向世界解释这项技术的好处。

这个区块链专业化 旨在为想要创建他们的区块链加密货币智能合约的开发人员而设计,您将在这个庞大的课程中找到更多内容。

假设您不是开发人员,但想了解区块链。另一本名为《区块链简介》,旨在为那些考虑投资这项技术并更多地了解其机会的企业家提供服务。

请记住,Coursera 上的大多数课程都是免费审核的,这意味着您可以免费观看和阅读,但如果您想要获得认证或想要访问各种评估和测验,则需要购买。

如果您愿意,我强烈建议您加入 Coursera Plus,这是 Coursera ** 提供的月度和年度订阅计划,可无限制访问超过 3000 门 Coursera 课程、专业证书和专业,包括此区块链专业。

3. Udemy

您可以探索许多关于区块链技术的课程、历史和它的工作原理,以及在只上一两节课后如何成为区块链开发人员。我将在本文中推荐一些课程来掌握这项技术。

Udemy 拥有地球上最广泛的在线课程集合,可能仅次于 Youtube,但仍然相当广泛,并且有很多优质的区块链课程,免费和付费,不仅可以学习区块链技术的基础知识,还可以学习区块链开发,创建智能应用程序等。

所以,如果你想成为一名区块链开发者,你可以报名参加这个名为区块链AZ,它将教您如何创建区块链和您的加密货币。

但是假设你想从理论上了解它是如何工作的,并且可能考虑投资这种加密货币;您可以查看此免费课程,加密货币和区块链简介,以了解有关其市场及其运作方式的更多信息。

4.区块链

如果你想学习区块链,也可以浏览 区块链官网,尝试更多地了解这项技术及其工作原理。此外,他们在 GitHub 上的官方页面上有一些代码,可以帮助您开发现代区块链技术,而不是从头开始。

这个网站是一个很好的资源。你会发现许多由许多编程语言开发的区块链代码,例如这个代码区块链 API 库,它使用 python 语言与区块链进行交互。

然后你就有了My-Wallet-V3-Android,这是区块链官方安卓应用程序的开源代码,可供任何人采用和开发,还有更多代码。

5. GitHub

这是获取开源代码和文档的最佳网站之一,您可以在技术和更多主题中想到任何内容。区块链就是其中之一,您会在其中找到一些代码,这些代码不仅由官方区块链开发人员开发,而且由许多其他人开发。

那里的一些代码解释说,您可以使用多种编程语言来实现这项技术,例如Go 中的代码 Blockchain向您展示如何使用 Golang 编程语言以及您将在该平台上找到的许多其他代码和文档来实现该技术。

6.LinkedIn学习【区块链短课程】

你们中的大多数人认为LinkedIn只适合那些在上面写简历并正在寻找工作的人。尽管如此,它还不止于此,因为他们有一个名为 LinkedIn learning 的平台来提供不同类别的课程。

它们与 Pluralsight 非常相似,并且拥有大量的在线课程来学习您想了解的任何技术、编程语言、框架和库。

区块链爱好者,区块链基础知识,是学习该技术基础及其优势的短期课程。更多的是为什么这项技术在加密货币之外很有帮助,还有更多您可以探索的视频课程。

关于以太坊开发课和以太坊开发工具的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

评论