7

用Web3.js构建第一个Dapp

 3 years ago
source link: https://learnblockchain.cn/article/2053
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Web3.js 使用的实用介绍

欢迎订阅 《Solidity 智能合约专栏》 系列文章。 在上一篇中,我们看到了如何实现工厂模式。 如果你一直在跟着这个系列学习,那么你已经掌握了编写自己的智能合约。

因此,今天给大家介绍一下构建去中心化应用的全貌,并向大家介绍一下web3.js,这是构建dapp不可缺失部分。

在深入了解web3.js是什么以及它的工作原理之前,我想先回答一个简单的问题 - 为什么选择web3.js? 来开启这个话题:

UVbQzaU.png!mobile

图片来源: GitHub上的ethereumbook

去中心化应用有三个主要组成部分。

  • 前端。 从用户那里获取输入,并建立发送到智能合约的请求。
  • 钱包。 签署交易并将其发送到网络。
  • 智能合约。 这里编写dapp的业务逻辑的地方。

现在的问题是如何用JavaScript 在前端与智能合约交互。

在web3.js出现之前,我们与智能合约交互的唯一方式是通过以太坊节点提供的 json-rpc API , API 由节点提供,节点作为json-rpc服务器。 使用 json-rpc 可不是一件容易的事。

但由于web3.js,你不必再担心JSON-RPC调用的低层细节,因为它提供了以太坊 json-rpc接口的抽象。 因此,你可以使用纯JavaScript开始与以太坊节点进行交互。 简单地说,web3.js 就是用JavaScript把 JSON-RPC API 封装了。

web3.js是如何工作

正如我们之前所说的,为了与以太坊网络进行交互,我们需要向以太坊节点发送json-rpc调用,这就是web3.js的底层工作。 那么它是如何做到的呢?

为了将JavaScript代码翻译成json-rpc请求,web3.js使用了称之为 provider(提供者) ,它是一个符合 EIP 1193 规范的JavaScript对象,负责实现以太坊 RPC方法调用的 request 方法。 Web3.js对上述规范有自己的实现,并将其放在 web3.provider 下,你可以访问web3文档中提到的以下三个provider: HttpProviderWebsocketProviderIpcProvider

其他项目也实现了这一规范,如 MetaMask ,它在浏览器中注入了 window.ethereum 下的提供者对象。

一旦我们有了一个提供者,我们就可以使用 new 关键字获得web3的实例。

let web3 = new Web3(Web3.givenProvider || 'ws://some.local-or-remote.node:8546');

在这里你应该记住的是,web3.js需要一个provider对象,配置好钱包的信息,它将签署交易并将其发送到网络。 如果你在前端使用web3,这个提供者将被注入到浏览器中,或者你使用 websocketproviderIpcProvider 自己建立一个提供者对象。

注:MetaMask使用 Infura 作为节点提供者。 这就是为什么你不需要在电脑上安装以太坊客户端就能与以太坊网络进行交互的原因

快速查看Web3 API

web3.js不仅可以与以太坊节点进行通信,还可以与Whisper和Swarm节点进行通信。 它有五个主要包 :

web3.eth
web3.bzz
web3.shh
web3.utils
web3.*.net

用web3.js构建第一个Dapp

现在我们已经把理论讲完了,让我们动手去构建我们的第一个dapp。 在这个例子中,我们将建立一个问候语dapp,存储一个默认的问候语字符串,并允许用户更新它。 对于钱包,我们将使用MetaMask。 你可以点击 MetaMask 官网 主页上的下载链接来添加扩展。

1. 创建合约并部署到网络上

首先在你的工作区创建一个名为 greeting 的空项目,并使用 truffle init 初始化它。

>...

欢迎订阅 《Solidity 智能合约专栏》 系列文章。 在上一篇中,我们看到了如何实现工厂模式。 如果你一直在跟着这个系列学习,那么你已经掌握了编写自己的智能合约。

因此,今天给大家介绍一下构建去中心化应用的全貌,并向大家介绍一下web3.js,这是构建dapp不可缺失部分。

在深入了解web3.js是什么以及它的工作原理之前,我想先回答一个简单的问题 - 为什么选择web3.js? 来开启这个话题:

UVbQzaU.png!mobile

图片来源: GitHub上的ethereumbook

去中心化应用有三个主要组成部分。

  • 前端。 从用户那里获取输入,并建立发送到智能合约的请求。
  • 钱包。 签署交易并将其发送到网络。
  • 智能合约。 这里编写dapp的业务逻辑的地方。

现在的问题是如何用JavaScript 在前端与智能合约交互。

在web3.js出现之前,我们与智能合约交互的唯一方式是通过以太坊节点提供的 json-rpc API , API 由节点提供,节点作为json-rpc服务器。 使用 json-rpc 可不是一件容易的事。

但由于web3.js,你不必再担心JSON-RPC调用的低层细节,因为它提供了以太坊 json-rpc接口的抽象。 因此,你可以使用纯JavaScript开始与以太坊节点进行交互。 简单地说,web3.js 就是用JavaScript把 JSON-RPC API 封装了。

web3.js是如何工作

正如我们之前所说的,为了与以太坊网络进行交互,我们需要向以太坊节点发送json-rpc调用,这就是web3.js的底层工作。 那么它是如何做到的呢?

为了将JavaScript代码翻译成json-rpc请求,web3.js使用了称之为 provider(提供者) ,它是一个符合 EIP 1193 规范的JavaScript对象,负责实现以太坊 RPC方法调用的 request 方法。 Web3.js对上述规范有自己的实现,并将其放在 web3.provider 下,你可以访问web3文档中提到的以下三个provider: HttpProviderWebsocketProviderIpcProvider

其他项目也实现了这一规范,如 MetaMask ,它在浏览器中注入了 window.ethereum 下的提供者对象。

一旦我们有了一个提供者,我们就可以使用 new 关键字获得web3的实例。

let web3 = new Web3(Web3.givenProvider || 'ws://some.local-or-remote.node:8546');

在这里你应该记住的是,web3.js需要一个provider对象,配置好钱包的信息,它将签署交易并将其发送到网络。 如果你在前端使用web3,这个提供者将被注入到浏览器中,或者你使用 websocketproviderIpcProvider 自己建立一个提供者对象。

注:MetaMask使用 Infura 作为节点提供者。 这就是为什么你不需要在电脑上安装以太坊客户端就能与以太坊网络进行交互的原因

快速查看Web3 API

web3.js不仅可以与以太坊节点进行通信,还可以与Whisper和Swarm节点进行通信。 它有五个主要包 :

web3.eth
web3.bzz
web3.shh
web3.utils
web3.*.net

用web3.js构建第一个Dapp

现在我们已经把理论讲完了,让我们动手去构建我们的第一个dapp。 在这个例子中,我们将建立一个问候语dapp,存储一个默认的问候语字符串,并允许用户更新它。 对于钱包,我们将使用MetaMask。 你可以点击 MetaMask 官网 主页上的下载链接来添加扩展。

1. 创建合约并部署到网络上

首先在你的工作区创建一个名为 greeting 的空项目,并使用 truffle init 初始化它。

>...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK