QuikNode高性能以太坊节点服务【详细指南】

随着Web3的演化,开发者已经开始在以太坊区块链上快速开发去中心化应用。虽然 在以太坊上开发dApp很酷,但是要搭建自己的以太坊节点还是挺令人头疼的一件事, 这需要不短的时间,而且还需要一些技巧。QuikNode 通过提供高性能的以太坊节点服务解决了这一问题,正如其官网所说,这是运行专用以太坊节点的最快、最简单的 方法

区块链开发课程精选

1、为什么要使用QuikNode?

搭建你自己的以太坊节点非常繁琐,存在以下问题:

  • 占空间:区块链是分布式账本,一个全节点意味着你需要账本的完整拷贝。这已经不太可能 使用家用计算机来完成全节点的同步了,因为目前以太坊区块链的数据大约有670GB, 即使快速同步模式也需要120GB。
  • 耗时:取决于你的网速,第一次同步以太坊主网数据可能需要好几天的时间
  • 技能要求:最令人担心的还是节点的安全问题。你需要一些网络安全技能来保护你的节点。

2、QuikNode能够提供什么服务?

QuikNode通过直接 提供全节点来解决这一问题,这听起来类似于Infura,但不同的是QuikNode 提供给你的是专用节点,而不是共享的公共节点。QuikNode进行了性能、速度和灵活性的 优化。让我们看看QuikNode是如何实现这一点的。

  • 专用节点

使用专用节点帮助你获得更好的区块链访问性能,因为它只接受你的dApp的调用。

  • 多区域

QuikNode支持8个不同的区域,这有助于优化网络调用时间,从而提高你的DApp的速度和性能。

  • 多测试网支持

QuikNode支持几乎所有流行的以太坊测试网,这使得开发者在测试网的选择上有了充分的灵活性, 可以在自己喜欢的测试网上进行Dapp的测试。

  • 归档节点

QuikNode同时也提供Parity归档节点。一个归档节点将保存区块链账本的完整拷贝,而全节点则 可能由于磁盘空间的问题进行剪枝处理。对于区块链分析和研究业务来讲这是非常重要的特性。

另外,QuikNode同时支持Geth和Parity,你可以根据自己的喜好来自由选择。

3、注册QuikNode账号

要使用QuikNode的服务,需要首先点击这里 注册一个账号,别忘了保存你的用户名和密码,因为需要这些信息来访问你的QuikNode节点 以及集成的Web钱包(QWallet)。一旦完成了注册,就可以配置你的节点。你可以选择网络、区域、客户端 以及同步模式。你会看到你的节点的链接URL(类似下面这个),记得保存下来:

1
https://quiknode.io/node/86d9e35e-8cdb-47ad-80a4-84f9e9537afa/A-cU-9vjaepXeR6qPC8eOg==

一旦登录进QuikNode网站,你可以看到类似下图这样的仪表盘:

dashboard

4、连接QuikNode节点

我已经创建了一个Kovan测试网,选择的区域是印度班加罗尔。记住,你的节点应当是就绪(READY)状态, 否则就无法正常工作。如果不是就绪状态的话,你可以重建节点,如果有问题的话可以联系QuikNode团队。

QuikNode同时支持HTTPProvider和WebSockets,我们下面可以看到这一点。你可以在Dev Tools选项下找到 这些链接URL:

node url

现在让我们深入代码。

5、使用web3js和QuikNode发送以太坊交易

让我们测试下QuikNode来看看它是如何工作的。首先,我们用web3js通过QuikNode广播一个裸交易:

5.1 配置web3使用QuikNode节点

让我们创建一个node.js项目并安装web3js包。创建项目目录然后运行下面的命令:

1
2
3
4
~$ mkdir quiknode
~/quiknode$ cd quiknode
~/quiknode$ npm init
~/quiknode$ npm install web3

接下来让我们创建一个Index.js文件并安装web3。正如你看到的,我们使用QuikNode 的HttpProvider连接来 接入我们的节点,并访问Kovan链:

1
2
3
const Web3 = require('web3')
const httpProvider = "https://mistakenly-smart-jay.quiknode.io/86d9e35e-8cdb-47ad-80a4-84f9e9537afa/C0_tKUunhUc0rM_i1HMxHA==/"
var web3 = new Web3(new Web3.providers.HttpProvider(httpProvider));

然后添加如下的代码来测试网络并检查网络ID,kovan的网络ID是42:

1
2
3
web3.eth.net.getId(function(err, data){
console.log(data);
})

5.2 创建一个账号

现在让我们在KOVan网络上创建一个以太坊账号:

1
2
var addressData =web3.eth.accounts.create(web3.utils.randomHex(32));
console.log(addressData);

这将会得到一个私钥和地址,我们将使用这个私钥来创建裸交易。

首先看一下账号的余额:

1
2
3
4
web3.eth.getBalance('0x75E18d32f2DbEEfaF4055aD709BDe98eCB57C379', (err, wei) => {
balance = web3.utils.fromWei(wei, 'ether')
console.log(balance);
});

5.3 签名以太坊交易

让我们使用Kovan链的Faucet获取一些测试链的以太币, 然后进行交易的签名。你可以创建一个新地址作为收款方,或者使用Kovan区块浏览器中 的任何地址:

1
2
3
4
5
6
7
8
web3.eth.accounts.signTransaction({
from: address, // our address
to: address2, // any other kovan network address you want to send
value: '2000000000000000',
gas: '8000000'
}, privateKey, function(err, data) {
console.log(data);
});

5.4 发送交易

现在让我们使用QuikNode广播签名的交易:

1
2
3
4
5
6
7
8
9
10
11
12
13
web3.eth.accounts.signTransaction({
from: address,
to: address2,
value: '2000000000000000',
gas: '8000000'
}, privateKey, function(err, data) {
web3.eth.sendSignedTransaction(data.rawTransaction, function(err, receipt) {
console.log("receipt", receipt);
web3.eth.getTransaction(receipt, function(err, data) {
console.log("transaction", data);
})
});
});

我们已经成功地通过QuikNode在Kovan链上发送了一个交易,你可以在Kovan链区块浏览器上 查看这个交易。

6、使用QuikNode的WebSockets连接

QuikNode也支持WebSockets。你可以在Dev Tools选项下找到webSockets连接的URL。或者 你也可以很使用HTTPs Auth或Token Auth。Token auth链接看起来像下面这样:

1
- Token auth: wss://mistakenly-smart-jay.quiknode.io/86d9e35e-8cdb-47ad-80a4-84f9e9537afa/C0_tKUunhUc0rM_i1HMxHA==/

WebSockets在任何时刻都允许服务端和客户端同时推送消息,这与HTTP每次请求都需要建立与 服务端的连接。WebSocket连接只需要创建一次,然后服务端和客户端就可以在这个连接上 推送消息了。对于基于事件的系统而言,websockets是最合适的选择,几乎所有的浏览器都支持 websockets。

websockets

  • 订阅待定交易事件

让我们看看如何订阅以太坊区块链上的待定交易。你可以看到我们在初始化web3时传入了QuikNode的WebSocket连接URI:

1
2
3
4
5
6
7
8
9
10
const Web3 = require('web3')
const webSocket = "wss://mistakenly-smart-jay.quiknode.io/86d9e35e-8cdb-47ad-80a4-84f9e9537afa/C0_tKUunhUc0rM_i1HMxHA==/"
var web3 = new Web3(webSocket);
var subscription = web3.eth.subscribe('pendingTransactions', function(error, result) {
if (!error)
console.log(result);
})
.on("data", function(transaction) {
console.log(transaction);
});

7、在Truffle中使用QuikNode

让我们看看如何在Truffle中使用QuikNode来部署智能合约。为此我们先下载Truffle的petshop示例代码, 我们直接拉取petshop模板然后使用QuikNode部署:

1
~/petshop$ truffle unbox pet-shop

我们将使用truffle-HD-wallet来部署我们的pet-shop智能合约。因此你需要同时安装这个NPM包:

1
~/petshop$ npm install truffle-hdwallet-provider

现在让我们看看Truffle的配置文件。我们只需要如下添加QuikNode的HttpProvider连接URI:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var HDWalletProvider = require("truffle-hdwallet-provider");
var mnemonic = "YOUR_MEMONICS"; // use a funded wallet
module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 7545,
network_id: "*" // Match any network id
},
kovan: {
provider: function() {
return new HDWalletProvider(mnemonic, "https://mistakenly-smart-jay.quiknode.io/86d9e35e-8cdb-47ad-80a4-84f9e9537afa/C0_tKUunhUc0rM_i1HMxHA==/")
},
network_id: 42
}
}
};

8、QuikNode的统计功能

现在让我们看一下QuikNode的统计功能,这可以帮助你了解你的DApp的工作情况。

  • 统计/已连接节点/节点日志

QuikNode提供不同类型的统计,你可以用来衡量DApp的使用情况。你可以查看请求次数、 节点的负载情况以及Websocket消息等等。QuickNode同时也提供了你的节点已连接的 其他节点的信息,以及节点的日志等等。

stats

9、QWallet

QuikNode同时也为你的节点集成了一个Web钱包。QuikNode使用的是开源的MyEtherWallet。 这个钱包软件会自动连接到你的节点,你可以使用登录QuikNode的用户名/密码来访问这个 钱包。其他的钱包网站或其节点可能会下线,但是你始终可以使用你的QuikNode节点来 广播交易!

10、结语

QuikNode是以太坊生态系统中出色并且有益的补充,QuikNode的节点很快而且完全专用。 大量高性能的DApp将不再需要使用自己的节点来获得性能的提升,所需要的就是开箱即用 的QuikNode高性能以太坊节点。

如果你想学习区块链并在Blockchain Technologies建立职业生涯,那么请查看我们分享的一些以太坊、比特币、EOS、Fabric、Tendermint等区块链相关的交互式在线编程实战教程:

  • java以太坊开发教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
  • python以太坊,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。
  • php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。
  • 以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。
  • 以太坊开发进阶教程,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
  • ERC721以太坊通证实战,课程以一个数字艺术品创作与分享DApp的实战开发为主线,深入讲解以太坊非同质化通证的概念、标准与开发方案。内容包含ERC-721标准的自主实现,讲解OpenZeppelin合约代码库二次开发,实战项目采用Truffle,IPFS,实现了通证以及去中心化的通证交易所。
  • C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
  • java比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Java代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习课程。
  • php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。
  • c#比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在C#代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是C#工程师不可多得的比特币开发学习课程。
  • EOS入门教程,本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。
  • 深入浅出玩转EOS钱包开发,本课程以手机EOS钱包的完整开发过程为主线,深入学习EOS区块链应用开发,课程内容即涵盖账户、计算资源、智能合约、动作与交易等EOS区块链的核心概念,同时也讲解如何使用eosjs和eosjs-ecc开发包访问EOS区块链,以及如何在React前端应用中集成对EOS区块链的支持。课程内容深入浅出,非常适合前端工程师深入学习EOS区块链应用开发。
  • Hyperledger Fabric 区块链开发详解,本课程面向初学者,内容即包含Hyperledger Fabric的身份证书与MSP服务、权限策略、信道配置与启动、链码通信接口等核心概念,也包含Fabric网络设计、nodejs链码与应用开发的操作实践,是Nodejs工程师学习Fabric区块链开发的最佳选择。
  • Hyperledger Fabric java 区块链开发详解,课程面向初学者,内容即包含Hyperledger Fabric的身份证书与MSP服务、权限策略、信道配置与启动、链码通信接口等核心概念,也包含Fabric网络设计、java链码与应用开发的操作实践,是java工程师学习Fabric区块链开发的最佳选择。
  • tendermint区块链开发详解,本课程适合希望使用tendermint进行区块链开发的工程师,课程内容即包括tendermint应用开发模型中的核心概念,例如ABCI接口、默克尔树、多版本状态库等,也包括代币发行等丰富的实操代码,是go语言工程师快速入门区块链开发的最佳选择。

原文:Run your own Ethereum Node

汇智网翻译整理,转载请标明出处