区块链学习第五期

myBlog

学习ethers.js【下篇】

[toc]

续上一期内容,阳了,失去产出能力

ethers.js 接口文档导读

其实整个文档可以看出四个大类 我把它们按照学习的先后顺序分为:

  • provider(提供器:我习惯理解成提供给我信息的网络)
  • wallet(钱包)
  • contract(合约)
  • utils(工具包)

provider

  • 在 Ethers.js 中,”provider” 是一个对象,用于与以太坊网络连接并进行通信。它提供了一组方法,用于从以太坊网络中读取数据和发送交易。

  • 可以将 provider 看作是与以太坊网络的接口,通过它可以与以太坊网络进行交互。可以使用 Ethers.js 的 provider 对象来访问以太坊区块链数据、发送交易和调用智能合约。

  • 可以使用 Ethers.js 的 provider 对象来连接到任何以太坊节点,包括本地节点和远程节点。可以使用它来连接到任何支持 JSON-RPC 的以太坊节点。

wallet

  • Ethers.js 中的 wallet 是一个 JavaScript 对象,用于管理以太坊账户。它具有一组方法,用于签署和发送交易,以及访问和管理账户余额和交易历史记录。

  • 在 Ethers.js 中,wallet 是一个抽象概念,用于表示一个以太坊账户。它可以是一个用户账户,也可以是智能合约账户。在任何情况下,wallet 都是用于管理以太坊账户的对象。

  • 可以使用 Ethers.js 的 wallet 对象来签署和发送交易,访问账户余额和交易历史记录,以及使用钱包加密功能加密和解密私钥。

  • 可以使用 Ethers.js 创建多种类型的钱包,包括用户账户钱包、智能合约钱包和测试钱包。每种类型的钱包都具有一些特定的功能,但所有类型的钱包都提供了基本的钱包功能。

contract

  • Ethers.js 中的 contract 是一个 JavaScript 对象,用于与以太坊智能合约进行交互。它具有一组方法,用于调用合约的函数和访问合约的数据。

  • 在 Ethers.js 中,contract 是一个抽象概念,用于表示一个以太坊智能合约。它提供了一组方法,用于与合约进行交互,包括调用合约函数和访问合约数据。

  • 可以使用 Ethers.js 的 contract 对象来调用智能合约函数,访问智能合约数据,并监听合约事件。你还可以使用它来部署新的智能合约。

  • 要使用 Ethers.js 中的 contract 对象,你需要先定义合约的接口,即合约中可调用的函数和可访问的数据。可以使用 Solidity 编写合约并生成 ABI(应用程序二进制接口),然后使用 ABI 和合约地址来创建 contract 对象。

utils

  • Ethers.js 中的 utils 模块提供了一组实用程序函数,用于帮助你在使用 Ethers.js 时进行常见任务。这些函数包括格式化数据、转换数据类型、生成哈希值和执行其他常见任务。

  • 可以使用 Ethers.js 的 utils 模块来执行各种各样的任务,包括:

    • 格式化数据:可以使用 utils 模块中的函数来格式化数据,例如将数字转换为十六进制字符串、将字节数组转换为字符串等。

    • 转换数据类型:你可以使用 utils 模块中的函数来转换数据类型,例如将十六进制字符串转换为数字、将字符串转换为字节数组等。

    • 生成哈希值:你可以使用 utils 模块中的函数来生成哈希值,例如使用 keccak256 算法生成数据的哈希值。

    • 执行其他常见任务:你可以使用 utils 模块中的函数来执行其他常见任务,例如生成以太坊地址、计算以太坊交易费用等。

  • 可以在 Ethers.js 文档中找到有关 utils 模块的更多信息,包括可用函数的列表和使用示例。

那具体代码是怎样的呢?如何工作?

provider的具体使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

// 连接默认的provider
// 可以使用任何标准网络名称做参数:
// - "homestead"
// - "rinkeby"
// - "ropsten"
// - "kovan"
// - "goerli"

let provider = ethers.getDefaultProvider('ropsten');

// 连接metamask
// 将自动检测网络;
// 如果在MetaMask中更改了网络,则会导致页面刷新。

let provider = new ethers.providers.Web3Provider(web3.currentProvider);